Merge remote-tracking branch 'upstream/0.7.x' into frontend-ui-deletion

This commit is contained in:
Bradley Schofield
2020-09-28 13:39:21 +01:00
24 changed files with 1205 additions and 780 deletions
+3
View File
@@ -1,5 +1,8 @@
_APP_ENV=production
_APP_ENV=development
_APP_SYSTEM_EMAIL_NAME=Appwrite
_APP_SYSTEM_EMAIL_ADDRESS=team@appwrite.io
_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=security@appwrite.io
_APP_OPTIONS_ABUSE=disabled
_APP_OPTIONS_FORCE_HTTPS=disabled
_APP_OPENSSL_KEY_V1=your-secret-key
+8 -11
View File
@@ -1,11 +1,7 @@
language: php
arch:
- amd64
php:
- '7.4'
addons:
hosts:
- appwrite.test
os: linux
notifications:
email:
@@ -15,10 +11,11 @@ services:
- docker
before_install:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- curl -fsSL https://get.docker.com | sh
- echo '{"experimental":"enabled"}' | sudo tee /etc/docker/daemon.json
- mkdir -p $HOME/.docker
- echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json
- sudo service docker start
# cache:
# directories:
+5
View File
@@ -8,6 +8,7 @@
- Added option to delete team from the console
- Added option to view team members from the console
- Added option to join a user to any team from the console
- Added option to delete user from the API (@TorstenDittmann)
- Added support for Brotli compression (@PedroCisnerosSantana, @Rohitub222)
- New UI micro-interactions and CSS fixes (@AnatoleLucet)
- UI performance & accessibility improvments (#406)
@@ -30,10 +31,14 @@
- API Key name max length is now 128 chars and not 256 for better API consistency
- Task name max length is now 128 chars and not 256 for better API consistency
- Platform name max length is now 128 chars and not 256 for better API consistency
- Added new locale: Marathi -mr (@spielers)
- New and consistent response format for all API object + new response examples in the docs
- Removed user roles attribute from user object (can be fetched from /v1/teams/memberships) **
- Removed type attribute from session object response (used only internally)
- ** - might be changed before merging to master
- Upgraded Traefik image to version 2.3
- Upgraded Redis Docker image to version 6.0 (alpine)
- Upgraded Influxdb Docker image to version 1.8 (alpine)
## Breaking Changes (Read before upgrading!)
- **Deprecated** `first` and `last` query params for documents list route in the database API
+100 -1
View File
@@ -10,6 +10,52 @@ If you are worried or dont know where to start, check out our next section ex
Help us keep Appwrite open and inclusive. Please read and follow our [Code of Conduct](/CODE_OF_CONDUCT.md).
## Submit a Pull Request 🚀
Branch naming convention is as following
`TYPE-ISSUE_ID-DESCRIPTION`
example:
```
doc-548-submit-a-pull-request-section-to-contribution-guide
```
When `TYPE` can be:
- **feat** - is a new feature
- **doc** - documentation only changes
- **cicd** - changes related to CI/CD system
- **fix** - a bug fix
- **refactor** - code change that neither fixes a bug nor adds a feature
**All PRs must include commit message with the changes description!**
For the initial start, fork the project and use git clone command to download the repository to your computer. A standard procedure for working on an issue would be to:
1. `git pull`, before creating a new branch, pull the changes from upstream. Your master needs to be up to date.
```
$ git pull
```
2. Create new branch from `master` like: `doc-548-submit-a-pull-request-section-to-contribution-guide`<br/>
```
$ git checkout -b [name_of_your_new_branch]
```
3. Work - commit - repeat ( be sure to be in your branch )
4. Push changes to GitHub
```
$ git push origin [name_of_your_new_branch]
```
6. Submit your changes for review
If you go to your repository on GitHub, you'll see a `Compare & pull request` button. Click on that button.
7. Start a Pull Request
Now submit the pull request and , click on `Create pull request`.
6. Get a code review approval / reject
7. After approval, merge your PR
8. GitHub will automatically delete the branch, after the merge is done. (they can still be restored).
## Setup From Source
To set up a working **development environment**, just fork the project git repository and install the backend and frontend dependencies using the proper package manager and create run the docker-compose stack.
@@ -32,6 +78,59 @@ After finishing the installation process, you can start writing and editing code
Appwrite's current structure is a combination of both [Monolithic](https://en.wikipedia.org/wiki/Monolithic_application) and [Microservice](https://en.wikipedia.org/wiki/Microservices) architectures, but our final goal, as we grow, is to be using only microservices.
### File Structure
```bash
.
├── app # Main application
│ ├── config # Config files
│ ├── controllers # API & dashboard controllers
│ │ ├── api
│ │ ├── shared
│ │ └── web
│ ├── db # DB schemas
│ ├── sdks # SDKs generated copies (used for generating code examples)
│ ├── tasks # Server CLI commands
│ ├── views # HTML server-side templates
│ └── workers # Background workers
├── bin # Server executables (tasks & workers)
├── docker # Docker related resources and configs
├── docs # Docs and tutorials
│ ├── examples
│ ├── references
│ ├── sdks
│ ├── services
│ ├── specs
│ └── tutorials
├── public # Public files
│ ├── dist
│ ├── fonts
│ ├── images
│ ├── scripts
│ └── styles
├── src # Supporting libraries (each lib has one role, common libs are released as individual projects)
│ └── Appwrite
│ ├── Auth
│ ├── Database
│ ├── Docker
│ ├── Event
│ ├── Extend
│ ├── Network
│ ├── OpenSSL
│ ├── Preloader
│ ├── Resize
│ ├── Storage
│ ├── Swoole
│ ├── Task
│ ├── Template
│ ├── URL
│ └── Utopia
└── tests # End to end & unit tests
├── e2e
├── resources
└── unit
```
---
![Appwrite](docs/specs/overview.drawio.svg)
---
@@ -135,7 +234,7 @@ docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t appwrite/
## Tests
To run tests manually, run phpunit from your command line:
To run tests manually, use the Appwrite Docker CLI from your terminal:
```bash
docker exec appwrite test
+6 -6
View File
@@ -124,6 +124,12 @@ Below is a list of currently supported platforms and languages. If you wish to h
Looking for more SDKs? - Help us by contributing a pull request to our [SDK Generator](https://github.com/appwrite/sdk-generator)!
## Contributing
All code contributions - including those of people having commit access - must go through a pull request and approved by a core developer before being merged. This is to ensure proper review of all the code.
We truly ❤️ pull requests! If you wish to help, you can learn more about how you can contribute to this project in the [contribution guide](CONTRIBUTING.md).
## Security
For security issues, kindly email us [security@appwrite.io](mailto:security@appwrite.io) instead of posting a public issue in GitHub.
@@ -132,12 +138,6 @@ For security issues, kindly email us [security@appwrite.io](mailto:security@appw
Join our growing community around the world! Follow us on [Twitter](https://twitter.com/appwrite_io), [Facebook Page](https://www.facebook.com/appwrite.io), [Facebook Group](https://www.facebook.com/groups/appwrite.developers/) or join our live [Discord server](https://discord.gg/GSeTUeA) for more help, ideas, and discussions.
## Contributing
All code contributions - including those of people having commit access - must go through a pull request and approved by a core developer before being merged. This is to ensure proper review of all the code.
We truly ❤️ pull requests! If you wish to help, you can learn more about how you can contribute to this project in the [contribution guide](CONTRIBUTING.md).
## License
This repository is available under the [BSD 3-Clause License](./LICENSE).
@@ -0,0 +1,11 @@
<?php
return [
'AF' => 'अफ़्रीका',
'AN' => 'अंटार्कटिका',
'AS' => 'एशिया',
'EU' => 'यूरोप',
'NA' => 'उत्तर अमेरिका',
'OC' => 'ओशिनिया',
'SA' => 'दक्षिण अमेरिका',
];
@@ -0,0 +1,203 @@
<?php
return [
'AF' => 'अफगानिस्तान',
'AO' => 'अंगोला',
'AL' => 'अल्बानिया',
'AD' => 'अंडोरा',
'AE' => 'संयुक्त अरब अमीरात',
'AR' => 'अर्जेंटीना',
'AM' => 'आर्मेनिया',
'AG' => 'एंटीगुआ और बारबुडा',
'AU' => 'ऑस्ट्रेलिया',
'AT' => 'ऑस्ट्रिया',
'AZ' => 'अजरबैजान',
'BI' => 'बुरुंडी',
'BE' => 'बेल्जियम',
'BJ' => 'बेनिन',
'BF' => 'बुर्किना फ़ासो',
'BD' => 'बांग्लादेश',
'BG' => 'बुल्गारिया',
'BH' => 'बहरीन',
'BS' => 'बहामास',
'BA' => 'बोस्निया और हर्ज़ेगोविना',
'BY' => 'बेलारूस',
'BZ' => 'बेलीज',
'BO' => 'बोलीविया',
'BR' => 'ब्राज़ील',
'BB' => 'बारबाडोस',
'BN' => 'ब्रुनेई',
'BT' => 'भूटान',
'BW' => 'बोत्सवाना',
'CF' => 'मध्य अफ्रीकी गणराज्य',
'CA' => 'कनाडा',
'CH' => 'स्विटज़रलैंड',
'CL' => 'चिली',
'CN' => 'चीन',
'CI' => 'आइवरी कोस्ट',
'CM' => 'कैमरून',
'CD' => 'डीआर कांगो',
'CG' => 'कांगो गणराज्य',
'CO' => 'कोलंबिया',
'KM' => 'कोमोरोस',
'CV' => 'केप वर्डे',
'CR' => 'कोस्टा रिका',
'CU' => 'क्यूबा',
'CY' => 'साइप्रस',
'CZ' => 'चेकिया',
'DE' => 'जर्मनी',
'DJ' => 'जिबूती',
'DM' => 'डोमिनिका',
'DK' => 'डेनमार्क',
'DO' => 'डोमिनिकन रिपब्लिक',
'DZ' => 'अल्जीरिया',
'ER' => 'इरिट्रिया',
'EC' => 'इक्वाडोर',
'EG' => 'मिस्र',
'IR' => 'इरिट्रिया',
'ES' => 'स्पेन',
'EE' => 'एस्टोनिया',
'ET' => 'इथियोपिया',
'FI' => 'फिनलैंड',
'FJ' => 'फिजी',
'FR' => 'फ्रांस',
'FM' => 'माइक्रोनेशिया',
'GA' => 'गैबॉन',
'GB' => 'यूनाइटेड किंगडम',
'GE' => 'जॉर्जिया',
'GH' => 'घाना',
'GN' => 'गिनी',
'GM' => 'गाम्बिया',
'GW' => 'गिनी-बिसाऊ',
'GQ' => 'इक्वेटोरियल गिनी',
'GR' => 'ग्रीस',
'GD' => 'ग्रेनाडा',
'GT' => 'ग्वाटेमाला',
'GY' => 'गुयाना',
'HN' => 'होंडुरास',
'HR' => 'क्रोएशिया',
'HT' => 'हैती',
'HU' => 'हंगरी',
'ID' => 'इंडोनेशिया',
'IN' => 'भारत',
'IE' => 'आयरलैंड',
'IR' => 'ईरान',
'IQ' => 'इराक',
'IS' => 'आइसलैंड',
'IL' => 'इज़राइल',
'IT' => 'इटली',
'JM' => 'जमैका',
'JO' => 'जॉर्डन',
'JP' => 'जापान',
'KZ' => 'कजाकिस्तान',
'KE' => 'केन्या',
'KG' => 'किर्गिस्तान',
'KH' => 'कंबोडिया',
'KI' => 'किरीबाती',
'KN' => 'सेंट किट्स एंड नेविस',
'KR' => 'दक्षिण कोरिया',
'KW' => 'कुवैत',
'LA' => 'लाओस',
'LB' => 'लेबनान',
'LR' => 'लाइबेरिया',
'LY' => 'लीबिया',
'LC' => 'सेंट लूसिया',
'LI' => 'लिकटेंस्टीन',
'LK' => 'श्रीलंका',
'LS' => 'लेसोथो',
'LT' => 'लिथुआनिया',
'LU' => 'लक्ज़मबर्ग',
'LV' => 'लातविया',
'MA' => 'मोरक्को',
'MC' => 'मोनाको',
'MD' => 'मोल्दोवा',
'MG' => 'मेडागास्कर',
'MV' => 'मालदीव',
'MX' => 'मेक्सिको',
'MH' => 'मार्शल आइलैंड्स',
'MK' => 'मैसिडोनिया',
'ML' => 'रक्त',
'MT' => 'माल्टा',
'MM' => 'म्यांमार',
'ME' => 'मोंटेनेग्रो',
'MN' => 'मंगोलिया',
'MZ' => 'मोज़ाम्बिक',
'MR' => 'मॉरिटानिया',
'MU' => 'मॉरीशस',
'MW' => 'मलावी',
'MY' => 'मलेशिया',
'NA' => 'नामीबिया',
'NE' => 'नाइजर',
'NG' => 'नाइजीरिया',
'NI' => 'निकारागुआ',
'NL' => 'नीदरलैंड',
'NO' => 'नॉर्वे',
'NP' => 'नेपाल',
'NR' => 'नारू',
'NZ' => 'न्यूजीलैंड',
'OM' => 'ओमान',
'PK' => 'पाकिस्तान',
'PA' => 'पनामा',
'PE' => 'पेरू',
'PH' => 'फिलीपींस',
'PW' => 'पलाऊ',
'PG' => 'पापुआ न्यू गिनी',
'PL' => 'पोलैंड',
'KP' => 'उत्तर कोरिया',
'PT' => 'पुर्तगाल',
'PY' => 'पराग्वे',
'QA' => 'कतर',
'RO' => 'रोमानिया',
'RU' => 'रूस',
'RW' => 'रवांडा',
'SA' => 'सऊदी अरब',
'SD' => 'सूडान',
'SN' => 'सेनेगल',
'SG' => 'सिंगापुर',
'SB' => 'सोलोमन द्वीप',
'SL' => 'सिएरा लियोन',
'SV' => 'अल साल्वाडोर',
'SM' => 'सैन मैरिनो',
'SO' => 'सोमालिया',
'RS' => 'सर्बिया',
'SS' => 'दक्षिण सूडान',
'ST' => 'साओ तोमे और प्रिंसिपे',
'SR' => 'सूरीनाम',
'SK' => 'स्लोवाकिया',
'SI' => 'स्लोवेनिया',
'SE' => 'स्वीडन',
'SZ' => 'स्वाज़ीलैंड',
'SC' => 'सेशेल्स',
'SY' => 'सीरिया',
'TD' => 'चाड',
'TG' => 'टोगो',
'TH' => 'थाईलैंड',
'TJ' => 'ताजिकिस्तान',
'TM' => 'तुर्कमेनिस्तान',
'TL' => 'तिमोर-लेस्ते',
'TO' => 'टोंगा',
'TT' => 'त्रिनिदाद और टोबैगो',
'TN' => 'ट्यूनीशिया',
'TR' => 'तुर्की',
'TV' => 'तुवालु',
'TZ' => 'तंजानिया',
'UG' => 'युगांडा',
'UA' => 'यूक्रेन',
'UY' => 'उरुग्वे',
'US' => 'संयुक्त राज्य अमेरिका',
'UZ' => 'उज्बेकिस्तान',
'VA' => 'वेटिकन सिटी',
'VC' => 'सेंट विंसेंट और ग्रेनेडाइंस',
'VE' => 'वेनेजुएला',
'VN' => 'वियतनाम',
'VU' => 'वानुअतु',
'WS' => 'समोआ',
'YE' => 'यमन',
'ZA' => 'दक्षिण अफ्रीका',
'ZM' => 'ज़ाम्बिया',
'ZW' => 'जिम्बाब्वे',
];
+21
View File
@@ -0,0 +1,21 @@
<?php
return [
'settings.inspire' => '"हुशार असण्याची कला म्हणजे कोणत्या गोष्टीकडे दुर्लक्ष करावे हे जाणून घेण्याची कला."', // Tmrs is the line printed in the homepage and console 'view-source'
'settings.locale' => 'mr',
'settings.direction' => 'ltr',
// Service - Users
'account.emails.team' => '%s टीम',
'account.emails.verification.title' => 'अकाउंट कन्फर्मेशन ',
'account.emails.verification.body' => 'mr.email.auth.confirm.tpl',
'account.emails.recovery.title' => 'पासवर्ड रिसेट ',
'account.emails.recovery.body' => 'mr.email.auth.recovery.tpl',
'account.emails.invitation.title' => 'इनविटेशन %s टीम %s',
'account.emails.invitation.body' => 'mr.email.auth.invitation.tpl',
'locale.country.unknown' => 'अज्ञात',
'countries' => include 'mr.countries.php',
'continents' => include 'mr.continents.php',
];
@@ -0,0 +1,16 @@
<p>
नमस्कार {{name}},
</p>
<p>
आपला ईमेल पत्ता वेरीफाई करण्यासाठी या लिंक वर क्लिक करा.
</p>
{{cta}}
<p>
आपण हे ईमेल वेरीफाई करण्यास सांगितले नसल्यास आपण या संदेशाकडे दुर्लक्ष करू शकता.
</p>
<p>
धन्यवाद,
<br />
{{project}} टीम
</p>
@@ -0,0 +1,18 @@
<p>
नमस्कार,
</p>
<p>
हा मेल आपल्‍याला पाठविला गेला कारण <b>{{owner}}</b> आपल्‍याला {{project}} या कारणास्तव <b>{{team}}</b> येथे सदस्य होण्यासाठी आमंत्रित करू इच्छित होते.
</p>
<p>
टीम <b>{{team}}</b>मध्ये सामील होण्यासाठी या लिंक वर क्लिक करा :
</p>
{{cta}}
<p>
आपल्याला स्वारस्य नसल्यास आपण या संदेशाकडे दुर्लक्ष करू शकता.
</p>
<p>
धन्यवाद,
<br />
{{project}} टीम
</p>
@@ -0,0 +1,15 @@
<p>
नमस्कार {{name}},
</p>
<p>
{{project}} पासवर्ड रीसेट करण्यासाठी या लिंक वर क्लिक करा.
</p>
{{cta}}
<p>
आपण आपला पासवर्ड रीसेट करण्यास सांगितले नसेल तर, आपण हा संदेश दुर्लक्षित करू शकता.
</p>
<p>
धन्यवाद,
<br />
{{project}} टीम
</p>
+5 -5
View File
@@ -236,16 +236,16 @@
</form>
</span>
<img data-ls-attrs="src={{env.API}}/avatars/browsers/{{session.client.short_name|lowercase}}?width=120&height=120&project={{env.PROJECT}},title={{session.client.name}},alt={{session.client.name}}" class="avatar trans pull-start margin-end" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/browsers/{{session.client.short_name|lowercase}}?width=120&height=120&project={{env.PROJECT}},title={{session.client.name}},alt={{session.client.name}}" class="avatar trans pull-start margin-end" />
<span data-ls-bind="{{session.client.name}}"></span> <span data-ls-bind="{{session.client.version}}"></span> on <span data-ls-bind="{{session.model}}"></span> <span data-ls-bind="{{session.OS.name}}"></span> <span data-ls-bind="{{session.OS.version}}"></span>
<span data-ls-if="({{session.client.name}})" data-ls-bind="{{session.client.name}}"></span> <span data-ls-if="(!{{session.client.name}})">Unknown</span> <span data-ls-bind="{{session.client.version}}"></span> on <span data-ls-bind="{{session.model}}"></span> <span data-ls-if="(!{{session.OS.name}})">Unknown</span> <span data-ls-if="({{session.OS.name}})" data-ls-bind="{{session.OS.name}}"></span> <span data-ls-bind="{{session.OS.version}}"></span>
&nbsp;
<span data-ls-if="true == {{session.current}}">
<span class="tag green">Current Session</span>
</span>
<div class="margin-top-small">
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{session.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs margin-end-small inline" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/flags/{{session.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs margin-end-small inline" />
<small data-ls-bind="{{session.ip}}"></small> / <small data-ls-bind="{{session.geo.country}}"></small>
</div>
</li>
@@ -294,11 +294,11 @@
<td data-title="Date: "><span data-ls-bind="{{log.time|dateTime}}"></span></td>
<td data-title="Event: "><span data-ls-bind="{{log.event}}"></span></td>
<td data-title="Client: ">
<img data-ls-attrs="src={{env.API}}/avatars/browsers/{{log.client.short_name|lowercase}}?width=80&height=80&project={{env.PROJECT}},title={{log.client.name}},alt={{log.client.name}}" class="avatar xxs inline margin-end-small" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/browsers/{{log.client.short_name|lowercase}}?width=80&height=80&project={{env.PROJECT}},title={{log.client.name}},alt={{log.client.name}}" class="avatar xxs inline margin-end-small" />
<span data-ls-bind="{{log.client.name}} {{log.client.version}} on {{log.model}} {{log.OS.name}} {{log.OS.version}}"></span>
</td>
<td data-title="Location: ">
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{log.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs inline" style="margin-top: 10px;" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/flags/{{log.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs inline margin-end-small" style="margin-top: 10px;" />
<span data-ls-bind="{{log.geo.country}}"></span>
</td>
<td data-title="IP: "><span data-ls-bind="{{log.ip}}"></span></td>
+5 -5
View File
@@ -224,12 +224,12 @@
<button class="danger">Logout</button>
</form>
<img data-ls-attrs="src={{env.API}}/avatars/browsers/{{session.client.short_name|lowercase}}?width=120&height=120&project={{env.PROJECT}},title={{session.client.name}},alt={{session.client.name}}" class="avatar trans pull-start margin-end" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/browsers/{{session.client.short_name|lowercase}}?width=120&height=120&project={{env.PROJECT}},title={{session.client.name}},alt={{session.client.name}}" class="avatar trans pull-start margin-end" />
<span data-ls-bind="{{session.client.name}}"></span> <span data-ls-bind="{{session.client.version}}"></span> on <span data-ls-bind="{{session.model}}"></span> <span data-ls-bind="{{session.OS.name}}"></span> <span data-ls-bind="{{session.OS.version}}"></span>
<span data-ls-if="({{session.client.name}})" data-ls-bind="{{session.client.name}}"></span> <span data-ls-if="(!{{session.client.name}})">Unknown</span> <span data-ls-bind="{{session.client.version}}"></span> on <span data-ls-bind="{{session.model}}"></span> <span data-ls-if="(!{{session.OS.name}})">Unknown</span> <span data-ls-if="({{session.OS.name}})" data-ls-bind="{{session.OS.name}}"></span> <span data-ls-bind="{{session.OS.version}}"></span>
<div class="margin-top-small">
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{session.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs margin-end-small inline" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/flags/{{session.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs margin-end-small inline" />
<small data-ls-bind="{{session.ip}}"></small> / <small data-ls-bind="{{session.geo.country}}"></small>
</div>
</li>
@@ -284,12 +284,12 @@
<td data-title="Date: "><span data-ls-bind="{{log.time|dateTime}}"></span></td>
<td data-title="Event: "><span data-ls-bind="{{log.event}}"></span></td>
<td data-title="Client: ">
<img data-ls-if="({{log.client.short_name}})" data-ls-attrs="src={{env.API}}/avatars/browsers/{{log.client.short_name|lowercase}}?width=80&height=80&project={{env.PROJECT}},title={{log.client.name}},alt={{log.client.name}}" class="avatar xxs inline margin-end-small" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-if="({{log.client.short_name}})" data-ls-attrs="src={{env.API}}/avatars/browsers/{{log.client.short_name|lowercase}}?width=80&height=80&project={{env.PROJECT}},title={{log.client.name}},alt={{log.client.name}}" class="avatar xxs inline margin-end-small" />
<span data-ls-if="({{log.client.name}})" data-ls-bind="{{log.client.name}} {{log.client.version}} on {{log.model}} {{log.OS.name}} {{log.OS.version}}"></span>
<div data-ls-if="(!{{log.client.name}})" class="text-align-center text-fade">Unknown</div>
</td>
<td data-title="Location: ">
<img data-ls-attrs="src={{env.API}}/avatars/flags/{{log.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs inline margin-end-small" />
<img onerror="this.onerror=null;this.src='/images/unknown.svg'" data-ls-attrs="src={{env.API}}/avatars/flags/{{log.geo.isoCode}}?width=80&height=80&project={{env.PROJECT}}" class="avatar xxs inline margin-end-small" />
<span data-ls-bind="{{log.geo.country}}"></span>
</td>
<td data-title="IP: "><span data-ls-bind="{{log.ip}}"></span></td>
+11 -3
View File
@@ -7,7 +7,7 @@ $version = $this->getParam('version', '');
services:
traefik:
image: traefik:2.2
image: traefik:2.3
container_name: appwrite-traefik
command:
- --providers.file.directory=/storage/config
@@ -52,6 +52,9 @@ services:
- influxdb
environment:
- _APP_ENV
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_OPTIONS_ABUSE
- _APP_OPTIONS_FORCE_HTTPS
- _APP_OPENSSL_KEY_V1
@@ -119,6 +122,7 @@ services:
- mariadb
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -139,6 +143,7 @@ services:
- mariadb
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -185,6 +190,7 @@ services:
- appwrite-certificates:/storage/certificates:rw
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -231,6 +237,8 @@ services:
- smtp
environment:
- _APP_ENV
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_SMTP_HOST
@@ -278,7 +286,7 @@ services:
- RELAY_NETWORKS=:192.168.0.0/24:10.0.0.0/16
redis:
image: redis:5.0
image: redis:6.0-alpine3.12
container_name: appwrite-redis
restart: unless-stopped
networks:
@@ -296,7 +304,7 @@ services:
- appwrite-uploads:/storage/uploads
influxdb:
image: influxdb:1.6
image: influxdb:1.8-alpine
container_name: appwrite-influxdb
restart: unless-stopped
networks:
+1 -1
View File
@@ -115,7 +115,7 @@ class CertificatesV1
$staging = (App::isProduction()) ? '' : ' --dry-run';
$response = \shell_exec("certbot certonly --webroot --noninteractive --agree-tos{$staging} \
--email ".App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', 'security@localhost.test')." \
--email ".App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', 'security@localhost.test')." \
-w ".APP_STORAGE_CERTIFICATES." \
-d {$domain->get()}");
+20 -9
View File
@@ -2,7 +2,7 @@ version: '3'
services:
traefik:
image: traefik:2.2
image: traefik:2.3
container_name: appwrite-traefik
command:
- --log.level=DEBUG
@@ -66,6 +66,9 @@ services:
- influxdb
environment:
- _APP_ENV
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_OPTIONS_ABUSE
- _APP_OPTIONS_FORCE_HTTPS
- _APP_OPENSSL_KEY_V1
@@ -136,6 +139,7 @@ services:
- mariadb
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -157,6 +161,7 @@ services:
- mariadb
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -205,6 +210,7 @@ services:
- appwrite-certificates:/storage/certificates:rw
environment:
- _APP_ENV
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_DB_HOST
@@ -254,6 +260,8 @@ services:
# - smtp
environment:
- _APP_ENV
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_SMTP_HOST
@@ -290,6 +298,7 @@ services:
- MYSQL_USER=user
- MYSQL_PASSWORD=password
command: 'mysqld --innodb-flush-method=fsync'
# command: mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bu && mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bu
maildev:
image: djfarrelly/maildev
@@ -301,17 +310,19 @@ services:
- appwrite
# smtp:
# image: appwrite/smtp:1.0.1
# image: appwrite/smtp:1.2.0
# container_name: appwrite-smtp
# restart: unless-stopped
# networks:
# - appwrite
# environment:
# - MAILNAME=appwrite
# - RELAY_NETWORKS=:192.168.0.0/24:10.0.0.0/16
# - LOCAL_DOMAINS=@
# - RELAY_FROM_HOSTS=192.168.0.0/16 ; *.yourdomain.com
# - SMARTHOST_HOST=smtp
# - SMARTHOST_PORT=587
redis:
image: redis:5.0
image: redis:6.0-alpine
container_name: appwrite-redis
restart: unless-stopped
networks:
@@ -327,9 +338,9 @@ services:
- appwrite
volumes:
- appwrite-uploads:/storage/uploads
influxdb:
image: influxdb:1.6
image: influxdb:1.8-alpine
container_name: appwrite-influxdb
restart: unless-stopped
networks:
@@ -355,7 +366,7 @@ services:
# - "8081:8081"
# resque:
# image: registry.gitlab.com/appwrite/appwrite/resque-web:v1.0.2
# image: appwrite/resque-web:1.1.0
# restart: unless-stopped
# networks:
# - appwrite
+1 -1
View File
@@ -1,6 +1,6 @@
# Adding a New OAuth2 Provider
This document is part of the Appwrite contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](../CODE_OF_CONDUCT.md) and the [Contributing Guide](../CONTRIBUTING.md).
This document is part of the Appwrite contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md) and the [Contributing Guide](https://github.com/appwrite/appwrite/blob/master/CONTRIBUTING.md).
## Getting Started
+1
View File
@@ -0,0 +1 @@
### Thats Your Place To create Your First Issue
+699 -734
View File
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -4,12 +4,13 @@
"license": "BSD-3-Clause",
"repository": "public",
"devDependencies": {
"gulp": "^4.0.0",
"yargs-parser": ">=13.1.2",
"gulp": "^4.0.2",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-jsmin": "^0.1.5",
"gulp-less": "^4.0.1",
"jest": "^25.1.0",
"jest": "^26.4.2",
"ls-service-form2json": "^1.0.0"
}
}
+2 -1
View File
@@ -432,7 +432,8 @@ let path='/users';let payload={};if(email){payload['email']=email;}
if(password){payload['password']=password;}
if(name){payload['name']=name;}
return http.post(path,{'content-type':'application/json',},payload);},get:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},deleteUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');}
+2 -1
View File
@@ -432,7 +432,8 @@ let path='/users';let payload={};if(email){payload['email']=email;}
if(password){payload['password']=password;}
if(name){payload['name']=name;}
return http.post(path,{'content-type':'application/json',},payload);},get:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},deleteUser:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.delete(path,{'content-type':'application/json',},payload);},getLogs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}/logs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},getPrefs:function(userId){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
let path='/users/{userId}/prefs'.replace(new RegExp('{userId}','g'),userId);let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(userId,prefs){if(userId===undefined){throw new Error('Missing required parameter: "userId"');}
if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');}
+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1024.000000pt" height="1024.000000pt" viewBox="0 0 1024.000000 1024.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"
fill="#96b7eb" stroke="none">
<path d="M5000 10143 c-904 -20 -1805 -293 -2565 -776 -1163 -740 -1970 -1911
-2240 -3252 -68 -337 -96 -634 -96 -1000 0 -483 55 -896 180 -1350 268 -971
836 -1854 1609 -2501 868 -726 1911 -1129 3032 -1173 700 -27 1388 85 2020
331 1324 514 2364 1554 2878 2878 197 508 309 1052 331 1610 42 1074 -243
2099 -830 2983 -742 1118 -1887 1889 -3194 2152 -354 71 -756 106 -1125 98z
m375 -673 c778 -48 1359 -279 1826 -728 377 -361 594 -768 676 -1267 25 -156
25 -525 -1 -680 -36 -221 -88 -386 -182 -583 -175 -368 -480 -723 -1099 -1281
-310 -279 -556 -524 -649 -647 -84 -111 -194 -331 -235 -474 -51 -175 -81
-419 -97 -803 l-7 -157 -506 2 -506 3 1 300 c1 508 55 822 199 1160 175 408
417 696 1105 1316 645 582 814 806 890 1181 39 188 26 461 -31 653 -122 415
-477 811 -894 997 -252 113 -552 162 -849 138 -373 -29 -659 -142 -929 -368
-301 -253 -521 -690 -621 -1237 -19 -103 -25 -120 -42 -122 -10 -2 -253 26
-539 60 l-520 62 3 60 c3 73 43 289 83 447 98 390 273 757 497 1043 84 107
305 322 417 405 120 90 277 185 402 245 446 213 1020 311 1608 275z m355
-8130 l0 -600 -600 0 -600 0 0 600 0 600 600 0 600 0 0 -600z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+24
View File
@@ -4750,6 +4750,30 @@
}, payload);
},
/**
* Delete User
*
* Delete a user by its unique ID.
*
* @param {string} userId
* @throws {Error}
* @return {Promise}
*/
deleteUser: function(userId) {
if(userId === undefined) {
throw new Error('Missing required parameter: "userId"');
}
let path = '/users/{userId}'.replace(new RegExp('{userId}', 'g'), userId);
let payload = {};
return http
.delete(path, {
'content-type': 'application/json',
}, payload);
},
/**
* Get User Logs
*