custom header for webdav

This commit is contained in:
fyears 2024-07-14 00:44:11 +08:00
parent 733fa1d306
commit 91e358fcea
8 changed files with 71 additions and 1 deletions

View File

@ -98,6 +98,8 @@ export interface WebdavConfig {
depth?: WebdavDepthType;
remoteBaseDir?: string;
customHeaders?: string;
/**
* @deprecated
*/

View File

@ -209,6 +209,29 @@ const tryEncodeURI = (x: string) => {
return encodeURI(x);
};
const parseCustomHeaders = (x: string): Record<string, string> => {
const y = x.trim();
if (y === "") {
return {};
}
const z = y.split("\n");
const res: Record<string, string> = {};
for (const kv of z) {
if (!kv.includes(":")) {
continue;
}
const [keyRaw, ...valueArr] = kv.split(":");
const key = keyRaw.trim();
const value = valueArr.join(":").trim();
res[key] = value;
}
return res;
};
export class FakeFsWebdav extends FakeFs {
kind: "webdav";
@ -246,9 +269,14 @@ export class FakeFsWebdav extends FakeFs {
return;
}
const headers = {
const cacheHeader = {
"Cache-Control": "no-cache",
};
const customHeaders = parseCustomHeaders(
this.webdavConfig.customHeaders ?? ""
);
const headers = { ...cacheHeader, ...customHeaders };
if (
this.webdavConfig.username !== "" &&
this.webdavConfig.password !== ""

View File

@ -232,6 +232,7 @@
"settings_onedrive_emptyfile_desc": "OneDrive doesn't allow uploading empty file (even in its official website). Do you want to show up errors or silently skip the empty files?",
"settings_onedrive_emptyfile_skip": "Skip",
"settings_onedrive_emptyfile_error": "Error and abort",
"settings_webdav": "Remote For Webdav",
"settings_webdav_disclaimer1": "Disclaimer: The information is stored locally. Other malicious/harmful/faulty plugins may read the info. If you see any unintentional access to your webdav server, please immediately change the username and password.",
"settings_webdav_cors_os": "Obsidian desktop>=0.13.25 or iOS>=1.1.1 or Android>=1.2.1 supports bypassing CORS locally. But you are using an old version, and you're suggested to upgrade Obsidian.",
@ -249,9 +250,12 @@
"settings_webdav_depth_desc": "Webdav servers should be configured to allow requests with header Depth being '1' or 'Infinity'. If you are not sure what's this, choose \"depth='1'\". If you are sure your server supports depth='infinity', please choose that to get way better performance.",
"settings_webdav_depth_1": "only supports depth='1'",
"settings_webdav_depth_inf": "supports depth='infinity'",
"settings_webdav_customheaders": "Custom Headers Sent To Servers",
"settings_webdav_customheaders_desc": "Some users may want to set custom headers. If you don't know what it is, just leave it empty. Input them like: <code>X-Header1:value1</code> in each line. All spaces around header keys and values will be removed.",
"settings_webdav_connect_succ": "Great! The webdav server can be accessed.",
"settings_webdav_connect_fail": "The webdav server cannot be reached (possible to be any of address/username/password/authtype errors).",
"settings_webdav_connect_fail_withcors": "The webdav server cannot be reached (possible to be any of address/username/password/authtype/CORS errors).",
"settings_webdis": "Remote For Webdis",
"settings_webdis_disclaimer1": "Disclaimer: This app is NOT an official Redis® Ltd / Redis® OSS / Webdis product. Redis is a registered trademark of Redis Ltd.",
"settings_webdis_disclaimer2": "Disclaimer: The information is stored locally. Other malicious/harmful/faulty plugins may read the info. If you see any unintentional access to your Webdis server, please immediately change the username and password.",

View File

@ -231,6 +231,7 @@
"settings_onedrive_emptyfile_desc": "OneDrive 不允许上传空文件(即使官网也是不允许的)。那么你想跳过空文件还是返回错误?",
"settings_onedrive_emptyfile_skip": "跳过",
"settings_onedrive_emptyfile_error": "返回错误和中断",
"settings_webdav": "Webdav 设置",
"settings_webdav_disclaimer1": "声明:您所输入的信息存储于本地。其它有害的或者出错的插件,是有可能读取到这些信息的。如果您发现了 Webdav 服务器有不符合预期的访问,请立刻修改用户名和密码。",
"settings_webdav_cors_os": "Obsidian 桌面版>=0.13.25 或 iOS>=1.1.1 或 Android>=1.2.1 支持跳过 CORS 设置。但您正在使用旧版,建议升级。",
@ -248,9 +249,12 @@
"settings_webdav_depth_desc": "Webdav 服务器会被设为接收 Depth header 为“1”或“Infinity”请求。如果您不清楚如何设置可以选择 depth='1'。如果那你确认服务器支持 depth='infinity',请选择它,会获得更加好的性能。",
"settings_webdav_depth_1": "只支持 depth='1'",
"settings_webdav_depth_inf": "支持 depth='infinity'",
"settings_webdav_customheaders": "发送到服务器的自定义 Header",
"settings_webdav_customheaders_desc": "有些用户需要设置自定义 header。如果您不知道是什么可以直接留空不填。输入格式每行形如 <code>X-Header1:value1</code>。header 的 key 和 value 之间的空格会被删除。",
"settings_webdav_connect_succ": "很好!可以连接上 Webdav 服务器。",
"settings_webdav_connect_fail": "无法连接上 Webdav 服务器。(可能是地址/账号/密码/鉴权类型等错误。)",
"settings_webdav_connect_fail_withcors": "无法连接上 Webdav 服务器。(可能是地址/账号/密码/鉴权类型/CORS 等错误。)",
"settings_webdis": "Webdis 设置",
"settings_webdis_disclaimer1": "声明:此插件不是 Redis® Ltd 或 Redis® 软件或 Wedis 的官方产品。Redis 是 Redis Ltd 的注册商标。",
"settings_webdis_disclaimer2": "声明:您所输入的信息存储于本地。其它有害的或者出错的插件,是有可能读取到这些信息的。如果您发现了 Webdis 服务器有不符合预期的访问,请立刻修改用户名和密码。",

View File

@ -230,6 +230,7 @@
"settings_onedrive_emptyfile_desc": "OneDrive 不允許上傳空檔案(即使官網也是不允許的)。那麼你想跳過空檔案還是返回錯誤?",
"settings_onedrive_emptyfile_skip": "跳過",
"settings_onedrive_emptyfile_error": "返回錯誤和中斷",
"settings_webdav": "Webdav 設定",
"settings_webdav_disclaimer1": "宣告:您所輸入的資訊儲存於本地。其它有害的或者出錯的外掛,是有可能讀取到這些資訊的。如果您發現了 Webdav 伺服器有不符合預期的訪問,請立刻修改使用者名稱和密碼。",
"settings_webdav_cors_os": "Obsidian 桌面版>=0.13.25 或 iOS>=1.1.1 或 Android>=1.1.1 支援跳過 CORS 設定。但您正在使用舊版,建議升級。",
@ -247,9 +248,12 @@
"settings_webdav_depth_desc": "Webdav 伺服器會被設為接收 Depth header 為“1”或“Infinity”請求。如果您不清楚如何設定可以選擇 depth='1'。如果那你確認伺服器支援 depth='infinity',請選擇它,會獲得更加好的效能。",
"settings_webdav_depth_1": "只支援 depth='1'",
"settings_webdav_depth_inf": "支援 depth='infinity'",
"settings_webdav_customheaders": "傳送到伺服器的自定義 Header",
"settings_webdav_customheaders_desc": "有些使用者需要設定自定義 header。如果您不知道是什麼可以直接留空不填。輸入格式每行形如 <code>X-Header1:value1</code>。header 的 key 和 value 之間的空格會被刪除。",
"settings_webdav_connect_succ": "很好!可以連線上 Webdav 伺服器。",
"settings_webdav_connect_fail": "無法連線上 Webdav 伺服器。(可能是地址/賬號/密碼/鑑權型別等錯誤。)",
"settings_webdav_connect_fail_withcors": "無法連線上 Webdav 伺服器。(可能是地址/賬號/密碼/鑑權型別/CORS 等錯誤。)",
"settings_webdis": "Webdis 設置",
"settings_webdis_disclaimer1": "聲明:此插件不是 Redis® Ltd 或 Redis® 軟件或 Wedis 的官方產品。Redis 是 Redis Ltd 的註冊商標。",
"settings_webdis_disclaimer2": "聲明:您所輸入的信息存儲於本地。其它有害的或者出錯的插件,是有可能讀取到這些信息的。如果您發現了 Webdis 服務器有不符合預期的訪問,請立刻修改用戶名和密碼。",

View File

@ -1381,6 +1381,9 @@ export default class RemotelySavePlugin extends Plugin {
if (this.settings.webdav.remoteBaseDir === undefined) {
this.settings.webdav.remoteBaseDir = "";
}
if (this.settings.webdav.customHeaders === undefined) {
this.settings.webdav.customHeaders = "";
}
if (this.settings.s3.partsConcurrency === undefined) {
this.settings.s3.partsConcurrency = 20;
}

View File

@ -1638,6 +1638,27 @@ export class RemotelySaveSettingTab extends PluginSettingTab {
});
});
new Setting(webdavDiv)
.setName(t("settings_webdav_customheaders"))
.setDesc(stringToFragment(t("settings_webdav_customheaders_desc")))
.addTextArea((textArea) => {
textArea
.setPlaceholder(`X-Header1: Value1\nX-Header2: Value2`)
.setValue(`${this.plugin.settings.webdav.customHeaders ?? ""}`)
.onChange(async (value) => {
this.plugin.settings.webdav.customHeaders = value
.trim()
.split("\n")
.filter((x) => x.trim() !== "")
.join("\n");
await this.plugin.saveSettings();
});
textArea.inputEl.rows = 10;
textArea.inputEl.cols = 30;
textArea.inputEl.addClass("webdav-customheaders-textarea");
});
let newWebdavRemoteBaseDir =
this.plugin.settings.webdav.remoteBaseDir || "";
new Setting(webdavDiv)

View File

@ -88,6 +88,10 @@
display: none;
}
.webdav-customheaders-textarea {
font-family: monospace;
}
.webdis-disclaimer {
font-weight: bold;
}