core: fix s3 proxy

pull/532/head^2
undefined 2 years ago
parent da691bed8a
commit c92d03e204
No known key found for this signature in database

@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "4.9.13",
"version": "4.9.14",
"bin": "bin/hydrooj.js",
"main": "src/plugin-api",
"module": "src/plugin-api",

@ -61,6 +61,7 @@ class RemoteStorageService {
public client: S3Client;
public error = '';
public bucket = 'hydro';
private replaceWithAlternativeUrlFor: Partial<Record<'user' | 'judge', (originalUrl: string) => string>>;
private alternatives: Record<'user' | 'judge', S3Client> = {
user: null,
judge: null,
@ -92,17 +93,22 @@ class RemoteStorageService {
endpoint: endPoint,
...base,
});
this.replaceWithAlternativeUrlFor = {};
if (/^https?:\/\//.test(endPointForUser)) {
this.alternatives.user = new S3Client({
endpoint: endPointForUser,
...base,
});
} else {
this.replaceWithAlternativeUrlFor.user = parseAlternativeEndpointUrl(endPointForUser);
}
if (/^https?:\/\//.test(endPointForJudge)) {
this.alternatives.judge = new S3Client({
endpoint: endPointForJudge,
...base,
});
} else {
this.replaceWithAlternativeUrlFor.judge = parseAlternativeEndpointUrl(endPointForJudge);
}
logger.success('Storage connected.');
this.error = null;
@ -205,6 +211,10 @@ class RemoteStorageService {
}), {
expiresIn: noExpire ? 24 * 60 * 60 * 7 : 10 * 60,
});
// using something like /fs/
if (useAlternativeEndpointFor && this.replaceWithAlternativeUrlFor[useAlternativeEndpointFor]) {
return this.replaceWithAlternativeUrlFor[useAlternativeEndpointFor](url);
}
return url;
}
@ -224,6 +234,12 @@ class RemoteStorageService {
},
Expires: 600,
});
if (this.replaceWithAlternativeUrlFor.user) {
return {
url: this.replaceWithAlternativeUrlFor.user(url),
fields,
};
}
return { url, fields };
}

Loading…
Cancel
Save