Merge branch 'feat-database-logs-pagination' of https://github.com/appwrite/appwrite into feat-db-refactor-ui-fixes
This commit is contained in:
commit
47b6fe59ce
9 changed files with 235 additions and 58 deletions
|
@ -23,6 +23,7 @@ use Utopia\Database\Validator\UID;
|
||||||
use Utopia\Exception;
|
use Utopia\Exception;
|
||||||
use Utopia\Validator\ArrayList;
|
use Utopia\Validator\ArrayList;
|
||||||
use Utopia\Validator\Assoc;
|
use Utopia\Validator\Assoc;
|
||||||
|
use Utopia\Validator\Range;
|
||||||
use Utopia\Validator\Text;
|
use Utopia\Validator\Text;
|
||||||
use Utopia\Validator\WhiteList;
|
use Utopia\Validator\WhiteList;
|
||||||
|
|
||||||
|
@ -1182,13 +1183,15 @@ App::get('/v1/account/logs')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
||||||
|
->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
|
||||||
|
->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('user')
|
->inject('user')
|
||||||
->inject('locale')
|
->inject('locale')
|
||||||
->inject('geodb')
|
->inject('geodb')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('usage')
|
->inject('usage')
|
||||||
->action(function ($response, $user, $locale, $geodb, $dbForInternal, $usage) {
|
->action(function ($limit, $offset, $response, $user, $locale, $geodb, $dbForInternal, $usage) {
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
/** @var Utopia\Database\Document $project */
|
/** @var Utopia\Database\Document $project */
|
||||||
/** @var Utopia\Database\Document $user */
|
/** @var Utopia\Database\Document $user */
|
||||||
|
@ -1198,8 +1201,7 @@ App::get('/v1/account/logs')
|
||||||
/** @var Appwrite\Stats\Stats $usage */
|
/** @var Appwrite\Stats\Stats $usage */
|
||||||
|
|
||||||
$audit = new Audit($dbForInternal);
|
$audit = new Audit($dbForInternal);
|
||||||
|
$auditEvents = [
|
||||||
$logs = $audit->getLogsByUserAndEvents($user->getId(), [
|
|
||||||
'account.create',
|
'account.create',
|
||||||
'account.delete',
|
'account.delete',
|
||||||
'account.update.name',
|
'account.update.name',
|
||||||
|
@ -1215,7 +1217,9 @@ App::get('/v1/account/logs')
|
||||||
'teams.membership.create',
|
'teams.membership.create',
|
||||||
'teams.membership.update',
|
'teams.membership.update',
|
||||||
'teams.membership.delete',
|
'teams.membership.delete',
|
||||||
]);
|
];
|
||||||
|
|
||||||
|
$logs = $audit->getLogsByUserAndEvents($user->getId(), $auditEvents, $limit, $offset);
|
||||||
|
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
|
@ -1245,7 +1249,11 @@ App::get('/v1/account/logs')
|
||||||
$usage
|
$usage
|
||||||
->setParam('users.read', 1)
|
->setParam('users.read', 1)
|
||||||
;
|
;
|
||||||
$response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
|
|
||||||
|
$response->dynamic(new Document([
|
||||||
|
'sum' => $audit->getLogsByUserAndEventsCount($user->getId(), $auditEvents),
|
||||||
|
'logs' => $output,
|
||||||
|
]), Response::MODEL_LOG_LIST);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::get('/v1/account/sessions/:sessionId')
|
App::get('/v1/account/sessions/:sessionId')
|
||||||
|
|
|
@ -496,12 +496,14 @@ App::get('/v1/database/collections/:collectionId/logs')
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
||||||
->param('collectionId', '', new UID(), 'Collection unique ID.')
|
->param('collectionId', '', new UID(), 'Collection unique ID.')
|
||||||
|
->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
|
||||||
|
->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('dbForExternal')
|
->inject('dbForExternal')
|
||||||
->inject('locale')
|
->inject('locale')
|
||||||
->inject('geodb')
|
->inject('geodb')
|
||||||
->action(function ($collectionId, $response, $dbForInternal, $dbForExternal, $locale, $geodb) {
|
->action(function ($collectionId, $limit, $offset, $response, $dbForInternal, $dbForExternal, $locale, $geodb) {
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
/** @var Utopia\Database\Document $project */
|
/** @var Utopia\Database\Document $project */
|
||||||
/** @var Utopia\Database\Database $dbForInternal */
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
|
@ -516,8 +518,8 @@ App::get('/v1/database/collections/:collectionId/logs')
|
||||||
}
|
}
|
||||||
|
|
||||||
$audit = new Audit($dbForInternal);
|
$audit = new Audit($dbForInternal);
|
||||||
|
$resource = 'collection/'.$collection->getId();
|
||||||
$logs = $audit->getLogsByResource('collection/'.$collection->getId());
|
$logs = $audit->getLogsByResource($resource, $limit, $offset);
|
||||||
|
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
|
@ -577,7 +579,10 @@ App::get('/v1/database/collections/:collectionId/logs')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
|
$response->dynamic(new Document([
|
||||||
|
'sum' => $audit->getLogsByResourceCount($resource),
|
||||||
|
'logs' => $output,
|
||||||
|
]), Response::MODEL_LOG_LIST);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::put('/v1/database/collections/:collectionId')
|
App::put('/v1/database/collections/:collectionId')
|
||||||
|
|
|
@ -259,12 +259,14 @@ App::get('/v1/users/:userId/logs')
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
->label('sdk.response.model', Response::MODEL_LOG_LIST)
|
||||||
->param('userId', '', new UID(), 'User unique ID.')
|
->param('userId', '', new UID(), 'User unique ID.')
|
||||||
|
->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
|
||||||
|
->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('locale')
|
->inject('locale')
|
||||||
->inject('geodb')
|
->inject('geodb')
|
||||||
->inject('usage')
|
->inject('usage')
|
||||||
->action(function ($userId, $response, $dbForInternal, $locale, $geodb, $usage) {
|
->action(function ($userId, $limit, $offset, $response, $dbForInternal, $locale, $geodb, $usage) {
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
/** @var Utopia\Database\Document $project */
|
/** @var Utopia\Database\Document $project */
|
||||||
/** @var Utopia\Database\Database $dbForInternal */
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
|
@ -279,8 +281,7 @@ App::get('/v1/users/:userId/logs')
|
||||||
}
|
}
|
||||||
|
|
||||||
$audit = new Audit($dbForInternal);
|
$audit = new Audit($dbForInternal);
|
||||||
|
$auditEvents = [
|
||||||
$logs = $audit->getLogsByUserAndEvents($user->getId(), [
|
|
||||||
'account.create',
|
'account.create',
|
||||||
'account.delete',
|
'account.delete',
|
||||||
'account.update.name',
|
'account.update.name',
|
||||||
|
@ -296,7 +297,9 @@ App::get('/v1/users/:userId/logs')
|
||||||
'teams.membership.create',
|
'teams.membership.create',
|
||||||
'teams.membership.update',
|
'teams.membership.update',
|
||||||
'teams.membership.delete',
|
'teams.membership.delete',
|
||||||
]);
|
];
|
||||||
|
|
||||||
|
$logs = $audit->getLogsByUserAndEvents($user->getId(), $auditEvents, $limit, $offset);
|
||||||
|
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
|
@ -355,7 +358,11 @@ App::get('/v1/users/:userId/logs')
|
||||||
$usage
|
$usage
|
||||||
->setParam('users.read', 1)
|
->setParam('users.read', 1)
|
||||||
;
|
;
|
||||||
$response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
|
|
||||||
|
$response->dynamic(new Document([
|
||||||
|
'sum' => $audit->getLogsByUserAndEventsCount($user->getId(), $auditEvents),
|
||||||
|
'logs' => $output,
|
||||||
|
]), Response::MODEL_LOG_LIST);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/users/:userId/status')
|
App::patch('/v1/users/:userId/status')
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
"utopia-php/framework": "0.19.*",
|
"utopia-php/framework": "0.19.*",
|
||||||
"utopia-php/abuse": "0.6.*",
|
"utopia-php/abuse": "0.6.*",
|
||||||
"utopia-php/analytics": "0.2.*",
|
"utopia-php/analytics": "0.2.*",
|
||||||
"utopia-php/audit": "0.6.*",
|
"utopia-php/audit": "dev-feat-count-methods",
|
||||||
"utopia-php/cache": "0.4.*",
|
"utopia-php/cache": "0.4.*",
|
||||||
"utopia-php/cli": "0.11.*",
|
"utopia-php/cli": "0.11.*",
|
||||||
"utopia-php/config": "0.2.*",
|
"utopia-php/config": "0.2.*",
|
||||||
|
|
59
composer.lock
generated
59
composer.lock
generated
|
@ -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": "fa378feaffc446f557a140035a1c77b6",
|
"content-hash": "14a12f23c3f26ad7650eb3ad912fd078",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adhocore/jwt",
|
"name": "adhocore/jwt",
|
||||||
|
@ -1928,16 +1928,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/audit",
|
"name": "utopia-php/audit",
|
||||||
"version": "0.6.3",
|
"version": "dev-feat-count-methods",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/utopia-php/audit.git",
|
"url": "https://github.com/utopia-php/audit.git",
|
||||||
"reference": "d79b467fbc7d03e5e02f12cdeb08761507a60ca0"
|
"reference": "e9a811cf3b7705e75649db8b5f255a12e0388220"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/utopia-php/audit/zipball/d79b467fbc7d03e5e02f12cdeb08761507a60ca0",
|
"url": "https://api.github.com/repos/utopia-php/audit/zipball/e9a811cf3b7705e75649db8b5f255a12e0388220",
|
||||||
"reference": "d79b467fbc7d03e5e02f12cdeb08761507a60ca0",
|
"reference": "e9a811cf3b7705e75649db8b5f255a12e0388220",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1975,9 +1975,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/audit/issues",
|
"issues": "https://github.com/utopia-php/audit/issues",
|
||||||
"source": "https://github.com/utopia-php/audit/tree/0.6.3"
|
"source": "https://github.com/utopia-php/audit/tree/feat-count-methods"
|
||||||
},
|
},
|
||||||
"time": "2021-08-16T18:49:55+00:00"
|
"time": "2021-11-16T14:45:05+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/cache",
|
"name": "utopia-php/cache",
|
||||||
|
@ -3655,16 +3655,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v4.13.0",
|
"version": "v4.13.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "50953a2691a922aa1769461637869a0a2faa3f53"
|
"reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd",
|
||||||
"reference": "50953a2691a922aa1769461637869a0a2faa3f53",
|
"reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -3705,9 +3705,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1"
|
||||||
},
|
},
|
||||||
"time": "2021-09-20T12:20:58+00:00"
|
"time": "2021-11-03T20:52:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "openlss/lib-array2xml",
|
"name": "openlss/lib-array2xml",
|
||||||
|
@ -4523,20 +4523,20 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -4565,9 +4565,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/php-fig/container/issues",
|
"issues": "https://github.com/php-fig/container/issues",
|
||||||
"source": "https://github.com/php-fig/container/tree/1.1.1"
|
"source": "https://github.com/php-fig/container/tree/1.1.2"
|
||||||
},
|
},
|
||||||
"time": "2021-03-05T17:36:06+00:00"
|
"time": "2021-11-05T16:50:12+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
|
@ -4998,16 +4998,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/exporter",
|
"name": "sebastian/exporter",
|
||||||
"version": "4.0.3",
|
"version": "4.0.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||||
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
|
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
|
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||||
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
|
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -5056,14 +5056,14 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Provides the functionality to export PHP variables for visualization",
|
"description": "Provides the functionality to export PHP variables for visualization",
|
||||||
"homepage": "http://www.github.com/sebastianbergmann/exporter",
|
"homepage": "https://www.github.com/sebastianbergmann/exporter",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"export",
|
"export",
|
||||||
"exporter"
|
"exporter"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/exporter/issues",
|
"issues": "https://github.com/sebastianbergmann/exporter/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
|
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -5071,7 +5071,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-09-28T05:24:23+00:00"
|
"time": "2021-11-11T14:18:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/global-state",
|
"name": "sebastian/global-state",
|
||||||
|
@ -6501,12 +6501,15 @@
|
||||||
"issues": "https://github.com/webmozart/path-util/issues",
|
"issues": "https://github.com/webmozart/path-util/issues",
|
||||||
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
|
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
|
||||||
},
|
},
|
||||||
|
"abandoned": "symfony/filesystem",
|
||||||
"time": "2015-12-17T08:42:14+00:00"
|
"time": "2015-12-17T08:42:14+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": [],
|
"stability-flags": {
|
||||||
|
"utopia-php/audit": 20
|
||||||
|
},
|
||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
|
|
|
@ -194,7 +194,7 @@ class Response extends SwooleResponse
|
||||||
->setModel(new BaseList('Documents List', self::MODEL_DOCUMENT_LIST, 'documents', self::MODEL_DOCUMENT))
|
->setModel(new BaseList('Documents List', self::MODEL_DOCUMENT_LIST, 'documents', self::MODEL_DOCUMENT))
|
||||||
->setModel(new BaseList('Users List', self::MODEL_USER_LIST, 'users', self::MODEL_USER))
|
->setModel(new BaseList('Users List', self::MODEL_USER_LIST, 'users', self::MODEL_USER))
|
||||||
->setModel(new BaseList('Sessions List', self::MODEL_SESSION_LIST, 'sessions', self::MODEL_SESSION))
|
->setModel(new BaseList('Sessions List', self::MODEL_SESSION_LIST, 'sessions', self::MODEL_SESSION))
|
||||||
->setModel(new BaseList('Logs List', self::MODEL_LOG_LIST, 'logs', self::MODEL_LOG, false))
|
->setModel(new BaseList('Logs List', self::MODEL_LOG_LIST, 'logs', self::MODEL_LOG))
|
||||||
->setModel(new BaseList('Files List', self::MODEL_FILE_LIST, 'files', self::MODEL_FILE))
|
->setModel(new BaseList('Files List', self::MODEL_FILE_LIST, 'files', self::MODEL_FILE))
|
||||||
->setModel(new BaseList('Teams List', self::MODEL_TEAM_LIST, 'teams', self::MODEL_TEAM))
|
->setModel(new BaseList('Teams List', self::MODEL_TEAM_LIST, 'teams', self::MODEL_TEAM))
|
||||||
->setModel(new BaseList('Memberships List', self::MODEL_MEMBERSHIP_LIST, 'memberships', self::MODEL_MEMBERSHIP))
|
->setModel(new BaseList('Memberships List', self::MODEL_MEMBERSHIP_LIST, 'memberships', self::MODEL_MEMBERSHIP))
|
||||||
|
|
|
@ -283,10 +283,10 @@ trait AccountBase
|
||||||
$this->assertEquals('', $response['body']['sessions'][0]['deviceBrand']);
|
$this->assertEquals('', $response['body']['sessions'][0]['deviceBrand']);
|
||||||
$this->assertEquals('', $response['body']['sessions'][0]['deviceModel']);
|
$this->assertEquals('', $response['body']['sessions'][0]['deviceModel']);
|
||||||
$this->assertEquals($response['body']['sessions'][0]['ip'], filter_var($response['body']['sessions'][0]['ip'], FILTER_VALIDATE_IP));
|
$this->assertEquals($response['body']['sessions'][0]['ip'], filter_var($response['body']['sessions'][0]['ip'], FILTER_VALIDATE_IP));
|
||||||
|
|
||||||
$this->assertEquals('--', $response['body']['sessions'][0]['countryCode']);
|
$this->assertEquals('--', $response['body']['sessions'][0]['countryCode']);
|
||||||
$this->assertEquals('Unknown', $response['body']['sessions'][0]['countryName']);
|
$this->assertEquals('Unknown', $response['body']['sessions'][0]['countryName']);
|
||||||
|
|
||||||
$this->assertEquals(true, $response['body']['sessions'][0]['current']);
|
$this->assertEquals(true, $response['body']['sessions'][0]['current']);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -325,7 +325,8 @@ trait AccountBase
|
||||||
$this->assertIsArray($response['body']['logs']);
|
$this->assertIsArray($response['body']['logs']);
|
||||||
$this->assertNotEmpty($response['body']['logs']);
|
$this->assertNotEmpty($response['body']['logs']);
|
||||||
$this->assertCount(2, $response['body']['logs']);
|
$this->assertCount(2, $response['body']['logs']);
|
||||||
|
$this->assertIsNumeric($response['body']['sum']);
|
||||||
|
|
||||||
$this->assertContains($response['body']['logs'][0]['event'], ['account.create', 'account.sessions.create']);
|
$this->assertContains($response['body']['logs'][0]['event'], ['account.create', 'account.sessions.create']);
|
||||||
$this->assertEquals($response['body']['logs'][0]['ip'], filter_var($response['body']['logs'][0]['ip'], FILTER_VALIDATE_IP));
|
$this->assertEquals($response['body']['logs'][0]['ip'], filter_var($response['body']['logs'][0]['ip'], FILTER_VALIDATE_IP));
|
||||||
$this->assertIsNumeric($response['body']['logs'][0]['time']);
|
$this->assertIsNumeric($response['body']['logs'][0]['time']);
|
||||||
|
@ -344,7 +345,7 @@ trait AccountBase
|
||||||
$this->assertEquals('', $response['body']['logs'][0]['deviceBrand']);
|
$this->assertEquals('', $response['body']['logs'][0]['deviceBrand']);
|
||||||
$this->assertEquals('', $response['body']['logs'][0]['deviceModel']);
|
$this->assertEquals('', $response['body']['logs'][0]['deviceModel']);
|
||||||
$this->assertEquals($response['body']['logs'][0]['ip'], filter_var($response['body']['logs'][0]['ip'], FILTER_VALIDATE_IP));
|
$this->assertEquals($response['body']['logs'][0]['ip'], filter_var($response['body']['logs'][0]['ip'], FILTER_VALIDATE_IP));
|
||||||
|
|
||||||
$this->assertEquals('--', $response['body']['logs'][0]['countryCode']);
|
$this->assertEquals('--', $response['body']['logs'][0]['countryCode']);
|
||||||
$this->assertEquals('Unknown', $response['body']['logs'][0]['countryName']);
|
$this->assertEquals('Unknown', $response['body']['logs'][0]['countryName']);
|
||||||
|
|
||||||
|
@ -366,10 +367,62 @@ trait AccountBase
|
||||||
$this->assertEquals('', $response['body']['logs'][1]['deviceBrand']);
|
$this->assertEquals('', $response['body']['logs'][1]['deviceBrand']);
|
||||||
$this->assertEquals('', $response['body']['logs'][1]['deviceModel']);
|
$this->assertEquals('', $response['body']['logs'][1]['deviceModel']);
|
||||||
$this->assertEquals($response['body']['logs'][1]['ip'], filter_var($response['body']['logs'][1]['ip'], FILTER_VALIDATE_IP));
|
$this->assertEquals($response['body']['logs'][1]['ip'], filter_var($response['body']['logs'][1]['ip'], FILTER_VALIDATE_IP));
|
||||||
|
|
||||||
$this->assertEquals('--', $response['body']['logs'][1]['countryCode']);
|
$this->assertEquals('--', $response['body']['logs'][1]['countryCode']);
|
||||||
$this->assertEquals('Unknown', $response['body']['logs'][1]['countryName']);
|
$this->assertEquals('Unknown', $response['body']['logs'][1]['countryName']);
|
||||||
|
|
||||||
|
$responseLimit = $this->client->call(Client::METHOD_GET, '/account/logs', array_merge([
|
||||||
|
'origin' => 'http://localhost',
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
'cookie' => 'a_session_'.$this->getProject()['$id'].'=' . $session,
|
||||||
|
]), [
|
||||||
|
'limit' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($responseLimit['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($responseLimit['body']['logs']);
|
||||||
|
$this->assertNotEmpty($responseLimit['body']['logs']);
|
||||||
|
$this->assertCount(1, $responseLimit['body']['logs']);
|
||||||
|
$this->assertIsNumeric($responseLimit['body']['sum']);
|
||||||
|
|
||||||
|
$this->assertEquals($response['body']['logs'][0], $responseLimit['body']['logs'][0]);
|
||||||
|
|
||||||
|
|
||||||
|
$responseOffset = $this->client->call(Client::METHOD_GET, '/account/logs', array_merge([
|
||||||
|
'origin' => 'http://localhost',
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
'cookie' => 'a_session_'.$this->getProject()['$id'].'=' . $session,
|
||||||
|
]), [
|
||||||
|
'offset' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($responseOffset['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($responseOffset['body']['logs']);
|
||||||
|
$this->assertNotEmpty($responseOffset['body']['logs']);
|
||||||
|
$this->assertCount(1, $responseOffset['body']['logs']);
|
||||||
|
$this->assertIsNumeric($responseOffset['body']['sum']);
|
||||||
|
|
||||||
|
$this->assertEquals($response['body']['logs'][1], $responseOffset['body']['logs'][0]);
|
||||||
|
|
||||||
|
$responseLimitOffset = $this->client->call(Client::METHOD_GET, '/account/logs', array_merge([
|
||||||
|
'origin' => 'http://localhost',
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
'cookie' => 'a_session_'.$this->getProject()['$id'].'=' . $session,
|
||||||
|
]), [
|
||||||
|
'limit' => 1,
|
||||||
|
'offset' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($responseLimitOffset['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($responseLimitOffset['body']['logs']);
|
||||||
|
$this->assertNotEmpty($responseLimitOffset['body']['logs']);
|
||||||
|
$this->assertCount(1, $responseLimitOffset['body']['logs']);
|
||||||
|
$this->assertIsNumeric($responseLimitOffset['body']['sum']);
|
||||||
|
|
||||||
|
$this->assertEquals($response['body']['logs'][1], $responseLimitOffset['body']['logs'][0]);
|
||||||
/**
|
/**
|
||||||
* Test for FAILURE
|
* Test for FAILURE
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -122,4 +122,58 @@ class DatabaseConsoleClientTest extends Scope
|
||||||
$this->assertIsArray($response['body']['documentsUpdate']);
|
$this->assertIsArray($response['body']['documentsUpdate']);
|
||||||
$this->assertIsArray($response['body']['documentsDelete']);
|
$this->assertIsArray($response['body']['documentsDelete']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testCreateCollection
|
||||||
|
*/
|
||||||
|
public function testGetCollectionLogs(array $data)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Test for SUCCESS
|
||||||
|
*/
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/database/collections/' . $data['moviesId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()));
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/database/collections/' . $data['moviesId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'limit' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertLessThanOrEqual(1, count($logs['body']['logs']));
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/database/collections/' . $data['moviesId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'offset' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/database/collections/' . $data['moviesId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'offset' => 1,
|
||||||
|
'limit' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertLessThanOrEqual(1, count($logs['body']['logs']));
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,14 +204,6 @@ trait UsersBase
|
||||||
$this->assertEquals($sessions['headers']['status-code'], 200);
|
$this->assertEquals($sessions['headers']['status-code'], 200);
|
||||||
$this->assertIsArray($sessions['body']);
|
$this->assertIsArray($sessions['body']);
|
||||||
|
|
||||||
$logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', array_merge([
|
|
||||||
'content-type' => 'application/json',
|
|
||||||
'x-appwrite-project' => $this->getProject()['$id'],
|
|
||||||
], $this->getHeaders()));
|
|
||||||
|
|
||||||
$this->assertEquals($logs['headers']['status-code'], 200);
|
|
||||||
$this->assertIsArray($logs['body']);
|
|
||||||
|
|
||||||
$users = $this->client->call(Client::METHOD_GET, '/users', array_merge([
|
$users = $this->client->call(Client::METHOD_GET, '/users', array_merge([
|
||||||
'content-type' => 'application/json',
|
'content-type' => 'application/json',
|
||||||
'x-appwrite-project' => $this->getProject()['$id'],
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
@ -428,6 +420,61 @@ trait UsersBase
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testGetUser
|
||||||
|
*/
|
||||||
|
public function testGetLogs(array $data): void
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Test for SUCCESS
|
||||||
|
*/
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()));
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'limit' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertLessThanOrEqual(1, count($logs['body']['logs']));
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'offset' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
|
||||||
|
$logs = $this->client->call(Client::METHOD_GET, '/users/' . $data['userId'] . '/logs', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'offset' => 1,
|
||||||
|
'limit' => 1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals($logs['headers']['status-code'], 200);
|
||||||
|
$this->assertIsArray($logs['body']['logs']);
|
||||||
|
$this->assertLessThanOrEqual(1, count($logs['body']['logs']));
|
||||||
|
$this->assertIsNumeric($logs['body']['sum']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @depends testGetUser
|
* @depends testGetUser
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue