Skip to content

Commit 85a715d

Browse files
authored
Merge pull request #37 from open-runtimes/feat-backawrds-storage-support
2 parents 2376110 + 41ac543 commit 85a715d

File tree

2 files changed

+78
-34
lines changed

2 files changed

+78
-34
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ OPR_EXECUTOR_DOCKER_HUB_PASSWORD=
8989

9090
> `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`
9191

92+
> 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).
93+
9294
4. Start Docker container:
9395

9496
```bash

app/http.php

Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -178,41 +178,83 @@ function logError(Log $log, Throwable $error, string $action, Logger $logger = n
178178

179179
function getStorageDevice(string $root): Device
180180
{
181-
$connection = \strval(App::getEnv('OPR_EXECUTOR_CONNECTION_STORAGE', ''));
182-
183-
$acl = 'private';
184-
$device = '';
185-
$accessKey = '';
186-
$accessSecret = '';
187-
$bucket = '';
188-
$region = '';
189-
190-
try {
191-
$dsn = new DSN($connection);
192-
$device = $dsn->getScheme();
193-
$accessKey = $dsn->getUser() ?? '';
194-
$accessSecret = $dsn->getPassword() ?? '';
195-
$bucket = $dsn->getPath() ?? '';
196-
$region = $dsn->getParam('region');
197-
} catch (\Exception $e) {
198-
Console::warning('Defaulting to Local storage due to error: ' . $e->getMessage());
199-
$device = 'Local';
200-
}
181+
$connection = App::getEnv('OPR_EXECUTOR_CONNECTION_STORAGE', '');
182+
183+
if (!empty($connection)) {
184+
$acl = 'private';
185+
$device = Storage::DEVICE_LOCAL;
186+
$accessKey = '';
187+
$accessSecret = '';
188+
$bucket = '';
189+
$region = '';
190+
191+
try {
192+
$dsn = new DSN($connection);
193+
$device = $dsn->getScheme();
194+
$accessKey = $dsn->getUser() ?? '';
195+
$accessSecret = $dsn->getPassword() ?? '';
196+
$bucket = $dsn->getPath() ?? '';
197+
$region = $dsn->getParam('region');
198+
} catch (\Exception $e) {
199+
Console::warning($e->getMessage() . 'Invalid DSN. Defaulting to Local device.');
200+
}
201201

202-
switch ($device) {
203-
case Storage::DEVICE_S3:
204-
return new S3($root, $accessKey, $accessSecret, $bucket, $region, $acl);
205-
case Storage::DEVICE_DO_SPACES:
206-
return new DOSpaces($root, $accessKey, $accessSecret, $bucket, $region, $acl);
207-
case Storage::DEVICE_BACKBLAZE:
208-
return new Backblaze($root, $accessKey, $accessSecret, $bucket, $region, $acl);
209-
case Storage::DEVICE_LINODE:
210-
return new Linode($root, $accessKey, $accessSecret, $bucket, $region, $acl);
211-
case Storage::DEVICE_WASABI:
212-
return new Wasabi($root, $accessKey, $accessSecret, $bucket, $region, $acl);
213-
case Storage::DEVICE_LOCAL:
214-
default:
215-
return new Local($root);
202+
switch ($device) {
203+
case Storage::DEVICE_S3:
204+
return new S3($root, $accessKey, $accessSecret, $bucket, $region, $acl);
205+
case STORAGE::DEVICE_DO_SPACES:
206+
return new DOSpaces($root, $accessKey, $accessSecret, $bucket, $region, $acl);
207+
case Storage::DEVICE_BACKBLAZE:
208+
return new Backblaze($root, $accessKey, $accessSecret, $bucket, $region, $acl);
209+
case Storage::DEVICE_LINODE:
210+
return new Linode($root, $accessKey, $accessSecret, $bucket, $region, $acl);
211+
case Storage::DEVICE_WASABI:
212+
return new Wasabi($root, $accessKey, $accessSecret, $bucket, $region, $acl);
213+
case Storage::DEVICE_LOCAL:
214+
default:
215+
return new Local($root);
216+
}
217+
} else {
218+
switch (strtolower(App::getEnv('OPR_EXECUTOR_STORAGE_DEVICE', Storage::DEVICE_LOCAL) ?? '')) {
219+
case Storage::DEVICE_LOCAL:
220+
default:
221+
return new Local($root);
222+
case Storage::DEVICE_S3:
223+
$s3AccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY', '') ?? '';
224+
$s3SecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_S3_SECRET', '') ?? '';
225+
$s3Region = App::getEnv('OPR_EXECUTOR_STORAGE_S3_REGION', '') ?? '';
226+
$s3Bucket = App::getEnv('OPR_EXECUTOR_STORAGE_S3_BUCKET', '') ?? '';
227+
$s3Acl = 'private';
228+
return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl);
229+
case Storage::DEVICE_DO_SPACES:
230+
$doSpacesAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY', '') ?? '';
231+
$doSpacesSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET', '') ?? '';
232+
$doSpacesRegion = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_REGION', '') ?? '';
233+
$doSpacesBucket = App::getEnv('OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET', '') ?? '';
234+
$doSpacesAcl = 'private';
235+
return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl);
236+
case Storage::DEVICE_BACKBLAZE:
237+
$backblazeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY', '') ?? '';
238+
$backblazeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET', '') ?? '';
239+
$backblazeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION', '') ?? '';
240+
$backblazeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET', '') ?? '';
241+
$backblazeAcl = 'private';
242+
return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl);
243+
case Storage::DEVICE_LINODE:
244+
$linodeAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY', '') ?? '';
245+
$linodeSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_SECRET', '') ?? '';
246+
$linodeRegion = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_REGION', '') ?? '';
247+
$linodeBucket = App::getEnv('OPR_EXECUTOR_STORAGE_LINODE_BUCKET', '') ?? '';
248+
$linodeAcl = 'private';
249+
return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl);
250+
case Storage::DEVICE_WASABI:
251+
$wasabiAccessKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY', '') ?? '';
252+
$wasabiSecretKey = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_SECRET', '') ?? '';
253+
$wasabiRegion = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_REGION', '') ?? '';
254+
$wasabiBucket = App::getEnv('OPR_EXECUTOR_STORAGE_WASABI_BUCKET', '') ?? '';
255+
$wasabiAcl = 'private';
256+
return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl);
257+
}
216258
}
217259
}
218260

0 commit comments

Comments
 (0)