clean up reverse proxy
This commit is contained in:
parent
ae28cf9183
commit
28b99557a8
|
@ -27,12 +27,12 @@ export interface S3Config {
|
|||
remotePrefix?: string;
|
||||
|
||||
useAccurateMTime?: boolean;
|
||||
reverseProxyNoSignUrl?: string;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
bypassCorsLocally?: boolean;
|
||||
reverseProxyUrl: string;
|
||||
}
|
||||
|
||||
export interface DropboxConfig {
|
||||
|
|
|
@ -184,8 +184,8 @@
|
|||
"settings_s3_accuratemtime_desc": "Read the uploaded accurate last modified time for better sync algorithm. But it causes extra api requests / time / money to the S3 endpoint.",
|
||||
"settings_s3_urlstyle": "S3 URL style",
|
||||
"settings_s3_urlstyle_desc": "Whether to force path-style URLs for S3 objects (e.g., https://s3.amazonaws.com/*/ instead of https://*.s3.amazonaws.com/).",
|
||||
"settings_s3_reverse_proxy_url": "S3 Reverse Proxy Url",
|
||||
"settings_s3_reverse_proxy_url_desc": "S3 Reverse Proxy Url.(Leave blank if you don't have a reverse proxy)",
|
||||
"settings_s3_reverse_proxy_no_sign_url": "S3 Reverse Proxy (No Sign) Url (experimental)",
|
||||
"settings_s3_reverse_proxy_no_sign_url_desc": "S3 reverse proxy url without signature. This is useful if you use a revers proxy but do not change the original credential signature. No http(s):// prefix. Leave it blank if you don't know what it is.",
|
||||
"settings_s3_connect_succ": "Great! The bucket can be accessed.",
|
||||
"settings_s3_connect_fail": "The S3 bucket cannot be reached.",
|
||||
"settings_dropbox": "Remote For Dropbox",
|
||||
|
|
|
@ -183,8 +183,8 @@
|
|||
"settings_s3_accuratemtime_desc": "读取(已上传的)准确的文件修改时间,有助于同步算法更加准确和稳定。但是它也会导致额外的 api 请求、时间、金钱花费。",
|
||||
"settings_s3_urlstyle": "S3 URL style",
|
||||
"settings_s3_urlstyle_desc": "是否对 S3 对象强制使用 path style URL(例如使用 https://s3.amazonaws.com/*/ 而不是 https://*.s3.amazonaws.com/)。",
|
||||
"settings_s3_reverse_proxy_url": "S3 反向代理地址",
|
||||
"settings_s3_reverse_proxy_url_desc": "S3 反向代理地址。(如果没有设置反向代理请留空)",
|
||||
"settings_s3_reverse_proxy_no_sign_url": "S3 反向代理(不签名)地址(实验性质)",
|
||||
"settings_s3_reverse_proxy_no_sign_url_desc": "不会参与到签名的 S3 反向代理地址。如果您有一个反向代理,但是不想修改原始鉴权签名,这里就可以填写。没有 http(s):// 前缀。如果您不知道这是什么,留空即可。",
|
||||
"settings_s3_connect_succ": "很好!可以访问到对应存储桶。",
|
||||
"settings_s3_connect_fail": "无法访问到对应存储桶。",
|
||||
"settings_dropbox": "Dropbox 设置",
|
||||
|
|
|
@ -182,8 +182,8 @@
|
|||
"settings_s3_accuratemtime_desc": "讀取(已上傳的)準確的檔案修改時間,有助於同步演算法更加準確和穩定。但是它也會導致額外的 api 請求、時間、金錢花費。",
|
||||
"settings_s3_urlstyle": "S3 URL style",
|
||||
"settings_s3_urlstyle_desc": "是否對 S3 物件強制使用 path style URL(例如使用 https://s3.amazonaws.com/*/ 而不是 https://*.s3.amazonaws.com/)。",
|
||||
"settings_s3_reverse_proxy_url": "S3 反向代理地址",
|
||||
"settings_s3_reverse_proxy_url_desc": "S3 反向代理地址。(如果沒有設置反向代理請留空)",
|
||||
"settings_s3_reverse_proxy_no_sign_url": "S3 反向代理(不簽名)地址(實驗性質)",
|
||||
"settings_s3_reverse_proxy_no_sign_url_desc": "不會參與到簽名的 S3 反向代理地址。如果您有一個反向代理,但是不想修改原始鑑權簽名,這裡就可以填寫。沒有 http(s):// 字首。如果您不知道這是什麼,留空即可。",
|
||||
"settings_s3_connect_succ": "很好!可以訪問到對應儲存桶。",
|
||||
"settings_s3_connect_fail": "無法訪問到對應儲存桶。",
|
||||
"settings_dropbox": "Dropbox 設定",
|
||||
|
|
|
@ -56,12 +56,15 @@ import { Cipher } from "./encryptUnified";
|
|||
*/
|
||||
class ObsHttpHandler extends FetchHttpHandler {
|
||||
requestTimeoutInMs: number | undefined;
|
||||
s3Config: S3Config | undefined;
|
||||
constructor(options?: FetchHttpHandlerOptions, s3Config?: S3Config) {
|
||||
reverseProxyNoSignUrl: string | undefined;
|
||||
constructor(
|
||||
options?: FetchHttpHandlerOptions,
|
||||
reverseProxyNoSignUrl?: string
|
||||
) {
|
||||
super(options);
|
||||
this.requestTimeoutInMs =
|
||||
options === undefined ? undefined : options.requestTimeout;
|
||||
this.s3Config = s3Config;
|
||||
this.reverseProxyNoSignUrl = reverseProxyNoSignUrl;
|
||||
}
|
||||
async handle(
|
||||
request: HttpRequest,
|
||||
|
@ -82,10 +85,16 @@ class ObsHttpHandler extends FetchHttpHandler {
|
|||
}
|
||||
|
||||
const { port, method } = request;
|
||||
let url = `${request.protocol}//${request.hostname}${port ? `:${port}` : ""
|
||||
}${path}`;
|
||||
if (this.s3Config && this.s3Config.reverseProxyUrl && this.s3Config.reverseProxyUrl !== "") {
|
||||
url = url.replace(this.s3Config.s3Endpoint, this.s3Config.reverseProxyUrl);
|
||||
let url = `${request.protocol}//${request.hostname}${
|
||||
port ? `:${port}` : ""
|
||||
}${path}`;
|
||||
if (
|
||||
this.reverseProxyNoSignUrl !== undefined &&
|
||||
this.reverseProxyNoSignUrl !== ""
|
||||
) {
|
||||
const urlObj = new URL(url);
|
||||
urlObj.host = this.reverseProxyNoSignUrl;
|
||||
url = urlObj.href;
|
||||
}
|
||||
const body =
|
||||
method === "GET" || method === "HEAD" ? undefined : request.body;
|
||||
|
@ -171,7 +180,7 @@ export const DEFAULT_S3_CONFIG: S3Config = {
|
|||
forcePathStyle: false,
|
||||
remotePrefix: "",
|
||||
useAccurateMTime: false, // it causes money, disable by default
|
||||
reverseProxyUrl: "",
|
||||
reverseProxyNoSignUrl: "",
|
||||
};
|
||||
|
||||
export type S3ObjectType = _Object;
|
||||
|
@ -310,9 +319,7 @@ export const getS3Client = (s3Config: S3Config) => {
|
|||
}
|
||||
|
||||
let s3Client: S3Client;
|
||||
if ((VALID_REQURL && s3Config.bypassCorsLocally) || (s3Config.reverseProxyUrl && s3Config.reverseProxyUrl !== "")) {
|
||||
console.log("reverseProxyUrl", s3Config.reverseProxyUrl);
|
||||
|
||||
if (VALID_REQURL && s3Config.bypassCorsLocally) {
|
||||
s3Client = new S3Client({
|
||||
region: s3Config.s3Region,
|
||||
endpoint: endpoint,
|
||||
|
@ -321,7 +328,10 @@ export const getS3Client = (s3Config: S3Config) => {
|
|||
accessKeyId: s3Config.s3AccessKeyID,
|
||||
secretAccessKey: s3Config.s3SecretAccessKey,
|
||||
},
|
||||
requestHandler: new ObsHttpHandler(undefined, s3Config),
|
||||
requestHandler: new ObsHttpHandler(
|
||||
undefined,
|
||||
s3Config.reverseProxyNoSignUrl
|
||||
),
|
||||
});
|
||||
} else {
|
||||
s3Client = new S3Client({
|
||||
|
|
|
@ -976,7 +976,8 @@ export class RemotelySaveSettingTab extends PluginSettingTab {
|
|||
|
||||
dropdown
|
||||
.setValue(
|
||||
`${this.plugin.settings.s3.bypassCorsLocally ? "enable" : "disable"
|
||||
`${
|
||||
this.plugin.settings.s3.bypassCorsLocally ? "enable" : "disable"
|
||||
}`
|
||||
)
|
||||
.onChange(async (value) => {
|
||||
|
@ -1056,14 +1057,14 @@ export class RemotelySaveSettingTab extends PluginSettingTab {
|
|||
});
|
||||
});
|
||||
new Setting(s3Div)
|
||||
.setName(t("settings_s3_reverse_proxy_url"))
|
||||
.setDesc(t("settings_s3_reverse_proxy_url_desc"))
|
||||
.setName(t("settings_s3_reverse_proxy_no_sign_url"))
|
||||
.setDesc(t("settings_s3_reverse_proxy_no_sign_url_desc"))
|
||||
.addText((text) =>
|
||||
text
|
||||
.setPlaceholder("")
|
||||
.setValue(this.plugin.settings.s3.reverseProxyUrl)
|
||||
.setValue(this.plugin.settings.s3.reverseProxyNoSignUrl ?? "")
|
||||
.onChange(async (value) => {
|
||||
this.plugin.settings.s3.reverseProxyUrl = value.trim();
|
||||
this.plugin.settings.s3.reverseProxyNoSignUrl = value.trim();
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue