From ee875a932052a55cc36e2adcce8defb0d2322167 Mon Sep 17 00:00:00 2001 From: shimon Date: Tue, 23 Aug 2022 12:52:57 +0300 Subject: [PATCH 1/7] tests --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index c14764f7ce..0226c72673 100644 --- a/composer.lock +++ b/composer.lock @@ -3524,23 +3524,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3589,7 +3589,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" }, "funding": [ { @@ -3597,7 +3597,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-08-20T05:26:47+00:00" }, { "name": "phpunit/php-file-iterator", From 69066cfc5ee0a19c72d5be2ed5ce3122aa8ae542 Mon Sep 17 00:00:00 2001 From: shimon Date: Tue, 30 Aug 2022 15:44:37 +0300 Subject: [PATCH 2/7] timestamp -> datetime on file cache --- app/config/collections.php | 6 +++--- app/controllers/shared/api.php | 11 +++++++---- app/workers/deletes.php | 6 +++--- composer.lock | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 6f284000ac..c4a4a3066a 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -2860,14 +2860,14 @@ $collections = [ ], [ '$id' => 'accessedAt', - 'type' => Database::VAR_INTEGER, + 'type' => Database::VAR_DATETIME, 'format' => '', 'size' => 0, 'signed' => false, - 'required' => true, + 'required' => false, 'default' => null, 'array' => false, - 'filters' => [], + 'filters' => ['datetime'], ], [ '$id' => 'signature', diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 74be07a886..6a06a56491 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -358,6 +358,7 @@ App::shutdown() if ($useCache) { $resource = null; $data = $response->getPayload(); + if (!empty($data['payload'])) { $pattern = $route->getLabel('cache.resource', null); if (!empty($pattern)) { @@ -365,7 +366,6 @@ App::shutdown() } $key = md5($request->getURI() . implode('*', $request->getParams())); - $data = json_encode([ 'content-type' => $response->getContentType(), 'payload' => base64_encode($data['payload']), @@ -373,15 +373,18 @@ App::shutdown() $signature = md5($data); $cacheLog = $dbForProject->getDocument('cache', $key); + $now = date('d-m-Y H:i:s', time()); if ($cacheLog->isEmpty()) { Authorization::skip(fn () => $dbForProject->createDocument('cache', new Document([ '$id' => $key, 'resource' => $resource, - 'accessedAt' => \time(), + 'accessedAt' => $now, 'signature' => $signature, ]))); - } elseif (date('Y/m/d', \time()) > date('Y/m/d', $cacheLog->getAttribute('accessedAt'))) { - $cacheLog->setAttribute('accessedAt', \time()); + } elseif (date('Y/m/d', \time()) > date('Y/m/d', strtotime($cacheLog->getAttribute('accessedAt')))) { + var_dump('update'); + var_dump($now); + $cacheLog->setAttribute('accessedAt', $now); Authorization::skip(fn () => $dbForProject->updateDocument('cache', $cacheLog->getId(), $cacheLog)); } diff --git a/app/workers/deletes.php b/app/workers/deletes.php index da52c1d2f8..995104e074 100644 --- a/app/workers/deletes.php +++ b/app/workers/deletes.php @@ -112,7 +112,7 @@ class DeletesV1 extends Worker $this->deleteCacheByResource($project->getId()); break; case DELETE_TYPE_CACHE_BY_TIMESTAMP: - $this->deleteCacheByTimestamp(); + $this->deleteCacheByDate(); break; default: Console::error('No delete operation for type: ' . $type); @@ -134,10 +134,10 @@ class DeletesV1 extends Worker ]); } - protected function deleteCacheByTimestamp(): void + protected function deleteCacheByDate(): void { $this->deleteCacheFiles([ - Query::lessThan('accessedAt', $this->args['timestamp']), + Query::lessThan('accessedAt', $this->args['datetime']), ]); } diff --git a/composer.lock b/composer.lock index ebecc59afb..37c654761e 100644 --- a/composer.lock +++ b/composer.lock @@ -5391,5 +5391,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } From 97a957e17aba4333370b43b9c3cf722941f3cbe1 Mon Sep 17 00:00:00 2001 From: shimon Date: Tue, 30 Aug 2022 15:46:27 +0300 Subject: [PATCH 3/7] timestamp -> datetime on file cache --- app/controllers/shared/api.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 6a06a56491..25ada3c446 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -381,6 +381,7 @@ App::shutdown() 'accessedAt' => $now, 'signature' => $signature, ]))); + } elseif (date('Y/m/d', \time()) > date('Y/m/d', strtotime($cacheLog->getAttribute('accessedAt')))) { var_dump('update'); var_dump($now); From cee77ef5a1d447bbe9d29c212ded8aa1905a6a89 Mon Sep 17 00:00:00 2001 From: shimon Date: Tue, 30 Aug 2022 15:52:26 +0300 Subject: [PATCH 4/7] timestamp -> datetime on file cache --- app/controllers/shared/api.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 25ada3c446..6a06a56491 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -381,7 +381,6 @@ App::shutdown() 'accessedAt' => $now, 'signature' => $signature, ]))); - } elseif (date('Y/m/d', \time()) > date('Y/m/d', strtotime($cacheLog->getAttribute('accessedAt')))) { var_dump('update'); var_dump($now); From 5e6c288c2bbb447b7eb3172674cd3a42930fa649 Mon Sep 17 00:00:00 2001 From: shimon Date: Wed, 31 Aug 2022 11:52:55 +0300 Subject: [PATCH 5/7] dateTime --- app/controllers/shared/api.php | 15 ++++++++------- composer.lock | 8 ++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 6a06a56491..fd5e3ff14f 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -17,6 +17,7 @@ use Utopia\Abuse\Adapters\TimeLimit; use Utopia\Cache\Adapter\Filesystem; use Utopia\Cache\Cache; use Utopia\Database\Database; +use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Validator\Authorization; @@ -103,7 +104,7 @@ App::init() $abuse = new Abuse($timeLimit); $remaining = $timeLimit->remaining(); $limit = $timeLimit->limit(); - $time = (new DateTime($timeLimit->time()))->getTimestamp() + $route->getLabel('abuse-time', 3600); + $time = (new \DateTime($timeLimit->time()))->getTimestamp() + $route->getLabel('abuse-time', 3600); if ($limit && ($remaining < $closestLimit || is_null($closestLimit))) { $closestLimit = $remaining; @@ -373,18 +374,18 @@ App::shutdown() $signature = md5($data); $cacheLog = $dbForProject->getDocument('cache', $key); - $now = date('d-m-Y H:i:s', time()); + $accessedAt = $cacheLog->getAttribute('accessedAt', ''); + $accessedAt = (new \DateTime($accessedAt))->format('Y/m/d'); + if ($cacheLog->isEmpty()) { Authorization::skip(fn () => $dbForProject->createDocument('cache', new Document([ '$id' => $key, 'resource' => $resource, - 'accessedAt' => $now, + 'accessedAt' => DateTime::now(), 'signature' => $signature, ]))); - } elseif (date('Y/m/d', \time()) > date('Y/m/d', strtotime($cacheLog->getAttribute('accessedAt')))) { - var_dump('update'); - var_dump($now); - $cacheLog->setAttribute('accessedAt', $now); + } elseif ((new \DateTime(DateTime::now()))->format('Y/m/d') > $accessedAt) { + $cacheLog->setAttribute('accessedAt', DateTime::now()); Authorization::skip(fn () => $dbForProject->updateDocument('cache', $cacheLog->getId(), $cacheLog)); } diff --git a/composer.lock b/composer.lock index ad0eb287bb..66b4315e4a 100644 --- a/composer.lock +++ b/composer.lock @@ -2841,12 +2841,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "6e630a62f522ac68a7056bebf81cd032c7a053ba" + "reference": "532d4d15ec8f11539972f2848c2e230c49b24f65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/6e630a62f522ac68a7056bebf81cd032c7a053ba", - "reference": "6e630a62f522ac68a7056bebf81cd032c7a053ba", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/532d4d15ec8f11539972f2848c2e230c49b24f65", + "reference": "532d4d15ec8f11539972f2848c2e230c49b24f65", "shasum": "" }, "require": { @@ -2883,7 +2883,7 @@ "issues": "https://github.com/appwrite/sdk-generator/issues", "source": "https://github.com/appwrite/sdk-generator/tree/feat-new-headers" }, - "time": "2022-08-29T10:43:33+00:00" + "time": "2022-08-20T07:42:55+00:00" }, { "name": "doctrine/instantiator", From dab844308be91e65daafb8df26265adf6203b02f Mon Sep 17 00:00:00 2001 From: shimon Date: Wed, 31 Aug 2022 16:07:27 +0300 Subject: [PATCH 6/7] dateTime bug fix in the deletes worker dateTime small fix --- app/controllers/shared/api.php | 9 +++--- app/workers/deletes.php | 2 +- package-lock.json | 52 +++++++++++++++++----------------- src/Appwrite/Event/Delete.php | 17 +++++------ 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index cc7ff72272..4d5b4636ab 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -379,17 +379,16 @@ App::shutdown() $signature = md5($data); $cacheLog = $dbForProject->getDocument('cache', $key); $accessedAt = $cacheLog->getAttribute('accessedAt', ''); - $accessedAt = (new \DateTime($accessedAt))->format('Y/m/d'); - + $now = DateTime::now(); if ($cacheLog->isEmpty()) { Authorization::skip(fn () => $dbForProject->createDocument('cache', new Document([ '$id' => $key, 'resource' => $resource, - 'accessedAt' => DateTime::now(), + 'accessedAt' => $now, 'signature' => $signature, ]))); - } elseif ((new \DateTime(DateTime::now()))->format('Y/m/d') > $accessedAt) { - $cacheLog->setAttribute('accessedAt', DateTime::now()); + } elseif (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCCESS)) > $accessedAt) { + $cacheLog->setAttribute('accessedAt', $now); Authorization::skip(fn () => $dbForProject->updateDocument('cache', $cacheLog->getId(), $cacheLog)); } diff --git a/app/workers/deletes.php b/app/workers/deletes.php index 995104e074..2ec8199404 100644 --- a/app/workers/deletes.php +++ b/app/workers/deletes.php @@ -225,7 +225,7 @@ class DeletesV1 extends Worker ], $dbForProject); $this->deleteByGroup('stats', [ - Query::lessThan('time', [$datetime30m]), + Query::lessThan('time', $datetime30m), Query::equal('period', ['30m']), ], $dbForProject); }); diff --git a/package-lock.json b/package-lock.json index e24a9f8a17..58949bf122 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1250,12 +1250,12 @@ } }, "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "dependencies": { - "type": "^2.5.0" + "type": "^2.7.2" } }, "node_modules/ext/node_modules/type": { @@ -3353,9 +3353,9 @@ } }, "node_modules/object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -3696,9 +3696,9 @@ } }, "node_modules/prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "engines": { "node": ">=6" } @@ -4375,9 +4375,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "node_modules/split-string": { @@ -6314,12 +6314,12 @@ } }, "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "requires": { - "type": "^2.5.0" + "type": "^2.7.2" }, "dependencies": { "type": { @@ -8052,9 +8052,9 @@ } }, "object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -8318,9 +8318,9 @@ "dev": true }, "prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "process-nextick-args": { "version": "2.0.1", @@ -8885,9 +8885,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "split-string": { diff --git a/src/Appwrite/Event/Delete.php b/src/Appwrite/Event/Delete.php index d039ff1fef..72ace2a86d 100644 --- a/src/Appwrite/Event/Delete.php +++ b/src/Appwrite/Event/Delete.php @@ -11,8 +11,9 @@ class Delete extends Event protected ?Document $document = null; protected ?string $resource = null; protected ?string $datetime = null; - protected ?string $datetime1d = null; - protected ?string $datetime30m = null; + protected ?string $dateTime30m = null; + protected ?string $dateTime1d = null; + public function __construct() { @@ -60,9 +61,9 @@ class Delete extends Event * @param string $datetime * @return self */ - public function setDatetime1d(string $datetime): self + public function setDateTime1d(string $datetime): self { - $this->datetime1d = $datetime; + $this->dateTime1d = $datetime; return $this; } @@ -72,9 +73,9 @@ class Delete extends Event * @param string $datetime * @return self */ - public function setDatetime30m(string $datetime): self + public function setDateTime30m(string $datetime): self { - $this->datetime30m = $datetime; + $this->dateTime30m = $datetime; return $this; } @@ -139,8 +140,8 @@ class Delete extends Event 'document' => $this->document, 'resource' => $this->resource, 'datetime' => $this->datetime, - 'datetime1d' => $this->datetime1d, - 'datetime30m' => $this->datetime30m, + 'dateTime1d' => $this->dateTime1d, + 'dateTime30m' => $this->dateTime30m, ]); } } From 94ad09b53fb0d969e01b500bab78109d037bc9a9 Mon Sep 17 00:00:00 2001 From: shimon Date: Wed, 31 Aug 2022 16:11:23 +0300 Subject: [PATCH 7/7] const update --- app/controllers/shared/api.php | 2 +- app/init.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 4d5b4636ab..93bc020d97 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -387,7 +387,7 @@ App::shutdown() 'accessedAt' => $now, 'signature' => $signature, ]))); - } elseif (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCCESS)) > $accessedAt) { + } elseif (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_CACHE_UPDATE)) > $accessedAt) { $cacheLog->setAttribute('accessedAt', $now); Authorization::skip(fn () => $dbForProject->updateDocument('cache', $cacheLog->getId(), $cacheLog)); } diff --git a/app/init.php b/app/init.php index 4e9099fa9f..ff8030fa65 100644 --- a/app/init.php +++ b/app/init.php @@ -93,6 +93,7 @@ const APP_LIMIT_SUBQUERY = 1000; const APP_LIMIT_WRITE_RATE_DEFAULT = 60; // Default maximum write rate per rate period const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate period in seconds const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours +const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours const APP_CACHE_BUSTER = 402; const APP_VERSION_STABLE = '0.15.3'; const APP_DATABASE_ATTRIBUTE_EMAIL = 'email';