mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-14 20:40:17 -05:00
Merge pull request #21660 from overleaf/jpa-s3-https
[object-persistor] s3: simplify using a custom CA for HTTPS endpoints GitOrigin-RevId: 2c6a5312a842582e5e40e917ccc586392087cb7a
This commit is contained in:
parent
65dc6bf940
commit
122d89a831
5 changed files with 18 additions and 34 deletions
|
@ -523,7 +523,7 @@ class S3Persistor extends AbstractPersistor {
|
||||||
if (this.settings.endpoint) {
|
if (this.settings.endpoint) {
|
||||||
const endpoint = new URL(this.settings.endpoint)
|
const endpoint = new URL(this.settings.endpoint)
|
||||||
options.endpoint = this.settings.endpoint
|
options.endpoint = this.settings.endpoint
|
||||||
options.sslEnabled = endpoint.protocol === 'https'
|
options.sslEnabled = endpoint.protocol === 'https:'
|
||||||
}
|
}
|
||||||
|
|
||||||
// path-style access is only used for acceptance tests
|
// path-style access is only used for acceptance tests
|
||||||
|
@ -537,6 +537,14 @@ class S3Persistor extends AbstractPersistor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.sslEnabled && this.settings.ca && !options.httpOptions?.agent) {
|
||||||
|
options.httpOptions = options.httpOptions || {}
|
||||||
|
options.httpOptions.agent = new https.Agent({
|
||||||
|
rejectUnauthorized: true,
|
||||||
|
ca: this.settings.ca,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
package-lock.json
generated
2
package-lock.json
generated
|
@ -39546,7 +39546,6 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@google-cloud/storage": "^6.10.1",
|
"@google-cloud/storage": "^6.10.1",
|
||||||
"aws-sdk": "^2.718.0",
|
|
||||||
"chai": "^4.3.6",
|
"chai": "^4.3.6",
|
||||||
"chai-as-promised": "^7.1.1",
|
"chai-as-promised": "^7.1.1",
|
||||||
"mocha": "^10.2.0",
|
"mocha": "^10.2.0",
|
||||||
|
@ -50110,7 +50109,6 @@
|
||||||
"@overleaf/object-persistor": "*",
|
"@overleaf/object-persistor": "*",
|
||||||
"@overleaf/settings": "*",
|
"@overleaf/settings": "*",
|
||||||
"@overleaf/stream-utils": "^0.1.0",
|
"@overleaf/stream-utils": "^0.1.0",
|
||||||
"aws-sdk": "^2.718.0",
|
|
||||||
"body-parser": "^1.20.3",
|
"body-parser": "^1.20.3",
|
||||||
"bunyan": "^1.8.15",
|
"bunyan": "^1.8.15",
|
||||||
"chai": "^4.3.6",
|
"chai": "^4.3.6",
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@google-cloud/storage": "^6.10.1",
|
"@google-cloud/storage": "^6.10.1",
|
||||||
"aws-sdk": "^2.718.0",
|
|
||||||
"chai": "^4.3.6",
|
"chai": "^4.3.6",
|
||||||
"chai-as-promised": "^7.1.1",
|
"chai-as-promised": "^7.1.1",
|
||||||
"mocha": "^10.2.0",
|
"mocha": "^10.2.0",
|
||||||
|
|
|
@ -7,7 +7,6 @@ const Path = require('path')
|
||||||
const FilestoreApp = require('./FilestoreApp')
|
const FilestoreApp = require('./FilestoreApp')
|
||||||
const TestHelper = require('./TestHelper')
|
const TestHelper = require('./TestHelper')
|
||||||
const fetch = require('node-fetch')
|
const fetch = require('node-fetch')
|
||||||
const S3 = require('aws-sdk/clients/s3')
|
|
||||||
const { promisify } = require('util')
|
const { promisify } = require('util')
|
||||||
const { Storage } = require('@google-cloud/storage')
|
const { Storage } = require('@google-cloud/storage')
|
||||||
const streamifier = require('streamifier')
|
const streamifier = require('streamifier')
|
||||||
|
@ -43,6 +42,7 @@ const {
|
||||||
PerProjectEncryptedS3Persistor,
|
PerProjectEncryptedS3Persistor,
|
||||||
RootKeyEncryptionKey,
|
RootKeyEncryptionKey,
|
||||||
} = require('@overleaf/object-persistor/src/PerProjectEncryptedS3Persistor')
|
} = require('@overleaf/object-persistor/src/PerProjectEncryptedS3Persistor')
|
||||||
|
const { S3Persistor } = require('@overleaf/object-persistor/src/S3Persistor')
|
||||||
const crypto = require('crypto')
|
const crypto = require('crypto')
|
||||||
|
|
||||||
describe('Filestore', function () {
|
describe('Filestore', function () {
|
||||||
|
@ -521,18 +521,11 @@ describe('Filestore', function () {
|
||||||
bucketName = `random-bucket-${new ObjectId().toString()}`
|
bucketName = `random-bucket-${new ObjectId().toString()}`
|
||||||
fileUrl = `${filestoreUrl}/bucket/${bucketName}/key/${fileId}`
|
fileUrl = `${filestoreUrl}/bucket/${bucketName}/key/${fileId}`
|
||||||
|
|
||||||
const cfg = s3Config()
|
const s3 = new S3Persistor({
|
||||||
const s3ClientSettings = {
|
...s3Config(),
|
||||||
credentials: {
|
key: process.env.MINIO_ROOT_USER,
|
||||||
accessKeyId: process.env.MINIO_ROOT_USER,
|
secret: process.env.MINIO_ROOT_PASSWORD,
|
||||||
secretAccessKey: process.env.MINIO_ROOT_PASSWORD,
|
})._getClientForBucket(bucketName)
|
||||||
},
|
|
||||||
endpoint: cfg.endpoint,
|
|
||||||
httpOptions: cfg.httpOptions,
|
|
||||||
s3ForcePathStyle: cfg.pathStyle,
|
|
||||||
}
|
|
||||||
|
|
||||||
const s3 = new S3(s3ClientSettings)
|
|
||||||
await s3
|
await s3
|
||||||
.createBucket({
|
.createBucket({
|
||||||
Bucket: bucketName,
|
Bucket: bucketName,
|
||||||
|
@ -1263,16 +1256,8 @@ describe('Filestore', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
let s3Client
|
let s3Client
|
||||||
before('create s3Client', function () {
|
before('create s3 client', function () {
|
||||||
const cfg = s3Config()
|
s3Client = new S3Persistor(s3Config())._getClientForBucket('')
|
||||||
const s3ClientSettings = {
|
|
||||||
accessKeyId: cfg.key,
|
|
||||||
secretAccessKey: cfg.secret,
|
|
||||||
endpoint: cfg.endpoint,
|
|
||||||
httpOptions: cfg.httpOptions,
|
|
||||||
s3ForcePathStyle: cfg.pathStyle,
|
|
||||||
}
|
|
||||||
s3Client = new S3(s3ClientSettings)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
async function checkDEKStorage({
|
async function checkDEKStorage({
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const Path = require('path')
|
const Path = require('path')
|
||||||
const crypto = require('crypto')
|
const crypto = require('crypto')
|
||||||
const https = require('https')
|
|
||||||
const {
|
const {
|
||||||
RootKeyEncryptionKey,
|
RootKeyEncryptionKey,
|
||||||
} = require('@overleaf/object-persistor/src/PerProjectEncryptedS3Persistor')
|
} = require('@overleaf/object-persistor/src/PerProjectEncryptedS3Persistor')
|
||||||
|
@ -12,12 +11,7 @@ function s3BaseConfig() {
|
||||||
endpoint: process.env.AWS_S3_ENDPOINT,
|
endpoint: process.env.AWS_S3_ENDPOINT,
|
||||||
pathStyle: true,
|
pathStyle: true,
|
||||||
partSize: 100 * 1024 * 1024,
|
partSize: 100 * 1024 * 1024,
|
||||||
httpOptions: {
|
ca: [fs.readFileSync('/certs/public.crt')],
|
||||||
agent: new https.Agent({
|
|
||||||
rejectUnauthorized: true,
|
|
||||||
ca: [fs.readFileSync('/certs/public.crt')],
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue