Merge branch '0.7.x' into feat-upgrade-php-version
This commit is contained in:
commit
0237768ebf
10
.gitattributes
vendored
10
.gitattributes
vendored
|
@ -0,0 +1,10 @@
|
|||
app/config/* linguist-detectable=false
|
||||
app/config/* linguist-detectable=false
|
||||
app/config/*/* linguist-detectable=false
|
||||
app/config/*/*/* linguist-detectable=false
|
||||
app/config/*/*/*/* linguist-detectable=false
|
||||
tests/* linguist-detectable=false
|
||||
tests/*/* linguist-detectable=false
|
||||
tests/*/*/* linguist-detectable=false
|
||||
tests/*/*/*/* linguist-detectable=false
|
||||
tests/*/*/*/*/* linguist-detectable=false
|
|
@ -1,4 +1,4 @@
|
|||
# Version 0.7.0 (NOT-RELEASED)
|
||||
# Version 0.7.0
|
||||
|
||||
## Features
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
|||
- New OAuth adapter for PayPal sandbox (@armino-dev - [#420](https://github.com/appwrite/appwrite/issues/410))
|
||||
- New OAuth adapter for Tradeshift (@armino-dev - [#855](https://github.com/appwrite/appwrite/pull/855))
|
||||
- New OAuth adapter for Tradeshift sandbox (@armino-dev - [#855](https://github.com/appwrite/appwrite/pull/855))
|
||||
- Introducing new permssion types: role:guest, role:member, role:app
|
||||
- Introducing new permssion types: role:guest & role:member
|
||||
- Disabled rate-limits on server side integrations
|
||||
- Refactored migration script
|
||||
|
||||
|
@ -68,6 +68,7 @@
|
|||
- Upgraded Redis Resque queue library to version 1.3.6 ([#319](https://github.com/appwrite/appwrite/issues/319))
|
||||
- Upgraded ClamAV container image to version 1.0.11 ([#412](https://github.com/appwrite/appwrite/issues/412))
|
||||
- Upgraded device detctor to version 3.12.6
|
||||
- Upgraded GEOIP DB file to Feb 2021 release
|
||||
|
||||
## Breaking Changes (Read before upgrading!)
|
||||
|
||||
|
@ -118,6 +119,7 @@
|
|||
- Block iframe access to Appwrite console using the `X-Frame-Options` header.
|
||||
- Fixed `roles` param input validator
|
||||
- API Keys are now stored encrypted
|
||||
- Disabled domains whitlist ACL for the Appwrite console
|
||||
|
||||
# Version 0.6.2 (PRE-RELEASE)
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ To get proper autocompletion for all the different functions and classes in the
|
|||
```bash
|
||||
docker run --rm --interactive --tty \
|
||||
--volume $PWD:/app \
|
||||
composer install
|
||||
composer update --ignore-platform-reqs --optimize-autoloader --no-plugins --no-scripts --prefer-dist
|
||||
```
|
||||
|
||||
### User Interface
|
||||
|
|
|
@ -15,12 +15,13 @@ return [
|
|||
[
|
||||
'key' => 'web',
|
||||
'name' => 'Web',
|
||||
'version' => '1.2.0',
|
||||
'version' => '2.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-web',
|
||||
'package' => 'https://www.npmjs.com/package/appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_CLIENT,
|
||||
'prism' => 'javascript',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/client-web'),
|
||||
|
@ -31,12 +32,13 @@ return [
|
|||
[
|
||||
'key' => 'flutter',
|
||||
'name' => 'Flutter',
|
||||
'version' => '0.3.0-dev.2',
|
||||
'version' => '0.3.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-flutter',
|
||||
'package' => 'https://pub.dev/packages/appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_CLIENT,
|
||||
'prism' => 'dart',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/client-flutter'),
|
||||
|
@ -52,6 +54,7 @@ return [
|
|||
'enabled' => false,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_CLIENT,
|
||||
'prism' => 'swift',
|
||||
'source' => false,
|
||||
|
@ -67,6 +70,7 @@ return [
|
|||
'enabled' => false,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_CLIENT,
|
||||
'prism' => '',
|
||||
'source' => false,
|
||||
|
@ -82,6 +86,7 @@ return [
|
|||
'enabled' => false,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_CLIENT,
|
||||
'prism' => 'kotlin',
|
||||
'source' => false,
|
||||
|
@ -94,9 +99,9 @@ return [
|
|||
// 'name' => 'Java',
|
||||
// 'url' => '',
|
||||
// 'enabled' => false,
|
||||
// 'dev' => false,
|
||||
// 'beta' => false,
|
||||
// 'dev' => false,
|
||||
// 'hidden' => false,
|
||||
// 'family' => APP_PLATFORM_CLIENT,
|
||||
// 'prism' => 'java',
|
||||
// 'source' => false,
|
||||
|
@ -122,6 +127,7 @@ return [
|
|||
'enabled' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => true,
|
||||
'family' => APP_PLATFORM_CONSOLE,
|
||||
'prism' => 'console',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/console-web'),
|
||||
|
@ -139,31 +145,16 @@ return [
|
|||
'enabled' => true,
|
||||
'beta' => false,
|
||||
'languages' => [ // TODO change key to 'sdks'
|
||||
[
|
||||
'key' => 'cli',
|
||||
'name' => 'Command Line',
|
||||
'version' => '0.1.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'package' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => true,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'bash',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-cli'),
|
||||
'gitUrl' => 'git@github.com:appwrite/sdk-for-cli.git',
|
||||
'gitRepoName' => 'sdk-for-cli',
|
||||
'gitUserName' => 'appwrite',
|
||||
],
|
||||
[
|
||||
'key' => 'nodejs',
|
||||
'name' => 'Node.js',
|
||||
'version' => '1.1.0',
|
||||
'version' => '2.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-node',
|
||||
'package' => 'https://www.npmjs.com/package/node-appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'javascript',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-nodejs'),
|
||||
|
@ -174,12 +165,13 @@ return [
|
|||
[
|
||||
'key' => 'deno',
|
||||
'name' => 'Deno',
|
||||
'version' => '0.0.2',
|
||||
'version' => '0.1.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-deno',
|
||||
'package' => 'https://deno.land/x/appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'typescript',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-deno'),
|
||||
|
@ -190,12 +182,13 @@ return [
|
|||
[
|
||||
'key' => 'php',
|
||||
'name' => 'PHP',
|
||||
'version' => '1.1.0',
|
||||
'version' => '2.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-php',
|
||||
'package' => 'https://packagist.org/packages/appwrite/appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'php',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-php'),
|
||||
|
@ -206,12 +199,13 @@ return [
|
|||
[
|
||||
'key' => 'python',
|
||||
'name' => 'Python',
|
||||
'version' => '0.0.6',
|
||||
'version' => '0.1.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-python',
|
||||
'package' => 'https://pypi.org/project/appwrite/',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'python',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-python'),
|
||||
|
@ -222,12 +216,13 @@ return [
|
|||
[
|
||||
'key' => 'ruby',
|
||||
'name' => 'Ruby',
|
||||
'version' => '1.0.11',
|
||||
'version' => '2.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-ruby',
|
||||
'package' => 'https://rubygems.org/gems/appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'beta' => false,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'ruby',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-ruby'),
|
||||
|
@ -244,6 +239,7 @@ return [
|
|||
'enabled' => false,
|
||||
'beta' => true,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'go',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-go'),
|
||||
|
@ -260,6 +256,7 @@ return [
|
|||
'enabled' => false,
|
||||
'beta' => true,
|
||||
'dev' => false,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'java',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-java'),
|
||||
|
@ -270,12 +267,13 @@ return [
|
|||
[
|
||||
'key' => 'dotnet',
|
||||
'name' => '.NET',
|
||||
'version' => '0.0.3',
|
||||
'version' => '0.1.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
|
||||
'package' => 'https://www.nuget.org/packages/Appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => true,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'csharp',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-dotnet'),
|
||||
|
@ -286,12 +284,13 @@ return [
|
|||
[
|
||||
'key' => 'dart',
|
||||
'name' => 'Dart',
|
||||
'version' => '0.1.0',
|
||||
'version' => '0.2.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-dart',
|
||||
'package' => 'https://pub.dev/packages/dart_appwrite',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => true,
|
||||
'hidden' => false,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'dart',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-dart'),
|
||||
|
@ -299,6 +298,23 @@ return [
|
|||
'gitRepoName' => 'sdk-for-dart',
|
||||
'gitUserName' => 'appwrite',
|
||||
],
|
||||
[
|
||||
'key' => 'cli',
|
||||
'name' => 'Command Line',
|
||||
'version' => '0.5.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'package' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'enabled' => true,
|
||||
'beta' => true,
|
||||
'dev' => false,
|
||||
'hidden' => true,
|
||||
'family' => APP_PLATFORM_SERVER,
|
||||
'prism' => 'bash',
|
||||
'source' => \realpath(__DIR__ . '/../sdks/server-cli'),
|
||||
'gitUrl' => 'git@github.com:appwrite/sdk-for-cli.git',
|
||||
'gitRepoName' => 'sdk-for-cli',
|
||||
'gitUserName' => 'appwrite',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
@ -4,6 +4,7 @@ return [
|
|||
'/' => [
|
||||
'key' => 'homepage',
|
||||
'name' => 'Homepage',
|
||||
'subtitle' => '',
|
||||
'controller' => 'web/home.php',
|
||||
'sdk' => false,
|
||||
'docs' => false,
|
||||
|
@ -20,6 +21,7 @@ return [
|
|||
'v1/account' => [
|
||||
'key' => 'account',
|
||||
'name' => 'Account',
|
||||
'subtitle' => 'The Account service allows you to authenticate and manage a user account.',
|
||||
'description' => '/docs/services/account.md',
|
||||
'controller' => 'api/account.php',
|
||||
'sdk' => true,
|
||||
|
@ -29,6 +31,7 @@ return [
|
|||
'v1/avatars' => [
|
||||
'key' => 'avatars',
|
||||
'name' => 'Avatars',
|
||||
'subtitle'=> 'The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.',
|
||||
'description' => '/docs/services/avatars.md',
|
||||
'controller' => 'api/avatars.php',
|
||||
'sdk' => true,
|
||||
|
@ -38,6 +41,7 @@ return [
|
|||
'v1/database' => [
|
||||
'key' => 'database',
|
||||
'name' => 'Database',
|
||||
'subtitle' => 'The Database service allows you to create structured collections of documents, query and filter lists of documents',
|
||||
'description' => '/docs/services/database.md',
|
||||
'controller' => 'api/database.php',
|
||||
'sdk' => true,
|
||||
|
@ -47,6 +51,7 @@ return [
|
|||
'v1/locale' => [
|
||||
'key' => 'locale',
|
||||
'name' => 'Locale',
|
||||
'subtitle' => 'The Locale service allows you to customize your app based on your users\' location.',
|
||||
'description' => '/docs/services/locale.md',
|
||||
'controller' => 'api/locale.php',
|
||||
'sdk' => true,
|
||||
|
@ -56,6 +61,7 @@ return [
|
|||
'v1/health' => [
|
||||
'key' => 'health',
|
||||
'name' => 'Health',
|
||||
'subtitle' => 'The Health service allows you to both validate and monitor your Appwrite server\'s health.',
|
||||
'description' => '/docs/services/health.md',
|
||||
'controller' => 'api/health.php',
|
||||
'sdk' => true,
|
||||
|
@ -65,6 +71,7 @@ return [
|
|||
'v1/projects' => [
|
||||
'key' => 'projects',
|
||||
'name' => 'Projects',
|
||||
'subtitle' => 'The Project service allows you to manage all the projects in your Appwrite server.',
|
||||
'controller' => 'api/projects.php',
|
||||
'sdk' => true,
|
||||
'docs' => true,
|
||||
|
@ -73,6 +80,7 @@ return [
|
|||
'v1/storage' => [
|
||||
'key' => 'storage',
|
||||
'name' => 'Storage',
|
||||
'subtitle' => 'The Storage service allows you to manage your project files.',
|
||||
'description' => '/docs/services/storage.md',
|
||||
'controller' => 'api/storage.php',
|
||||
'sdk' => true,
|
||||
|
@ -82,6 +90,7 @@ return [
|
|||
'v1/teams' => [
|
||||
'key' => 'teams',
|
||||
'name' => 'Teams',
|
||||
'subtitle' => 'The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources',
|
||||
'description' => '/docs/services/teams.md',
|
||||
'controller' => 'api/teams.php',
|
||||
'sdk' => true,
|
||||
|
@ -91,6 +100,7 @@ return [
|
|||
'v1/users' => [
|
||||
'key' => 'users',
|
||||
'name' => 'Users',
|
||||
'subtitle' => 'The Users service allows you to manage your project users.',
|
||||
'description' => '/docs/services/users.md',
|
||||
'controller' => 'api/users.php',
|
||||
'sdk' => true,
|
||||
|
@ -100,6 +110,7 @@ return [
|
|||
'v1/functions' => [
|
||||
'key' => 'functions',
|
||||
'name' => 'Functions',
|
||||
'subtitle' => 'The Functions Service allows you view, create and manage your Cloud Functions.',
|
||||
'description' => '/docs/services/functions.md',
|
||||
'controller' => 'api/functions.php',
|
||||
'sdk' => true,
|
||||
|
@ -109,6 +120,7 @@ return [
|
|||
'v1/mock' => [
|
||||
'key' => 'mock',
|
||||
'name' => 'Mock',
|
||||
'subtitle' => '',
|
||||
'description' => '',
|
||||
'controller' => 'mock.php',
|
||||
'sdk' => false,
|
||||
|
@ -118,6 +130,7 @@ return [
|
|||
'v1/graphql' => [
|
||||
'key' => 'graphql',
|
||||
'name' => 'GraphQL',
|
||||
'subtitle' => 'Appwrite\'s GraphQL Endpoint',
|
||||
'description' => 'GraphQL Endpoint',
|
||||
'controller' => 'api/graphql.php',
|
||||
'sdk' => false,
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -63,14 +63,14 @@ return [
|
|||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
[
|
||||
'name' => '_APP_CONSOLE_WHITELIST_DOMAINS',
|
||||
'description' => 'This option allows you to limit creation of users to Appwrite console for users sharing the same email domains. This option is very useful for team working with company emails domain.\n\nTo enable this option, pass a list of allowed email domains separated by a comma.',
|
||||
'introduction' => '',
|
||||
'default' => '',
|
||||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
// [
|
||||
// 'name' => '_APP_CONSOLE_WHITELIST_DOMAINS',
|
||||
// 'description' => 'This option allows you to limit creation of users to Appwrite console for users sharing the same email domains. This option is very useful for team working with company emails domain.\n\nTo enable this option, pass a list of allowed email domains separated by a comma.',
|
||||
// 'introduction' => '',
|
||||
// 'default' => '',
|
||||
// 'required' => false,
|
||||
// 'question' => '',
|
||||
// ],
|
||||
[
|
||||
'name' => '_APP_CONSOLE_WHITELIST_IPS',
|
||||
'description' => 'This last option allows you to limit creation of users in Appwrite console for users sharing the same set of IP addresses. This option is very useful for team working with a VPN service or a company IP.\n\nTo enable/activate this option, pass a list of allowed IP addresses separated by a comma.',
|
||||
|
@ -141,6 +141,22 @@ return [
|
|||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
[
|
||||
'name' => '_APP_REDIS_USER',
|
||||
'description' => 'Redis server user.',
|
||||
'introduction' => '0.7',
|
||||
'default' => '',
|
||||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
[
|
||||
'name' => '_APP_REDIS_PASS',
|
||||
'description' => 'Redis server password.',
|
||||
'introduction' => '0.7',
|
||||
'default' => '',
|
||||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
|
@ -339,15 +355,15 @@ return [
|
|||
],
|
||||
[
|
||||
'name' => '_APP_FUNCTIONS_CPUS',
|
||||
'description' => 'The maximum number of CPU core a single cloud function is allowed to use. Please note that setting a value higher than available cores will result in a function error, which might result in an error. The default value is 1.',
|
||||
'description' => 'The maximum number of CPU core a single cloud function is allowed to use. Please note that setting a value higher than available cores will result in a function error, which might result in an error. The default value is empty. When it\'s empty, CPU limit will be disabled.',
|
||||
'introduction' => '0.7.0',
|
||||
'default' => '1',
|
||||
'default' => '',
|
||||
'required' => false,
|
||||
'question' => '',
|
||||
],
|
||||
[
|
||||
'name' => '_APP_FUNCTIONS_MEMORY',
|
||||
'description' => 'The maximum amount of memory a single cloud function is allowed to use in megabytes. The default value is 128.',
|
||||
'description' => 'The maximum amount of memory a single cloud function is allowed to use in megabytes. The default value is empty. When it\'s empty, memory limit will be disabled.',
|
||||
'introduction' => '0.7.0',
|
||||
'default' => '256',
|
||||
'required' => false,
|
||||
|
@ -355,7 +371,7 @@ return [
|
|||
],
|
||||
[
|
||||
'name' => '_APP_FUNCTIONS_MEMORY_SWAP',
|
||||
'description' => 'The maximum amount of swap memory a single cloud function is allowed to use in megabytes. The default value is 128.',
|
||||
'description' => 'The maximum amount of swap memory a single cloud function is allowed to use in megabytes. The default value is empty. When it\'s empty, swap memory limit will be disabled.',
|
||||
'introduction' => '0.7.0',
|
||||
'default' => '256',
|
||||
'required' => false,
|
||||
|
|
|
@ -19,11 +19,11 @@ use Appwrite\Database\Document;
|
|||
use Appwrite\Database\Exception\Duplicate;
|
||||
use Appwrite\Database\Validator\UID;
|
||||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Detector\Detector;
|
||||
use Appwrite\Template\Template;
|
||||
use Appwrite\OpenSSL\OpenSSL;
|
||||
use Appwrite\URL\URL as URLParser;
|
||||
use Appwrite\Utopia\Response;
|
||||
use DeviceDetector\DeviceDetector;
|
||||
use Utopia\Validator\ArrayList;
|
||||
|
||||
$oauthDefaultSuccess = App::getEnv('_APP_HOME').'/auth/oauth2/success';
|
||||
|
@ -184,59 +184,23 @@ App::post('/v1/account/sessions')
|
|||
throw new Exception('Invalid credentials. User is blocked', 401); // User is in status blocked
|
||||
}
|
||||
|
||||
$dd = new DeviceDetector($request->getUserAgent('UNKNOWN'));
|
||||
|
||||
$dd->parse();
|
||||
|
||||
$os = $dd->getOs();
|
||||
$osCode = (isset($os['short_name'])) ? $os['short_name'] : '';
|
||||
$osName = (isset($os['name'])) ? $os['name'] : '';
|
||||
$osVersion = (isset($os['version'])) ? $os['version'] : '';
|
||||
|
||||
$client = $dd->getClient();
|
||||
$clientType = (isset($client['type'])) ? $client['type'] : '';
|
||||
$clientCode = (isset($client['short_name'])) ? $client['short_name'] : '';
|
||||
$clientName = (isset($client['name'])) ? $client['name'] : '';
|
||||
$clientVersion = (isset($client['version'])) ? $client['version'] : '';
|
||||
$clientEngine = (isset($client['engine'])) ? $client['engine'] : '';
|
||||
$clientEngineVersion = (isset($client['engine_version'])) ? $client['engine_version'] : '';
|
||||
|
||||
$detector = new Detector($request->getUserAgent('UNKNOWN'));
|
||||
$record = $geodb->get($request->getIP());
|
||||
$expiry = \time() + Auth::TOKEN_EXPIRATION_LOGIN_LONG;
|
||||
$secret = Auth::tokenGenerator();
|
||||
$session = new Document([
|
||||
'$collection' => Database::SYSTEM_COLLECTION_TOKENS,
|
||||
'$permissions' => ['read' => ['user:'.$profile->getId()], 'write' => ['user:'.$profile->getId()]],
|
||||
'userId' => $profile->getId(),
|
||||
'type' => Auth::TOKEN_TYPE_LOGIN,
|
||||
'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak
|
||||
'expire' => $expiry,
|
||||
'userAgent' => $request->getUserAgent('UNKNOWN'),
|
||||
'ip' => $request->getIP(),
|
||||
'osCode' => $osCode,
|
||||
'osName' => $osName,
|
||||
'osVersion' => $osVersion,
|
||||
'clientType' => $clientType,
|
||||
'clientCode' => $clientCode,
|
||||
'clientName' => $clientName,
|
||||
'clientVersion' => $clientVersion,
|
||||
'clientEngine' => $clientEngine,
|
||||
'clientEngineVersion' => $clientEngineVersion,
|
||||
'deviceName' => $dd->getDeviceName(),
|
||||
'deviceBrand' => $dd->getBrandName(),
|
||||
'deviceModel' => $dd->getModel(),
|
||||
]);
|
||||
|
||||
$record = $geodb->get($request->getIP());
|
||||
|
||||
if($record) {
|
||||
$session
|
||||
->setAttribute('countryCode', \strtolower($record['country']['iso_code']))
|
||||
;
|
||||
} else {
|
||||
$session
|
||||
->setAttribute('countryCode', '--')
|
||||
;
|
||||
}
|
||||
$session = new Document(array_merge(
|
||||
[
|
||||
'$collection' => Database::SYSTEM_COLLECTION_TOKENS,
|
||||
'$permissions' => ['read' => ['user:'.$profile->getId()], 'write' => ['user:'.$profile->getId()]],
|
||||
'userId' => $profile->getId(),
|
||||
'type' => Auth::TOKEN_TYPE_LOGIN,
|
||||
'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak
|
||||
'expire' => $expiry,
|
||||
'userAgent' => $request->getUserAgent('UNKNOWN'),
|
||||
'ip' => $request->getIP(),
|
||||
'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--',
|
||||
], $detector->getOS(), $detector->getClient(), $detector->getDevice()
|
||||
));
|
||||
|
||||
Authorization::setRole('user:'.$profile->getId());
|
||||
|
||||
|
@ -535,26 +499,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect')
|
|||
|
||||
// Create session token, verify user account and update OAuth2 ID and Access Token
|
||||
|
||||
$dd = new DeviceDetector($request->getUserAgent('UNKNOWN'));
|
||||
|
||||
$dd->parse();
|
||||
|
||||
$os = $dd->getOs();
|
||||
$osCode = (isset($os['short_name'])) ? $os['short_name'] : '';
|
||||
$osName = (isset($os['name'])) ? $os['name'] : '';
|
||||
$osVersion = (isset($os['version'])) ? $os['version'] : '';
|
||||
|
||||
$client = $dd->getClient();
|
||||
$clientType = (isset($client['type'])) ? $client['type'] : '';
|
||||
$clientCode = (isset($client['short_name'])) ? $client['short_name'] : '';
|
||||
$clientName = (isset($client['name'])) ? $client['name'] : '';
|
||||
$clientVersion = (isset($client['version'])) ? $client['version'] : '';
|
||||
$clientEngine = (isset($client['engine'])) ? $client['engine'] : '';
|
||||
$clientEngineVersion = (isset($client['engine_version'])) ? $client['engine_version'] : '';
|
||||
|
||||
$detector = new Detector($request->getUserAgent('UNKNOWN'));
|
||||
$record = $geodb->get($request->getIP());
|
||||
$secret = Auth::tokenGenerator();
|
||||
$expiry = \time() + Auth::TOKEN_EXPIRATION_LOGIN_LONG;
|
||||
$session = new Document([
|
||||
$session = new Document(array_merge([
|
||||
'$collection' => Database::SYSTEM_COLLECTION_TOKENS,
|
||||
'$permissions' => ['read' => ['user:'.$user['$id']], 'write' => ['user:'.$user['$id']]],
|
||||
'userId' => $user->getId(),
|
||||
|
@ -563,31 +512,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect')
|
|||
'expire' => $expiry,
|
||||
'userAgent' => $request->getUserAgent('UNKNOWN'),
|
||||
'ip' => $request->getIP(),
|
||||
'osCode' => $osCode,
|
||||
'osName' => $osName,
|
||||
'osVersion' => $osVersion,
|
||||
'clientType' => $clientType,
|
||||
'clientCode' => $clientCode,
|
||||
'clientName' => $clientName,
|
||||
'clientVersion' => $clientVersion,
|
||||
'clientEngine' => $clientEngine,
|
||||
'clientEngineVersion' => $clientEngineVersion,
|
||||
'deviceName' => $dd->getDeviceName(),
|
||||
'deviceBrand' => $dd->getBrandName(),
|
||||
'deviceModel' => $dd->getModel(),
|
||||
]);
|
||||
|
||||
$record = $geodb->get($request->getIP());
|
||||
|
||||
if($record) {
|
||||
$session
|
||||
->setAttribute('countryCode', \strtolower($record['country']['iso_code']))
|
||||
;
|
||||
} else {
|
||||
$session
|
||||
->setAttribute('countryCode', '--')
|
||||
;
|
||||
}
|
||||
'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--',
|
||||
], $detector->getOS(), $detector->getClient(), $detector->getDevice()));
|
||||
|
||||
$user
|
||||
->setAttribute('oauth2'.\ucfirst($provider), $oauth2ID)
|
||||
|
@ -820,43 +746,13 @@ App::get('/v1/account/logs')
|
|||
foreach ($logs as $i => &$log) {
|
||||
$log['userAgent'] = (!empty($log['userAgent'])) ? $log['userAgent'] : 'UNKNOWN';
|
||||
|
||||
$dd = new DeviceDetector($log['userAgent']);
|
||||
$detector = new Detector($log['userAgent']);
|
||||
|
||||
$dd->skipBotDetection(); // OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
|
||||
|
||||
$dd->parse();
|
||||
|
||||
$os = $dd->getOs();
|
||||
$osCode = (isset($os['short_name'])) ? $os['short_name'] : '';
|
||||
$osName = (isset($os['name'])) ? $os['name'] : '';
|
||||
$osVersion = (isset($os['version'])) ? $os['version'] : '';
|
||||
|
||||
$client = $dd->getClient();
|
||||
$clientType = (isset($client['type'])) ? $client['type'] : '';
|
||||
$clientCode = (isset($client['short_name'])) ? $client['short_name'] : '';
|
||||
$clientName = (isset($client['name'])) ? $client['name'] : '';
|
||||
$clientVersion = (isset($client['version'])) ? $client['version'] : '';
|
||||
$clientEngine = (isset($client['engine'])) ? $client['engine'] : '';
|
||||
$clientEngineVersion = (isset($client['engine_version'])) ? $client['engine_version'] : '';
|
||||
|
||||
$output[$i] = new Document([
|
||||
$output[$i] = new Document(array_merge([
|
||||
'event' => $log['event'],
|
||||
'ip' => $log['ip'],
|
||||
'time' => \strtotime($log['time']),
|
||||
|
||||
'osCode' => $osCode,
|
||||
'osName' => $osName,
|
||||
'osVersion' => $osVersion,
|
||||
'clientType' => $clientType,
|
||||
'clientCode' => $clientCode,
|
||||
'clientName' => $clientName,
|
||||
'clientVersion' => $clientVersion,
|
||||
'clientEngine' => $clientEngine,
|
||||
'clientEngineVersion' => $clientEngineVersion,
|
||||
'deviceName' => $dd->getDeviceName(),
|
||||
'deviceBrand' => $dd->getBrandName(),
|
||||
'deviceModel' => $dd->getModel(),
|
||||
]);
|
||||
], $detector->getOS(), $detector->getClient(), $detector->getDevice()));
|
||||
|
||||
$record = $geodb->get($log['ip']);
|
||||
|
||||
|
|
|
@ -477,15 +477,22 @@ App::delete('/v1/projects/:projectId')
|
|||
;
|
||||
|
||||
foreach (['keys', 'webhooks', 'tasks', 'platforms', 'domains'] as $key) { // Delete all children (keys, webhooks, tasks [stop tasks?], platforms)
|
||||
$list = $project->getAttribute('webhooks', []);
|
||||
|
||||
foreach ($list as $document) { /* @var $document Document */
|
||||
if (!$consoleDB->deleteDocument($projectId)) {
|
||||
$list = $project->getAttribute($key, []);
|
||||
foreach ($list as $document) {
|
||||
/** @var Document $document */
|
||||
if ($consoleDB->deleteDocument($document->getId())) {
|
||||
if ($document->getCollection() == Database::SYSTEM_COLLECTION_DOMAINS) {
|
||||
$deletes
|
||||
->setParam('type', DELETE_TYPE_CERTIFICATES)
|
||||
->setParam('document', $document)
|
||||
;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Failed to remove project document ('.$key.')] from DB', 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!$consoleDB->deleteDocument($project->getAttribute('teamId', null))) {
|
||||
throw new Exception('Failed to remove project team from DB', 500);
|
||||
}
|
||||
|
@ -1566,7 +1573,8 @@ App::delete('/v1/projects/:projectId/domains/:domainId')
|
|||
->param('domainId', null, new UID(), 'Domain unique ID.')
|
||||
->inject('response')
|
||||
->inject('consoleDB')
|
||||
->action(function ($projectId, $domainId, $response, $consoleDB) {
|
||||
->inject('deletes')
|
||||
->action(function ($projectId, $domainId, $response, $consoleDB, $deletes) {
|
||||
/** @var Appwrite\Utopia\Response $response */
|
||||
/** @var Appwrite\Database\Database $consoleDB */
|
||||
|
||||
|
@ -1582,7 +1590,12 @@ App::delete('/v1/projects/:projectId/domains/:domainId')
|
|||
throw new Exception('Domain not found', 404);
|
||||
}
|
||||
|
||||
if (!$consoleDB->deleteDocument($domain->getId())) {
|
||||
if ($consoleDB->deleteDocument($domain->getId())) {
|
||||
$deletes
|
||||
->setParam('type', DELETE_TYPE_CERTIFICATES)
|
||||
->setParam('document', $domain)
|
||||
;
|
||||
} else {
|
||||
throw new Exception('Failed to remove domains from DB', 500);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,9 @@ use Appwrite\Database\Validator\UID;
|
|||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Database\Exception\Duplicate;
|
||||
use Appwrite\Database\Validator\Key;
|
||||
use Appwrite\Detector\Detector;
|
||||
use Appwrite\Template\Template;
|
||||
use Appwrite\Utopia\Response;
|
||||
use DeviceDetector\DeviceDetector;
|
||||
|
||||
App::post('/v1/teams')
|
||||
->desc('Create Team')
|
||||
|
@ -406,11 +406,12 @@ App::post('/v1/teams/:teamId/memberships')
|
|||
$body = new Template(__DIR__.'/../../config/locale/templates/email-base.tpl');
|
||||
$content = new Template(__DIR__.'/../../config/locale/translations/templates/'.$locale->getText('account.emails.invitation.body'));
|
||||
$cta = new Template(__DIR__.'/../../config/locale/templates/email-cta.tpl');
|
||||
|
||||
$title = \sprintf($locale->getText('account.emails.invitation.title'), $team->getAttribute('name', '[TEAM-NAME]'), $project->getAttribute('name', ['[APP-NAME]']));
|
||||
|
||||
$body
|
||||
->setParam('{{content}}', $content->render())
|
||||
->setParam('{{cta}}', $cta->render())
|
||||
->setParam('{{title}}', $locale->getText('account.emails.invitation.title'))
|
||||
->setParam('{{title}}', $title)
|
||||
->setParam('{{direction}}', $locale->getText('settings.direction'))
|
||||
->setParam('{{project}}', $project->getAttribute('name', ['[APP-NAME]']))
|
||||
->setParam('{{team}}', $team->getAttribute('name', '[TEAM-NAME]'))
|
||||
|
@ -430,9 +431,9 @@ App::post('/v1/teams/:teamId/memberships')
|
|||
->setParam('from', ($project->getId() === 'console') ? '' : \sprintf($locale->getText('account.emails.team'), $project->getAttribute('name')))
|
||||
->setParam('recipient', $email)
|
||||
->setParam('name', $name)
|
||||
->setParam('subject', \sprintf($locale->getText('account.emails.invitation.title'), $team->getAttribute('name', '[TEAM-NAME]'), $project->getAttribute('name', ['[APP-NAME]'])))
|
||||
->setParam('subject', $title)
|
||||
->setParam('body', $body->render())
|
||||
->trigger();
|
||||
->trigger()
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -589,27 +590,11 @@ App::patch('/v1/teams/:teamId/memberships/:inviteId/status')
|
|||
|
||||
// Log user in
|
||||
|
||||
$dd = new DeviceDetector($request->getUserAgent('UNKNOWN'));
|
||||
|
||||
$dd->parse();
|
||||
|
||||
$os = $dd->getOs();
|
||||
$osCode = (isset($os['short_name'])) ? $os['short_name'] : '';
|
||||
$osName = (isset($os['name'])) ? $os['name'] : '';
|
||||
$osVersion = (isset($os['version'])) ? $os['version'] : '';
|
||||
|
||||
$client = $dd->getClient();
|
||||
$clientType = (isset($client['type'])) ? $client['type'] : '';
|
||||
$clientCode = (isset($client['short_name'])) ? $client['short_name'] : '';
|
||||
$clientName = (isset($client['name'])) ? $client['name'] : '';
|
||||
$clientVersion = (isset($client['version'])) ? $client['version'] : '';
|
||||
$clientEngine = (isset($client['engine'])) ? $client['engine'] : '';
|
||||
$clientEngineVersion = (isset($client['engine_version'])) ? $client['engine_version'] : '';
|
||||
|
||||
$detector = new Detector($request->getUserAgent('UNKNOWN'));
|
||||
$record = $geodb->get($request->getIP());
|
||||
$expiry = \time() + Auth::TOKEN_EXPIRATION_LOGIN_LONG;
|
||||
$secret = Auth::tokenGenerator();
|
||||
|
||||
$session = new Document([
|
||||
$session = new Document(array_merge([
|
||||
'$collection' => Database::SYSTEM_COLLECTION_TOKENS,
|
||||
'$permissions' => ['read' => ['user:'.$user->getId()], 'write' => ['user:'.$user->getId()]],
|
||||
'userId' => $user->getId(),
|
||||
|
@ -618,32 +603,8 @@ App::patch('/v1/teams/:teamId/memberships/:inviteId/status')
|
|||
'expire' => $expiry,
|
||||
'userAgent' => $request->getUserAgent('UNKNOWN'),
|
||||
'ip' => $request->getIP(),
|
||||
|
||||
'osCode' => $osCode,
|
||||
'osName' => $osName,
|
||||
'osVersion' => $osVersion,
|
||||
'clientType' => $clientType,
|
||||
'clientCode' => $clientCode,
|
||||
'clientName' => $clientName,
|
||||
'clientVersion' => $clientVersion,
|
||||
'clientEngine' => $clientEngine,
|
||||
'clientEngineVersion' => $clientEngineVersion,
|
||||
'deviceName' => $dd->getDeviceName(),
|
||||
'deviceBrand' => $dd->getBrandName(),
|
||||
'deviceModel' => $dd->getModel(),
|
||||
]);
|
||||
|
||||
$record = $geodb->get($request->getIP());
|
||||
|
||||
if($record) {
|
||||
$session
|
||||
->setAttribute('countryCode', \strtolower($record['country']['iso_code']))
|
||||
;
|
||||
} else {
|
||||
$session
|
||||
->setAttribute('countryCode', '--')
|
||||
;
|
||||
}
|
||||
'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--',
|
||||
], $detector->getOS(), $detector->getClient(), $detector->getDevice()));
|
||||
|
||||
$user->setAttribute('tokens', $session, Document::SET_TYPE_APPEND);
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo
|
|||
Response::setFilter(new V06());
|
||||
break;
|
||||
default:
|
||||
throw new Exception('No filter available for response format : '.$responseFormat, 400);
|
||||
Response::setFilter(null);
|
||||
}
|
||||
} else {
|
||||
Response::setFilter(null);
|
||||
|
|
|
@ -11,13 +11,18 @@ App::init(function ($utopia, $request, $response, $layout) {
|
|||
|
||||
/* AJAX check */
|
||||
if (!empty($request->getQuery('version', ''))) {
|
||||
$layout->setPath(__DIR__.'/../../views/layouts/empty.phtml');
|
||||
$layout->setPath(__DIR__ . '/../../views/layouts/empty.phtml');
|
||||
}
|
||||
|
||||
|
||||
$port = $request->getPort();
|
||||
$protocol = $request->getProtocol();
|
||||
$domain = $request->getHostname();
|
||||
|
||||
$layout
|
||||
->setParam('title', APP_NAME)
|
||||
->setParam('protocol', $request->getProtocol())
|
||||
->setParam('domain', $request->getHostname())
|
||||
->setParam('protocol', $protocol)
|
||||
->setParam('domain', $domain)
|
||||
->setParam('endpoint', $protocol . '://' . $domain . ($port != 80 && $port != 443 ? ':' . $port : ''))
|
||||
->setParam('home', App::getEnv('_APP_HOME'))
|
||||
->setParam('setup', App::getEnv('_APP_SETUP'))
|
||||
->setParam('class', 'unknown')
|
||||
|
@ -34,10 +39,10 @@ App::init(function ($utopia, $request, $response, $layout) {
|
|||
$time = (60 * 60 * 24 * 45); // 45 days cache
|
||||
|
||||
$response
|
||||
->addHeader('Cache-Control', 'public, max-age='.$time)
|
||||
->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $time).' GMT') // 45 days cache
|
||||
->addHeader('Cache-Control', 'public, max-age=' . $time)
|
||||
->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $time) . ' GMT') // 45 days cache
|
||||
->addHeader('X-Frame-Options', 'SAMEORIGIN') // Avoid console and homepage from showing in iframes
|
||||
->addHeader('X-XSS-Protection', '1; mode=block; report=/v1/xss?url='.\urlencode($request->getURI()))
|
||||
->addHeader('X-XSS-Protection', '1; mode=block; report=/v1/xss?url=' . \urlencode($request->getURI()))
|
||||
->addHeader('X-UA-Compatible', 'IE=Edge') // Deny IE browsers from going into quirks mode
|
||||
;
|
||||
|
||||
|
|
|
@ -328,7 +328,7 @@ App::get('/specs/:format')
|
|||
|
||||
$services[] = [
|
||||
'name' => $service['key'] ?? '',
|
||||
'description' => (!empty($service['description'])) ? file_get_contents(realpath(__DIR__.'/../../..'.$service['description'])) : '',
|
||||
'description' => $service['subtitle'] ?? '',
|
||||
];
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
BIN
app/db/DBIP/dbip-country-lite-2021-02.mmdb
Normal file
BIN
app/db/DBIP/dbip-country-lite-2021-02.mmdb
Normal file
Binary file not shown.
27
app/init.php
27
app/init.php
|
@ -39,7 +39,7 @@ const APP_USERAGENT = APP_NAME.'-Server v%s. Please report abuse at %s';
|
|||
const APP_MODE_DEFAULT = 'default';
|
||||
const APP_MODE_ADMIN = 'admin';
|
||||
const APP_PAGING_LIMIT = 12;
|
||||
const APP_CACHE_BUSTER = 142;
|
||||
const APP_CACHE_BUSTER = 144;
|
||||
const APP_VERSION_STABLE = '0.7.0';
|
||||
const APP_STORAGE_UPLOADS = '/storage/uploads';
|
||||
const APP_STORAGE_FUNCTIONS = '/storage/functions';
|
||||
|
@ -60,6 +60,7 @@ const DELETE_TYPE_DOCUMENT = 'document';
|
|||
const DELETE_TYPE_EXECUTIONS = 'executions';
|
||||
const DELETE_TYPE_AUDIT = 'audit';
|
||||
const DELETE_TYPE_ABUSE = 'abuse';
|
||||
const DELETE_TYPE_CERTIFICATES = 'certificates';
|
||||
|
||||
$register = new Registry();
|
||||
|
||||
|
@ -90,9 +91,13 @@ Config::load('storage-mimes', __DIR__.'/config/storage/mimes.php');
|
|||
Config::load('storage-inputs', __DIR__.'/config/storage/inputs.php');
|
||||
Config::load('storage-outputs', __DIR__.'/config/storage/outputs.php');
|
||||
|
||||
Resque::setBackend(App::getEnv('_APP_REDIS_HOST', '')
|
||||
.':'.App::getEnv('_APP_REDIS_PORT', ''));
|
||||
|
||||
$user = App::getEnv('_APP_REDIS_USER','');
|
||||
$pass = App::getEnv('_APP_REDIS_PASS','');
|
||||
if(!empty($user) || !empty($pass)) {
|
||||
Resque::setBackend('redis://'.$user.':'.$pass.'@'.App::getEnv('_APP_REDIS_HOST', '').':'.App::getEnv('_APP_REDIS_PORT', ''));
|
||||
} else {
|
||||
Resque::setBackend(App::getEnv('_APP_REDIS_HOST', '').':'.App::getEnv('_APP_REDIS_PORT', ''));
|
||||
}
|
||||
/**
|
||||
* DB Filters
|
||||
*/
|
||||
|
@ -175,6 +180,18 @@ $register->set('statsd', function () { // Register DB connection
|
|||
$register->set('cache', function () { // Register cache connection
|
||||
$redis = new Redis();
|
||||
$redis->pconnect(App::getEnv('_APP_REDIS_HOST', ''), App::getEnv('_APP_REDIS_PORT', ''));
|
||||
$user = App::getEnv('_APP_REDIS_USER','');
|
||||
$pass = App::getEnv('_APP_REDIS_PASS','');
|
||||
$auth = [];
|
||||
if(!empty($user)) {
|
||||
$auth["user"] = $user;
|
||||
}
|
||||
if(!empty($pass)) {
|
||||
$auth["pass"] = $pass;
|
||||
}
|
||||
if(!empty($auth)) {
|
||||
$redis->auth($auth);
|
||||
}
|
||||
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
|
||||
|
||||
return $redis;
|
||||
|
@ -208,7 +225,7 @@ $register->set('smtp', function () {
|
|||
return $mail;
|
||||
});
|
||||
$register->set('geodb', function () {
|
||||
return new Reader(__DIR__.'/db/DBIP/dbip-country-lite-2020-01.mmdb');
|
||||
return new Reader(__DIR__.'/db/DBIP/dbip-country-lite-2021-02.mmdb');
|
||||
});
|
||||
|
||||
/*
|
||||
|
|
|
@ -4,6 +4,7 @@ use Utopia\Config\Config;
|
|||
use Utopia\CLI\Console;
|
||||
use Appwrite\Spec\Swagger2;
|
||||
use Appwrite\SDK\SDK;
|
||||
use Appwrite\SDK\Language\CLI;
|
||||
use Appwrite\SDK\Language\PHP;
|
||||
use Appwrite\SDK\Language\Web;
|
||||
use Appwrite\SDK\Language\Node;
|
||||
|
@ -91,6 +92,11 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|||
$config->setNPMPackage('appwrite');
|
||||
$config->setBowerPackage('appwrite');
|
||||
break;
|
||||
case 'cli':
|
||||
$config = new CLI();
|
||||
$config->setComposerVendor('appwrite');
|
||||
$config->setComposerPackage('cli');
|
||||
break;
|
||||
case 'php':
|
||||
$config = new PHP();
|
||||
$config->setComposerVendor('appwrite');
|
||||
|
|
|
@ -114,7 +114,7 @@ $maxCells = 10;
|
|||
<?php if(!$array): ?>
|
||||
<?php switch($type):
|
||||
case 'fileId': ?>
|
||||
<img data-ls-if="{{node.<?php echo $this->escape($key); ?>}} != ''" src="" data-ls-attrs="src=//{{env.DOMAIN}}/v1/storage/files/{{node.<?php echo $this->escape($key); ?>}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="avatar" width="30" height="30" loading="lazy" />
|
||||
<img data-ls-if="{{node.<?php echo $this->escape($key); ?>}} != ''" src="" data-ls-attrs="src={{env.ENDPOINT}}/v1/storage/files/{{node.<?php echo $this->escape($key); ?>}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="avatar" width="30" height="30" loading="lazy" />
|
||||
<?php break; ?>
|
||||
<?php case 'document': ?>
|
||||
{...}
|
||||
|
|
|
@ -72,7 +72,7 @@ $rules = $collection->getAttribute('rules', []);
|
|||
<?php if(!$array): ?>
|
||||
<?php switch($type):
|
||||
case 'fileId': ?>
|
||||
<img data-ls-if="{{node.<?php echo $this->escape($key); ?>}} != ''" src="" data-ls-attrs="src=//{{env.DOMAIN}}/v1/storage/files/{{node.<?php echo $this->escape($key); ?>}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="avatar" width="30" height="30" loading="lazy" />
|
||||
<img data-ls-if="{{node.<?php echo $this->escape($key); ?>}} != ''" src="" data-ls-attrs="src={{env.ENDPOINT}}/v1/storage/files/{{node.<?php echo $this->escape($key); ?>}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="avatar" width="30" height="30" loading="lazy" />
|
||||
<?php break; ?>
|
||||
<?php case 'document': ?>
|
||||
{...}
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<input type="radio" name="selected" data-ls-attrs="value={{file.$id}}" data-ls-bind="{{search.selected}}" />
|
||||
</td>
|
||||
<td data-title="x" class="">
|
||||
<img src="" data-ls-attrs="src=//{{env.DOMAIN}}/v1/storage/files/{{file.$id}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="pull-start avatar" width="30" height="30" loading="lazy" />
|
||||
<img src="" data-ls-attrs="src={{env.ENDPOINT}}/v1/storage/files/{{file.$id}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="pull-start avatar" width="30" height="30" loading="lazy" />
|
||||
</td>
|
||||
<td data-title="Name: " class="text-one-liner">
|
||||
<span data-ls-bind="{{file.name}}" data-ls-attrs="title={{file.name}}" class="text-fade text-size-small"></span>
|
||||
|
|
|
@ -596,9 +596,9 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled',true);
|
|||
<p><b>PowerShell</b></p>
|
||||
|
||||
<div class="margin-bottom">
|
||||
<textarea type="hidden" data-ls-bind="appwrite functions createTag \
|
||||
--functionId={{project-function.$id}} ,
|
||||
--command='mycommand' ,
|
||||
<textarea type="hidden" data-ls-bind="appwrite functions createTag `
|
||||
--functionId={{project-function.$id}} `
|
||||
--command='mycommand' `
|
||||
--code='/myrepo/myfunction'" data-forms-code="powershell" data-lang="powershell" data-lang-label="PowerShell"></textarea>
|
||||
</div>
|
||||
|
||||
|
@ -640,4 +640,4 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled',true);
|
|||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -27,52 +27,54 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled',true);
|
|||
|
||||
<div class="zone xxl margin-top-negative-xxxl">
|
||||
<div class="clear margin-bottom-small margin-top-negative">
|
||||
<div class="pull-end">
|
||||
<?php if (!$graph && $usageStatsEnabled): ?>
|
||||
<div class="pull-end">
|
||||
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '24h'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 24h"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}"
|
||||
data-param-range="24h">
|
||||
<button class="tick">24h</button>
|
||||
</form>
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '24h'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 24h"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}"
|
||||
data-param-range="24h">
|
||||
<button class="tick">24h</button>
|
||||
</form>
|
||||
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '24h'" disabled>24h</button>
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '24h'" disabled>24h</button>
|
||||
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '30d'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 30d"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}">
|
||||
<button class="tick">30d</button>
|
||||
</form>
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '30d'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 30d"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}">
|
||||
<button class="tick">30d</button>
|
||||
</form>
|
||||
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '30d'" disabled>30d</button>
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '30d'" disabled>30d</button>
|
||||
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '90d'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 90d"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}"
|
||||
data-param-range="90d">
|
||||
<button class="tick">90d</button>
|
||||
</form>
|
||||
<form class="margin-start-small inline" data-ls-if="{{usage.range}} !== '90d'"
|
||||
data-analytics
|
||||
data-analytics-event="click"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Usage 90d"
|
||||
data-service="projects.getUsage"
|
||||
data-event="submit"
|
||||
data-name="usage"
|
||||
data-param-project-id="{{router.params.project}}"
|
||||
data-param-range="90d">
|
||||
<button class="tick">90d</button>
|
||||
</form>
|
||||
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '90d'" disabled>90d</button>
|
||||
</div>
|
||||
<button class="tick margin-start-small" data-ls-if="{{usage.range}} === '90d'" disabled>90d</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div
|
||||
data-service="projects.getUsage"
|
||||
|
|
|
@ -135,7 +135,7 @@ $customDomainsTarget = $this->getParam('customDomainsTarget', false);
|
|||
|
||||
<label for="name">API Endpoint</label>
|
||||
<div class="input-copy">
|
||||
<input data-forms-copy type="text" disabled data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}/v1" />
|
||||
<input data-forms-copy type="text" disabled data-ls-bind="{{env.ENDPOINT}}/v1" />
|
||||
</div>
|
||||
|
||||
<ul class="margin-bottom-large text-fade text-size-small">
|
||||
|
@ -453,7 +453,7 @@ $customDomainsTarget = $this->getParam('customDomainsTarget', false);
|
|||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input name="teamId" type="hidden" data-ls-bind="{{member.teamId}}">
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}/auth/join?project={{router.params.project}}" />
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.ENDPOINT}}/auth/join?project={{router.params.project}}" />
|
||||
<input name="email" type="hidden" data-ls-bind="{{member.email}}">
|
||||
<input name="name" type="hidden" data-ls-bind="{{member.name}}">
|
||||
<input name="roles" type="hidden" data-ls-bind="{{member.roles}}" data-cast-to="json">
|
||||
|
@ -493,7 +493,7 @@ $customDomainsTarget = $this->getParam('customDomainsTarget', false);
|
|||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input name="teamId" id="team-teamId" type="hidden" data-ls-bind="{{console-project.teamId}}">
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}/auth/join?project={{router.params.project}}" />
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.ENDPOINT}}/auth/join?project={{router.params.project}}" />
|
||||
|
||||
<label for="email">Email</label>
|
||||
<input name="email" id="email" type="email" autocomplete="email" required>
|
||||
|
|
|
@ -113,7 +113,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0);
|
|||
<tbody data-ls-loop="project-files.files" data-ls-as="file">
|
||||
<tr>
|
||||
<td class="hide">
|
||||
<img src="" data-ls-attrs="src=//{{env.DOMAIN}}/v1/storage/files/{{file.$id}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="pull-start avatar" width="30" height="30" loading="lazy" />
|
||||
<img src="" data-ls-attrs="src={{env.ENDPOINT}}/v1/storage/files/{{file.$id}}/preview?width=65&height=65&project={{router.params.project}}&mode=admin" class="pull-start avatar" width="30" height="30" loading="lazy" />
|
||||
</td>
|
||||
<td data-title="Name: " class="text-one-liner" data-ls-attrs="title={{file.name}}" >
|
||||
<div data-ui-modal class="box modal sticky-footer width-large close" data-button-text="{{file.name}}" data-button-class="link" data-button-element="span">
|
||||
|
@ -180,15 +180,15 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0);
|
|||
<div class="margin-bottom-small">File Preview</div>
|
||||
|
||||
<div class="margin-bottom-small">
|
||||
<img src="" class="file-preview" data-ls-attrs="src=//{{env.DOMAIN}}/v1/storage/files/{{file.$id}}/preview?width=350&height=250&project={{router.params.project}}&mode=admin" loading="lazy" width="225" height="160" />
|
||||
<img src="" class="file-preview" data-ls-attrs="src={{env.ENDPOINT}}/v1/storage/files/{{file.$id}}/preview?width=350&height=250&project={{router.params.project}}&mode=admin" loading="lazy" width="225" height="160" />
|
||||
</div>
|
||||
|
||||
<div class="margin-bottom-tiny">
|
||||
<a href="" data-ls-attrs="href=//{{env.DOMAIN}}/v1/storage/files/{{file.$id}}/view?project={{router.params.project}}&mode=admin" target="_blank" rel="noopener"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> New Window <i class="icon-link-ext"></i></a>
|
||||
<a href="" data-ls-attrs="href={{env.ENDPOINT}}/v1/storage/files/{{file.$id}}/view?project={{router.params.project}}&mode=admin" target="_blank" rel="noopener"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> New Window <i class="icon-link-ext"></i></a>
|
||||
</div>
|
||||
|
||||
<div class="margin-bottom">
|
||||
<a href="" data-ls-attrs="href=//{{env.DOMAIN}}/v1/storage/files/{{file.$id}}/download?project={{router.params.project}}&mode=admin" target="_blank" rel="noopener"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> Download <i class="icon-link-ext"></i></a>
|
||||
<a href="" data-ls-attrs="href={{env.ENDPOINT}}/v1/storage/files/{{file.$id}}/download?project={{router.params.project}}&mode=admin" target="_blank" rel="noopener"><i class="icon-angle-circled-right margin-start-negative-tiny margin-end-tiny"></i> Download <i class="icon-link-ext"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -361,7 +361,7 @@ $providers = $this->getParam('providers', []);
|
|||
<p>To complete set up, add this OAuth2 redirect URI to your <?php echo $this->escape(ucfirst($provider)); ?> app configuration.</p>
|
||||
|
||||
<div class="input-copy">
|
||||
<input data-forms-copy type="text" disabled data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}/v1/account/sessions/oauth2/callback/<?php echo $this->escape($provider); ?>/{{router.params.project}}" class="margin-bottom-no" />
|
||||
<input data-forms-copy type="text" disabled data-ls-bind="{{env.ENDPOINT}}/v1/account/sessions/oauth2/callback/<?php echo $this->escape($provider); ?>/{{router.params.project}}" class="margin-bottom-no" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -145,7 +145,7 @@
|
|||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input name="teamId" id="team-teamId" type="hidden" data-ls-bind="{{team.$id}}">
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}" />
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.ENDPOINT}}" />
|
||||
|
||||
<label for="email">Email</label>
|
||||
<input name="email" id="email" type="email" autocomplete="email" required>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<label>Email</label>
|
||||
<input name="email" type="email" class="full-width" autocomplete="email" placeholder="me@example.com" required>
|
||||
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.PROTOCOL}}://{{env.DOMAIN}}/auth/recovery/reset" />
|
||||
<input name="url" type="hidden" data-ls-bind="{{env.ENDPOINT}}/auth/recovery/reset" />
|
||||
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-sign-in"></i> Recover</button>
|
||||
</form>
|
||||
|
|
|
@ -66,6 +66,8 @@ services:
|
|||
- _APP_DOMAIN_TARGET
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -80,6 +82,9 @@ services:
|
|||
- _APP_INFLUXDB_HOST
|
||||
- _APP_INFLUXDB_PORT
|
||||
- _APP_STORAGE_LIMIT
|
||||
- _APP_STORAGE_ANTIVIRUS
|
||||
- _APP_STORAGE_ANTIVIRUS_HOST
|
||||
- _APP_STORAGE_ANTIVIRUS_PORT
|
||||
- _APP_FUNCTIONS_TIMEOUT
|
||||
- _APP_FUNCTIONS_CONTAINERS
|
||||
- _APP_FUNCTIONS_CPUS
|
||||
|
@ -101,6 +106,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_STATSD_HOST
|
||||
- _APP_STATSD_PORT
|
||||
|
||||
|
@ -118,6 +125,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -139,6 +148,8 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -160,6 +171,8 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -179,10 +192,13 @@ services:
|
|||
volumes:
|
||||
- appwrite-uploads:/storage/uploads:rw
|
||||
- appwrite-cache:/storage/cache:rw
|
||||
- appwrite-certificates:/storage/certificates:rw
|
||||
environment:
|
||||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -207,6 +223,9 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DOMAIN_TARGET
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -231,6 +250,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -259,6 +280,8 @@ services:
|
|||
- _APP_SYSTEM_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_SMTP_HOST
|
||||
- _APP_SMTP_PORT
|
||||
- _APP_SMTP_SECURE
|
||||
|
@ -278,6 +301,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_MAINTENANCE_INTERVAL
|
||||
- _APP_MAINTENANCE_RETENTION_EXECUTION
|
||||
- _APP_MAINTENANCE_RETENTION_ABUSE
|
||||
|
@ -297,6 +322,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
|
||||
mariadb:
|
||||
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
$protocol = $this->getParam('protocol', '');
|
||||
$domain = $this->getParam('domain', '');
|
||||
$endpoint = $this->getParam('endpoint', '');
|
||||
$platforms = $this->getParam('platforms', []);
|
||||
$version = $this->getParam('version', '0.0.0');
|
||||
$isDev = $this->getParam('isDev', false);
|
||||
|
@ -56,7 +57,7 @@ if(!empty($platforms)) {
|
|||
<?php if (!empty($canonical)): ?>
|
||||
<meta property="og:url" content="<?php echo $canonical; ?>" />
|
||||
<?php endif; ?>
|
||||
<meta property="og:image" content="<?php echo $protocol; ?>://<?php echo $domain; ?>/images/logo.png?v=<?php echo APP_CACHE_BUSTER; ?>" />
|
||||
<meta property="og:image" content="<?php echo $endpoint; ?>/images/logo.png?v=<?php echo APP_CACHE_BUSTER; ?>" />
|
||||
<script>
|
||||
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
|
@ -71,6 +72,7 @@ if(!empty($platforms)) {
|
|||
VERSION: '<?php echo $version; ?>',
|
||||
CACHEBUSTER: '<?php echo $version; ?>/<?php echo APP_CACHE_BUSTER; ?>',
|
||||
PROTOCOL: '<?php echo $protocol; ?>',
|
||||
ENDPOINT: '<?php echo $endpoint; ?>',
|
||||
DOMAIN: '<?php echo $domain; ?>',
|
||||
HOME: '<?php echo $this->escape($this->getParam('home')); ?>',
|
||||
SETUP: '<?php echo $this->escape($this->getParam('setup')); ?>',
|
||||
|
@ -142,4 +144,4 @@ if(!empty($platforms)) {
|
|||
|
||||
<!-- Version <?php echo $version; ?> -->
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -38,7 +38,7 @@ class DeletesV1
|
|||
switch (strval($type)) {
|
||||
case DELETE_TYPE_DOCUMENT:
|
||||
$document = $this->args['document'];
|
||||
$document = new Document($document);
|
||||
$document = new Document($document);
|
||||
switch (strval($document->getCollection())) {
|
||||
case Database::SYSTEM_COLLECTION_PROJECTS:
|
||||
$this->deleteProject($document);
|
||||
|
@ -69,6 +69,11 @@ class DeletesV1
|
|||
case DELETE_TYPE_ABUSE:
|
||||
$this->deleteAbuseLogs($this->args['timestamp']);
|
||||
break;
|
||||
|
||||
case DELETE_TYPE_CERTIFICATES:
|
||||
$document = new Document($this->args['document']);
|
||||
$this->deleteCertificates($document);
|
||||
break;
|
||||
|
||||
default:
|
||||
Console::error('No delete operation for type: '.$type);
|
||||
|
@ -305,6 +310,21 @@ class DeletesV1
|
|||
Console::info("Deleted {$count} document by group in " . ($executionEnd - $executionStart) . " seconds");
|
||||
}
|
||||
|
||||
protected function deleteCertificates(Document $document)
|
||||
{
|
||||
$domain = $document->getAttribute('domain');
|
||||
$directory = APP_STORAGE_CERTIFICATES . '/' . $domain;
|
||||
$checkTraversal = realpath($directory) === $directory;
|
||||
|
||||
if($domain && $checkTraversal && is_dir($directory)) {
|
||||
array_map('unlink', glob($directory.'/*.*'));
|
||||
rmdir($directory);
|
||||
Console::info("Deleted certificate files for {$domain}");
|
||||
} else {
|
||||
Console::info("No certificate files found for {$domain}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Database;
|
||||
*/
|
||||
|
|
|
@ -395,13 +395,15 @@ class FunctionsV1
|
|||
|
||||
$executionStart = \microtime(true);
|
||||
$executionTime = \time();
|
||||
|
||||
$cpus = App::getEnv('_APP_FUNCTIONS_CPUS', '');
|
||||
$memory = App::getEnv('_APP_FUNCTIONS_MEMORY', '');
|
||||
$swap = App::getEnv('_APP_FUNCTIONS_MEMORY_SWAP', '');
|
||||
$exitCode = Console::execute("docker run ".
|
||||
" -d".
|
||||
" --entrypoint=\"\"".
|
||||
" --cpus=".App::getEnv('_APP_FUNCTIONS_CPUS', '1').
|
||||
" --memory=".App::getEnv('_APP_FUNCTIONS_MEMORY', '256')."m".
|
||||
" --memory-swap=".App::getEnv('_APP_FUNCTIONS_MEMORY_SWAP', '256')."m".
|
||||
(empty($cpus) ? "" : (" --cpus=".$cpus)).
|
||||
(empty($memory) ? "" : (" --memory=".$memory."m")).
|
||||
(empty($swap) ? "" : (" --memory-swap=".$swap."m")).
|
||||
" --name={$container}".
|
||||
" --label appwrite-type=function".
|
||||
" --label appwrite-created={$executionTime}".
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" RESQUE_PHP='/usr/src/code/vendor/autoload.php' php /usr/src/code/vendor/bin/resque-scheduler
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
REDIS_BACKEND=$REDIS_BACKEND RESQUE_PHP='/usr/src/code/vendor/autoload.php' php /usr/src/code/vendor/bin/resque-scheduler
|
||||
|
|
2
bin/test
2
bin/test
|
@ -1,3 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
/usr/src/code/vendor/bin/phpunit --configuration /usr/src/code/phpunit.xml $@
|
||||
/usr/src/code/vendor/bin/phpunit --verbose --configuration /usr/src/code/phpunit.xml $@
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-audits' APP_INCLUDE='/usr/src/code/app/workers/audits.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-audits' APP_INCLUDE='/usr/src/code/app/workers/audits.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
9
bin/worker-certificates
Normal file → Executable file
9
bin/worker-certificates
Normal file → Executable file
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-certificates' APP_INCLUDE='/usr/src/code/app/workers/certificates.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-certificates' APP_INCLUDE='/usr/src/code/app/workers/certificates.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-deletes' APP_INCLUDE='/usr/src/code/app/workers/deletes.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-deletes' APP_INCLUDE='/usr/src/code/app/workers/deletes.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-functions' APP_INCLUDE='/usr/src/code/app/workers/functions.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-functions' APP_INCLUDE='/usr/src/code/app/workers/functions.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-mails' APP_INCLUDE='/usr/src/code/app/workers/mails.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-mails' APP_INCLUDE='/usr/src/code/app/workers/mails.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-tasks' APP_INCLUDE='/usr/src/code/app/workers/tasks.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-tasks' APP_INCLUDE='/usr/src/code/app/workers/tasks.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-usage' APP_INCLUDE='/usr/src/code/app/workers/usage.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-usage' APP_INCLUDE='/usr/src/code/app/workers/usage.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -1,3 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
QUEUE='v1-webhooks' APP_INCLUDE='/usr/src/code/app/workers/webhooks.php' REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}" php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
||||
if [ -z "$_APP_REDIS_USER" ] || [ -z "$_APP_REDIS_PASS" ]
|
||||
then
|
||||
REDIS_BACKEND="${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
else
|
||||
REDIS_BACKEND="redis://${_APP_REDIS_USER}:${_APP_REDIS_PASS}@${_APP_REDIS_HOST}:${_APP_REDIS_PORT}"
|
||||
fi
|
||||
|
||||
QUEUE='v1-webhooks' APP_INCLUDE='/usr/src/code/app/workers/webhooks.php' php /usr/src/code/vendor/bin/resque -dopcache.preload=opcache.preload=/usr/src/code/app/preload.php
|
|
@ -60,7 +60,7 @@
|
|||
},
|
||||
"require-dev": {
|
||||
"swoole/ide-helper": "4.6.2",
|
||||
"appwrite/sdk-generator": "0.4.5",
|
||||
"appwrite/sdk-generator": "0.5.5",
|
||||
"phpunit/phpunit": "9.4.2",
|
||||
"vimeo/psalm": "4.1.1"
|
||||
},
|
||||
|
|
240
composer.lock
generated
240
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "4eca4990b2e312fc36e94fb1e34219b5",
|
||||
"content-hash": "5893b378d1dcda91aedf77059f4b0efb",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/jwt",
|
||||
|
@ -349,6 +349,7 @@
|
|||
"issues": "https://github.com/domnikl/statsd-php/issues",
|
||||
"source": "https://github.com/domnikl/statsd-php/tree/master"
|
||||
},
|
||||
"abandoned": true,
|
||||
"time": "2020-01-03T14:24:58+00:00"
|
||||
},
|
||||
{
|
||||
|
@ -1805,21 +1806,21 @@
|
|||
},
|
||||
{
|
||||
"name": "utopia-php/swoole",
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/swoole.git",
|
||||
"reference": "bc9dd3e113e9b8cbbf54468524637f39b2deb861"
|
||||
"reference": "63168a82037f371516a199d75da101c8caa3edc1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/swoole/zipball/bc9dd3e113e9b8cbbf54468524637f39b2deb861",
|
||||
"reference": "bc9dd3e113e9b8cbbf54468524637f39b2deb861",
|
||||
"url": "https://api.github.com/repos/utopia-php/swoole/zipball/63168a82037f371516a199d75da101c8caa3edc1",
|
||||
"reference": "63168a82037f371516a199d75da101c8caa3edc1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-swoole": "*",
|
||||
"php": ">=7.3",
|
||||
"php": ">=7.4",
|
||||
"utopia-php/framework": "0.*.*"
|
||||
},
|
||||
"require-dev": {
|
||||
|
@ -1855,9 +1856,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/swoole/issues",
|
||||
"source": "https://github.com/utopia-php/swoole/tree/0.2.0"
|
||||
"source": "https://github.com/utopia-php/swoole/tree/0.2.1"
|
||||
},
|
||||
"time": "2020-10-29T12:42:38+00:00"
|
||||
"time": "2021-02-10T06:20:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/system",
|
||||
|
@ -2086,11 +2087,11 @@
|
|||
},
|
||||
{
|
||||
"name": "appwrite/sdk-generator",
|
||||
"version": "0.4.5",
|
||||
"version": "0.5.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/appwrite/sdk-generator",
|
||||
"reference": "9c04ed7ff34a723c3c226941b9f9a844738c595e"
|
||||
"reference": "08d6dc72f83ec99cfc0f7a50cb7fc0be0c029ac1"
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
|
@ -2120,7 +2121,7 @@
|
|||
}
|
||||
],
|
||||
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
||||
"time": "2021-01-28T08:03:13+00:00"
|
||||
"time": "2021-02-18T16:37:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/package-versions-deprecated",
|
||||
|
@ -3245,12 +3246,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "0bf76e406e6b1d08d8be732db3ec8e6cbe2f8cc2"
|
||||
"reference": "ad069801f3d0cdb7102e58afd5f9f32834ec7160"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0bf76e406e6b1d08d8be732db3ec8e6cbe2f8cc2",
|
||||
"reference": "0bf76e406e6b1d08d8be732db3ec8e6cbe2f8cc2",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ad069801f3d0cdb7102e58afd5f9f32834ec7160",
|
||||
"reference": "ad069801f3d0cdb7102e58afd5f9f32834ec7160",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3314,7 +3315,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-21T05:59:53+00:00"
|
||||
"time": "2021-02-08T09:55:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
|
@ -3322,12 +3323,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
|
||||
"reference": "7643948b9b254d2c1406437070c53489ca858632"
|
||||
"reference": "05fa32de35b15c94838d22482cc59d99860a706f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/7643948b9b254d2c1406437070c53489ca858632",
|
||||
"reference": "7643948b9b254d2c1406437070c53489ca858632",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/05fa32de35b15c94838d22482cc59d99860a706f",
|
||||
"reference": "05fa32de35b15c94838d22482cc59d99860a706f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3375,7 +3376,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:23+00:00"
|
||||
"time": "2021-02-14T06:52:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-invoker",
|
||||
|
@ -3383,12 +3384,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-invoker.git",
|
||||
"reference": "8ddb05c30eb42ee9342a711ff490436db0f42aad"
|
||||
"reference": "7bba8d62fc6140730c268d5ff7fbf9c3a54996a8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/8ddb05c30eb42ee9342a711ff490436db0f42aad",
|
||||
"reference": "8ddb05c30eb42ee9342a711ff490436db0f42aad",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7bba8d62fc6140730c268d5ff7fbf9c3a54996a8",
|
||||
"reference": "7bba8d62fc6140730c268d5ff7fbf9c3a54996a8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3439,7 +3440,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:31+00:00"
|
||||
"time": "2021-02-14T06:52:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-text-template",
|
||||
|
@ -3447,12 +3448,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-text-template.git",
|
||||
"reference": "eace5f89cab382a6908f404ca2ea757e644047ab"
|
||||
"reference": "bca9f27936ccd6d7450f16f1ee3f125b755b7905"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/eace5f89cab382a6908f404ca2ea757e644047ab",
|
||||
"reference": "eace5f89cab382a6908f404ca2ea757e644047ab",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/bca9f27936ccd6d7450f16f1ee3f125b755b7905",
|
||||
"reference": "bca9f27936ccd6d7450f16f1ee3f125b755b7905",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3499,7 +3500,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:07:05+00:00"
|
||||
"time": "2021-02-14T06:53:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-timer",
|
||||
|
@ -3507,12 +3508,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-timer.git",
|
||||
"reference": "c2c32bcece727700ce67b2c4fa5b5231c03d1232"
|
||||
"reference": "e3125d0dc516e7f7ab23d54ddefbce67627fd608"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/c2c32bcece727700ce67b2c4fa5b5231c03d1232",
|
||||
"reference": "c2c32bcece727700ce67b2c4fa5b5231c03d1232",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e3125d0dc516e7f7ab23d54ddefbce67627fd608",
|
||||
"reference": "e3125d0dc516e7f7ab23d54ddefbce67627fd608",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3559,7 +3560,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:40+00:00"
|
||||
"time": "2021-02-14T06:52:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
|
@ -3724,12 +3725,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/cli-parser.git",
|
||||
"reference": "852907f9ef27ea08ad4135614a9fbd2f70c91ed1"
|
||||
"reference": "5a6fc83d266e0fcbf890d4475bfbb713dbb4d202"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/852907f9ef27ea08ad4135614a9fbd2f70c91ed1",
|
||||
"reference": "852907f9ef27ea08ad4135614a9fbd2f70c91ed1",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/5a6fc83d266e0fcbf890d4475bfbb713dbb4d202",
|
||||
"reference": "5a6fc83d266e0fcbf890d4475bfbb713dbb4d202",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3773,7 +3774,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:07:32+00:00"
|
||||
"time": "2021-02-14T06:53:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/code-unit",
|
||||
|
@ -3837,12 +3838,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
|
||||
"reference": "bae9e6f9fc00aa95c1971a52f819b08494a394f0"
|
||||
"reference": "96fc758350a824cf96f9e7847ecdf9bb82c87083"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/bae9e6f9fc00aa95c1971a52f819b08494a394f0",
|
||||
"reference": "bae9e6f9fc00aa95c1971a52f819b08494a394f0",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/96fc758350a824cf96f9e7847ecdf9bb82c87083",
|
||||
"reference": "96fc758350a824cf96f9e7847ecdf9bb82c87083",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3885,7 +3886,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:15+00:00"
|
||||
"time": "2021-02-14T06:51:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/comparator",
|
||||
|
@ -3893,12 +3894,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/comparator.git",
|
||||
"reference": "d529bf5bc5746f6c59a1defc17c3725b5374c750"
|
||||
"reference": "3b943ec66244e5d0a5252708d1c9073ae6d3efc9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d529bf5bc5746f6c59a1defc17c3725b5374c750",
|
||||
"reference": "d529bf5bc5746f6c59a1defc17c3725b5374c750",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/3b943ec66244e5d0a5252708d1c9073ae6d3efc9",
|
||||
"reference": "3b943ec66244e5d0a5252708d1c9073ae6d3efc9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3960,20 +3961,20 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:24+00:00"
|
||||
"time": "2021-02-14T06:51:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/complexity",
|
||||
"version": "dev-master",
|
||||
"version": "2.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/complexity.git",
|
||||
"reference": "1e51f588b0bf9783d80e952339a1f057f530f3ac"
|
||||
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/1e51f588b0bf9783d80e952339a1f057f530f3ac",
|
||||
"reference": "1e51f588b0bf9783d80e952339a1f057f530f3ac",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
|
||||
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3983,7 +3984,6 @@
|
|||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.3"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
|
@ -4010,7 +4010,7 @@
|
|||
"homepage": "https://github.com/sebastianbergmann/complexity",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/complexity/issues",
|
||||
"source": "https://github.com/sebastianbergmann/complexity/tree/master"
|
||||
"source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4018,7 +4018,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:07:14+00:00"
|
||||
"time": "2020-10-26T15:52:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/diff",
|
||||
|
@ -4026,12 +4026,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/diff.git",
|
||||
"reference": "492912a4b41de6a0127ebcd2f766b7d7f10f574c"
|
||||
"reference": "1895a1a29e197f7d31099a320b2a3ae9e428b21d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/492912a4b41de6a0127ebcd2f766b7d7f10f574c",
|
||||
"reference": "492912a4b41de6a0127ebcd2f766b7d7f10f574c",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1895a1a29e197f7d31099a320b2a3ae9e428b21d",
|
||||
"reference": "1895a1a29e197f7d31099a320b2a3ae9e428b21d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4085,7 +4085,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:32+00:00"
|
||||
"time": "2021-02-14T06:51:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/environment",
|
||||
|
@ -4093,12 +4093,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||
"reference": "36ffd0fc651961e864d955e6fd71ef03c367abae"
|
||||
"reference": "7f8f2720df4d03d4368edadac24c3a7950b6cdc5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/36ffd0fc651961e864d955e6fd71ef03c367abae",
|
||||
"reference": "36ffd0fc651961e864d955e6fd71ef03c367abae",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/7f8f2720df4d03d4368edadac24c3a7950b6cdc5",
|
||||
"reference": "7f8f2720df4d03d4368edadac24c3a7950b6cdc5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4149,7 +4149,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:40+00:00"
|
||||
"time": "2021-02-14T06:51:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
|
@ -4157,12 +4157,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||
"reference": "61024af3555edd28c0e2df7ae6a72bb24b1c3f88"
|
||||
"reference": "c6819d6edff3496f28c29a9ed61c564a9fdae27b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/61024af3555edd28c0e2df7ae6a72bb24b1c3f88",
|
||||
"reference": "61024af3555edd28c0e2df7ae6a72bb24b1c3f88",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c6819d6edff3496f28c29a9ed61c564a9fdae27b",
|
||||
"reference": "c6819d6edff3496f28c29a9ed61c564a9fdae27b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4227,7 +4227,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:49+00:00"
|
||||
"time": "2021-02-14T06:52:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
|
@ -4235,12 +4235,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/global-state.git",
|
||||
"reference": "ebe2eda599117719755417db6552cf3e6cea68a3"
|
||||
"reference": "a912746c9e31610f52b8e6977107e745c758cfd8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ebe2eda599117719755417db6552cf3e6cea68a3",
|
||||
"reference": "ebe2eda599117719755417db6552cf3e6cea68a3",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a912746c9e31610f52b8e6977107e745c758cfd8",
|
||||
"reference": "a912746c9e31610f52b8e6977107e745c758cfd8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4292,20 +4292,20 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:05:57+00:00"
|
||||
"time": "2021-02-14T06:52:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/lines-of-code",
|
||||
"version": "dev-master",
|
||||
"version": "1.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
|
||||
"reference": "a58591ee219008ebc039a6ef1a1ad5ebd7aa5094"
|
||||
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/a58591ee219008ebc039a6ef1a1ad5ebd7aa5094",
|
||||
"reference": "a58591ee219008ebc039a6ef1a1ad5ebd7aa5094",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
|
||||
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4315,7 +4315,6 @@
|
|||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.3"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
|
@ -4342,7 +4341,7 @@
|
|||
"homepage": "https://github.com/sebastianbergmann/lines-of-code",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
|
||||
"source": "https://github.com/sebastianbergmann/lines-of-code/tree/master"
|
||||
"source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4350,7 +4349,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:07:23+00:00"
|
||||
"time": "2020-11-28T06:42:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/object-enumerator",
|
||||
|
@ -4358,12 +4357,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
|
||||
"reference": "c3392f76c657681a2fde9073a47d26190580acee"
|
||||
"reference": "79f258bf9b9f9f1aff7ec27fa3e0d5d7ef344088"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/c3392f76c657681a2fde9073a47d26190580acee",
|
||||
"reference": "c3392f76c657681a2fde9073a47d26190580acee",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/79f258bf9b9f9f1aff7ec27fa3e0d5d7ef344088",
|
||||
"reference": "79f258bf9b9f9f1aff7ec27fa3e0d5d7ef344088",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4408,7 +4407,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:06+00:00"
|
||||
"time": "2021-02-14T06:52:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/object-reflector",
|
||||
|
@ -4416,12 +4415,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/object-reflector.git",
|
||||
"reference": "0b1e3b35407041b8f28c2d8b9f3d792720c81c23"
|
||||
"reference": "232add5a51167e359e1dd03334ebffaddfb95795"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/0b1e3b35407041b8f28c2d8b9f3d792720c81c23",
|
||||
"reference": "0b1e3b35407041b8f28c2d8b9f3d792720c81c23",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/232add5a51167e359e1dd03334ebffaddfb95795",
|
||||
"reference": "232add5a51167e359e1dd03334ebffaddfb95795",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4464,7 +4463,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:15+00:00"
|
||||
"time": "2021-02-14T06:52:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/recursion-context",
|
||||
|
@ -4472,12 +4471,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/recursion-context.git",
|
||||
"reference": "5df92f91b2cc5f733bb1d2df3eb81013a2bf69c6"
|
||||
"reference": "d6cde15be46e8e5cc8671ceb41b63b69dfd7bd5a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5df92f91b2cc5f733bb1d2df3eb81013a2bf69c6",
|
||||
"reference": "5df92f91b2cc5f733bb1d2df3eb81013a2bf69c6",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/d6cde15be46e8e5cc8671ceb41b63b69dfd7bd5a",
|
||||
"reference": "d6cde15be46e8e5cc8671ceb41b63b69dfd7bd5a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4528,7 +4527,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:48+00:00"
|
||||
"time": "2021-02-14T06:52:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/resource-operations",
|
||||
|
@ -4592,12 +4591,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/type.git",
|
||||
"reference": "6751662dde805fb5e46e05d3133a89e056796404"
|
||||
"reference": "8abc9c1947c9f928da999be28778a0ba48cdf5b4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/6751662dde805fb5e46e05d3133a89e056796404",
|
||||
"reference": "6751662dde805fb5e46e05d3133a89e056796404",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/8abc9c1947c9f928da999be28778a0ba48cdf5b4",
|
||||
"reference": "8abc9c1947c9f928da999be28778a0ba48cdf5b4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4641,11 +4640,11 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-31T06:06:56+00:00"
|
||||
"time": "2021-02-14T06:53:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/version",
|
||||
"version": "dev-master",
|
||||
"version": "3.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/version.git",
|
||||
|
@ -4660,7 +4659,6 @@
|
|||
"require": {
|
||||
"php": ">=7.3"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
|
@ -4741,12 +4739,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "56d4c04ca6069c93857c7335a626dbe747fa82d4"
|
||||
"reference": "2a6f75224a537ee506e9fa1e6fc4200ad411ffd9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/56d4c04ca6069c93857c7335a626dbe747fa82d4",
|
||||
"reference": "56d4c04ca6069c93857c7335a626dbe747fa82d4",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/2a6f75224a537ee506e9fa1e6fc4200ad411ffd9",
|
||||
"reference": "2a6f75224a537ee506e9fa1e6fc4200ad411ffd9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4831,7 +4829,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-28T22:09:26+00:00"
|
||||
"time": "2021-02-17T15:27:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
|
@ -4895,7 +4893,7 @@
|
|||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4919,12 +4917,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
||||
"reference": "267a9adeb8ecb8071040a740930e077cdfb987af"
|
||||
"reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af",
|
||||
"reference": "267a9adeb8ecb8071040a740930e077cdfb987af",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
|
||||
"reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4977,7 +4975,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4993,7 +4991,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
"time": "2021-01-22T09:19:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
|
@ -5001,12 +4999,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "6e971c891537eb617a00bb07a43d182a6915faba"
|
||||
"reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba",
|
||||
"reference": "6e971c891537eb617a00bb07a43d182a6915faba",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
|
||||
"reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5062,7 +5060,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5078,7 +5076,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-07T17:09:11+00:00"
|
||||
"time": "2021-01-22T09:19:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
|
@ -5086,12 +5084,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
|
||||
"reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
|
||||
"reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5143,7 +5141,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5159,7 +5157,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
"time": "2021-01-22T09:19:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php73",
|
||||
|
@ -5223,7 +5221,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5307,7 +5305,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5411,12 +5409,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "13c9099cdb470223b5863f7d11d17554b2dc6404"
|
||||
"reference": "6d830fae00e2bb336074eae141bb00db36cd3551"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/13c9099cdb470223b5863f7d11d17554b2dc6404",
|
||||
"reference": "13c9099cdb470223b5863f7d11d17554b2dc6404",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/6d830fae00e2bb336074eae141bb00db36cd3551",
|
||||
"reference": "6d830fae00e2bb336074eae141bb00db36cd3551",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5487,7 +5485,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-01-26T09:33:05+00:00"
|
||||
"time": "2021-02-17T15:27:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
|
@ -5545,12 +5543,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "5a60e72afa8511b63217d27bef3f4b7f074e20e1"
|
||||
"reference": "429f90a02d3bd4a06787ac9bc48c56c4320b58a0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/5a60e72afa8511b63217d27bef3f4b7f074e20e1",
|
||||
"reference": "5a60e72afa8511b63217d27bef3f4b7f074e20e1",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/429f90a02d3bd4a06787ac9bc48c56c4320b58a0",
|
||||
"reference": "429f90a02d3bd4a06787ac9bc48c56c4320b58a0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5616,7 +5614,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-02-02T15:25:09+00:00"
|
||||
"time": "2021-02-08T09:50:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vimeo/psalm",
|
||||
|
|
|
@ -86,6 +86,8 @@ services:
|
|||
- _APP_DOMAIN_TARGET
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -127,6 +129,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_STATSD_HOST
|
||||
- _APP_STATSD_PORT
|
||||
|
||||
|
@ -147,6 +151,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -172,6 +178,8 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -196,6 +204,8 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -213,6 +223,7 @@ services:
|
|||
- appwrite-uploads:/storage/uploads:rw
|
||||
- appwrite-cache:/storage/cache:rw
|
||||
- appwrite-functions:/storage/functions:rw
|
||||
- appwrite-certificates:/storage/certificates:rw
|
||||
- ./app:/usr/src/code/app
|
||||
- ./src:/usr/src/code/src
|
||||
depends_on:
|
||||
|
@ -222,6 +233,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -248,6 +261,8 @@ services:
|
|||
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -275,6 +290,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_DB_HOST
|
||||
- _APP_DB_PORT
|
||||
- _APP_DB_SCHEMA
|
||||
|
@ -309,6 +326,8 @@ services:
|
|||
- _APP_SYSTEM_EMAIL_ADDRESS
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_SMTP_HOST
|
||||
- _APP_SMTP_PORT
|
||||
- _APP_SMTP_SECURE
|
||||
|
@ -331,6 +350,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
- _APP_MAINTENANCE_INTERVAL
|
||||
- _APP_MAINTENANCE_RETENTION_EXECUTION
|
||||
- _APP_MAINTENANCE_RETENTION_ABUSE
|
||||
|
@ -352,6 +373,8 @@ services:
|
|||
- _APP_ENV
|
||||
- _APP_REDIS_HOST
|
||||
- _APP_REDIS_PORT
|
||||
- _APP_REDIS_USER
|
||||
- _APP_REDIS_PASS
|
||||
|
||||
mariadb:
|
||||
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getBrowser --code="aa" --width="0" --height="0" --quality="0"
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getCreditCard --code="amex" --width="0" --height="0" --quality="0"
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getFavicon --url="https://example.com"
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getFlag --code="af" --width="0" --height="0" --quality="0"
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getImage --url="https://example.com" --width="0" --height="0"
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getInitials --name="[NAME]" --width="0" --height="0" --color="" --background=""
|
|
@ -0,0 +1 @@
|
|||
appwrite avatars getQR --text="[TEXT]" --size="0" --margin="0" --download=""
|
|
@ -0,0 +1 @@
|
|||
appwrite database createCollection --name="[NAME]" "--read[]=" "--write[]=" "--rules[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite database createDocument --collectionId="[COLLECTION_ID]" --data="{}" "--read[]=" "--write[]=" --parentDocument="[PARENT_DOCUMENT]" --parentProperty="" --parentPropertyType="assign"
|
|
@ -0,0 +1 @@
|
|||
appwrite database deleteCollection --collectionId="[COLLECTION_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite database deleteDocument --collectionId="[COLLECTION_ID]" --documentId="[DOCUMENT_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite database getCollection --collectionId="[COLLECTION_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite database getDocument --collectionId="[COLLECTION_ID]" --documentId="[DOCUMENT_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite database listCollections --search="[SEARCH]" --limit="0" --offset="0" --orderType="ASC"
|
|
@ -0,0 +1 @@
|
|||
appwrite database listDocuments --collectionId="[COLLECTION_ID]" "--filters[]=" --offset="0" --limit="0" --orderField="[ORDER_FIELD]" --orderType="DESC" --orderCast="int" --search="[SEARCH]"
|
|
@ -0,0 +1 @@
|
|||
appwrite database updateCollection --collectionId="[COLLECTION_ID]" --name="[NAME]" "--read[]=" "--write[]=" "--rules[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite database updateDocument --collectionId="[COLLECTION_ID]" --documentId="[DOCUMENT_ID]" --data="{}" "--read[]=" "--write[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite health getAntiVirus
|
|
@ -0,0 +1 @@
|
|||
appwrite health getCache
|
|
@ -0,0 +1 @@
|
|||
appwrite health getDB
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueCertificates
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueFunctions
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueLogs
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueTasks
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueUsage
|
|
@ -0,0 +1 @@
|
|||
appwrite health getQueueWebhooks
|
|
@ -0,0 +1 @@
|
|||
appwrite health getStorageLocal
|
|
@ -0,0 +1 @@
|
|||
appwrite health getTime
|
1
docs/examples/0.6.2/server-cli/examples/health/get.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/health/get.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite health get
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getContinents
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getCountriesEU
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getCountriesPhones
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getCountries
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getCurrencies
|
|
@ -0,0 +1 @@
|
|||
appwrite locale getLanguages
|
1
docs/examples/0.6.2/server-cli/examples/locale/get.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/locale/get.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite locale get
|
|
@ -0,0 +1 @@
|
|||
appwrite storage createFile --file="" "--read[]=" "--write[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite storage deleteFile --fileId="[FILE_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage getFileDownload --fileId="[FILE_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage getFilePreview --fileId="[FILE_ID]" --width="0" --height="0" --quality="0" --background="" --output="jpg"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage getFileView --fileId="[FILE_ID]" --as="pdf"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage getFile --fileId="[FILE_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage listFiles --search="[SEARCH]" --limit="0" --offset="0" --orderType="ASC"
|
|
@ -0,0 +1 @@
|
|||
appwrite storage updateFile --fileId="[FILE_ID]" "--read[]=" "--write[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite teams createMembership --teamId="[TEAM_ID]" --email="email@example.com" "--roles[]=" --url="https://example.com" --name="[NAME]"
|
1
docs/examples/0.6.2/server-cli/examples/teams/create.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/teams/create.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite teams create --name="[NAME]" "--roles[]="
|
|
@ -0,0 +1 @@
|
|||
appwrite teams deleteMembership --teamId="[TEAM_ID]" --inviteId="[INVITE_ID]"
|
1
docs/examples/0.6.2/server-cli/examples/teams/delete.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/teams/delete.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite teams delete --teamId="[TEAM_ID]"
|
|
@ -0,0 +1 @@
|
|||
appwrite teams getMemberships --teamId="[TEAM_ID]" --search="[SEARCH]" --limit="0" --offset="0" --orderType="ASC"
|
1
docs/examples/0.6.2/server-cli/examples/teams/get.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/teams/get.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite teams get --teamId="[TEAM_ID]"
|
1
docs/examples/0.6.2/server-cli/examples/teams/list.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/teams/list.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite teams list --search="[SEARCH]" --limit="0" --offset="0" --orderType="ASC"
|
1
docs/examples/0.6.2/server-cli/examples/teams/update.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/teams/update.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite teams update --teamId="[TEAM_ID]" --name="[NAME]"
|
1
docs/examples/0.6.2/server-cli/examples/users/create.md
Normal file
1
docs/examples/0.6.2/server-cli/examples/users/create.md
Normal file
|
@ -0,0 +1 @@
|
|||
appwrite users create --email="email@example.com" --password="password" --name="[NAME]"
|
|
@ -0,0 +1 @@
|
|||
appwrite users deleteSession --userId="[USER_ID]" --sessionId="[SESSION_ID]"
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue