]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/lib/object-storage/shared/client.ts
Translated using Weblate (Persian)
[github/Chocobozzz/PeerTube.git] / server / lib / object-storage / shared / client.ts
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 }