From 2b9e3f4bf678bda795a1e59f0290503efa070472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 23 Aug 2023 10:29:54 +0000 Subject: [PATCH 1/2] Add support for old vars for storage --- README.md | 2 + app/http.php | 110 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 78 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index b679b91..f2e5812 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ OPR_EXECUTOR_DOCKER_HUB_PASSWORD= > `OPR_EXECUTOR_CONNECTION_STORAGE` takes a DSN string that represents a connection to your storage device. If you would like to use your local filesystem, you can use `file://localhost`. If using S3 or any other provider for storage, use a DSN of the following format `s3://access_key:access_secret@host:port/bucket_name?region=us-east-1` +> For backwards compatibility, executor also supports `OPR_EXECUTOR_STORAGE_*` variables as replacement for `OPR_EXECUTOR_CONNECTION_STORAGE`, as seen in [Appwrite repository](https://github.com/appwrite/appwrite/blob/1.3.8/.env#L26-L46). + 4. Start Docker container: ```bash diff --git a/app/http.php b/app/http.php index 6195f18..99a56e8 100644 --- a/app/http.php +++ b/app/http.php @@ -178,41 +178,83 @@ function logError(Log $log, Throwable $error, string $action, Logger $logger = n function getStorageDevice(string $root): Device { - $connection = \strval(App::getEnv('OPR_EXECUTOR_CONNECTION_STORAGE', '')); - - $acl = 'private'; - $device = ''; - $accessKey = ''; - $accessSecret = ''; - $bucket = ''; - $region = ''; - - try { - $dsn = new DSN($connection); - $device = $dsn->getScheme(); - $accessKey = $dsn->getUser() ?? ''; - $accessSecret = $dsn->getPassword() ?? ''; - $bucket = $dsn->getPath() ?? ''; - $region = $dsn->getParam('region'); - } catch (\Exception $e) { - Console::warning('Defaulting to Local storage due to error: ' . $e->getMessage()); - $device = 'Local'; - } + $connection = App::getEnv('OPR_EXECUTOR_CONNECTION_STORAGE', ''); + + if (!empty($connection)) { + $acl = 'private'; + $device = Storage::DEVICE_LOCAL; + $accessKey = ''; + $accessSecret = ''; + $bucket = ''; + $region = ''; + + try { + $dsn = new DSN($connection); + $device = $dsn->getScheme() ?? ''; + $accessKey = $dsn->getUser() ?? ''; + $accessSecret = $dsn->getPassword() ?? ''; + $bucket = $dsn->getPath() ?? ''; + $region = $dsn->getParam('region') ?? ''; + } catch (\Exception $e) { + Console::warning($e->getMessage() . 'Invalid DSN. Defaulting to Local device.'); + } - switch ($device) { - case Storage::DEVICE_S3: - return new S3($root, $accessKey, $accessSecret, $bucket, $region, $acl); - case Storage::DEVICE_DO_SPACES: - return new DOSpaces($root, $accessKey, $accessSecret, $bucket, $region, $acl); - case Storage::DEVICE_BACKBLAZE: - return new Backblaze($root, $accessKey, $accessSecret, $bucket, $region, $acl); - case Storage::DEVICE_LINODE: - return new Linode($root, $accessKey, $accessSecret, $bucket, $region, $acl); - case Storage::DEVICE_WASABI: - return new Wasabi($root, $accessKey, $accessSecret, $bucket, $region, $acl); - case Storage::DEVICE_LOCAL: - default: - return new Local($root); + switch ($device) { + case Storage::DEVICE_S3: + return new S3($root, $accessKey, $accessSecret, $bucket, $region, $acl); + case STORAGE::DEVICE_DO_SPACES: + return new DOSpaces($root, $accessKey, $accessSecret, $bucket, $region, $acl); + case Storage::DEVICE_BACKBLAZE: + return new Backblaze($root, $accessKey, $accessSecret, $bucket, $region, $acl); + case Storage::DEVICE_LINODE: + return new Linode($root, $accessKey, $accessSecret, $bucket, $region, $acl); + case Storage::DEVICE_WASABI: + return new Wasabi($root, $accessKey, $accessSecret, $bucket, $region, $acl); + case Storage::DEVICE_LOCAL: + default: + return new Local($root); + } + } else { + switch (strtolower(App::getEnv('OPR_EXECUTOR_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { + case Storage::DEVICE_LOCAL: + default: + return new Local($root); + case Storage::DEVICE_S3: + $s3AccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY', ''); + $s3SecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_SECRET', ''); + $s3Region = App::getEnv('OPR_EXECUTOR_STORAGE_S3_REGION', ''); + $s3Bucket = App::getEnv('OPR_EXECUTOR_STORAGE_S3_BUCKET', ''); + $s3Acl = 'private'; + return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); + case Storage::DEVICE_DO_SPACES: + $doSpacesAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY', ''); + $doSpacesSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET', ''); + $doSpacesRegion = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_REGION', ''); + $doSpacesBucket = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET', ''); + $doSpacesAcl = 'private'; + return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl); + case Storage::DEVICE_BACKBLAZE: + $backblazeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY', ''); + $backblazeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET', ''); + $backblazeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION', ''); + $backblazeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET', ''); + $backblazeAcl = 'private'; + return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl); + case Storage::DEVICE_LINODE: + $linodeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY', ''); + $linodeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_SECRET', ''); + $linodeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_REGION', ''); + $linodeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_BUCKET', ''); + $linodeAcl = 'private'; + return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl); + case Storage::DEVICE_WASABI: + $wasabiAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY', ''); + $wasabiSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_SECRET', ''); + $wasabiRegion = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_REGION', ''); + $wasabiBucket = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_BUCKET', ''); + $wasabiAcl = 'private'; + return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl); + } } } From 41ac5437c1d84a10d75a5518d777e3da6c0b2ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 23 Aug 2023 12:32:51 +0200 Subject: [PATCH 2/2] Linter fix --- app/http.php | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/app/http.php b/app/http.php index 99a56e8..6449921 100644 --- a/app/http.php +++ b/app/http.php @@ -190,11 +190,11 @@ function getStorageDevice(string $root): Device try { $dsn = new DSN($connection); - $device = $dsn->getScheme() ?? ''; + $device = $dsn->getScheme(); $accessKey = $dsn->getUser() ?? ''; $accessSecret = $dsn->getPassword() ?? ''; $bucket = $dsn->getPath() ?? ''; - $region = $dsn->getParam('region') ?? ''; + $region = $dsn->getParam('region'); } catch (\Exception $e) { Console::warning($e->getMessage() . 'Invalid DSN. Defaulting to Local device.'); } @@ -215,43 +215,43 @@ function getStorageDevice(string $root): Device return new Local($root); } } else { - switch (strtolower(App::getEnv('OPR_EXECUTOR_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { + switch (strtolower(App::getEnv('OPR_EXECUTOR_STORAGE_DEVICE', Storage::DEVICE_LOCAL) ?? '')) { case Storage::DEVICE_LOCAL: default: return new Local($root); case Storage::DEVICE_S3: - $s3AccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY', ''); - $s3SecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_SECRET', ''); - $s3Region = App::getEnv('OPR_EXECUTOR_STORAGE_S3_REGION', ''); - $s3Bucket = App::getEnv('OPR_EXECUTOR_STORAGE_S3_BUCKET', ''); + $s3AccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY', '') ?? ''; + $s3SecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_SECRET', '') ?? ''; + $s3Region = App::getEnv('OPR_EXECUTOR_STORAGE_S3_REGION', '') ?? ''; + $s3Bucket = App::getEnv('OPR_EXECUTOR_STORAGE_S3_BUCKET', '') ?? ''; $s3Acl = 'private'; return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); case Storage::DEVICE_DO_SPACES: - $doSpacesAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY', ''); - $doSpacesSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET', ''); - $doSpacesRegion = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_REGION', ''); - $doSpacesBucket = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET', ''); + $doSpacesAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY', '') ?? ''; + $doSpacesSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET', '') ?? ''; + $doSpacesRegion = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_REGION', '') ?? ''; + $doSpacesBucket = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET', '') ?? ''; $doSpacesAcl = 'private'; return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl); case Storage::DEVICE_BACKBLAZE: - $backblazeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY', ''); - $backblazeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET', ''); - $backblazeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION', ''); - $backblazeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET', ''); + $backblazeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY', '') ?? ''; + $backblazeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET', '') ?? ''; + $backblazeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION', '') ?? ''; + $backblazeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET', '') ?? ''; $backblazeAcl = 'private'; return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl); case Storage::DEVICE_LINODE: - $linodeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY', ''); - $linodeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_SECRET', ''); - $linodeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_REGION', ''); - $linodeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_BUCKET', ''); + $linodeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY', '') ?? ''; + $linodeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_SECRET', '') ?? ''; + $linodeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_REGION', '') ?? ''; + $linodeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_BUCKET', '') ?? ''; $linodeAcl = 'private'; return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl); case Storage::DEVICE_WASABI: - $wasabiAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY', ''); - $wasabiSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_SECRET', ''); - $wasabiRegion = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_REGION', ''); - $wasabiBucket = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_BUCKET', ''); + $wasabiAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY', '') ?? ''; + $wasabiSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_SECRET', '') ?? ''; + $wasabiRegion = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_REGION', '') ?? ''; + $wasabiBucket = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_BUCKET', '') ?? ''; $wasabiAcl = 'private'; return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl); }