Merge branch '0.7.x' into feat-redis-connection-password

This commit is contained in:
Damodar Lohani
2021-02-01 16:37:56 +05:45
23 changed files with 103 additions and 89 deletions
+2
View File
@@ -37,6 +37,8 @@
- Added new environment variables for ClamAV hostname and port ([#780](https://github.com/appwrite/appwrite/pull/780))
- New OAuth adapter for Box.com (@armino-dev - [#420](https://github.com/appwrite/appwrite/issues/410))
- 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
- Disabled rate-limits on server side integrations
- Refactored migration script
+3 -3
View File
@@ -53,7 +53,7 @@ docker run -it --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
--entrypoint="install" \
appwrite/appwrite:0.7.0 --version 0.7.0
appwrite/appwrite:0.7.0
```
### Windows
@@ -65,7 +65,7 @@ docker run -it --rm ^
--volume //var/run/docker.sock:/var/run/docker.sock ^
--volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^
--entrypoint="install" ^
appwrite/appwrite:0.7.0 --version 0.7.0
appwrite/appwrite:0.7.0
```
#### PowerShell
@@ -75,7 +75,7 @@ docker run -it --rm ,
--volume /var/run/docker.sock:/var/run/docker.sock ,
--volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ,
--entrypoint="install" ,
appwrite/appwrite:0.7.0 --version 0.7.0
appwrite/appwrite:0.7.0
```
Once the Docker installation completes, go to http://localhost to access the Appwrite console from your browser. Please note that on non-linux native hosts, the server might take a few minutes to start after installation completes.
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
+2 -2
View File
@@ -181,7 +181,7 @@ return [
],
[
'name' => '_APP_DB_USER',
'description' => 'MariaDB server user name. Default value is: \'root\'.',
'description' => 'MariaDB server user name. Default value is: \'user\'.',
'introduction' => '',
'default' => 'user',
'required' => false,
@@ -357,7 +357,7 @@ return [
'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.',
'introduction' => '0.7.0',
'default' => '128',
'default' => '256',
'required' => false,
'question' => '',
],
+4 -4
View File
@@ -429,19 +429,19 @@ App::post('/v1/functions/:functionId/tags')
->label('sdk.namespace', 'functions')
->label('sdk.method', 'createTag')
->label('sdk.description', '/docs/references/functions/create-tag.md')
->label('sdk.packaging', true)
->label('sdk.request.type', 'multipart/form-data')
->label('sdk.response.code', Response::STATUS_CODE_CREATED)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_TAG)
->param('functionId', '', new UID(), 'Function unique ID.')
->param('command', '', new Text('1028'), 'Code execution command.')
->param('code', [], new File(), 'Gzip file containing your code.', false)
// ->param('code', '', new Text(128), 'Code package. Use the '.APP_NAME.' code packager to create a deployable package file.')
->param('file', null, new File(), 'Gzip file with your code package.', false)
->inject('request')
->inject('response')
->inject('projectDB')
->inject('usage')
->action(function ($functionId, $command, $code, $request, $response, $projectDB, $usage) {
->action(function ($functionId, $command, $file, $request, $response, $projectDB, $usage) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
@@ -453,7 +453,7 @@ App::post('/v1/functions/:functionId/tags')
throw new Exception('Function not found', 404);
}
$file = $request->getFiles('code');
$file = $request->getFiles('file');
$device = Storage::getDevice('functions');
$fileExt = new FileExt([FileExt::TYPE_GZIP]);
$fileSize = new FileSize(App::getEnv('_APP_STORAGE_LIMIT', 0));
+14 -9
View File
@@ -6,14 +6,12 @@ use Appwrite\Docker\Compose;
use Appwrite\Docker\Env;
use Utopia\CLI\Console;
use Utopia\Config\Config;
use Utopia\Validator\Mock;
use Utopia\View;
$cli
->task('install')
->desc('Install Appwrite')
->param('version', APP_VERSION_STABLE, new Mock(), 'Appwrite version', true)
->action(function ($version) {
->action(function () {
/**
* 1. Start - DONE
* 2. Check for older setup and get older version - DONE
@@ -48,7 +46,7 @@ $cli
if (null !== $path && !\file_exists(\dirname($path))) {
if (!@\mkdir(\dirname($path), 0755, true)) {
Console::error('Can\'t create directory '.\dirname($path));
exit(1);
Console::exit(1);
}
}
@@ -130,7 +128,7 @@ $cli
$templateForCompose
->setParam('httpPort', $httpPort)
->setParam('httpsPort', $httpsPort)
->setParam('version', $version)
->setParam('version', APP_VERSION_STABLE)
;
$templateForEnv
@@ -139,25 +137,32 @@ $cli
if(!file_put_contents($path.'/docker-compose.yml', $templateForCompose->render(false))) {
Console::error('Failed to save Docker Compose file');
exit(1);
Console::exit(1);
}
if(!file_put_contents($path.'/.env', $templateForEnv->render(false))) {
Console::error('Failed to save environment variables file');
exit(1);
Console::exit(1);
}
$env = '';
$stdout = '';
$stderr = '';
foreach ($input as $key => $value) {
if($value) {
$env .= $key.'='.$value.' ';
}
}
Console::log("Running \"docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes\"");
$exit = Console::execute("docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes", '', $stdout, $stderr);
$exit = Console::execute("${env} docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes", '', $stdout, $stderr);
if ($exit !== 0) {
Console::error("Failed to install Appwrite dockers");
Console::error($stderr);
exit($exit);
Console::exit($exit);
} else {
Console::success("Appwrite installed successfully");
}
+5 -1
View File
@@ -100,6 +100,8 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
$config = new Node();
$config->setNPMPackage('node-appwrite');
$config->setBowerPackage('appwrite');
$warning = $warning."\n\n > This is the Node.js SDK for integrating with Appwrite from your Node.js server-side code.
If you're looking to integrate from the browser, you should check [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web)";
break;
case 'deno':
$config = new Deno();
@@ -124,6 +126,8 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
case 'dart':
$config = new Dart();
$config->setPackageName('dart_appwrite');
$warning = $warning."\n\n > This is the Dart SDK for integrating with Appwrite from your Dart server-side code.
If you're looking for the Flutter SDK you should check [appwrite/sdk-for-flutter](https://github.com/appwrite/sdk-for-flutter)";
break;
case 'go':
$config = new Go();
@@ -215,5 +219,5 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
}
}
exit();
Console::exit();
});
+1 -4
View File
@@ -284,10 +284,9 @@ services:
- _APP_SMTP_PASSWORD
appwrite-maintenance:
image: appwrite/appwrite:<?php echo $version."\n"; ?>
entrypoint: maintenance
container_name: appwrite-maintenance
build:
context: .
restart: unless-stopped
networks:
- appwrite
@@ -329,8 +328,6 @@ services:
- appwrite
volumes:
- appwrite-mariadb:/var/lib/mysql:rw
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=rootsecretpassword
- MYSQL_DATABASE=${_APP_DB_SCHEMA}
+1 -1
View File
@@ -59,7 +59,7 @@
},
"require-dev": {
"swoole/ide-helper": "4.5.5",
"appwrite/sdk-generator": "0.4.4",
"appwrite/sdk-generator": "0.4.5",
"phpunit/phpunit": "9.4.2",
"vimeo/psalm": "4.1.1"
},
Generated
+12 -13
View File
@@ -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": "f83cd9bbcc8c8361622aba6313f81e28",
"content-hash": "be6adbd12397d629ee420d11eed43b1f",
"packages": [
{
"name": "adhocore/jwt",
@@ -2030,11 +2030,11 @@
},
{
"name": "appwrite/sdk-generator",
"version": "0.4.4",
"version": "0.4.5",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator",
"reference": "ebb51e404a4e5b89f74428296b81ea347362dd33"
"reference": "9c04ed7ff34a723c3c226941b9f9a844738c595e"
},
"require": {
"ext-curl": "*",
@@ -2064,7 +2064,7 @@
}
],
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"time": "2021-01-11T09:34:56+00:00"
"time": "2021-01-28T08:03:13+00:00"
},
{
"name": "composer/package-versions-deprecated",
@@ -3837,12 +3837,12 @@
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "66776aea976481264dbaeef1b80c72845711473c"
"reference": "5a39e6c8994048403e326298f0b1bda7eb1ea127"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/66776aea976481264dbaeef1b80c72845711473c",
"reference": "66776aea976481264dbaeef1b80c72845711473c",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5a39e6c8994048403e326298f0b1bda7eb1ea127",
"reference": "5a39e6c8994048403e326298f0b1bda7eb1ea127",
"shasum": ""
},
"require": {
@@ -3904,7 +3904,7 @@
"type": "github"
}
],
"time": "2021-01-27T12:55:14+00:00"
"time": "2021-01-27T14:14:42+00:00"
},
{
"name": "sebastian/complexity",
@@ -5275,12 +5275,12 @@
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "cea83947622b432b60b809d14c7b42df9f0f5823"
"reference": "bf99754c6182a126968b1c2709d18548489f27eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/cea83947622b432b60b809d14c7b42df9f0f5823",
"reference": "cea83947622b432b60b809d14c7b42df9f0f5823",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/bf99754c6182a126968b1c2709d18548489f27eb",
"reference": "bf99754c6182a126968b1c2709d18548489f27eb",
"shasum": ""
},
"require": {
@@ -5293,7 +5293,6 @@
"default-branch": true,
"type": "library",
"extra": {
"branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
@@ -5348,7 +5347,7 @@
"type": "tidelift"
}
],
"time": "2021-01-11T09:51:46+00:00"
"time": "2021-01-27T16:27:53+00:00"
},
{
"name": "symfony/string",
+1 -1
View File
@@ -532,5 +532,5 @@ volumes:
appwrite-certificates:
appwrite-functions:
appwrite-influxdb:
appwrite-chronograf:
appwrite-config:
# appwrite-chronograf:
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -370,7 +370,7 @@ code.innerHTML=value;Prism.highlightElement(code);div.scrollTop=0;};element.addE
function syncA(){element.value=picker.value;update();}
function syncB(){picker.value=element.value;}
element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-copy",controller:function(element,alerts,document,window){var button=window.document.createElement("i");button.type="button";button.className="icon-docs note copy";button.style.cursor="pointer";element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){let disabled=element.disabled;element.disabled=false;element.focus();element.select();document.execCommand("Copy");if(document.selection){document.selection.empty();}else if(window.getSelection){window.getSelection().removeAllRanges();}
element.disabled=disabled;element.blur();alerts.add({text:"Copied to clipboard",class:""});};button.addEventListener("click",copy);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-document",controller:function(element,container,search){var formsDocument=(element.dataset["formsDocument"]||'');var searchButton=(element.dataset["search"]||0);let path=container.scope(searchButton);element.addEventListener('click',function(){search.selected=element.value;search.path=path;document.dispatchEvent(new CustomEvent(formsDocument,{bubbles:false,cancelable:true}));});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-document-preview",controller:function(element,container,search){element.addEventListener('change',function(){console.log(element.value);});}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-filter",controller:function(document,container,expression,element,form,di){let name=element.dataset["formsFilter"]||"";let events=element.dataset["event"]||"";let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===""){continue;}
element.disabled=disabled;element.blur();alerts.add({text:"Copied to clipboard",class:""},3000);};button.addEventListener("click",copy);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-document",controller:function(element,container,search){var formsDocument=(element.dataset["formsDocument"]||'');var searchButton=(element.dataset["search"]||0);let path=container.scope(searchButton);element.addEventListener('click',function(){search.selected=element.value;search.path=path;document.dispatchEvent(new CustomEvent(formsDocument,{bubbles:false,cancelable:true}));});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-document-preview",controller:function(element,container,search){element.addEventListener('change',function(){console.log(element.value);});}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-filter",controller:function(document,container,expression,element,form,di){let name=element.dataset["formsFilter"]||"";let events=element.dataset["event"]||"";let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===""){continue;}
str.push(v!==null&&typeof v==="object"?serialize(v,k):encodeURIComponent(k)+"="+encodeURIComponent(v));}}
return str.join("&");};let parse=function(filter){if(filter===""){return null;}
let operatorsMap=["!=",">=","<=","=",">","<"];let operator=null;for(let key=0;key<operatorsMap.length;key++){if(filter.indexOf(operatorsMap[key])>-1){operator=operatorsMap[key];}}
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -90,7 +90,8 @@ abstract class Migration
if (empty($new->getId())) {
throw new Exception('Missing ID');
}
if (!array_diff($new->getArrayCopy(), $old)) {
if (!array_diff_assoc($new->getArrayCopy(), $old)) {
return;
}
+1 -1
View File
@@ -26,7 +26,7 @@ class V06 extends Migration
{
switch ($document->getAttribute('$collection')) {
case Database::SYSTEM_COLLECTION_USERS:
if ($document->getAttribute('password-update', null)) {
if ($document->isSet('password-update')) {
$document
->setAttribute('passwordUpdate', $document->getAttribute('password-update', $document->getAttribute('passwordUpdate', '')))
->removeAttribute('password-update');
@@ -118,6 +118,7 @@ class OpenAPI3 extends Format
'rate-key' => $route->getLabel('abuse-key', 'url:{url},ip:{ip}'),
'scope' => $route->getLabel('scope', ''),
'platforms' => $route->getLabel('sdk.platform', []),
'packaging' => $route->getLabel('sdk.packaging', false),
],
];
@@ -369,7 +370,8 @@ class OpenAPI3 extends Format
'description' => $rule['description'] ?? '',
'items' => [
'type' => $type,
]
],
'x-example' => $rule['example'] ?? null,
];
if($format) {
@@ -116,6 +116,7 @@ class Swagger2 extends Format
'rate-key' => $route->getLabel('abuse-key', 'url:{url},ip:{ip}'),
'scope' => $route->getLabel('scope', ''),
'platforms' => $route->getLabel('sdk.platform', []),
'packaging' => $route->getLabel('sdk.packaging', false),
],
];
@@ -367,7 +368,8 @@ class Swagger2 extends Format
'description' => $rule['description'] ?? '',
'items' => [
'type' => $type,
]
],
'x-example' => $rule['example'] ?? null,
];
if($format) {
@@ -76,7 +76,7 @@ class FunctionsCustomClientTest extends Scope
'x-appwrite-key' => $this->getProject()['apiKey'],
], [
'command' => 'php function.php',
'code' => new CURLFile(realpath(__DIR__ . '/../../../resources/functions/php.tar.gz'), 'application/x-gzip', 'php-fx.tar.gz'),
'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/functions/php.tar.gz'), 'application/x-gzip', 'php-fx.tar.gz'),
]);
$tagId = $tag['body']['$id'] ?? '';
@@ -184,7 +184,7 @@ class FunctionsCustomServerTest extends Scope
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'command' => 'php function.php',
'code' => new CURLFile(realpath(__DIR__ . '/../../../resources/functions/php.tar.gz'), 'application/x-gzip', 'php-fx.tar.gz'),
'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/functions/php.tar.gz'), 'application/x-gzip', 'php-fx.tar.gz'),
]);
$tagId = $tag['body']['$id'] ?? '';
@@ -467,7 +467,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'PHP',
'version' => '7.4',
'name' => 'php-7.4',
'code' => $functions.'/php.tar.gz',
'file' => $functions.'/php.tar.gz',
'command' => 'php index.php',
'timeout' => 15,
],
@@ -475,7 +475,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'PHP',
'version' => '8.0',
'name' => 'php-8.0',
'code' => $functions.'/php.tar.gz',
'file' => $functions.'/php.tar.gz',
'command' => 'php index.php',
'timeout' => 15,
],
@@ -483,7 +483,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Python',
'version' => '3.8',
'name' => 'python-3.8',
'code' => $functions.'/python.tar.gz',
'file' => $functions.'/python.tar.gz',
'command' => 'python main.py',
'timeout' => 15,
],
@@ -491,7 +491,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Node.js',
'version' => '14.5',
'name' => 'node-14.5',
'code' => $functions.'/node.tar.gz',
'file' => $functions.'/node.tar.gz',
'command' => 'node index.js',
'timeout' => 15,
],
@@ -499,7 +499,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Node.js',
'version' => '15.5',
'name' => 'node-15.5',
'code' => $functions.'/node.tar.gz',
'file' => $functions.'/node.tar.gz',
'command' => 'node index.js',
'timeout' => 15,
],
@@ -507,7 +507,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Ruby',
'version' => '2.7',
'name' => 'ruby-2.7',
'code' => $functions.'/ruby.tar.gz',
'file' => $functions.'/ruby.tar.gz',
'command' => 'ruby app.rb',
'timeout' => 15,
],
@@ -515,7 +515,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Ruby',
'version' => '3.0',
'name' => 'ruby-3.0',
'code' => $functions.'/ruby.tar.gz',
'file' => $functions.'/ruby.tar.gz',
'command' => 'ruby app.rb',
'timeout' => 15,
],
@@ -523,7 +523,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Deno',
'version' => '1.5',
'name' => 'deno-1.5',
'code' => $functions.'/deno.tar.gz',
'file' => $functions.'/deno.tar.gz',
'command' => 'deno run --allow-env index.ts',
'timeout' => 15,
],
@@ -531,7 +531,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Deno',
'version' => '1.6',
'name' => 'deno-1.6',
'code' => $functions.'/deno.tar.gz',
'file' => $functions.'/deno.tar.gz',
'command' => 'deno run --allow-env index.ts',
'timeout' => 15,
],
@@ -539,7 +539,7 @@ class FunctionsCustomServerTest extends Scope
'language' => 'Dart',
'version' => '2.10',
'name' => 'dart-2.10',
'code' => $functions.'/dart.tar.gz',
'file' => $functions.'/dart.tar.gz',
'command' => 'dart main.dart',
'timeout' => 15,
],
@@ -547,7 +547,7 @@ class FunctionsCustomServerTest extends Scope
'language' => '.NET',
'version' => '3.1',
'name' => 'dotnet-3.1',
'code' => $functions.'/dotnet-3.1.tar.gz',
'file' => $functions.'/dotnet-3.1.tar.gz',
'command' => 'dotnet dotnet.dll',
'timeout' => 15,
],
@@ -555,7 +555,7 @@ class FunctionsCustomServerTest extends Scope
'language' => '.NET',
'version' => '5.0',
'name' => 'dotnet-5.0',
'code' => $functions.'/dotnet-5.0.tar.gz',
'file' => $functions.'/dotnet-5.0.tar.gz',
'command' => 'dotnet dotnet.dll',
'timeout' => 15,
],
@@ -586,7 +586,7 @@ class FunctionsCustomServerTest extends Scope
$language = $env['language'] ?? '';
$version = $env['version'] ?? '';
$name = $env['name'] ?? '';
$code = $env['code'] ?? '';
$code = $env['file'] ?? '';
$command = $env['command'] ?? '';
$timeout = $env['timeout'] ?? 15;
@@ -618,7 +618,7 @@ class FunctionsCustomServerTest extends Scope
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'command' => $command,
'code' => new CURLFile($code, 'application/x-gzip', basename($code)),
'file' => new CURLFile($code, 'application/x-gzip', basename($code)),
]);
$tagId = $tag['body']['$id'] ?? '';
@@ -716,7 +716,7 @@ class FunctionsCustomServerTest extends Scope
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'command' => $command,
'code' => new CURLFile($code, 'application/x-gzip', basename($code)),
'file' => new CURLFile($code, 'application/x-gzip', basename($code)),
]);
$tagId = $tag['body']['$id'] ?? '';