Merge branch '1.6.x' into feat-development-keys

This commit is contained in:
Damodar Lohani 2024-12-02 16:17:22 +05:45 committed by GitHub
commit 5cf4a46555
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 146 additions and 139 deletions

1
.env
View file

@ -23,6 +23,7 @@ _APP_OPENSSL_KEY_V1=your-secret-key
_APP_DOMAIN=traefik _APP_DOMAIN=traefik
_APP_DOMAIN_FUNCTIONS=functions.localhost _APP_DOMAIN_FUNCTIONS=functions.localhost
_APP_DOMAIN_TARGET=localhost _APP_DOMAIN_TARGET=localhost
_APP_RULES_FORMAT=md5
_APP_REDIS_HOST=redis _APP_REDIS_HOST=redis
_APP_REDIS_PORT=6379 _APP_REDIS_PORT=6379
_APP_REDIS_PASS= _APP_REDIS_PASS=

View file

@ -290,15 +290,9 @@ function updateAttribute(
$attribute->setAttribute('size', $size); $attribute->setAttribute('size', $size);
} }
$formatOptions = $attribute->getAttribute('formatOptions');
switch ($attribute->getAttribute('format')) { switch ($attribute->getAttribute('format')) {
case APP_DATABASE_ATTRIBUTE_INT_RANGE: case APP_DATABASE_ATTRIBUTE_INT_RANGE:
case APP_DATABASE_ATTRIBUTE_FLOAT_RANGE: case APP_DATABASE_ATTRIBUTE_FLOAT_RANGE:
if ($min === $formatOptions['min'] && $max === $formatOptions['max']) {
break;
}
if ($min > $max) { if ($min > $max) {
throw new Exception(Exception::ATTRIBUTE_VALUE_INVALID, 'Minimum value must be lesser than maximum value'); throw new Exception(Exception::ATTRIBUTE_VALUE_INVALID, 'Minimum value must be lesser than maximum value');
} }
@ -385,7 +379,7 @@ function updateAttribute(
size: $size, size: $size,
required: $required, required: $required,
default: $default, default: $default,
formatOptions: $options ?? null, formatOptions: $options,
newKey: $newKey ?? null newKey: $newKey ?? null
); );
} catch (TruncateException) { } catch (TruncateException) {

View file

@ -329,7 +329,7 @@ App::post('/v1/functions')
$routeSubdomain = ID::unique(); $routeSubdomain = ID::unique();
$domain = "{$routeSubdomain}.{$functionsDomain}"; $domain = "{$routeSubdomain}.{$functionsDomain}";
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
$ruleId = version_compare(APP_VERSION_STABLE, '1.7.0', '<') ? ID::unique() : md5($domain); $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain) : ID::unique();
$rule = Authorization::skip( $rule = Authorization::skip(
fn () => $dbForConsole->createDocument('rules', new Document([ fn () => $dbForConsole->createDocument('rules', new Document([

View file

@ -61,13 +61,12 @@ App::post('/v1/proxy/rules')
} }
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
if (version_compare(APP_VERSION_STABLE, '1.7.0', '<')) { if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$document = $dbForConsole->getDocument('rules', md5($domain));
} else {
$document = $dbForConsole->findOne('rules', [ $document = $dbForConsole->findOne('rules', [
Query::equal('domain', [$domain]), Query::equal('domain', [$domain]),
]); ]);
} else {
$ruleId = md5($domain);
$document = $dbForConsole->getDocument('rules', $ruleId);
} }
@ -111,7 +110,7 @@ App::post('/v1/proxy/rules')
} }
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
$ruleId = version_compare(APP_VERSION_STABLE, '1.7.0', '<') ? ID::unique() : md5($domain->get()); $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique();
$rule = new Document([ $rule = new Document([
'$id' => $ruleId, '$id' => $ruleId,

View file

@ -74,13 +74,14 @@ App::post('/v1/storage/buckets')
->inject('response') ->inject('response')
->inject('dbForProject') ->inject('dbForProject')
->inject('queueForEvents') ->inject('queueForEvents')
->action(function (string $bucketId, string $name, ?array $permissions, bool $fileSecurity, bool $enabled, int $maximumFileSize, array $allowedFileExtensions, ?string $compression, bool $encryption, bool $antivirus, Response $response, Database $dbForProject, Event $queueForEvents) { ->action(function (string $bucketId, string $name, ?array $permissions, bool $fileSecurity, bool $enabled, int $maximumFileSize, array $allowedFileExtensions, ?string $compression, ?bool $encryption, bool $antivirus, Response $response, Database $dbForProject, Event $queueForEvents) {
$bucketId = $bucketId === 'unique()' ? ID::unique() : $bucketId; $bucketId = $bucketId === 'unique()' ? ID::unique() : $bucketId;
// Map aggregate permissions into the multiple permissions they represent. // Map aggregate permissions into the multiple permissions they represent.
$permissions = Permission::aggregate($permissions); $permissions = Permission::aggregate($permissions);
$compression ??= Compression::NONE; $compression ??= Compression::NONE;
$encryption ??= true;
try { try {
$files = (Config::getParam('collections', [])['buckets'] ?? [])['files'] ?? []; $files = (Config::getParam('collections', [])['buckets'] ?? [])['files'] ?? [];
if (empty($files)) { if (empty($files)) {
@ -260,7 +261,7 @@ App::put('/v1/storage/buckets/:bucketId')
->inject('response') ->inject('response')
->inject('dbForProject') ->inject('dbForProject')
->inject('queueForEvents') ->inject('queueForEvents')
->action(function (string $bucketId, string $name, ?array $permissions, bool $fileSecurity, bool $enabled, ?int $maximumFileSize, array $allowedFileExtensions, ?string $compression, bool $encryption, bool $antivirus, Response $response, Database $dbForProject, Event $queueForEvents) { ->action(function (string $bucketId, string $name, ?array $permissions, bool $fileSecurity, bool $enabled, ?int $maximumFileSize, array $allowedFileExtensions, ?string $compression, ?bool $encryption, bool $antivirus, Response $response, Database $dbForProject, Event $queueForEvents) {
$bucket = $dbForProject->getDocument('buckets', $bucketId); $bucket = $dbForProject->getDocument('buckets', $bucketId);
if ($bucket->isEmpty()) { if ($bucket->isEmpty()) {

View file

@ -58,15 +58,15 @@ function router(App $utopia, Database $dbForConsole, callable $getProjectDB, Swo
} }
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
if (version_compare(APP_VERSION_STABLE, '1.7.0', '<')) { if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$route = Authorization::skip(fn () => $dbForConsole->getDocument('rules', md5($host)));
} else {
$route = Authorization::skip( $route = Authorization::skip(
fn () => $dbForConsole->find('rules', [ fn () => $dbForConsole->find('rules', [
Query::equal('domain', [$host]), Query::equal('domain', [$host]),
Query::limit(1) Query::limit(1)
]) ])
)[0] ?? new Document(); )[0] ?? new Document();
} else {
$route = Authorization::skip(fn () => $dbForConsole->getDocument('rules', md5($host)));
} }
if ($route->isEmpty()) { if ($route->isEmpty()) {
@ -531,10 +531,10 @@ App::init()
$mainDomain = $envDomain; $mainDomain = $envDomain;
} else { } else {
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
if (version_compare(APP_VERSION_STABLE, '1.7.0', '<')) { if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$domainDocument = $dbForConsole->findOne('rules', [Query::orderAsc('$id')]);
} else {
$domainDocument = $dbForConsole->getDocument('rules', md5($envDomain)); $domainDocument = $dbForConsole->getDocument('rules', md5($envDomain));
} else {
$domainDocument = $dbForConsole->findOne('rules', [Query::orderAsc('$id')]);
} }
$mainDomain = !$domainDocument->isEmpty() ? $domainDocument->getAttribute('domain') : $domain->get(); $mainDomain = !$domainDocument->isEmpty() ? $domainDocument->getAttribute('domain') : $domain->get();
} }
@ -543,18 +543,18 @@ App::init()
Console::warning($domain->get() . ' is not a main domain. Skipping SSL certificate generation.'); Console::warning($domain->get() . ' is not a main domain. Skipping SSL certificate generation.');
} else { } else {
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
if (version_compare(APP_VERSION_STABLE, '1.7.0', '<')) { if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$domainDocument = $dbForConsole->getDocument('rules', md5($domain->get()));
} else {
$domainDocument = $dbForConsole->findOne('rules', [ $domainDocument = $dbForConsole->findOne('rules', [
Query::equal('domain', [$domain->get()]) Query::equal('domain', [$domain->get()])
]); ]);
} else {
$domainDocument = $dbForConsole->getDocument('rules', md5($domain->get()));
} }
if ($domainDocument->isEmpty()) { if ($domainDocument->isEmpty()) {
$domainDocument = new Document([ $domainDocument = new Document([
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
'$id' => version_compare(APP_VERSION_STABLE, '1.7.0', '<') ? ID::unique() : md5($domain->get()), '$id' => System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(),
'domain' => $domain->get(), 'domain' => $domain->get(),
'resourceType' => 'api', 'resourceType' => 'api',
'status' => 'verifying', 'status' => 'verifying',

View file

@ -51,7 +51,7 @@
"utopia-php/cache": "0.11.*", "utopia-php/cache": "0.11.*",
"utopia-php/cli": "0.15.*", "utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*", "utopia-php/config": "0.2.*",
"utopia-php/database": "0.53.20", "utopia-php/database": "0.53.200",
"utopia-php/domains": "0.5.*", "utopia-php/domains": "0.5.*",
"utopia-php/dsn": "0.2.1", "utopia-php/dsn": "0.2.1",
"utopia-php/framework": "0.33.*", "utopia-php/framework": "0.33.*",

191
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "ae3b9a491c9870a4897cdf712caba1e3", "content-hash": "fae350df93342992edd8f639948e1570",
"packages": [ "packages": [
{ {
"name": "adhocore/jwt", "name": "adhocore/jwt",
@ -709,16 +709,16 @@
}, },
{ {
"name": "google/protobuf", "name": "google/protobuf",
"version": "v4.28.3", "version": "v4.29.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/protocolbuffers/protobuf-php.git", "url": "https://github.com/protocolbuffers/protobuf-php.git",
"reference": "c5c311e0f3d89928251ac5a2f0e3db283612c100" "reference": "0ef6b2eb74b782f3f9023276c324d22e440f7587"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/c5c311e0f3d89928251ac5a2f0e3db283612c100", "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/0ef6b2eb74b782f3f9023276c324d22e440f7587",
"reference": "c5c311e0f3d89928251ac5a2f0e3db283612c100", "reference": "0ef6b2eb74b782f3f9023276c324d22e440f7587",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -747,9 +747,9 @@
"proto" "proto"
], ],
"support": { "support": {
"source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.28.3" "source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.29.0"
}, },
"time": "2024-10-22T22:27:17+00:00" "time": "2024-11-27T18:37:40+00:00"
}, },
{ {
"name": "jean85/pretty-package-versions", "name": "jean85/pretty-package-versions",
@ -2343,9 +2343,9 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"v10.0": "10.0.x-dev", "v8.3": "8.3.x-dev",
"v9.0": "9.0.x-dev", "v9.0": "9.0.x-dev",
"v8.3": "8.3.x-dev" "v10.0": "10.0.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -2386,16 +2386,16 @@
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v3.5.0", "version": "v3.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2433,7 +2433,7 @@
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
}, },
"funding": [ "funding": [
{ {
@ -2449,30 +2449,31 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-18T09:32:20+00:00" "time": "2024-09-25T14:20:29+00:00"
}, },
{ {
"name": "symfony/http-client", "name": "symfony/http-client",
"version": "v7.1.8", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client.git", "url": "https://github.com/symfony/http-client.git",
"reference": "c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a" "reference": "955e43336aff03df1e8a8e17daefabb0127a313b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a", "url": "https://api.github.com/repos/symfony/http-client/zipball/955e43336aff03df1e8a8e17daefabb0127a313b",
"reference": "c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a", "reference": "955e43336aff03df1e8a8e17daefabb0127a313b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.2", "php": ">=8.2",
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3", "symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-client-contracts": "^3.4.1", "symfony/http-client-contracts": "~3.4.3|^3.5.1",
"symfony/service-contracts": "^2.5|^3" "symfony/service-contracts": "^2.5|^3"
}, },
"conflict": { "conflict": {
"amphp/amp": "<2.5",
"php-http/discovery": "<1.15", "php-http/discovery": "<1.15",
"symfony/http-foundation": "<6.4" "symfony/http-foundation": "<6.4"
}, },
@ -2483,14 +2484,14 @@
"symfony/http-client-implementation": "3.0" "symfony/http-client-implementation": "3.0"
}, },
"require-dev": { "require-dev": {
"amphp/amp": "^2.5", "amphp/http-client": "^4.2.1|^5.0",
"amphp/http-client": "^4.2.1", "amphp/http-tunnel": "^1.0|^2.0",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1", "amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4|^2.0", "guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0", "nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0", "php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/amphp-http-client-meta": "^1.0|^2.0",
"symfony/dependency-injection": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0", "symfony/messenger": "^6.4|^7.0",
@ -2527,7 +2528,7 @@
"http" "http"
], ],
"support": { "support": {
"source": "https://github.com/symfony/http-client/tree/v7.1.8" "source": "https://github.com/symfony/http-client/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -2543,20 +2544,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-13T13:40:27+00:00" "time": "2024-11-29T08:22:02+00:00"
}, },
{ {
"name": "symfony/http-client-contracts", "name": "symfony/http-client-contracts",
"version": "v3.5.0", "version": "v3.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client-contracts.git", "url": "https://github.com/symfony/http-client-contracts.git",
"reference": "20414d96f391677bf80078aa55baece78b82647d" "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9",
"reference": "20414d96f391677bf80078aa55baece78b82647d", "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2605,7 +2606,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1"
}, },
"funding": [ "funding": [
{ {
@ -2621,7 +2622,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-18T09:32:20+00:00" "time": "2024-11-25T12:02:18+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
@ -2861,16 +2862,16 @@
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v3.5.0", "version": "v3.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2924,7 +2925,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.5.0" "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
}, },
"funding": [ "funding": [
{ {
@ -2940,7 +2941,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-18T09:32:20+00:00" "time": "2024-09-25T14:20:29+00:00"
}, },
{ {
"name": "tbachert/spi", "name": "tbachert/spi",
@ -3475,16 +3476,16 @@
}, },
{ {
"name": "utopia-php/database", "name": "utopia-php/database",
"version": "0.53.20", "version": "0.53.200",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/utopia-php/database.git", "url": "https://github.com/utopia-php/database.git",
"reference": "e43f8ee26e06ee8812737e63642dbd7ee7c9dc04" "reference": "570c63a3760d0e1404679ddfacd9484af40bd9fc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/e43f8ee26e06ee8812737e63642dbd7ee7c9dc04", "url": "https://api.github.com/repos/utopia-php/database/zipball/570c63a3760d0e1404679ddfacd9484af40bd9fc",
"reference": "e43f8ee26e06ee8812737e63642dbd7ee7c9dc04", "reference": "570c63a3760d0e1404679ddfacd9484af40bd9fc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3525,9 +3526,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/utopia-php/database/issues", "issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/0.53.20" "source": "https://github.com/utopia-php/database/tree/0.53.200"
}, },
"time": "2024-11-12T00:23:36+00:00" "time": "2024-12-01T07:59:15+00:00"
}, },
{ {
"name": "utopia-php/domains", "name": "utopia-php/domains",
@ -4362,16 +4363,16 @@
}, },
{ {
"name": "utopia-php/storage", "name": "utopia-php/storage",
"version": "0.18.6", "version": "0.18.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/utopia-php/storage.git", "url": "https://github.com/utopia-php/storage.git",
"reference": "893ccf06e183f8ece2aed8dbf14d64d6ba036071" "reference": "0d9228faa1c202f9e01483e45a8950485f01a288"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/utopia-php/storage/zipball/893ccf06e183f8ece2aed8dbf14d64d6ba036071", "url": "https://api.github.com/repos/utopia-php/storage/zipball/0d9228faa1c202f9e01483e45a8950485f01a288",
"reference": "893ccf06e183f8ece2aed8dbf14d64d6ba036071", "reference": "0d9228faa1c202f9e01483e45a8950485f01a288",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4411,9 +4412,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/utopia-php/storage/issues", "issues": "https://github.com/utopia-php/storage/issues",
"source": "https://github.com/utopia-php/storage/tree/0.18.6" "source": "https://github.com/utopia-php/storage/tree/0.18.7"
}, },
"time": "2024-11-06T09:58:50+00:00" "time": "2024-11-28T11:10:53+00:00"
}, },
{ {
"name": "utopia-php/swoole", "name": "utopia-php/swoole",
@ -5127,16 +5128,16 @@
}, },
{ {
"name": "laravel/pint", "name": "laravel/pint",
"version": "v1.18.2", "version": "v1.18.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/pint.git", "url": "https://github.com/laravel/pint.git",
"reference": "f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64" "reference": "cef51821608239040ab841ad6e1c6ae502ae3026"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64", "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026",
"reference": "f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64", "reference": "cef51821608239040ab841ad6e1c6ae502ae3026",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5147,13 +5148,13 @@
"php": "^8.1.0" "php": "^8.1.0"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^3.64.0", "friendsofphp/php-cs-fixer": "^3.65.0",
"illuminate/view": "^10.48.20", "illuminate/view": "^10.48.24",
"larastan/larastan": "^2.9.8", "larastan/larastan": "^2.9.11",
"laravel-zero/framework": "^10.4.0", "laravel-zero/framework": "^10.4.0",
"mockery/mockery": "^1.6.12", "mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^1.15.1", "nunomaduro/termwind": "^1.17.0",
"pestphp/pest": "^2.35.1" "pestphp/pest": "^2.36.0"
}, },
"bin": [ "bin": [
"builds/pint" "builds/pint"
@ -5189,7 +5190,7 @@
"issues": "https://github.com/laravel/pint/issues", "issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint" "source": "https://github.com/laravel/pint"
}, },
"time": "2024-11-20T09:33:46+00:00" "time": "2024-11-26T15:34:00+00:00"
}, },
{ {
"name": "matthiasmullie/minify", "name": "matthiasmullie/minify",
@ -7577,16 +7578,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v7.1.8", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf",
"reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7650,7 +7651,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v7.1.8" "source": "https://github.com/symfony/console/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -7666,20 +7667,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-06T14:23:19+00:00" "time": "2024-11-06T14:24:19+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v7.1.6", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7716,7 +7717,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v7.1.6" "source": "https://github.com/symfony/filesystem/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -7732,20 +7733,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-25T15:11:02+00:00" "time": "2024-10-25T15:15:23+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v7.1.6", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49",
"reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7780,7 +7781,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v7.1.6" "source": "https://github.com/symfony/finder/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -7796,20 +7797,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-01T08:31:23+00:00" "time": "2024-10-23T06:56:12+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v7.1.6", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "85e95eeede2d41cd146146e98c9c81d9214cae85" "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/85e95eeede2d41cd146146e98c9c81d9214cae85", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50",
"reference": "85e95eeede2d41cd146146e98c9c81d9214cae85", "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7847,7 +7848,7 @@
"options" "options"
], ],
"support": { "support": {
"source": "https://github.com/symfony/options-resolver/tree/v7.1.6" "source": "https://github.com/symfony/options-resolver/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -7863,7 +7864,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:20:29+00:00" "time": "2024-11-20T11:17:29+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@ -8181,16 +8182,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v7.1.8", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8222,7 +8223,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v7.1.8" "source": "https://github.com/symfony/process/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -8238,20 +8239,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-06T14:23:19+00:00" "time": "2024-11-06T14:24:19+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v7.1.8", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8309,7 +8310,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v7.1.8" "source": "https://github.com/symfony/string/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@ -8325,7 +8326,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-13T13:31:21+00:00" "time": "2024-11-13T13:31:26+00:00"
}, },
{ {
"name": "textalk/websocket", "name": "textalk/websocket",

View file

@ -340,12 +340,12 @@ class Certificates extends Action
private function updateDomainDocuments(string $certificateId, string $domain, bool $success, Database $dbForConsole, Event $queueForEvents, Func $queueForFunctions): void private function updateDomainDocuments(string $certificateId, string $domain, bool $success, Database $dbForConsole, Event $queueForEvents, Func $queueForFunctions): void
{ {
// TODO: @christyjacob remove once we migrate the rules in 1.7.x // TODO: @christyjacob remove once we migrate the rules in 1.7.x
if (version_compare(APP_VERSION_STABLE, '1.7.0', '<')) { if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$rule = $dbForConsole->getDocument('rules', md5($domain));
} else {
$rule = $dbForConsole->findOne('rules', [ $rule = $dbForConsole->findOne('rules', [
Query::equal('domain', [$domain]), Query::equal('domain', [$domain]),
]); ]);
} else {
$rule = $dbForConsole->getDocument('rules', md5($domain));
} }
if (!$rule->isEmpty()) { if (!$rule->isEmpty()) {

View file

@ -11,6 +11,7 @@ use Utopia\Database\Document;
use Utopia\Database\Exception as DatabaseException; use Utopia\Database\Exception as DatabaseException;
use Utopia\Database\Exception\Authorization; use Utopia\Database\Exception\Authorization;
use Utopia\Database\Exception\Conflict; use Utopia\Database\Exception\Conflict;
use Utopia\Database\Exception\NotFound;
use Utopia\Database\Exception\Restricted; use Utopia\Database\Exception\Restricted;
use Utopia\Database\Exception\Structure; use Utopia\Database\Exception\Structure;
use Utopia\Database\Query; use Utopia\Database\Query;
@ -251,23 +252,21 @@ class Databases extends Action
try { try {
try { try {
if ($status !== 'failed') { if ($type === Database::VAR_RELATIONSHIP) {
if ($type === Database::VAR_RELATIONSHIP) { if ($options['twoWay']) {
if ($options['twoWay']) { $relatedCollection = $dbForProject->getDocument('database_' . $database->getInternalId(), $options['relatedCollection']);
$relatedCollection = $dbForProject->getDocument('database_' . $database->getInternalId(), $options['relatedCollection']); if ($relatedCollection->isEmpty()) {
if ($relatedCollection->isEmpty()) { throw new DatabaseException('Collection not found');
throw new DatabaseException('Collection not found');
}
$relatedAttribute = $dbForProject->getDocument('attributes', $database->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $options['twoWayKey']);
} }
$relatedAttribute = $dbForProject->getDocument('attributes', $database->getInternalId() . '_' . $relatedCollection->getInternalId() . '_' . $options['twoWayKey']);
if (!$dbForProject->deleteRelationship('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $key)) {
$dbForProject->updateDocument('attributes', $relatedAttribute->getId(), $relatedAttribute->setAttribute('status', 'stuck'));
throw new DatabaseException('Failed to delete Relationship');
}
} elseif (!$dbForProject->deleteAttribute('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $key)) {
throw new DatabaseException('Failed to delete Attribute');
} }
if (!$dbForProject->deleteRelationship('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $key)) {
$dbForProject->updateDocument('attributes', $relatedAttribute->getId(), $relatedAttribute->setAttribute('status', 'stuck'));
throw new DatabaseException('Failed to delete Relationship');
}
} elseif (!$dbForProject->deleteAttribute('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $key)) {
throw new DatabaseException('Failed to delete Attribute');
} }
$dbForProject->deleteDocument('attributes', $attribute->getId()); $dbForProject->deleteDocument('attributes', $attribute->getId());
@ -275,6 +274,18 @@ class Databases extends Action
if (!$relatedAttribute->isEmpty()) { if (!$relatedAttribute->isEmpty()) {
$dbForProject->deleteDocument('attributes', $relatedAttribute->getId()); $dbForProject->deleteDocument('attributes', $relatedAttribute->getId());
} }
} catch (NotFound $e) {
Console::error($e->getMessage());
$dbForProject->deleteDocument('attributes', $attribute->getId());
if (!$relatedAttribute->isEmpty()) {
$dbForProject->deleteDocument('attributes', $relatedAttribute->getId());
}
throw $e;
} catch (\Throwable $e) { } catch (\Throwable $e) {
Console::error($e->getMessage()); Console::error($e->getMessage());