]>
Commit | Line | Data |
---|---|---|
1 | import { S3Client } from '@aws-sdk/client-s3' | |
2 | import { NodeHttpHandler } from '@aws-sdk/node-http-handler' | |
3 | import { logger } from '@server/helpers/logger' | |
4 | import { isProxyEnabled } from '@server/helpers/proxy' | |
5 | import { getAgent } from '@server/helpers/requests' | |
6 | import { CONFIG } from '@server/initializers/config' | |
7 | import { lTags } from './logger' | |
8 | ||
9 | function getProxyRequestHandler () { | |
10 | if (!isProxyEnabled()) return null | |
11 | ||
12 | const { agent } = getAgent() | |
13 | ||
14 | return new NodeHttpHandler({ | |
15 | httpAgent: agent.http, | |
16 | httpsAgent: agent.https | |
17 | }) | |
18 | } | |
19 | ||
20 | let endpointParsed: URL | |
21 | function getEndpointParsed () { | |
22 | if (endpointParsed) return endpointParsed | |
23 | ||
24 | endpointParsed = new URL(getEndpoint()) | |
25 | ||
26 | return endpointParsed | |
27 | } | |
28 | ||
29 | let s3Client: S3Client | |
30 | function getClient () { | |
31 | if (s3Client) return s3Client | |
32 | ||
33 | const OBJECT_STORAGE = CONFIG.OBJECT_STORAGE | |
34 | ||
35 | s3Client = new S3Client({ | |
36 | endpoint: getEndpoint(), | |
37 | region: OBJECT_STORAGE.REGION, | |
38 | credentials: OBJECT_STORAGE.CREDENTIALS.ACCESS_KEY_ID | |
39 | ? { | |
40 | accessKeyId: OBJECT_STORAGE.CREDENTIALS.ACCESS_KEY_ID, | |
41 | secretAccessKey: OBJECT_STORAGE.CREDENTIALS.SECRET_ACCESS_KEY | |
42 | } | |
43 | : undefined, | |
44 | requestHandler: getProxyRequestHandler() | |
45 | }) | |
46 | ||
47 | logger.info('Initialized S3 client %s with region %s.', getEndpoint(), OBJECT_STORAGE.REGION, lTags()) | |
48 | ||
49 | return s3Client | |
50 | } | |
51 | ||
52 | // --------------------------------------------------------------------------- | |
53 | ||
54 | export { | |
55 | getEndpointParsed, | |
56 | getClient | |
57 | } | |
58 | ||
59 | // --------------------------------------------------------------------------- | |
60 | ||
61 | let endpoint: string | |
62 | function getEndpoint () { | |
63 | if (endpoint) return endpoint | |
64 | ||
65 | const endpointConfig = CONFIG.OBJECT_STORAGE.ENDPOINT | |
66 | endpoint = endpointConfig.startsWith('http://') || endpointConfig.startsWith('https://') | |
67 | ? CONFIG.OBJECT_STORAGE.ENDPOINT | |
68 | : 'https://' + CONFIG.OBJECT_STORAGE.ENDPOINT | |
69 | ||
70 | return endpoint | |
71 | } |