mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 03:53:40 -05:00
Move base64/hex methods to PersistorHelper
Also add some null-safety checks
This commit is contained in:
parent
d9c9d74994
commit
e58284aefe
3 changed files with 16 additions and 14 deletions
|
@ -10,16 +10,12 @@ const PersistorHelper = require('./PersistorHelper')
|
||||||
|
|
||||||
const pipeline = promisify(Stream.pipeline)
|
const pipeline = promisify(Stream.pipeline)
|
||||||
|
|
||||||
function base64ToHex(base64) {
|
|
||||||
return Buffer.from(base64, 'base64').toString('hex')
|
|
||||||
}
|
|
||||||
|
|
||||||
// both of these settings will be null by default except for tests
|
// both of these settings will be null by default except for tests
|
||||||
// that's OK - GCS uses the locally-configured service account by default
|
// that's OK - GCS uses the locally-configured service account by default
|
||||||
const storage = new Storage(settings.filestore.gcs)
|
const storage = new Storage(settings.filestore.gcs)
|
||||||
// workaround for broken uploads with custom endpoints:
|
// workaround for broken uploads with custom endpoints:
|
||||||
// https://github.com/googleapis/nodejs-storage/issues/898
|
// https://github.com/googleapis/nodejs-storage/issues/898
|
||||||
if (settings.filestore.gcs.apiEndpoint) {
|
if (settings.filestore.gcs && settings.filestore.gcs.apiEndpoint) {
|
||||||
storage.interceptors.push({
|
storage.interceptors.push({
|
||||||
request: function(reqOpts) {
|
request: function(reqOpts) {
|
||||||
const url = new URL(reqOpts.uri)
|
const url = new URL(reqOpts.uri)
|
||||||
|
@ -95,7 +91,7 @@ async function sendStream(bucket, key, readStream, sourceMd5) {
|
||||||
if (sourceMd5) {
|
if (sourceMd5) {
|
||||||
writeOptions.validation = 'md5'
|
writeOptions.validation = 'md5'
|
||||||
writeOptions.metadata = {
|
writeOptions.metadata = {
|
||||||
md5Hash: sourceMd5
|
md5Hash: PersistorHelper.hexToBase64(sourceMd5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +119,7 @@ async function sendStream(bucket, key, readStream, sourceMd5) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getFileStream(bucket, key, opts) {
|
async function getFileStream(bucket, key, opts = {}) {
|
||||||
if (opts.end) {
|
if (opts.end) {
|
||||||
// S3 (and http range headers) treat 'end' as inclusive, so increase this by 1
|
// S3 (and http range headers) treat 'end' as inclusive, so increase this by 1
|
||||||
opts.end++
|
opts.end++
|
||||||
|
@ -174,7 +170,7 @@ async function getFileMd5Hash(bucket, key) {
|
||||||
.bucket(bucket)
|
.bucket(bucket)
|
||||||
.file(key)
|
.file(key)
|
||||||
.getMetadata()
|
.getMetadata()
|
||||||
return base64ToHex(metadata[0].md5Hash)
|
return PersistorHelper.base64ToHex(metadata[0].md5Hash)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw PersistorHelper.wrapError(
|
throw PersistorHelper.wrapError(
|
||||||
err,
|
err,
|
||||||
|
|
|
@ -12,7 +12,9 @@ module.exports = {
|
||||||
verifyMd5,
|
verifyMd5,
|
||||||
getMeteredStream,
|
getMeteredStream,
|
||||||
waitForStreamReady,
|
waitForStreamReady,
|
||||||
wrapError
|
wrapError,
|
||||||
|
hexToBase64,
|
||||||
|
base64ToHex
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a promise which resolves with the md5 hash of the stream
|
// returns a promise which resolves with the md5 hash of the stream
|
||||||
|
@ -103,3 +105,11 @@ function wrapError(error, message, params, ErrorType) {
|
||||||
}).withCause(error)
|
}).withCause(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function base64ToHex(base64) {
|
||||||
|
return Buffer.from(base64, 'base64').toString('hex')
|
||||||
|
}
|
||||||
|
|
||||||
|
function hexToBase64(hex) {
|
||||||
|
return Buffer.from(hex, 'hex').toString('base64')
|
||||||
|
}
|
||||||
|
|
|
@ -46,10 +46,6 @@ const S3Persistor = {
|
||||||
|
|
||||||
module.exports = S3Persistor
|
module.exports = S3Persistor
|
||||||
|
|
||||||
function hexToBase64(hex) {
|
|
||||||
return Buffer.from(hex, 'hex').toString('base64')
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendFile(bucketName, key, fsPath) {
|
async function sendFile(bucketName, key, fsPath) {
|
||||||
let readStream
|
let readStream
|
||||||
try {
|
try {
|
||||||
|
@ -72,7 +68,7 @@ async function sendStream(bucketName, key, readStream, sourceMd5) {
|
||||||
let b64Hash
|
let b64Hash
|
||||||
|
|
||||||
if (sourceMd5) {
|
if (sourceMd5) {
|
||||||
b64Hash = hexToBase64(sourceMd5)
|
b64Hash = PersistorHelper.hexToBase64(sourceMd5)
|
||||||
} else {
|
} else {
|
||||||
hashPromise = PersistorHelper.calculateStreamMd5(readStream)
|
hashPromise = PersistorHelper.calculateStreamMd5(readStream)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue