mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-25 15:13:27 +00:00
Support custom S3 endpoints
This commit is contained in:
parent
96457597ac
commit
c01603b1e7
1 changed files with 37 additions and 23 deletions
|
@ -16,10 +16,15 @@ LocalFileWriter = require("./LocalFileWriter")
|
||||||
Errors = require("./Errors")
|
Errors = require("./Errors")
|
||||||
_ = require("underscore")
|
_ = require("underscore")
|
||||||
awsS3 = require "aws-sdk/clients/s3"
|
awsS3 = require "aws-sdk/clients/s3"
|
||||||
|
URL = require('url')
|
||||||
|
|
||||||
thirtySeconds = 30 * 1000
|
thirtySeconds = 30 * 1000
|
||||||
|
|
||||||
buildDefaultOptions = (bucketName, method, key)->
|
buildDefaultOptions = (bucketName, method, key)->
|
||||||
|
if settings.filestore.s3.endpoint
|
||||||
|
endpoint = "#{settings.filestore.s3.endpoint}/#{bucketName}"
|
||||||
|
else
|
||||||
|
endpoint = "https://#{bucketName}.s3.amazonaws.com"
|
||||||
return {
|
return {
|
||||||
aws:
|
aws:
|
||||||
key: settings.filestore.s3.key
|
key: settings.filestore.s3.key
|
||||||
|
@ -27,32 +32,47 @@ buildDefaultOptions = (bucketName, method, key)->
|
||||||
bucket: bucketName
|
bucket: bucketName
|
||||||
method: method
|
method: method
|
||||||
timeout: thirtySeconds
|
timeout: thirtySeconds
|
||||||
uri:"https://#{bucketName}.s3.amazonaws.com/#{key}"
|
uri:"#{endpoint}/#{key}"
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultS3Client = new awsS3({
|
getS3Options = (credentials) ->
|
||||||
credentials:
|
options =
|
||||||
accessKeyId: settings.filestore.s3.key,
|
credentials:
|
||||||
secretAccessKey: settings.filestore.s3.secret
|
accessKeyId: credentials.auth_key
|
||||||
})
|
secretAccessKey: credentials.auth_secret
|
||||||
|
|
||||||
|
if settings.filestore.s3.endpoint
|
||||||
|
options.endpoint = settings.filestore.s3.endpoint
|
||||||
|
options.sslEnabled = false
|
||||||
|
|
||||||
|
return options
|
||||||
|
|
||||||
|
defaultS3Client = new awsS3(getS3Options({
|
||||||
|
auth_key: settings.filestore.s3.key,
|
||||||
|
auth_secret: settings.filestore.s3.secret
|
||||||
|
}))
|
||||||
|
|
||||||
getS3Client = (credentials) ->
|
getS3Client = (credentials) ->
|
||||||
if credentials?
|
if credentials?
|
||||||
return new awsS3({
|
return new awsS3(getS3Options(credentials))
|
||||||
credentials:
|
|
||||||
accessKeyId: credentials.auth_key
|
|
||||||
secretAccessKey: credentials.auth_secret
|
|
||||||
})
|
|
||||||
else
|
else
|
||||||
return defaultS3Client
|
return defaultS3Client
|
||||||
|
|
||||||
|
getKnoxClient = (bucketName) =>
|
||||||
|
options =
|
||||||
|
key: settings.filestore.s3.key
|
||||||
|
secret: settings.filestore.s3.secret
|
||||||
|
bucket: bucketName
|
||||||
|
if settings.filestore.s3.endpoint
|
||||||
|
endpoint = URL.parse(settings.filestore.s3.endpoint)
|
||||||
|
options.endpoint = endpoint.hostname
|
||||||
|
options.port = endpoint.port
|
||||||
|
return knox.createClient(options)
|
||||||
|
|
||||||
module.exports =
|
module.exports =
|
||||||
|
|
||||||
sendFile: (bucketName, key, fsPath, callback)->
|
sendFile: (bucketName, key, fsPath, callback)->
|
||||||
s3Client = knox.createClient
|
s3Client = getKnoxClient(bucketName)
|
||||||
key: settings.filestore.s3.key
|
|
||||||
secret: settings.filestore.s3.secret
|
|
||||||
bucket: bucketName
|
|
||||||
putEventEmiter = s3Client.putFile fsPath, key, (err, res)->
|
putEventEmiter = s3Client.putFile fsPath, key, (err, res)->
|
||||||
if err?
|
if err?
|
||||||
logger.err err:err, bucketName:bucketName, key:key, fsPath:fsPath,"something went wrong uploading file to s3"
|
logger.err err:err, bucketName:bucketName, key:key, fsPath:fsPath,"something went wrong uploading file to s3"
|
||||||
|
@ -171,10 +191,7 @@ module.exports =
|
||||||
_callback = () ->
|
_callback = () ->
|
||||||
|
|
||||||
logger.log key: key, bucketName: bucketName, "deleting directory"
|
logger.log key: key, bucketName: bucketName, "deleting directory"
|
||||||
s3Client = knox.createClient
|
s3Client = getKnoxClient(bucketName)
|
||||||
key: settings.filestore.s3.key
|
|
||||||
secret: settings.filestore.s3.secret
|
|
||||||
bucket: bucketName
|
|
||||||
s3Client.list prefix:key, (err, data)->
|
s3Client.list prefix:key, (err, data)->
|
||||||
if err?
|
if err?
|
||||||
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in aws"
|
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in aws"
|
||||||
|
@ -200,10 +217,7 @@ module.exports =
|
||||||
|
|
||||||
directorySize:(bucketName, key, callback)->
|
directorySize:(bucketName, key, callback)->
|
||||||
logger.log bucketName:bucketName, key:key, "get project size in s3"
|
logger.log bucketName:bucketName, key:key, "get project size in s3"
|
||||||
s3Client = knox.createClient
|
s3Client = getKnoxClient(bucketName)
|
||||||
key: settings.filestore.s3.key
|
|
||||||
secret: settings.filestore.s3.secret
|
|
||||||
bucket: bucketName
|
|
||||||
s3Client.list prefix:key, (err, data)->
|
s3Client.list prefix:key, (err, data)->
|
||||||
if err?
|
if err?
|
||||||
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in aws"
|
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in aws"
|
||||||
|
|
Loading…
Add table
Reference in a new issue