mirror of https://github.com/logseq/logseq
enhance(electron): add custom https proxy options for settings (#4373)
* enhance(electron): add custom https proxy options for settingspull/4423/head
parent
03d8c8a8d2
commit
779cacf715
|
@ -31,7 +31,8 @@
|
|||
"open": "7.3.1",
|
||||
"semver": "7.3.5",
|
||||
"update-electron-app": "2.0.1",
|
||||
"extract-zip": "2.0.1"
|
||||
"extract-zip": "2.0.1",
|
||||
"https-proxy-agent": "5.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-forge/cli": "^6.0.0-beta.57",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
(:require [electron.handler :as handler]
|
||||
[electron.search :as search]
|
||||
[electron.updater :refer [init-updater]]
|
||||
[electron.utils :refer [*win mac? linux? logger get-win-from-sender]]
|
||||
[electron.utils :refer [*win mac? linux? logger get-win-from-sender restore-user-fetch-agent]]
|
||||
[clojure.string :as string]
|
||||
[promesa.core :as p]
|
||||
[cljs-bean.core :as bean]
|
||||
|
@ -199,6 +199,8 @@
|
|||
_ (reset! *win win)]
|
||||
(.. logger (info (str "Logseq App(" (.getVersion app) ") Starting... ")))
|
||||
|
||||
(restore-user-fetch-agent)
|
||||
|
||||
(utils/disableXFrameOptions win)
|
||||
|
||||
(search/ensure-search-dir!)
|
||||
|
|
|
@ -361,6 +361,9 @@
|
|||
(when-let [web-content (.-webContents win)]
|
||||
(.reload web-content)))
|
||||
|
||||
(defmethod handle :setHttpsAgent [^js _win [_ opts]]
|
||||
(utils/set-fetch-agent opts))
|
||||
|
||||
(defmethod handle :default [args]
|
||||
(println "Error: no ipc handler for: " (bean/->js args)))
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
(defn download-asset-zip
|
||||
[{:keys [id repo title author description effect sponsors]} dl-url dl-version dot-extract-to]
|
||||
(p/catch
|
||||
(p/let [^js res (fetch dl-url #js {:timeout 30000})
|
||||
(p/let [^js res (fetch dl-url {:timeout 30000})
|
||||
_ (when-not (.-ok res) (throw (js/Error. :download-network-issue)))
|
||||
frm-zip (p/create
|
||||
(fn [resolve1 reject1]
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
(:require [clojure.string :as string]
|
||||
["fs-extra" :as fs]
|
||||
["path" :as path]
|
||||
[electron.configs :as cfgs]
|
||||
[cljs-bean.core :as bean]
|
||||
["electron" :refer [app BrowserWindow]]))
|
||||
|
||||
|
@ -18,11 +19,18 @@
|
|||
|
||||
(defonce dev? (not prod?))
|
||||
(defonce logger (js/require "electron-log"))
|
||||
(defonce *fetchAgent (atom nil))
|
||||
|
||||
(defonce open (js/require "open"))
|
||||
(defonce fetch (js/require "node-fetch"))
|
||||
(defonce HttpsProxyAgent (js/require "https-proxy-agent"))
|
||||
(defonce _fetch (js/require "node-fetch"))
|
||||
(defonce extract-zip (js/require "extract-zip"))
|
||||
|
||||
(defn fetch
|
||||
([url] (fetch url nil))
|
||||
([url options]
|
||||
(_fetch url (bean/->js (merge options {:agent @*fetchAgent})))))
|
||||
|
||||
(defn get-ls-dotdir-root
|
||||
[]
|
||||
(let [lg-dir (str (.getPath app "home") "/.logseq")]
|
||||
|
@ -42,6 +50,18 @@
|
|||
(map #(path/join plugins-root (.-name %))))]
|
||||
dirs))
|
||||
|
||||
(defn set-fetch-agent
|
||||
[{:keys [protocol host port] :as opts}]
|
||||
(reset! *fetchAgent
|
||||
(when (and protocol host port)
|
||||
(new HttpsProxyAgent (str protocol "://" host ":" port))))
|
||||
(cfgs/set-item! :settings/agent opts))
|
||||
|
||||
(defn restore-user-fetch-agent
|
||||
[]
|
||||
(when-let [agent (cfgs/get-item :settings/agent)]
|
||||
(set-fetch-agent agent)))
|
||||
|
||||
;; keep same as ignored-path? in src/main/frontend/util/fs.cljs
|
||||
;; TODO: merge them
|
||||
(defn ignored-path?
|
||||
|
|
|
@ -62,8 +62,6 @@
|
|||
(ui/toggle state on-toggle true)
|
||||
detail-text]]])
|
||||
|
||||
|
||||
|
||||
(rum/defcs app-updater < rum/reactive
|
||||
[state version]
|
||||
(let [update-pending? (state/sub :electron/updater-pending?)
|
||||
|
@ -510,10 +508,59 @@
|
|||
:on-click #(js/logseq.api.relaunch)
|
||||
:small? true :intent "logseq")]])]))
|
||||
|
||||
(defn plugin-system-switcher-row [t]
|
||||
(rum/defc user-proxy-settings-panel
|
||||
[{:keys [protocol] :as agent-opts}]
|
||||
(let [[opts set-opts!] (rum/use-state agent-opts)
|
||||
disabled? (string/blank? (:protocol opts))]
|
||||
[:div.cp__settings-network-proxy-panel
|
||||
[:h1.mb-2.text-2xl.font-bold (t :settings-page/network-proxy)]
|
||||
[:div.p-2
|
||||
[:p [:label [:strong (t :type)]
|
||||
(ui/select [{:label "Disabled" :value "" :selected disabled?}
|
||||
{:label "http" :value "http" :selected (= protocol "http")}
|
||||
{:label "https" :value "https" :selected (= protocol "https")}
|
||||
{:label "socks5" :value "socks5" :selected (= protocol "socks5")}]
|
||||
#(set-opts!
|
||||
(assoc opts :protocol (if (= "disabled" (util/safe-lower-case %)) nil %))) nil)]]
|
||||
[:p.flex
|
||||
[:label.pr-4 [:strong (t :host)]
|
||||
[:input.form-input.is-small
|
||||
{:value (:host opts) :disabled disabled?
|
||||
:on-change #(set-opts!
|
||||
(assoc opts :host (util/trim-safe (util/evalue %))))}]]
|
||||
|
||||
[:label [:strong (t :port)]
|
||||
[:input.form-input.is-small
|
||||
{:value (:port opts) :type "number" :disabled disabled?
|
||||
:on-change #(set-opts!
|
||||
(assoc opts :port (util/trim-safe (util/evalue %))))}]]]
|
||||
|
||||
[:p.pt-2
|
||||
(ui/button (t :save)
|
||||
:on-click (fn []
|
||||
(p/let [_ (ipc/ipc :setHttpsAgent opts)]
|
||||
(state/set-state! [:electron/user-cfgs :settings/agent] opts)
|
||||
(state/close-sub-modal! :https-proxy-panel))))]]]))
|
||||
|
||||
(rum/defc user-proxy-settings
|
||||
[{:keys [protocol host port] :as agent-opts}]
|
||||
(ui/button [:span
|
||||
(when-let [e (and protocol host port (str protocol "://" host ":" port))]
|
||||
[:strong.pr-1 e])
|
||||
(ui/icon "edit")]
|
||||
:on-click #(state/set-sub-modal!
|
||||
(fn [_] (user-proxy-settings-panel agent-opts))
|
||||
{:id :https-proxy-panel :center? true})))
|
||||
|
||||
(defn plugin-system-switcher-row []
|
||||
(row-with-button-action
|
||||
{:left-label "Plug-in system"
|
||||
:action (plugin-enabled-switcher t)}))
|
||||
{:left-label (t :settings-page/plugin-system)
|
||||
:action (plugin-enabled-switcher t)}))
|
||||
|
||||
(defn https-user-agent-row [agent-opts]
|
||||
(row-with-button-action
|
||||
{:left-label (t :settings-page/network-proxy)
|
||||
:action (user-proxy-settings agent-opts)}))
|
||||
|
||||
(rum/defcs settings-general < rum/reactive
|
||||
[_state current-repo]
|
||||
|
@ -589,12 +636,14 @@
|
|||
(let [instrument-disabled? (state/sub :instrument/disabled?)
|
||||
developer-mode? (state/sub [:ui/developer-mode?])
|
||||
cors-proxy (state/sub [:me :cors_proxy])
|
||||
https-agent-opts (state/sub [:electron/user-cfgs :settings/agent])
|
||||
logged? (state/logged?)]
|
||||
[:div.panel-wrap.is-advanced
|
||||
(when (and util/mac? (util/electron?)) (app-auto-update-row t))
|
||||
(usage-diagnostics-row t instrument-disabled?)
|
||||
(when-not (mobile-util/is-native-platform?) (developer-mode-row t developer-mode?))
|
||||
(when (util/electron?) (plugin-system-switcher-row t))
|
||||
(when (util/electron?) (plugin-system-switcher-row))
|
||||
(when (util/electron?) (https-user-agent-row https-agent-opts))
|
||||
(clear-cache-row t)
|
||||
|
||||
(ui/admonition
|
||||
|
|
|
@ -256,6 +256,30 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-network-proxy-panel {
|
||||
margin: -15px;
|
||||
|
||||
label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
> select {
|
||||
min-width: 100px;
|
||||
margin-left: -14px !important;
|
||||
padding: 4px 10px !important;
|
||||
}
|
||||
|
||||
> input[disabled] {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
> strong {
|
||||
font-weight: 500;
|
||||
width: 60px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Styles for the category icon on the left of settings-modal */
|
||||
|
|
|
@ -268,6 +268,8 @@
|
|||
:settings-page/tab-shortcuts "Shortcuts"
|
||||
:settings-page/tab-version-control "Version control"
|
||||
:settings-page/tab-advanced "Advanced"
|
||||
:settings-page/plugin-system "Plug-in system"
|
||||
:settings-page/network-proxy "Network proxy"
|
||||
:logseq "Logseq"
|
||||
:on "ON"
|
||||
:more-options "More options"
|
||||
|
@ -278,6 +280,10 @@
|
|||
:cancel "Cancel"
|
||||
:close "Close"
|
||||
:delete "Delete"
|
||||
:save "Save"
|
||||
:type "Type"
|
||||
:host "Host"
|
||||
:port "Port"
|
||||
:re-index "Re-index"
|
||||
:re-index-detail "Rebuild the graph"
|
||||
:open-new-window "New window"
|
||||
|
@ -1152,6 +1158,8 @@
|
|||
:settings-page/tab-shortcuts "快捷键"
|
||||
:settings-page/tab-advanced "高级设置"
|
||||
:settings-page/tab-version-control "多版本控制"
|
||||
:settings-page/plugin-system "插件系统"
|
||||
:settings-page/network-proxy "网络代理"
|
||||
:logseq "Logseq"
|
||||
:on "已打开"
|
||||
:more-options "更多选项"
|
||||
|
@ -1206,6 +1214,10 @@
|
|||
:cloning "Clone 中"
|
||||
:close "关闭"
|
||||
:delete "删除"
|
||||
:save "保存"
|
||||
:type "类型"
|
||||
:host "主机"
|
||||
:port "端口"
|
||||
:parsing-files "正在解析文件"
|
||||
:loading-files "正在加载文件"
|
||||
:login-github "用 GitHub 登录"
|
||||
|
|
|
@ -1653,16 +1653,7 @@ electron-builder@^22.11.7:
|
|||
update-notifier "^5.1.0"
|
||||
yargs "^17.0.1"
|
||||
|
||||
electron-context-menu@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/electron-context-menu/-/electron-context-menu-3.1.1.tgz#109884e79df293f7e85effcbdbbe45d362987d94"
|
||||
integrity sha512-LJhwaKf6XHwk2LQ5SdwoGNODoA8lRwks9bbEeAqqMf4e3hsrT7pZtX6MaHKYNFZKxF14JjI/VR+VRjGvxmaQoA==
|
||||
dependencies:
|
||||
cli-truncate "^2.1.0"
|
||||
electron-dl "^3.2.1"
|
||||
electron-is-dev "^2.0.0"
|
||||
|
||||
electron-dl@^3.2.1:
|
||||
electron-dl@3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-3.3.0.tgz#4e422e276c627373ba61fcf3f92ffa088988db1a"
|
||||
integrity sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==
|
||||
|
@ -1739,11 +1730,6 @@ electron-is-dev@^0.3.0:
|
|||
resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe"
|
||||
integrity sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=
|
||||
|
||||
electron-is-dev@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-2.0.0.tgz#833487a069b8dad21425c67a19847d9064ab19bd"
|
||||
integrity sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==
|
||||
|
||||
electron-log@4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.3.1.tgz#1405fef9d4e6964a5fdb8790a69163aa237ffe91"
|
||||
|
@ -2605,7 +2591,7 @@ http2-wrapper@^1.0.0-beta.5.2:
|
|||
quick-lru "^5.1.1"
|
||||
resolve-alpn "^1.0.0"
|
||||
|
||||
https-proxy-agent@^5.0.0:
|
||||
https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
|
||||
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
|
||||
|
|
Loading…
Reference in New Issue