summary refs log tree commit diff
path: root/src/cdn/util/Storage.ts
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-08-30 15:05:23 +1000
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-08-30 15:08:18 +1000
commit16315a3170ec018a834e68360e06b506415446d2 (patch)
tree90cfe456040fce35b904e88462886e3c73a2f3f2 /src/cdn/util/Storage.ts
parentStart listening after database and config has been loaded (diff)
parentOop, deprecated typeorm call (diff)
downloadserver-16315a3170ec018a834e68360e06b506415446d2.tar.xz
Merge branch 'staging' into dev/Maddy/fix/listeningAfterDb
Diffstat (limited to 'src/cdn/util/Storage.ts')
-rw-r--r--src/cdn/util/Storage.ts58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/cdn/util/Storage.ts b/src/cdn/util/Storage.ts
new file mode 100644

index 00000000..1ab6a1d9 --- /dev/null +++ b/src/cdn/util/Storage.ts
@@ -0,0 +1,58 @@ +import path from "path"; +import { FileStorage } from "./FileStorage"; +//import fse from "fs-extra"; +import { S3 } from "@aws-sdk/client-s3"; +import fs from "fs"; +import { bgCyan, black } from "picocolors"; +import { S3Storage } from "./S3Storage"; +process.cwd(); + +export interface Storage { + set(path: string, data: Buffer): Promise<void>; + get(path: string): Promise<Buffer | null>; + delete(path: string): Promise<void>; +} + +let storage: Storage; + +if (process.env.STORAGE_PROVIDER === "file" || !process.env.STORAGE_PROVIDER) { + let location = process.env.STORAGE_LOCATION; + if (location) { + location = path.resolve(location); + } else { + location = path.join(process.cwd(), "files"); + } + console.log(`[CDN] storage location: ${bgCyan(`${black(location)}`)}`); + //fse.ensureDirSync(location); + fs.mkdirSync(location, { recursive: true }); + process.env.STORAGE_LOCATION = location; + + storage = new FileStorage(); +} else if (process.env.STORAGE_PROVIDER === "s3") { + const region = process.env.STORAGE_REGION, + bucket = process.env.STORAGE_BUCKET; + + if (!region) { + console.error(`[CDN] You must provide a region when using the S3 storage provider.`); + process.exit(1); + } + + if (!bucket) { + console.error(`[CDN] You must provide a bucket when using the S3 storage provider.`); + process.exit(1); + } + + // in the S3 provider, this should be the root path in the bucket + let location = process.env.STORAGE_LOCATION; + + if (!location) { + console.warn(`[CDN] STORAGE_LOCATION unconfigured for S3 provider, defaulting to the bucket root...`); + location = undefined; + } + + const client = new S3({ region }); + + storage = new S3Storage(client, bucket, location); +} + +export { storage };