1
0
Fork 0
mirror of synced 2024-06-23 08:40:58 +12:00

Merge branch 'dev' into fix-952-patch-user-prefs-event

This commit is contained in:
kodumbeats 2021-03-12 09:34:19 -05:00
commit 1b0acc8ab7
82 changed files with 337 additions and 213 deletions

View file

@ -2,11 +2,11 @@
- Anonymous login
# Version 0.7.1 (Not Released Yet)
# Version 0.7.1
## Features
- Better error logs on appwrite cretificates worker
- Better error logs on appwrite certificates worker
- Added option for Redis authentication
- Force adding a security email on setup
- SMTP is now disabled by default, no dummy SMTP is included in setup
@ -27,6 +27,8 @@
## Bug Fixes
- Updated missing storage env vars
- Fixed a bug, that Response format header was not added in the access-control-allow-header list.
- Fixed a bug where countryName is unknown on sessions (#933)
## Security

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
appwrite/appwrite:0.7.1
```
### 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
appwrite/appwrite:0.7.1
```
#### 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
appwrite/appwrite:0.7.1
```
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.

View file

@ -32,7 +32,7 @@ return [
[
'key' => 'flutter',
'name' => 'Flutter',
'version' => '0.3.0',
'version' => '0.4.0-dev.2',
'url' => 'https://github.com/appwrite/sdk-for-flutter',
'package' => 'https://pub.dev/packages/appwrite',
'enabled' => true,
@ -165,7 +165,7 @@ return [
[
'key' => 'deno',
'name' => 'Deno',
'version' => '0.1.0',
'version' => '0.1.1',
'url' => 'https://github.com/appwrite/sdk-for-deno',
'package' => 'https://deno.land/x/appwrite',
'enabled' => true,
@ -199,7 +199,7 @@ return [
[
'key' => 'python',
'name' => 'Python',
'version' => '0.1.0',
'version' => '0.1.1',
'url' => 'https://github.com/appwrite/sdk-for-python',
'package' => 'https://pypi.org/project/appwrite/',
'enabled' => true,
@ -216,7 +216,7 @@ return [
[
'key' => 'ruby',
'name' => 'Ruby',
'version' => '2.0.0',
'version' => '2.0.2',
'url' => 'https://github.com/appwrite/sdk-for-ruby',
'package' => 'https://rubygems.org/gems/appwrite',
'enabled' => true,
@ -284,7 +284,7 @@ return [
[
'key' => 'dart',
'name' => 'Dart',
'version' => '0.2.0',
'version' => '0.3.1',
'url' => 'https://github.com/appwrite/sdk-for-dart',
'package' => 'https://pub.dev/packages/dart_appwrite',
'enabled' => true,
@ -301,7 +301,7 @@ return [
[
'key' => 'cli',
'name' => 'Command Line',
'version' => '0.5.0',
'version' => '0.6.0',
'url' => 'https://github.com/appwrite/sdk-for-cli',
'package' => 'https://github.com/appwrite/sdk-for-cli',
'enabled' => true,

View file

@ -107,8 +107,8 @@ return [
'name' => '_APP_SYSTEM_SECURITY_EMAIL_ADDRESS',
'description' => 'This is the email address used to issue SSL certificates for custom domains or the user agent in your webhooks payload.',
'introduction' => '0.7.0',
'default' => '',
'required' => true,
'default' => 'certs@appwrite.io',
'required' => false,
'question' => '',
],
[

View file

@ -236,9 +236,11 @@ App::post('/v1/account/sessions')
->setStatusCode(Response::STATUS_CODE_CREATED)
;
$countries = $locale->getText('countries');
$session
->setAttribute('current', true)
->setAttribute('countryName', (isset($countries[$session->getAttribute('countryCode')])) ? $countries[$session->getAttribute('countryCode')] : $locale->getText('locale.country.unknown'))
->setAttribute('countryName', (isset($countries[strtoupper($session->getAttribute('countryCode'))])) ? $countries[strtoupper($session->getAttribute('countryCode'))] : $locale->getText('locale.country.unknown'))
;
$response->dynamic($session, Response::MODEL_SESSION);
@ -679,8 +681,8 @@ App::get('/v1/account/sessions')
continue;
}
$token->setAttribute('countryName', (isset($countries[$token->getAttribute('contryCode')]))
? $countries[$token->getAttribute('contryCode')]
$token->setAttribute('countryName', (isset($countries[strtoupper($token->getAttribute('countryCode'))]))
? $countries[strtoupper($token->getAttribute('countryCode'))]
: $locale->getText('locale.country.unknown'));
$token->setAttribute('current', ($current == $token->getId()) ? true : false);

View file

@ -205,8 +205,8 @@ App::get('/v1/users/:userId/sessions')
continue;
}
$token->setAttribute('countryName', (isset($countries[$token->getAttribute('contryCode')]))
? $countries[$token->getAttribute('contryCode')]
$token->setAttribute('countryName', (isset($countries[strtoupper($token->getAttribute('contryCode'))]))
? $countries[strtoupper($token->getAttribute('contryCode'))]
: $locale->getText('locale.country.unknown'));
$token->setAttribute('current', false);

View file

@ -117,7 +117,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo
->addHeader('Server', 'Appwrite')
->addHeader('X-Content-Type-Options', 'nosniff')
->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE')
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-SDK-Version, Cache-Control, Expires, Pragma')
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, Cache-Control, Expires, Pragma')
->addHeader('Access-Control-Expose-Headers', 'X-Fallback-Cookies')
->addHeader('Access-Control-Allow-Origin', $refDomain)
->addHeader('Access-Control-Allow-Credentials', 'true')
@ -237,7 +237,7 @@ App::options(function ($request, $response) {
$response
->addHeader('Server', 'Appwrite')
->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE')
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-SDK-Version, Cache-Control, Expires, Pragma, X-Fallback-Cookies')
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, Cache-Control, Expires, Pragma, X-Fallback-Cookies')
->addHeader('Access-Control-Expose-Headers', 'X-Fallback-Cookies')
->addHeader('Access-Control-Allow-Origin', $origin)
->addHeader('Access-Control-Allow-Credentials', 'true')

View file

@ -40,7 +40,7 @@ const APP_MODE_DEFAULT = 'default';
const APP_MODE_ADMIN = 'admin';
const APP_PAGING_LIMIT = 12;
const APP_CACHE_BUSTER = 144;
const APP_VERSION_STABLE = '0.7.0';
const APP_VERSION_STABLE = '0.7.1';
const APP_STORAGE_UPLOADS = '/storage/uploads';
const APP_STORAGE_FUNCTIONS = '/storage/functions';
const APP_STORAGE_CACHE = '/storage/cache';

View file

@ -28,10 +28,9 @@ foreach ([
realpath(__DIR__ . '/../vendor/felixfbecker'),
realpath(__DIR__ . '/../vendor/twig/twig'),
realpath(__DIR__ . '/../vendor/guzzlehttp/guzzle'),
realpath(__DIR__ . '/../vendor/domnikl'),
realpath(__DIR__ . '/../vendor/domnikl'),
realpath(__DIR__ . '/../vendor/slickdeals'),
realpath(__DIR__ . '/../vendor/psr/log'),
realpath(__DIR__ . '/../vendor/piwik'),
realpath(__DIR__ . '/../vendor/matomo'),
realpath(__DIR__ . '/../vendor/symfony'),
] as $key => $value) {
if($value !== false) {

View file

@ -96,6 +96,16 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
$config = new CLI();
$config->setComposerVendor('appwrite');
$config->setComposerPackage('cli');
$config->setExecutableName('appwrite');
$config->setExecutableName('appwrite');
$config->setLogo("
_ _ _ ___ __ _____
/_\ _ __ _ ____ ___ __(_) |_ ___ / __\ / / \_ \
//_\\| '_ \| '_ \ \ /\ / / '__| | __/ _ \ / / / / / /\/
/ _ \ |_) | |_) \ V V /| | | | || __/ / /___/ /___/\/ /_
\_/ \_/ .__/| .__/ \_/\_/ |_| |_|\__\___| \____/\____/\____/
|_| |_|
");
break;
case 'php':
$config = new PHP();

View file

@ -60,7 +60,7 @@
"slickdeals/statsd": "~3.0"
},
"require-dev": {
"appwrite/sdk-generator": "0.5.5",
"appwrite/sdk-generator": "0.6.2",
"phpunit/phpunit": "9.4.2",
"swoole/ide-helper": "4.5.5",
"vimeo/psalm": "4.1.1"

46
composer.lock generated
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": "c89bd786aae720e161185007212f6594",
"content-hash": "442d6d8b6c76ef7ae5ea26e500af6479",
"packages": [
{
"name": "adhocore/jwt",
@ -522,12 +522,12 @@
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "f47ece9e6e8ce74e3be04bef47f46061dc18c095"
"reference": "2f3e4f6cf8fd4aad7624c90a94f0ab38fde25976"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f47ece9e6e8ce74e3be04bef47f46061dc18c095",
"reference": "f47ece9e6e8ce74e3be04bef47f46061dc18c095",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/2f3e4f6cf8fd4aad7624c90a94f0ab38fde25976",
"reference": "2f3e4f6cf8fd4aad7624c90a94f0ab38fde25976",
"shasum": ""
},
"require": {
@ -589,7 +589,7 @@
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/1.x"
},
"time": "2020-12-08T11:45:39+00:00"
"time": "2021-03-02T18:57:24+00:00"
},
{
"name": "influxdb/influxdb-php",
@ -965,12 +965,12 @@
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "dd738d0b4491f32725492cf345f6b501f5922fec"
"reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/dd738d0b4491f32725492cf345f6b501f5922fec",
"reference": "dd738d0b4491f32725492cf345f6b501f5922fec",
"url": "https://api.github.com/repos/php-fig/log/zipball/a18c1e692e02b84abbafe4856c3cd7cc6903908c",
"reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c",
"shasum": ""
},
"require": {
@ -1008,7 +1008,7 @@
"support": {
"source": "https://github.com/php-fig/log/tree/master"
},
"time": "2020-09-18T06:44:51+00:00"
"time": "2021-03-02T15:02:34+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -1900,21 +1900,21 @@
},
{
"name": "utopia-php/storage",
"version": "0.4.1",
"version": "0.4.3",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/storage.git",
"reference": "86f749f2d79268528732e560f77dde0155e162ca"
"reference": "9db3ab713a6d392c3c2c799aeea751f6c8dc2ff7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/storage/zipball/86f749f2d79268528732e560f77dde0155e162ca",
"reference": "86f749f2d79268528732e560f77dde0155e162ca",
"url": "https://api.github.com/repos/utopia-php/storage/zipball/9db3ab713a6d392c3c2c799aeea751f6c8dc2ff7",
"reference": "9db3ab713a6d392c3c2c799aeea751f6c8dc2ff7",
"shasum": ""
},
"require": {
"php": ">=7.4",
"utopia-php/framework": "0.10.0"
"utopia-php/framework": "0.*.*"
},
"require-dev": {
"phpunit/phpunit": "^9.3",
@ -1946,9 +1946,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/storage/issues",
"source": "https://github.com/utopia-php/storage/tree/0.4.1"
"source": "https://github.com/utopia-php/storage/tree/0.4.3"
},
"time": "2021-02-19T05:04:44+00:00"
"time": "2021-03-02T20:25:02+00:00"
},
{
"name": "utopia-php/swoole",
@ -2067,12 +2067,12 @@
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "9c89b265ccc4092d58e66d72af5d343ee77a41ae"
"reference": "4631e2c7d2d7132adac9fd84d4c1a98c10a6e049"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/9c89b265ccc4092d58e66d72af5d343ee77a41ae",
"reference": "9c89b265ccc4092d58e66d72af5d343ee77a41ae",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/4631e2c7d2d7132adac9fd84d4c1a98c10a6e049",
"reference": "4631e2c7d2d7132adac9fd84d4c1a98c10a6e049",
"shasum": ""
},
"require": {
@ -2118,7 +2118,7 @@
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/master"
},
"time": "2021-01-18T12:52:36+00:00"
"time": "2021-02-28T20:01:57+00:00"
}
],
"packages-dev": [
@ -2292,11 +2292,11 @@
},
{
"name": "appwrite/sdk-generator",
"version": "0.5.5",
"version": "0.6.2",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator",
"reference": "08d6dc72f83ec99cfc0f7a50cb7fc0be0c029ac1"
"reference": "d96376295c9265a054634d21dcdbfc02b832c677"
},
"require": {
"ext-curl": "*",
@ -2326,7 +2326,7 @@
}
],
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"time": "2021-02-18T16:37:32+00:00"
"time": "2021-03-03T12:53:32+00:00"
},
{
"name": "composer/package-versions-deprecated",

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.createOAuth2Session(
provider: 'amazon',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.createRecovery(
email: 'email@example.com',
url: 'https://example.com',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.createSession(
email: 'email@example.com',
password: 'password',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.createVerification(
url: 'https://example.com',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.create(
email: 'email@example.com',
password: 'password',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.deleteSession(
sessionId: '[SESSION_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.deleteSessions();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.delete();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.getLogs();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.getPrefs();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.getSessions();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.get();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updateEmail(
email: 'email@example.com',
password: 'password',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updateName(
name: '[NAME]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updatePassword(
password: 'password',
oldPassword: 'password',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updatePrefs(
prefs: {},
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updateRecovery(
userId: '[USER_ID]',
secret: '[SECRET]',
@ -22,4 +21,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = account.updateVerification(
userId: '[USER_ID]',
secret: '[SECRET]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getBrowser(
//displaying image
FutureBuilder(
future: avatars.getBrowser(
code: 'aa',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getCreditCard(
//displaying image
FutureBuilder(
future: avatars.getCreditCard(
code: 'amex',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getFavicon(
//displaying image
FutureBuilder(
future: avatars.getFavicon(
url: 'https://example.com',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getFlag(
//displaying image
FutureBuilder(
future: avatars.getFlag(
code: 'af',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getImage(
//displaying image
FutureBuilder(
future: avatars.getImage(
url: 'https://example.com',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,9 +8,17 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getInitials(
);
print(result); // Resource URL string
}
//displaying image
FutureBuilder(
future: avatars.getInitials(
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = avatars.getQR(
//displaying image
FutureBuilder(
future: avatars.getQR(
text: '[TEXT]',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = database.createDocument(
collectionId: '[COLLECTION_ID]',
data: {},
@ -22,4 +21,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = database.deleteDocument(
collectionId: '[COLLECTION_ID]',
documentId: '[DOCUMENT_ID]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = database.getDocument(
collectionId: '[COLLECTION_ID]',
documentId: '[DOCUMENT_ID]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = database.listDocuments(
collectionId: '[COLLECTION_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = database.updateDocument(
collectionId: '[COLLECTION_ID]',
documentId: '[DOCUMENT_ID]',
@ -23,4 +22,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = functions.createExecution(
functionId: '[FUNCTION_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = functions.getExecution(
functionId: '[FUNCTION_ID]',
executionId: '[EXECUTION_ID]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = functions.listExecutions(
functionId: '[FUNCTION_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getContinents();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getCountriesEU();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getCountriesPhones();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getCountries();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getCurrencies();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.getLanguages();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = locale.get();
result
@ -17,4 +16,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -9,7 +9,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = storage.createFile(
file: await MultipartFile.fromFile('./path-to-files/image.jpg', 'image.jpg'),
read: [],
@ -22,4 +21,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = storage.deleteFile(
fileId: '[FILE_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = storage.getFileDownload(
//displaying image
FutureBuilder(
future: storage.getFileDownload(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = storage.getFilePreview(
//displaying image
FutureBuilder(
future: storage.getFilePreview(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,10 +8,18 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
}
String result = storage.getFileView(
//displaying image
FutureBuilder(
future: storage.getFileView(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
}
), //works for both public file and private file, for private files you need to be logged in
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data != null
? Image.memory(
snapshot.data.data,
)
: CircularProgressIndicator();
},
);

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = storage.getFile(
fileId: '[FILE_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = storage.listFiles(
);
@ -18,4 +17,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = storage.updateFile(
fileId: '[FILE_ID]',
read: [],
@ -21,4 +20,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.createMembership(
teamId: '[TEAM_ID]',
email: 'email@example.com',
@ -22,4 +21,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.create(
name: '[NAME]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.deleteMembership(
teamId: '[TEAM_ID]',
inviteId: '[INVITE_ID]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.delete(
teamId: '[TEAM_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.getMemberships(
teamId: '[TEAM_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.get(
teamId: '[TEAM_ID]',
);
@ -19,4 +18,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.list(
);
@ -18,4 +17,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.updateMembershipStatus(
teamId: '[TEAM_ID]',
inviteId: '[INVITE_ID]',
@ -22,4 +21,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -8,7 +8,6 @@ void main() { // Init SDK
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
Future result = teams.update(
teamId: '[TEAM_ID]',
name: '[NAME]',
@ -20,4 +19,4 @@ void main() { // Init SDK
}).catchError((error) {
print(error.response);
});
}
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getBrowser(
Future result = avatars.getBrowser(
code: 'aa',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getCreditCard(
Future result = avatars.getCreditCard(
code: 'amex',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getFavicon(
Future result = avatars.getFavicon(
url: 'https://example.com',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getFlag(
Future result = avatars.getFlag(
code: 'af',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getImage(
Future result = avatars.getImage(
url: 'https://example.com',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,8 +10,13 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getInitials(
Future result = avatars.getInitials(
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = avatars.getQR(
Future result = avatars.getQR(
text: '[TEXT]',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = storage.getFileDownload(
Future result = storage.getFileDownload(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = storage.getFilePreview(
Future result = storage.getFilePreview(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -10,9 +10,14 @@ void main() { // Init SDK
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
;
String result = storage.getFileView(
Future result = storage.getFileView(
fileId: '[FILE_ID]',
);
print(result); // Resource URL string
result
.then((response) {
print(response);
}).catchError((error) {
print(error.response);
});
}

View file

@ -1,3 +1,17 @@
## 0.3.1
- Minor fixes for custom exceptions
## 0.3.0
- Improved code quality
- Added a custom Appwrite exception
- Enabled access to private storage file
## 0.2.0
- Upgraded to work with Appwrite 0.7
## 0.1.0
- First release

View file

@ -1,3 +1,17 @@
## 0.4.0-dev.2
- Minor fixes for custom exceptions
## 0.4.0-dev.1
- Improved code quality
- Enabled access to private storage file
- Added easier integration for preview images and the Image widget
## 0.3.0
- Upgraded to work with Appwrite 0.7
## 0.3.0-dev.2
- Fix for an error when using a self-signed certificate for Web

View file

@ -26,7 +26,7 @@ class HTTPTest extends Scope
$this->assertEquals(204, $response['headers']['status-code']);
$this->assertEquals('Appwrite', $response['headers']['server']);
$this->assertEquals('GET, POST, PUT, PATCH, DELETE', $response['headers']['access-control-allow-methods']);
$this->assertEquals('Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-SDK-Version, Cache-Control, Expires, Pragma, X-Fallback-Cookies', $response['headers']['access-control-allow-headers']);
$this->assertEquals('Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, Cache-Control, Expires, Pragma, X-Fallback-Cookies', $response['headers']['access-control-allow-headers']);
$this->assertEquals('X-Fallback-Cookies', $response['headers']['access-control-expose-headers']);
$this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']);
$this->assertEquals('true', $response['headers']['access-control-allow-credentials']);