mirror of
https://github.com/docmost/docmost.git
synced 2025-11-17 10:01:11 +10:00
85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import {
|
|
STORAGE_CONFIG_TOKEN,
|
|
STORAGE_DRIVER_TOKEN,
|
|
} from '../constants/storage.constants';
|
|
import { EnvironmentService } from '../../environment/environment.service';
|
|
import {
|
|
LocalStorageConfig,
|
|
S3StorageConfig,
|
|
StorageConfig,
|
|
StorageDriver,
|
|
StorageOption,
|
|
} from '../interfaces';
|
|
import { LocalDriver, S3Driver } from '../drivers';
|
|
import * as process from 'node:process';
|
|
import { LOCAL_STORAGE_PATH } from '../../../common/helpers';
|
|
import path from 'path';
|
|
|
|
function createStorageDriver(disk: StorageConfig): StorageDriver {
|
|
switch (disk.driver) {
|
|
case StorageOption.LOCAL:
|
|
return new LocalDriver(disk.config as LocalStorageConfig);
|
|
case StorageOption.S3:
|
|
return new S3Driver(disk.config as S3StorageConfig);
|
|
default:
|
|
throw new Error(`Unknown storage driver`);
|
|
}
|
|
}
|
|
|
|
export const storageDriverConfigProvider = {
|
|
provide: STORAGE_CONFIG_TOKEN,
|
|
useFactory: async (environmentService: EnvironmentService) => {
|
|
const driver = environmentService.getStorageDriver().toLowerCase();
|
|
|
|
switch (driver) {
|
|
case StorageOption.LOCAL:
|
|
return {
|
|
driver,
|
|
config: {
|
|
storagePath: LOCAL_STORAGE_PATH,
|
|
},
|
|
};
|
|
|
|
case StorageOption.S3:
|
|
const s3Config = {
|
|
driver,
|
|
config: {
|
|
region: environmentService.getAwsS3Region(),
|
|
endpoint: environmentService.getAwsS3Endpoint(),
|
|
bucket: environmentService.getAwsS3Bucket(),
|
|
baseUrl: environmentService.getAwsS3Url(),
|
|
credentials: undefined,
|
|
},
|
|
};
|
|
|
|
/**
|
|
* This makes use of AWS_S3_ACCESS_KEY_ID and AWS_S3_SECRET_ACCESS_KEY if present,
|
|
* If not present, it makes it lenient for the AWS SDK to use
|
|
* AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY if they are present in the environment
|
|
*/
|
|
if (
|
|
environmentService.getAwsS3AccessKeyId() &&
|
|
environmentService.getAwsS3SecretAccessKey()
|
|
) {
|
|
s3Config.config.credentials = {
|
|
accessKeyId: environmentService.getAwsS3AccessKeyId(),
|
|
secretAccessKey: environmentService.getAwsS3SecretAccessKey(),
|
|
};
|
|
}
|
|
|
|
return s3Config;
|
|
|
|
default:
|
|
throw new Error(`Unknown storage driver: ${driver}`);
|
|
}
|
|
},
|
|
|
|
inject: [EnvironmentService],
|
|
};
|
|
|
|
export const storageDriverProvider = {
|
|
provide: STORAGE_DRIVER_TOKEN,
|
|
useFactory: (config: StorageConfig) => createStorageDriver(config),
|
|
inject: [STORAGE_CONFIG_TOKEN],
|
|
};
|