mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
core: fix s3 proxy
This commit is contained in:
2 files changed
+17
-1
No files matched your search
@@ -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 };
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user