]>
Commit | Line | Data |
---|---|---|
0305db28 JB |
1 | import { S3Client } from '@aws-sdk/client-s3' |
2 | import { logger } from '@server/helpers/logger' | |
3 | import { CONFIG } from '@server/initializers/config' | |
4 | import { lTags } from './logger' | |
5 | ||
6 | let endpointParsed: URL | |
7 | function getEndpointParsed () { | |
8 | if (endpointParsed) return endpointParsed | |
9 | ||
10 | endpointParsed = new URL(getEndpoint()) | |
11 | ||
12 | return endpointParsed | |
13 | } | |
14 | ||
15 | let s3Client: S3Client | |
16 | function getClient () { | |
17 | if (s3Client) return s3Client | |
18 | ||
19 | const OBJECT_STORAGE = CONFIG.OBJECT_STORAGE | |
20 | ||
21 | s3Client = new S3Client({ | |
22 | endpoint: getEndpoint(), | |
23 | region: OBJECT_STORAGE.REGION, | |
24 | credentials: OBJECT_STORAGE.CREDENTIALS.ACCESS_KEY_ID | |
25 | ? { | |
26 | accessKeyId: OBJECT_STORAGE.CREDENTIALS.ACCESS_KEY_ID, | |
27 | secretAccessKey: OBJECT_STORAGE.CREDENTIALS.SECRET_ACCESS_KEY | |
28 | } | |
29 | : undefined | |
30 | }) | |
31 | ||
32 | logger.info('Initialized S3 client %s with region %s.', getEndpoint(), OBJECT_STORAGE.REGION, lTags()) | |
33 | ||
34 | return s3Client | |
35 | } | |
36 | ||
37 | // --------------------------------------------------------------------------- | |
38 | ||
39 | export { | |
40 | getEndpointParsed, | |
41 | getClient | |
42 | } | |
43 | ||
44 | // --------------------------------------------------------------------------- | |
45 | ||
46 | let endpoint: string | |
47 | function getEndpoint () { | |
48 | if (endpoint) return endpoint | |
49 | ||
50 | const endpointConfig = CONFIG.OBJECT_STORAGE.ENDPOINT | |
51 | endpoint = endpointConfig.startsWith('http://') || endpointConfig.startsWith('https://') | |
52 | ? CONFIG.OBJECT_STORAGE.ENDPOINT | |
53 | : 'https://' + CONFIG.OBJECT_STORAGE.ENDPOINT | |
54 | ||
55 | return endpoint | |
56 | } |