diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
new file mode 100644
index 0000000000..80d880244c
--- /dev/null
+++ b/.github/workflows/nightly.yml
@@ -0,0 +1,47 @@
+name: Nightly Security Scan
+on:
+ schedule:
+ - cron: '0 0 * * *' # 12am UTC daily runtime
+ workflow_dispatch:
+
+jobs:
+ scan-image:
+ name: Scan Docker Image
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ - name: Build the Docker image
+ run: docker build . -t appwrite_image:latest
+ - name: Run Trivy vulnerability scanner on image
+ uses: aquasecurity/trivy-action@0.20.0
+ with:
+ image-ref: 'appwrite_image:latest'
+ format: 'sarif'
+ output: 'trivy-image-results.sarif'
+ ignore-unfixed: 'false'
+ severity: 'CRITICAL,HIGH'
+ - name: Upload Docker Image Scan Results
+ uses: github/codeql-action/upload-sarif@v2
+ with:
+ sarif_file: 'trivy-image-results.sarif'
+
+ scan-code:
+ name: Scan Code
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+ - name: Run Trivy vulnerability scanner on filesystem
+ uses: aquasecurity/trivy-action@0.20.0
+ with:
+ scan-type: 'fs'
+ format: 'sarif'
+ output: 'trivy-fs-results.sarif'
+ severity: 'CRITICAL,HIGH'
+ - name: Upload Code Scan Results
+ uses: github/codeql-action/upload-sarif@v2
+ with:
+ sarif_file: 'trivy-fs-results.sarif'
diff --git a/.github/workflows/pr-scan.yml b/.github/workflows/pr-scan.yml
index af510ccc3b..eded58985d 100644
--- a/.github/workflows/pr-scan.yml
+++ b/.github/workflows/pr-scan.yml
@@ -1,17 +1,22 @@
name: PR Security Scan
-on:
- pull_request:
+on:
+ pull_request_target:
types: [opened, synchronize, reopened]
- workflow_dispatch:
+
jobs:
scan:
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
steps:
- - name: Check out code
+ - name: Check out code
uses: actions/checkout@v4
with:
+ ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
submodules: 'recursive'
+
- name: Build the Docker image
uses: docker/build-push-action@v5
with:
@@ -19,6 +24,7 @@ jobs:
push: false
load: true
tags: pr_image:${{ github.sha }}
+
- name: Run Trivy vulnerability scanner on image
uses: aquasecurity/trivy-action@0.20.0
with:
@@ -26,6 +32,7 @@ jobs:
format: 'json'
output: 'trivy-image-results.json'
severity: 'CRITICAL,HIGH'
+
- name: Run Trivy vulnerability scanner on source code
uses: aquasecurity/trivy-action@0.20.0
with:
@@ -34,10 +41,11 @@ jobs:
format: 'json'
output: 'trivy-fs-results.json'
severity: 'CRITICAL,HIGH'
- - name: Process and post Trivy scan results
+
+ - name: Process Trivy scan results
+ id: process-results
uses: actions/github-script@v7
with:
- github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
let commentBody = '## Security Scan Results for PR\n\n';
@@ -79,9 +87,19 @@ jobs:
commentBody += 'Please contact the core team for assistance.';
}
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: commentBody
- });
+ core.setOutput('comment-body', commentBody);
+ - name: Find Comment
+ uses: peter-evans/find-comment@v3
+ id: fc
+ with:
+ issue-number: ${{ github.event.pull_request.number }}
+ comment-author: 'github-actions[bot]'
+ body-includes: Security Scan Results for PR
+
+ - name: Create or update comment
+ uses: peter-evans/create-or-update-comment@v3
+ with:
+ issue-number: ${{ github.event.pull_request.number }}
+ comment-id: ${{ steps.fc.outputs.comment-id }}
+ body: ${{ steps.process-results.outputs.comment-body }}
+ edit-mode: replace
diff --git a/README.md b/README.md
index 8305d78ef0..0d223475c2 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-> Our Appwrite Init event has concluded. You can check out all the new and upcoming features [on our Init website](https://appwrite.io/init) 🚀
+> Appwrite Init is here! You can check out all the new and upcoming features [on our Init website](https://appwrite.io/init) 🚀
@@ -134,6 +134,12 @@ Choose from one of the providers below:
Akamai Compute
+
+
+
+ AWS Marketplace
+
+ |
diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php
index bc8f372991..b9b8ad4750 100644
--- a/app/controllers/api/projects.php
+++ b/app/controllers/api/projects.php
@@ -14,7 +14,7 @@ use Appwrite\Utopia\Database\Validator\Queries\Projects;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use PHPMailer\PHPMailer\PHPMailer;
-use Utopia\Abuse\Adapters\TimeLimit;
+use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Audit\Audit;
use Utopia\Cache\Cache;
diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php
index 2b0013db29..48c836a0ad 100644
--- a/app/controllers/shared/api.php
+++ b/app/controllers/shared/api.php
@@ -16,7 +16,7 @@ use Appwrite\Messaging\Adapter\Realtime;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Utopia\Abuse\Abuse;
-use Utopia\Abuse\Adapters\TimeLimit;
+use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Cache\Adapter\Filesystem;
use Utopia\Cache\Cache;
@@ -556,10 +556,11 @@ App::shutdown()
/**
* Trigger functions.
*/
- $queueForFunctions
- ->from($queueForEvents)
- ->trigger();
-
+ if (!$queueForEvents->isPaused()) {
+ $queueForFunctions
+ ->from($queueForEvents)
+ ->trigger();
+ }
/**
* Trigger webhooks.
*/
diff --git a/app/http.php b/app/http.php
index 20a5288fe4..f8319a0ab2 100644
--- a/app/http.php
+++ b/app/http.php
@@ -9,7 +9,7 @@ use Swoole\Http\Request as SwooleRequest;
use Swoole\Http\Response as SwooleResponse;
use Swoole\Http\Server;
use Swoole\Process;
-use Utopia\Abuse\Adapters\TimeLimit;
+use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Audit\Audit;
use Utopia\CLI\Console;
diff --git a/app/realtime.php b/app/realtime.php
index 9c3c2b4d6a..b8fdb2cf21 100644
--- a/app/realtime.php
+++ b/app/realtime.php
@@ -13,7 +13,7 @@ use Swoole\Runtime;
use Swoole\Table;
use Swoole\Timer;
use Utopia\Abuse\Abuse;
-use Utopia\Abuse\Adapters\TimeLimit;
+use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\App;
use Utopia\Cache\Adapter\Sharding;
use Utopia\Cache\Cache;
diff --git a/composer.json b/composer.json
index 6fa56a4a31..8bf22472db 100644
--- a/composer.json
+++ b/composer.json
@@ -44,13 +44,13 @@
"ext-sockets": "*",
"appwrite/php-runtimes": "0.13.*",
"appwrite/php-clamav": "2.0.*",
- "utopia-php/abuse": "0.38.*",
+ "utopia-php/abuse": "0.42.*",
"utopia-php/analytics": "0.10.*",
- "utopia-php/audit": "0.40.*",
+ "utopia-php/audit": "0.42.*",
"utopia-php/cache": "0.10.*",
"utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*",
- "utopia-php/database": "0.50.*",
+ "utopia-php/database": "0.52.*",
"utopia-php/domains": "0.5.*",
"utopia-php/dsn": "0.2.1",
"utopia-php/framework": "0.33.*",
diff --git a/composer.lock b/composer.lock
index cd1cdf2a11..658e16e131 100644
--- a/composer.lock
+++ b/composer.lock
@@ -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": "b5c0db330bf30bd1d240b96116d96baf",
+ "content-hash": "341116bfee981d2d1d6f3e611c3474aa",
"packages": [
{
"name": "adhocore/jwt",
@@ -1428,26 +1428,28 @@
},
{
"name": "utopia-php/abuse",
- "version": "0.38.0",
+ "version": "0.42.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/abuse.git",
- "reference": "b7be9086c9d9b4561d810cbd42fdda798742f56c"
+ "reference": "08cf17e7f4fd213966c8d8702e406f2269244f0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/abuse/zipball/b7be9086c9d9b4561d810cbd42fdda798742f56c",
- "reference": "b7be9086c9d9b4561d810cbd42fdda798742f56c",
+ "url": "https://api.github.com/repos/utopia-php/abuse/zipball/08cf17e7f4fd213966c8d8702e406f2269244f0f",
+ "reference": "08cf17e7f4fd213966c8d8702e406f2269244f0f",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-pdo": "*",
+ "ext-redis": "*",
"php": ">=8.0",
- "utopia-php/database": "0.50.*"
+ "utopia-php/database": "0.52.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
+ "phpbench/phpbench": "^1.2",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^9.4"
},
@@ -1471,9 +1473,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/abuse/issues",
- "source": "https://github.com/utopia-php/abuse/tree/0.38.0"
+ "source": "https://github.com/utopia-php/abuse/tree/0.42.0"
},
- "time": "2024-06-24T00:52:02+00:00"
+ "time": "2024-08-21T08:24:01+00:00"
},
{
"name": "utopia-php/analytics",
@@ -1523,21 +1525,21 @@
},
{
"name": "utopia-php/audit",
- "version": "0.40.0",
+ "version": "0.42.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
- "reference": "735ae211ce5fee5b52b736731571b4030b1d7cdc"
+ "reference": "9dc168470625bcf11ff8cd9ab5660db09129f618"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/735ae211ce5fee5b52b736731571b4030b1d7cdc",
- "reference": "735ae211ce5fee5b52b736731571b4030b1d7cdc",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/9dc168470625bcf11ff8cd9ab5660db09129f618",
+ "reference": "9dc168470625bcf11ff8cd9ab5660db09129f618",
"shasum": ""
},
"require": {
"php": ">=8.0",
- "utopia-php/database": "0.50.*"
+ "utopia-php/database": "0.52.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1564,9 +1566,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.40.0"
+ "source": "https://github.com/utopia-php/audit/tree/0.42.0"
},
- "time": "2024-06-24T00:52:17+00:00"
+ "time": "2024-08-21T08:24:08+00:00"
},
{
"name": "utopia-php/cache",
@@ -1720,16 +1722,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.50.1",
+ "version": "0.52.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "1745147bef29a9bddf5dd03fd9174ec29e2c26f0"
+ "reference": "d22a316a010699c5ebb4768c1020167c192b9c6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/1745147bef29a9bddf5dd03fd9174ec29e2c26f0",
- "reference": "1745147bef29a9bddf5dd03fd9174ec29e2c26f0",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/d22a316a010699c5ebb4768c1020167c192b9c6b",
+ "reference": "d22a316a010699c5ebb4768c1020167c192b9c6b",
"shasum": ""
},
"require": {
@@ -1741,14 +1743,14 @@
"utopia-php/mongo": "0.3.*"
},
"require-dev": {
- "fakerphp/faker": "^1.14",
- "laravel/pint": "1.13.*",
- "pcov/clobber": "^2.0",
- "phpstan/phpstan": "1.10.*",
- "phpunit/phpunit": "^9.4",
- "rregeer/phpunit-coverage-check": "^0.3.1",
- "swoole/ide-helper": "4.8.0",
- "utopia-php/cli": "^0.14.0"
+ "fakerphp/faker": "1.23.*",
+ "laravel/pint": "1.17.*",
+ "pcov/clobber": "2.0.*",
+ "phpstan/phpstan": "1.11.*",
+ "phpunit/phpunit": "9.6.*",
+ "rregeer/phpunit-coverage-check": "0.3.*",
+ "swoole/ide-helper": "5.1.3",
+ "utopia-php/cli": "0.14.*"
},
"type": "library",
"autoload": {
@@ -1770,9 +1772,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.50.1"
+ "source": "https://github.com/utopia-php/database/tree/0.52.1"
},
- "time": "2024-07-26T11:56:05+00:00"
+ "time": "2024-08-23T02:43:43+00:00"
},
{
"name": "utopia-php/domains",
diff --git a/public/images/integrations/aws-logo.svg b/public/images/integrations/aws-logo.svg
new file mode 100644
index 0000000000..3ab41cde07
--- /dev/null
+++ b/public/images/integrations/aws-logo.svg
@@ -0,0 +1,38 @@
+
+
+
diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php
index d54f3f5079..afd083126c 100644
--- a/src/Appwrite/Platform/Workers/Deletes.php
+++ b/src/Appwrite/Platform/Workers/Deletes.php
@@ -7,7 +7,7 @@ use Appwrite\Extend\Exception;
use Executor\Executor;
use Throwable;
use Utopia\Abuse\Abuse;
-use Utopia\Abuse\Adapters\TimeLimit;
+use Utopia\Abuse\Adapters\Database\TimeLimit;
use Utopia\Audit\Audit;
use Utopia\Cache\Adapter\Filesystem;
use Utopia\Cache\Cache;