From d251734267b07d1ef272359d6a957badbad90724 Mon Sep 17 00:00:00 2001 From: fanxb Date: Fri, 8 Apr 2022 17:04:13 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=E6=96=B0=E7=9A=84=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8=E6=8B=93=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bookmarkBrowserPlugin/background.js | 50 ++++++++++++++++++ .../bookmarkBrowserPlugin/manifest.json | 28 ++++++++++ .../bookmarkBrowserPlugin/options/index.html | 16 ++++++ 浏览器插件/bookmarkBrowserPlugin/popup.js | 1 + .../bookmarkBrowserPlugin/popup/index.html | 18 +++++++ .../bookmarkBrowserPlugin/static/icons/icon.xcf | Bin 0 -> 44178 bytes .../static/icons/icon_128.png | Bin 0 -> 10042 bytes .../bookmarkBrowserPlugin/static/icons/icon_48.png | Bin 0 -> 2579 bytes .../bookmarkBrowserPlugin/static/js/axios.min.js | 2 + .../bookmarkBrowserPlugin/static/js/jquery.js | 2 + .../bookmarkBrowserPlugin/static/js/sso.js | 33 ++++++++++++ .../bookmarkBrowserPlugin/util/config.js | 16 ++++++ .../bookmarkBrowserPlugin/util/const.js | 0 .../bookmarkBrowserPlugin/util/httpUtil.js | 37 +++++++++++++ 14 files changed, 203 insertions(+) create mode 100644 浏览器插件/bookmarkBrowserPlugin/background.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/manifest.json create mode 100644 浏览器插件/bookmarkBrowserPlugin/options/index.html create mode 100644 浏览器插件/bookmarkBrowserPlugin/popup.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/popup/index.html create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/icons/icon.xcf create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/icons/icon_128.png create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/icons/icon_48.png create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/axios.min.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/jquery.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/sso.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/util/config.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/util/const.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/util/httpUtil.js diff --git a/浏览器插件/bookmarkBrowserPlugin/background.js b/浏览器插件/bookmarkBrowserPlugin/background.js new file mode 100644 index 0000000..eeff0ba --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/background.js @@ -0,0 +1,50 @@ +window.envType = 'background'; +window.token = localStorage.getItem('token'); + +let token = null; +let globalPort = null; + +chrome.extension.onConnect.addListener(port => { + console.log(port); + globalPort = port; + port.onMessage.addListener(msg => { + switch (msg.type) { + case 'sendToken': + console.log(msg); + localStorage.setItem('token', msg.data); + window.token = msg.data; + token = msg.data; + break; + default: + console.error('未知的数据', msg); + } + }); +}); + +chrome.contextMenus.create( + { + title: '添加到书签', + onclick: function (info, tab) { + console.log(info, tab); + alert(tab.title); + httpUtil.put('/bookmark', { + type: 0, + path: '', + name: tab.title, + url: tab.url, + }); + }, + }, + () => { + console.log("创建右键菜单采购"); + } +); + +/** + * 构建一个标准命令 + * @param {*} code code + * @param {*} data data + */ +function createMsg (code, data) { + return JSON.stringify({ code, data }); +} diff --git a/浏览器插件/bookmarkBrowserPlugin/manifest.json b/浏览器插件/bookmarkBrowserPlugin/manifest.json new file mode 100644 index 0000000..2d88467 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "bookmark-chrome", + "description": "A Vue.js web extension", + "version": "1.0", + "manifest_version": 2, + "permissions": ["contextMenus"], + "icons": { + "48": "static/icons/icon_48.png", + "128": "static/icons/icon_128.png" + }, + "browser_action": { + "default_title": "bookmark-chrome", + "default_popup": "popup/index.html" + }, + "background": { + "scripts": ["static/js/jquery.js", "background.js"] + }, + "options_ui": { + "page": "options/index.html", + "chrome_style": true + }, + "content_scripts": [ + { + "matches": ["*://*/*"], + "js": ["static/js/jquery.js", "static/js/sso.js"] + } + ] +} diff --git a/浏览器插件/bookmarkBrowserPlugin/options/index.html b/浏览器插件/bookmarkBrowserPlugin/options/index.html new file mode 100644 index 0000000..c3bda45 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/options/index.html @@ -0,0 +1,16 @@ + + + + + + Document + + + +

chrome-plugin-test

+ + diff --git a/浏览器插件/bookmarkBrowserPlugin/popup.js b/浏览器插件/bookmarkBrowserPlugin/popup.js new file mode 100644 index 0000000..d008f94 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/popup.js @@ -0,0 +1 @@ +document.getElementById('content').innerText = 'Hello world!'; diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.html b/浏览器插件/bookmarkBrowserPlugin/popup/index.html new file mode 100644 index 0000000..83b410f --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.html @@ -0,0 +1,18 @@ + + + + + + Document + + + +

chrome-plugin-test

+

+ + + diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/icon.xcf b/浏览器插件/bookmarkBrowserPlugin/static/icons/icon.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e1cde958703ab2d41ce3f1bbc57a28601b55503a GIT binary patch literal 44178 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∈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 XLHWW>^V}R&0Jm0!pEbCxpgVs7rb#;= literal 0 HcmV?d00001 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/icon_128.png b/浏览器插件/bookmarkBrowserPlugin/static/icons/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ed86867f0af17ecb564eb6a7ebaf07a079c02d GIT binary patch literal 10042 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 literal 0 HcmV?d00001 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/js/axios.min.js b/浏览器插件/bookmarkBrowserPlugin/static/js/axios.min.js new file mode 100644 index 0000000..9b44143 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/static/js/axios.min.js @@ -0,0 +1,2 @@ +!function (t, e) { "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.axios = e() : t.axios = e() }(this, (function () { return function (t) { var e = {}; function r (n) { if (e[n]) return e[n].exports; var o = e[n] = { i: n, l: !1, exports: {} }; return t[n].call(o.exports, o, o.exports, r), o.l = !0, o.exports } return r.m = t, r.c = e, r.d = function (t, e, n) { r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n }) }, r.r = function (t) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 }) }, r.t = function (t, e) { if (1 & e && (t = r(t)), 8 & e) return t; if (4 & e && "object" == typeof t && t && t.__esModule) return t; var n = Object.create(null); if (r.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: t }), 2 & e && "string" != typeof t) for (var o in t) r.d(n, o, function (e) { return t[e] }.bind(null, o)); return n }, r.n = function (t) { var e = t && t.__esModule ? function () { return t.default } : function () { return t }; return r.d(e, "a", e), e }, r.o = function (t, e) { return Object.prototype.hasOwnProperty.call(t, e) }, r.p = "", r(r.s = 12) }([function (t, e, r) { "use strict"; var n = r(4), o = Object.prototype.toString; function s (t) { return Array.isArray(t) } function i (t) { return void 0 === t } function a (t) { return "[object ArrayBuffer]" === o.call(t) } function u (t) { return null !== t && "object" == typeof t } function c (t) { if ("[object Object]" !== o.call(t)) return !1; var e = Object.getPrototypeOf(t); return null === e || e === Object.prototype } function h (t) { return "[object Function]" === o.call(t) } function f (t, e) { if (null != t) if ("object" != typeof t && (t = [t]), s(t)) for (var r = 0, n = t.length; r < n; r++)e.call(null, t[r], r, t); else for (var o in t) Object.prototype.hasOwnProperty.call(t, o) && e.call(null, t[o], o, t) } t.exports = { supportedProtocols: ["http:", "https:", "file:"], getProtocol: function (t) { return t || "http:" }, isArray: s, isArrayBuffer: a, isBuffer: function (t) { return null !== t && !i(t) && null !== t.constructor && !i(t.constructor) && "function" == typeof t.constructor.isBuffer && t.constructor.isBuffer(t) }, isFormData: function (t) { return "[object FormData]" === o.call(t) }, isArrayBufferView: function (t) { return "undefined" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(t) : t && t.buffer && a(t.buffer) }, isString: function (t) { return "string" == typeof t }, isNumber: function (t) { return "number" == typeof t }, isObject: u, isPlainObject: c, isUndefined: i, isDate: function (t) { return "[object Date]" === o.call(t) }, isFile: function (t) { return "[object File]" === o.call(t) }, isBlob: function (t) { return "[object Blob]" === o.call(t) }, isFunction: h, isStream: function (t) { return u(t) && h(t.pipe) }, isURLSearchParams: function (t) { return "[object URLSearchParams]" === o.call(t) }, isStandardBrowserEnv: function () { return ("undefined" == typeof navigator || "ReactNative" !== navigator.product && "NativeScript" !== navigator.product && "NS" !== navigator.product) && ("undefined" != typeof window && "undefined" != typeof document) }, forEach: f, merge: function t () { var e = {}; function r (r, n) { c(e[n]) && c(r) ? e[n] = t(e[n], r) : c(r) ? e[n] = t({}, r) : s(r) ? e[n] = r.slice() : e[n] = r } for (var n = 0, o = arguments.length; n < o; n++)f(arguments[n], r); return e }, extend: function (t, e, r) { return f(e, (function (e, o) { t[o] = r && "function" == typeof e ? n(e, r) : e })), t }, trim: function (t) { return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "") }, stripBOM: function (t) { return 65279 === t.charCodeAt(0) && (t = t.slice(1)), t }, inherits: function (t, e, r, n) { t.prototype = Object.create(e.prototype, n), t.prototype.constructor = t, r && Object.assign(t.prototype, r) }, toFlatObject: function (t, e, r) { var n, o, s, i = {}; e = e || {}; do { for (o = (n = Object.getOwnPropertyNames(t)).length; o-- > 0;)i[s = n[o]] || (e[s] = t[s], i[s] = !0); t = Object.getPrototypeOf(t) } while (t && (!r || r(t, e)) && t !== Object.prototype); return e } } }, function (t, e, r) { "use strict"; var n = r(0); function o (t, e, r, n, o) { Error.call(this), this.message = t, this.name = "AxiosError", e && (this.code = e), r && (this.config = r), n && (this.request = n), o && (this.response = o) } n.inherits(o, Error, { toJSON: function () { return { message: this.message, name: this.name, description: this.description, number: this.number, fileName: this.fileName, lineNumber: this.lineNumber, columnNumber: this.columnNumber, stack: this.stack, config: this.config, code: this.code, status: this.response && this.response.status ? this.response.status : null } } }); var s = o.prototype, i = {};["ERR_BAD_OPTION_VALUE", "ERR_BAD_OPTION", "ECONNABORTED", "ETIMEDOUT", "ERR_NETWORK", "ERR_FR_TOO_MANY_REDIRECTS", "ERR_DEPRECATED", "ERR_BAD_RESPONSE", "ERR_BAD_REQUEST", "ERR_CANCELED"].forEach((function (t) { i[t] = { value: t } })), Object.defineProperties(o, i), Object.defineProperty(s, "isAxiosError", { value: !0 }), o.from = function (t, e, r, i, a, u) { var c = Object.create(s); return n.toFlatObject(t, c, (function (t) { return t !== Error.prototype })), o.call(c, t.message, e, r, i, a), c.name = t.name, u && Object.assign(c, u), c }, t.exports = o }, function (t, e, r) { "use strict"; var n = r(1); function o (t) { n.call(this, null == t ? "canceled" : t, n.ERR_CANCELED), this.name = "CanceledError" } r(0).inherits(o, n, { __CANCEL__: !0 }), t.exports = o }, function (t, e, r) { "use strict"; var n = r(0), o = r(18), s = r(1), i = r(6), a = { "Content-Type": "application/x-www-form-urlencoded" }; function u (t, e) { !n.isUndefined(t) && n.isUndefined(t["Content-Type"]) && (t["Content-Type"] = e) } var c, h = { transitional: i, adapter: (("undefined" != typeof XMLHttpRequest || "undefined" != typeof process && "[object process]" === Object.prototype.toString.call(process)) && (c = r(7)), c), transformRequest: [function (t, e) { return o(e, "Accept"), o(e, "Content-Type"), n.isFormData(t) || n.isArrayBuffer(t) || n.isBuffer(t) || n.isStream(t) || n.isFile(t) || n.isBlob(t) ? t : n.isArrayBufferView(t) ? t.buffer : n.isURLSearchParams(t) ? (u(e, "application/x-www-form-urlencoded;charset=utf-8"), t.toString()) : n.isObject(t) || e && "application/json" === e["Content-Type"] ? (u(e, "application/json"), function (t, e, r) { if (n.isString(t)) try { return (e || JSON.parse)(t), n.trim(t) } catch (t) { if ("SyntaxError" !== t.name) throw t } return (r || JSON.stringify)(t) }(t)) : t }], transformResponse: [function (t) { var e = this.transitional || h.transitional, r = e && e.silentJSONParsing, o = e && e.forcedJSONParsing, i = !r && "json" === this.responseType; if (i || o && n.isString(t) && t.length) try { return JSON.parse(t) } catch (t) { if (i) { if ("SyntaxError" === t.name) throw s.from(t, s.ERR_BAD_RESPONSE, this, null, this.response); throw t } } return t }], timeout: 0, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", maxContentLength: -1, maxBodyLength: -1, validateStatus: function (t) { return t >= 200 && t < 300 }, headers: { common: { Accept: "application/json, text/plain, */*" } } }; n.forEach(["delete", "get", "head"], (function (t) { h.headers[t] = {} })), n.forEach(["post", "put", "patch"], (function (t) { h.headers[t] = n.merge(a) })), t.exports = h }, function (t, e, r) { "use strict"; t.exports = function (t, e) { return function () { for (var r = new Array(arguments.length), n = 0; n < r.length; n++)r[n] = arguments[n]; return t.apply(e, r) } } }, function (t, e, r) { "use strict"; var n = r(0); function o (t) { return encodeURIComponent(t).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]") } t.exports = function (t, e, r) { if (!e) return t; var s; if (r) s = r(e); else if (n.isURLSearchParams(e)) s = e.toString(); else { var i = []; n.forEach(e, (function (t, e) { null != t && (n.isArray(t) ? e += "[]" : t = [t], n.forEach(t, (function (t) { n.isDate(t) ? t = t.toISOString() : n.isObject(t) && (t = JSON.stringify(t)), i.push(o(e) + "=" + o(t)) }))) })), s = i.join("&") } if (s) { var a = t.indexOf("#"); -1 !== a && (t = t.slice(0, a)), t += (-1 === t.indexOf("?") ? "?" : "&") + s } return t } }, function (t, e, r) { "use strict"; t.exports = { silentJSONParsing: !0, forcedJSONParsing: !0, clarifyTimeoutError: !1 } }, function (t, e, r) { "use strict"; var n = r(0), o = r(19), s = r(20), i = r(5), a = r(8), u = r(23), c = r(24), h = r(25), f = r(6), l = r(1), p = r(2); t.exports = function (t) { return new Promise((function (e, r) { var d, m = t.data, v = t.headers, y = t.responseType; function g () { t.cancelToken && t.cancelToken.unsubscribe(d), t.signal && t.signal.removeEventListener("abort", d) } n.isFormData(m) && delete v["Content-Type"]; var b = new XMLHttpRequest; if (t.auth) { var O = t.auth.username || "", E = t.auth.password ? unescape(encodeURIComponent(t.auth.password)) : ""; v.Authorization = "Basic " + btoa(O + ":" + E) } var x = a(t.baseURL, t.url), w = h.parse(x), j = n.getProtocol(w.protocol); function R () { if (b) { var n = "getAllResponseHeaders" in b ? u(b.getAllResponseHeaders()) : null, s = { data: y && "text" !== y && "json" !== y ? b.response : b.responseText, status: b.status, statusText: b.statusText, headers: n, config: t, request: b }; o((function (t) { e(t), g() }), (function (t) { r(t), g() }), s), b = null } } if (b.open(t.method.toUpperCase(), i(x, t.params, t.paramsSerializer), !0), b.timeout = t.timeout, "onloadend" in b ? b.onloadend = R : b.onreadystatechange = function () { b && 4 === b.readyState && (0 !== b.status || b.responseURL && 0 === b.responseURL.indexOf("file:")) && setTimeout(R) }, b.onabort = function () { b && (r(new l("Request aborted", l.ECONNABORTED, t, b)), b = null) }, b.onerror = function () { r(new l("Network Error", l.ERR_NETWORK, t, b, b)), b = null }, b.ontimeout = function () { var e = t.timeout ? "timeout of " + t.timeout + "ms exceeded" : "timeout exceeded", n = t.transitional || f; t.timeoutErrorMessage && (e = t.timeoutErrorMessage), r(new l(e, n.clarifyTimeoutError ? l.ETIMEDOUT : l.ECONNABORTED, t, b)), b = null }, n.isStandardBrowserEnv()) { var A = (t.withCredentials || c(x)) && t.xsrfCookieName ? s.read(t.xsrfCookieName) : void 0; A && (v[t.xsrfHeaderName] = A) } "setRequestHeader" in b && n.forEach(v, (function (t, e) { void 0 === m && "content-type" === e.toLowerCase() ? delete v[e] : b.setRequestHeader(e, t) })), n.isUndefined(t.withCredentials) || (b.withCredentials = !!t.withCredentials), y && "json" !== y && (b.responseType = t.responseType), "function" == typeof t.onDownloadProgress && b.addEventListener("progress", t.onDownloadProgress), "function" == typeof t.onUploadProgress && b.upload && b.upload.addEventListener("progress", t.onUploadProgress), (t.cancelToken || t.signal) && (d = function (t) { b && (r(!t || t && t.type ? new p : t), b.abort(), b = null) }, t.cancelToken && t.cancelToken.subscribe(d), t.signal && (t.signal.aborted ? d() : t.signal.addEventListener("abort", d))), m || (m = null), null !== w.path ? n.supportedProtocols.includes(j) ? b.send(m) : r(new l("Unsupported protocol " + j, l.ERR_BAD_REQUEST, t)) : r(new l("Malformed URL " + x, l.ERR_BAD_REQUEST, t)) })) } }, function (t, e, r) { "use strict"; var n = r(21), o = r(22); t.exports = function (t, e) { return t && !n(e) ? o(t, e) : e } }, function (t, e, r) { "use strict"; t.exports = function (t) { return !(!t || !t.__CANCEL__) } }, function (t, e, r) { "use strict"; var n = r(0); t.exports = function (t, e) { e = e || {}; var r = {}; function o (t, e) { return n.isPlainObject(t) && n.isPlainObject(e) ? n.merge(t, e) : n.isPlainObject(e) ? n.merge({}, e) : n.isArray(e) ? e.slice() : e } function s (r) { return n.isUndefined(e[r]) ? n.isUndefined(t[r]) ? void 0 : o(void 0, t[r]) : o(t[r], e[r]) } function i (t) { if (!n.isUndefined(e[t])) return o(void 0, e[t]) } function a (r) { return n.isUndefined(e[r]) ? n.isUndefined(t[r]) ? void 0 : o(void 0, t[r]) : o(void 0, e[r]) } function u (r) { return r in e ? o(t[r], e[r]) : r in t ? o(void 0, t[r]) : void 0 } var c = { url: i, method: i, data: i, baseURL: a, transformRequest: a, transformResponse: a, paramsSerializer: a, timeout: a, timeoutMessage: a, withCredentials: a, adapter: a, responseType: a, xsrfCookieName: a, xsrfHeaderName: a, onUploadProgress: a, onDownloadProgress: a, decompress: a, maxContentLength: a, maxBodyLength: a, beforeRedirect: a, transport: a, httpAgent: a, httpsAgent: a, cancelToken: a, socketPath: a, responseEncoding: a, validateStatus: u }; return n.forEach(Object.keys(t).concat(Object.keys(e)), (function (t) { var e = c[t] || s, o = e(t); n.isUndefined(o) && e !== u || (r[t] = o) })), r } }, function (t, e) { t.exports = { version: "0.26.1" } }, function (t, e, r) { t.exports = r(13) }, function (t, e, r) { "use strict"; var n = r(0), o = r(4), s = r(14), i = r(10); var a = function t (e) { var r = new s(e), a = o(s.prototype.request, r); return n.extend(a, s.prototype, r), n.extend(a, r), a.create = function (r) { return t(i(e, r)) }, a }(r(3)); a.Axios = s, a.CanceledError = r(2), a.CancelToken = r(34), a.isCancel = r(9), a.VERSION = r(11).version, a.AxiosError = r(1), a.Cancel = a.CanceledError, a.all = function (t) { return Promise.all(t) }, a.spread = r(35), a.isAxiosError = r(36), t.exports = a, t.exports.default = a }, function (t, e, r) { "use strict"; var n = r(0), o = r(5), s = r(15), i = r(16), a = r(10), u = r(8), c = r(33), h = c.validators; function f (t) { this.defaults = t, this.interceptors = { request: new s, response: new s } } f.prototype.request = function (t, e) { "string" == typeof t ? (e = e || {}).url = t : e = t || {}, (e = a(this.defaults, e)).method ? e.method = e.method.toLowerCase() : this.defaults.method ? e.method = this.defaults.method.toLowerCase() : e.method = "get"; var r = e.transitional; void 0 !== r && c.assertOptions(r, { silentJSONParsing: h.transitional(h.boolean), forcedJSONParsing: h.transitional(h.boolean), clarifyTimeoutError: h.transitional(h.boolean) }, !1); var n = [], o = !0; this.interceptors.request.forEach((function (t) { "function" == typeof t.runWhen && !1 === t.runWhen(e) || (o = o && t.synchronous, n.unshift(t.fulfilled, t.rejected)) })); var s, u = []; if (this.interceptors.response.forEach((function (t) { u.push(t.fulfilled, t.rejected) })), !o) { var f = [i, void 0]; for (Array.prototype.unshift.apply(f, n), f = f.concat(u), s = Promise.resolve(e); f.length;)s = s.then(f.shift(), f.shift()); return s } for (var l = e; n.length;) { var p = n.shift(), d = n.shift(); try { l = p(l) } catch (t) { d(t); break } } try { s = i(l) } catch (t) { return Promise.reject(t) } for (; u.length;)s = s.then(u.shift(), u.shift()); return s }, f.prototype.getUri = function (t) { t = a(this.defaults, t); var e = u(t.baseURL, t.url); return o(e, t.params, t.paramsSerializer) }, n.forEach(["delete", "get", "head", "options"], (function (t) { f.prototype[t] = function (e, r) { return this.request(a(r || {}, { method: t, url: e, data: (r || {}).data })) } })), n.forEach(["post", "put", "patch"], (function (t) { f.prototype[t] = function (e, r, n) { return this.request(a(n || {}, { method: t, url: e, data: r })) } })), t.exports = f }, function (t, e, r) { "use strict"; var n = r(0); function o () { this.handlers = [] } o.prototype.use = function (t, e, r) { return this.handlers.push({ fulfilled: t, rejected: e, synchronous: !!r && r.synchronous, runWhen: r ? r.runWhen : null }), this.handlers.length - 1 }, o.prototype.eject = function (t) { this.handlers[t] && (this.handlers[t] = null) }, o.prototype.forEach = function (t) { n.forEach(this.handlers, (function (e) { null !== e && t(e) })) }, t.exports = o }, function (t, e, r) { "use strict"; var n = r(0), o = r(17), s = r(9), i = r(3), a = r(2); function u (t) { if (t.cancelToken && t.cancelToken.throwIfRequested(), t.signal && t.signal.aborted) throw new a } t.exports = function (t) { return u(t), t.headers = t.headers || {}, t.data = o.call(t, t.data, t.headers, t.transformRequest), t.headers = n.merge(t.headers.common || {}, t.headers[t.method] || {}, t.headers), n.forEach(["delete", "get", "head", "post", "put", "patch", "common"], (function (e) { delete t.headers[e] })), (t.adapter || i.adapter)(t).then((function (e) { return u(t), e.data = o.call(t, e.data, e.headers, t.transformResponse), e }), (function (e) { return s(e) || (u(t), e && e.response && (e.response.data = o.call(t, e.response.data, e.response.headers, t.transformResponse))), Promise.reject(e) })) } }, function (t, e, r) { "use strict"; var n = r(0), o = r(3); t.exports = function (t, e, r) { var s = this || o; return n.forEach(r, (function (r) { t = r.call(s, t, e) })), t } }, function (t, e, r) { "use strict"; var n = r(0); t.exports = function (t, e) { n.forEach(t, (function (r, n) { n !== e && n.toUpperCase() === e.toUpperCase() && (t[e] = r, delete t[n]) })) } }, function (t, e, r) { "use strict"; var n = r(1); t.exports = function (t, e, r) { var o = r.config.validateStatus; r.status && o && !o(r.status) ? e(new n("Request failed with status code " + r.status, [n.ERR_BAD_REQUEST, n.ERR_BAD_RESPONSE][Math.floor(r.status / 100) - 4], r.config, r.request, r)) : t(r) } }, function (t, e, r) { "use strict"; var n = r(0); t.exports = n.isStandardBrowserEnv() ? { write: function (t, e, r, o, s, i) { var a = []; a.push(t + "=" + encodeURIComponent(e)), n.isNumber(r) && a.push("expires=" + new Date(r).toGMTString()), n.isString(o) && a.push("path=" + o), n.isString(s) && a.push("domain=" + s), !0 === i && a.push("secure"), document.cookie = a.join("; ") }, read: function (t) { var e = document.cookie.match(new RegExp("(^|;\\s*)(" + t + ")=([^;]*)")); return e ? decodeURIComponent(e[3]) : null }, remove: function (t) { this.write(t, "", Date.now() - 864e5) } } : { write: function () { }, read: function () { return null }, remove: function () { } } }, function (t, e, r) { "use strict"; t.exports = function (t) { return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(t) } }, function (t, e, r) { "use strict"; t.exports = function (t, e) { return e ? t.replace(/\/+$/, "") + "/" + e.replace(/^\/+/, "") : t } }, function (t, e, r) { "use strict"; var n = r(0), o = ["age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host", "if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization", "referer", "retry-after", "user-agent"]; t.exports = function (t) { var e, r, s, i = {}; return t ? (n.forEach(t.split("\n"), (function (t) { if (s = t.indexOf(":"), e = n.trim(t.substr(0, s)).toLowerCase(), r = n.trim(t.substr(s + 1)), e) { if (i[e] && o.indexOf(e) >= 0) return; i[e] = "set-cookie" === e ? (i[e] ? i[e] : []).concat([r]) : i[e] ? i[e] + ", " + r : r } })), i) : i } }, function (t, e, r) { "use strict"; var n = r(0); t.exports = n.isStandardBrowserEnv() ? function () { var t, e = /(msie|trident)/i.test(navigator.userAgent), r = document.createElement("a"); function o (t) { var n = t; return e && (r.setAttribute("href", n), n = r.href), r.setAttribute("href", n), { href: r.href, protocol: r.protocol ? r.protocol.replace(/:$/, "") : "", host: r.host, search: r.search ? r.search.replace(/^\?/, "") : "", hash: r.hash ? r.hash.replace(/^#/, "") : "", hostname: r.hostname, port: r.port, pathname: "/" === r.pathname.charAt(0) ? r.pathname : "/" + r.pathname } } return t = o(window.location.href), function (e) { var r = n.isString(e) ? o(e) : e; return r.protocol === t.protocol && r.host === t.host } }() : function () { return !0 } }, function (t, e, r) { "use strict"; var n = r(26), o = r(29); function s () { this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null } e.parse = b, e.resolve = function (t, e) { return b(t, !1, !0).resolve(e) }, e.resolveObject = function (t, e) { return t ? b(t, !1, !0).resolveObject(e) : e }, e.format = function (t) { o.isString(t) && (t = b(t)); return t instanceof s ? t.format() : s.prototype.format.call(t) }, e.Url = s; var i = /^([a-z0-9.+-]+:)/i, a = /:[0-9]*$/, u = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, c = ["{", "}", "|", "\\", "^", "`"].concat(["<", ">", '"', "`", " ", "\r", "\n", "\t"]), h = ["'"].concat(c), f = ["%", "/", "?", ";", "#"].concat(h), l = ["/", "?", "#"], p = /^[+a-z0-9A-Z_-]{0,63}$/, d = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, m = { javascript: !0, "javascript:": !0 }, v = { javascript: !0, "javascript:": !0 }, y = { http: !0, https: !0, ftp: !0, gopher: !0, file: !0, "http:": !0, "https:": !0, "ftp:": !0, "gopher:": !0, "file:": !0 }, g = r(30); function b (t, e, r) { if (t && o.isObject(t) && t instanceof s) return t; var n = new s; return n.parse(t, e, r), n } s.prototype.parse = function (t, e, r) { if (!o.isString(t)) throw new TypeError("Parameter 'url' must be a string, not " + typeof t); var s = t.indexOf("?"), a = -1 !== s && s < t.indexOf("#") ? "?" : "#", c = t.split(a); c[0] = c[0].replace(/\\/g, "/"); var b = t = c.join(a); if (b = b.trim(), !r && 1 === t.split("#").length) { var O = u.exec(b); if (O) return this.path = b, this.href = b, this.pathname = O[1], O[2] ? (this.search = O[2], this.query = e ? g.parse(this.search.substr(1)) : this.search.substr(1)) : e && (this.search = "", this.query = {}), this } var E = i.exec(b); if (E) { var x = (E = E[0]).toLowerCase(); this.protocol = x, b = b.substr(E.length) } if (r || E || b.match(/^\/\/[^@\/]+@[^@\/]+/)) { var w = "//" === b.substr(0, 2); !w || E && v[E] || (b = b.substr(2), this.slashes = !0) } if (!v[E] && (w || E && !y[E])) { for (var j, R, A = -1, C = 0; C < l.length; C++) { -1 !== (S = b.indexOf(l[C])) && (-1 === A || S < A) && (A = S) } -1 !== (R = -1 === A ? b.lastIndexOf("@") : b.lastIndexOf("@", A)) && (j = b.slice(0, R), b = b.slice(R + 1), this.auth = decodeURIComponent(j)), A = -1; for (C = 0; C < f.length; C++) { var S; -1 !== (S = b.indexOf(f[C])) && (-1 === A || S < A) && (A = S) } -1 === A && (A = b.length), this.host = b.slice(0, A), b = b.slice(A), this.parseHost(), this.hostname = this.hostname || ""; var _ = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1]; if (!_) for (var N = this.hostname.split(/\./), P = (C = 0, N.length); C < P; C++) { var T = N[C]; if (T && !T.match(p)) { for (var U = "", q=0,B=T.length;q127?U+="x":U+=T[q];if(!U.match(p)){var D=N.slice(0,C),I=N.slice(C+1),k=T.match(d);k&&(D.push(k[1]),I.unshift(k[2])),I.length&&(b="/"+I.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),_||(this.hostname=n.toASCII(this.hostname));var L=this.port?":"+this.port:"",F=this.hostname||"";this.host=F+L,this.href+=this.host,_&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[x])for(C=0,P=h.length;C0)&&r.host.split("@"))&&(r.auth=_.shift(),r.host=r.hostname=_.shift());return r.search=t.search,r.query=t.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!w.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var R=w.slice(-1)[0],A=(r.host||t.host||w.length>1)&&("."===R||".."===R)||""===R,C=0,S=w.length;S>=0;S--)"."===(R=w[S])?w.splice(S,1):".."===R?(w.splice(S,1),C++):C&&(w.splice(S,1),C--);if(!E&&!x)for(;C--;C)w.unshift("..");!E||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),A&&"/"!==w.join("/").substr(-1)&&w.push("");var _,N=""===w[0]||w[0]&&"/"===w[0].charAt(0);j&&(r.hostname=r.host=N?"":w.length?w.shift():"",(_=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=_.shift(),r.host=r.hostname=_.shift()));return(E=E||r.host&&w.length)&&!N&&w.unshift(""),w.length?r.pathname=w.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var t=this.host,e=a.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,r){(function(t,n){var o;/*! https://mths.be/punycode v1.4.1 by @mathias */!function(s){e&&e.nodeType,t&&t.nodeType;var i="object"==typeof n&&n;i.global!==i&&i.window!==i&&i.self;var a,u=2147483647,c=/^xn--/,h=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,l={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},p=Math.floor,d=String.fromCharCode;function m(t){throw new RangeError(l[t])}function v(t,e){for(var r=t.length,n=[];r--;)n[r]=e(t[r]);return n}function y(t,e){var r=t.split("@"),n="";return r.length>1&&(n=r[0]+"@",t=r[1]),n+v((t=t.replace(f,".")).split("."),e).join(".")}function g(t){for(var e,r,n=[],o=0,s=t.length;o=55296&&e<=56319&&o65535&&(e+=d((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=d(t)})).join("")}function O(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function E(t,e,r){var n=0;for(t=r?p(t/700):t>>1,t+=p(t/e);t>455;n+=36)t=p(t/35);return p(n+36*t/(t+38))}function x(t){var e,r,n,o,s,i,a,c,h,f,l,d=[],v=t.length,y=0,g=128,O=72;for((r=t.lastIndexOf("-"))<0&&(r=0),n=0;n=128&&m("not-basic"),d.push(t.charCodeAt(n));for(o=r>0?r+1:0;o=v&&m("invalid-input"),((c=(l=t.charCodeAt(o++))-48<10?l-22:l-65<26?l-65:l-97<26?l-97:36)>=36||c>p((u-y)/i))&&m("overflow"),y+=c*i,!(c<(h=a<=O?1:a>=O+26?26:a-O));a+=36)i>p(u/(f=36-h))&&m("overflow"),i*=f;O=E(y-s,e=d.length+1,0==s),p(y/e)>u-g&&m("overflow"),g+=p(y/e),y%=e,d.splice(y++,0,g)}return b(d)}function w(t){var e,r,n,o,s,i,a,c,h,f,l,v,y,b,x,w=[];for(v=(t=g(t)).length,e=128,r=0,s=72,i=0;i=e&&lp((u-r)/(y=n+1))&&m("overflow"),r+=(a-e)*y,e=a,i=0;iu&&m("overflow"),l==e){for(c=r,h=36;!(c<(f=h<=s?1:h>=s+26?26:h-s));h+=36)x=c-f,b=36-f,w.push(d(O(f+x%b,0))),c=p(x/b);w.push(d(O(c,0))),s=E(r,y,n==o),r=0,++n}++r,++e}return w.join("")}a={version:"1.4.1",ucs2:{decode:g,encode:b},decode:x,encode:w,toASCII:function(t){return y(t,(function(t){return h.test(t)?"xn--"+w(t):t}))},toUnicode:function(t){return y(t,(function(t){return c.test(t)?x(t.slice(4).toLowerCase()):t}))}},void 0===(o=function(){return a}.call(e,r,e,t))||(t.exports=o)}()}).call(this,r(27)(t),r(28))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},function(t,e,r){"use strict";e.decode=e.parse=r(31),e.encode=e.stringify=r(32)},function(t,e,r){"use strict";function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,r,s){e=e||"&",r=r||"=";var i={};if("string"!=typeof t||0===t.length)return i;var a=/\+/g;t=t.split(e);var u=1e3;s&&"number"==typeof s.maxKeys&&(u=s.maxKeys);var c=t.length;u>0&&c>u&&(c=u);for(var h=0;h=0?(f=m.substr(0,v),l=m.substr(v+1)):(f=m,l=""),p=decodeURIComponent(f),d=decodeURIComponent(l),n(i,p)?o(i[p])?i[p].push(d):i[p]=[i[p],d]:i[p]=d}return i};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,r){"use strict";var n=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,r,a){return e=e||"&",r=r||"=",null===t&&(t=void 0),"object"==typeof t?s(i(t),(function(i){var a=encodeURIComponent(n(i))+r;return o(t[i])?s(t[i],(function(t){return a+encodeURIComponent(n(t))})).join(e):a+encodeURIComponent(n(t[i]))})).join(e):a?encodeURIComponent(n(a))+r+encodeURIComponent(n(t)):""};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function s(t,e){if(t.map)return t.map(e);for(var r=[],n=0;n0;){var i=n[s],a=e[i];if(a){var u=t[i],c=void 0===u||a(u,i,t);if(!0!==c)throw new o("option "+i+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new o("Unknown option "+i,o.ERR_BAD_OPTION)}},validators:s}},function(t,e,r){"use strict";var n=r(2);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var r=this;this.promise.then((function(t){if(r._listeners){var e,n=r._listeners.length;for(e=0;e+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function ke(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n
",2===lt.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Me(m.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 { + console.log('收到消息:' + msg); + let obj = JSON.parse(msg); + switch (obj.code) { + case 'addBookmark': + break; + default: + console.error('未知的命令:' + obj.code); + } +}); + +/** + * 接收当前注入页面传来的消息 + */ +window.addEventListener('message', function(event) { + if (event.data.type === undefined) { + return; + } + console.log('接受到消息', event.data); + switch (event.data.type) { + case 'sendToken': + port.postMessage(event.data); + window.token = event.data; + break; + default: + console.error('未知的事件', event); + } +}); diff --git a/浏览器插件/bookmarkBrowserPlugin/util/config.js b/浏览器插件/bookmarkBrowserPlugin/util/config.js new file mode 100644 index 0000000..5ab13f4 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/util/config.js @@ -0,0 +1,16 @@ +// const baseUri = ; +var baseUri; + +if (process.env.NODE_ENV === 'development') { + baseUri = 'http://localhost:3000'; + // baseUri = 'https://bm.tapme.top'; +} else { + baseUri = 'https://bm.tapme.top'; +} + +const config = { + baseUrl: baseUri + '/bookmark/api', + ssoUrl: baseUri + '/userSpace/ssoAuth', +}; + +export default config; diff --git a/浏览器插件/bookmarkBrowserPlugin/util/const.js b/浏览器插件/bookmarkBrowserPlugin/util/const.js new file mode 100644 index 0000000..e69de29 diff --git a/浏览器插件/bookmarkBrowserPlugin/util/httpUtil.js b/浏览器插件/bookmarkBrowserPlugin/util/httpUtil.js new file mode 100644 index 0000000..f26e458 --- /dev/null +++ b/浏览器插件/bookmarkBrowserPlugin/util/httpUtil.js @@ -0,0 +1,37 @@ +import config from './config'; +import axios from 'axios'; + +axios.defaults.timeout = 15000; +axios.defaults.baseURL = config.baseUrl; + +axios.interceptors.request.use( + function(config) { + config.headers['jwt-token'] = window.token; + return config; + }, + function(error) { + console.error(error); + return Promise.reject(error); + } +); + +axios.interceptors.response.use( + res => { + if (res.data.code === -1) { + localStorage.removeItem('token'); + if (window.envType === 'background') { + window.open(config.ssoUrl); + } else { + window.vueInstance.$router.replace('/public/login'); + } + } else if (res.data.code === 1) { + return res.data.data; + } else { + Promise.reject(res); + } + }, + error => { + return Promise.reject(error); + } +); +export default axios; From 57a6944ec5bc6555d49a5ef1677fe84a2633f2e0 Mon Sep 17 00:00:00 2001 From: fanxb Date: Sun, 10 Apr 2022 21:43:25 +0800 Subject: [PATCH 2/6] temp --- .../service/impl/BookmarkServiceImpl.java | 4 +- .../bookmarkBrowserPlugin/background.js | 41 +++++++++++++++---- .../bookmarkBrowserPlugin/manifest.json | 4 +- 浏览器插件/bookmarkBrowserPlugin/popup.js | 1 - .../bookmarkBrowserPlugin/popup/index.html | 6 ++- .../bookmarkBrowserPlugin/static/js/config.js | 0 .../bookmarkBrowserPlugin/static/js/sso.js | 9 +++- 7 files changed, 51 insertions(+), 14 deletions(-) delete mode 100644 浏览器插件/bookmarkBrowserPlugin/popup.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/config.js diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java index d5651ee..d7e794f 100644 --- a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java @@ -201,7 +201,9 @@ public class BookmarkServiceImpl implements BookmarkService { bookmark.setUserId(userId); bookmark.setCreateTime(System.currentTimeMillis()); bookmark.setAddTime(bookmark.getCreateTime()); - bookmark.setIcon(getIconBase64(bookmark.getUrl())); + if (bookmark.getIcon() == null) { + bookmark.setIcon(getIconBase64(bookmark.getUrl())); + } //文件夹和书签都建立搜索key pinYinService.changeBookmark(bookmark); bookmarkDao.insertOne(bookmark); diff --git a/浏览器插件/bookmarkBrowserPlugin/background.js b/浏览器插件/bookmarkBrowserPlugin/background.js index eeff0ba..3cbaf49 100644 --- a/浏览器插件/bookmarkBrowserPlugin/background.js +++ b/浏览器插件/bookmarkBrowserPlugin/background.js @@ -1,6 +1,12 @@ window.envType = 'background'; window.token = localStorage.getItem('token'); +axios.defaults.baseURL = 'https://fleyx.com/bookmark/api'; +axios.defaults.headers.common['jwt-token'] = window.token; +axios.defaults.headers.post['Content-Type'] = 'application/json'; +axios.defaults.headers.put['Content-Type'] = 'application/json'; + + let token = null; let globalPort = null; @@ -13,6 +19,7 @@ chrome.extension.onConnect.addListener(port => { console.log(msg); localStorage.setItem('token', msg.data); window.token = msg.data; + axios.defaults.headers.common['jwt-token'] = window.token; token = msg.data; break; default: @@ -24,15 +31,29 @@ chrome.extension.onConnect.addListener(port => { chrome.contextMenus.create( { title: '添加到书签', - onclick: function (info, tab) { + onclick: async function (info, tab) { console.log(info, tab); - alert(tab.title); - httpUtil.put('/bookmark', { + let { favIconUrl, title, url } = tab; + let icon = await axios.get(favIconUrl, { responseType: 'arraybuffer' }); + console.log(icon); + icon = `data:` + icon.headers['content-type'] + ';base64,' + window.btoa(String.fromCharCode(...new Uint8Array(icon.data))); + let body = { + path: "", + name: title, + url, type: 0, - path: '', - name: tab.title, - url: tab.url, - }); + icon + } + chrome.tabs.sendMessage(tab.id, { code: "addBookmark", body }, res => { + log.info("send to content"); + console.log(res); + }) + let res = await axios.put("/bookmark", body); + if (res.data.code == -1) { + alert("还未登录,点击拓展按钮进行登录"); + } else if (res.data.code == 0) { + alert("系统错误"); + } }, }, () => { @@ -48,3 +69,9 @@ chrome.contextMenus.create( function createMsg (code, data) { return JSON.stringify({ code, data }); } + +// 接收background发送的消息 +chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { + console.log(req); + sendResponse("收到"); +}) \ No newline at end of file diff --git a/浏览器插件/bookmarkBrowserPlugin/manifest.json b/浏览器插件/bookmarkBrowserPlugin/manifest.json index 2d88467..f23d8bd 100644 --- a/浏览器插件/bookmarkBrowserPlugin/manifest.json +++ b/浏览器插件/bookmarkBrowserPlugin/manifest.json @@ -13,7 +13,7 @@ "default_popup": "popup/index.html" }, "background": { - "scripts": ["static/js/jquery.js", "background.js"] + "scripts": ["static/js/jquery.js", "static/js/axios.min.js", "background.js"] }, "options_ui": { "page": "options/index.html", @@ -22,7 +22,7 @@ "content_scripts": [ { "matches": ["*://*/*"], - "js": ["static/js/jquery.js", "static/js/sso.js"] + "js": ["static/js/jquery.js", "static/js/axios.min.js", "static/js/sso.js"] } ] } diff --git a/浏览器插件/bookmarkBrowserPlugin/popup.js b/浏览器插件/bookmarkBrowserPlugin/popup.js deleted file mode 100644 index d008f94..0000000 --- a/浏览器插件/bookmarkBrowserPlugin/popup.js +++ /dev/null @@ -1 +0,0 @@ -document.getElementById('content').innerText = 'Hello world!'; diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.html b/浏览器插件/bookmarkBrowserPlugin/popup/index.html index 83b410f..a85b82c 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.html +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.html @@ -11,8 +11,10 @@ -

chrome-plugin-test

+ 点击登录

- + diff --git a/浏览器插件/bookmarkBrowserPlugin/static/js/config.js b/浏览器插件/bookmarkBrowserPlugin/static/js/config.js new file mode 100644 index 0000000..e69de29 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/js/sso.js b/浏览器插件/bookmarkBrowserPlugin/static/js/sso.js index d03895a..481f121 100644 --- a/浏览器插件/bookmarkBrowserPlugin/static/js/sso.js +++ b/浏览器插件/bookmarkBrowserPlugin/static/js/sso.js @@ -17,7 +17,7 @@ port.onMessage.addListener(msg => { /** * 接收当前注入页面传来的消息 */ -window.addEventListener('message', function(event) { +window.addEventListener('message', function (event) { if (event.data.type === undefined) { return; } @@ -31,3 +31,10 @@ window.addEventListener('message', function(event) { console.error('未知的事件', event); } }); + + +// 接收background发送的消息 +chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { + console.log(req); + sendResponse("收到"); +}) \ No newline at end of file From 1ba761716559ac03744cdfe75dc8c8d0b93597ec Mon Sep 17 00:00:00 2001 From: fanxb Date: Mon, 11 Apr 2022 17:42:00 +0800 Subject: [PATCH 3/6] temp --- bookmark_front/src/router/index.js | 89 +++++++------ bookmark_front/src/views/manage/sso/index.vue | 39 ++++++ .../bookmarkBrowserPlugin/background.js | 120 +++++++++--------- .../bookmarkBrowserPlugin/manifest.json | 18 ++- .../bookmarkBrowserPlugin/options/index.html | 2 +- .../bookmarkBrowserPlugin/popup/index.html | 11 +- .../bookmarkBrowserPlugin/popup/index.js | 2 + .../bookmarkBrowserPlugin/static/js/config.js | 9 ++ .../bookmarkBrowserPlugin/static/js/content.js | 78 ++++++++++++ .../bookmarkBrowserPlugin/static/js/sso.js | 40 ------ .../bookmarkBrowserPlugin/util/config.js | 16 --- .../bookmarkBrowserPlugin/util/const.js | 0 .../bookmarkBrowserPlugin/util/httpUtil.js | 37 ------ 13 files changed, 247 insertions(+), 214 deletions(-) create mode 100644 bookmark_front/src/views/manage/sso/index.vue create mode 100644 浏览器插件/bookmarkBrowserPlugin/popup/index.js create mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/content.js delete mode 100644 浏览器插件/bookmarkBrowserPlugin/static/js/sso.js delete mode 100644 浏览器插件/bookmarkBrowserPlugin/util/config.js delete mode 100644 浏览器插件/bookmarkBrowserPlugin/util/const.js delete mode 100644 浏览器插件/bookmarkBrowserPlugin/util/httpUtil.js diff --git a/bookmark_front/src/router/index.js b/bookmark_front/src/router/index.js index 85d3876..7fae8a8 100644 --- a/bookmark_front/src/router/index.js +++ b/bookmark_front/src/router/index.js @@ -7,59 +7,58 @@ import { checkJwtValid } from "@/util/UserUtil"; Vue.use(VueRouter); const routes = [ - { path: "/", component: () => import("@/views/home/index") }, - { - path: "/manage", - component: () => import("@/views/manage/index"), - children: [ - { path: "", redirect: "/manage/bookmarkTree" }, - { path: "bookmarkTree", component: () => import("@/views/manage/bookmarkTree/index") }, - { path: "personSpace/userInfo", component: () => import("@/views/manage/personSpace/index") }, - ] - }, - { - path: "/public", - component: () => import("@/views/public/index"), - children: [ - { path: "login", component: () => import("@/views/public/login/index") }, - { path: "register", component: () => import("@/views/public/register/index") }, - { path: "resetPassword", component: () => import("@/views/public/passwordReset/index") }, - { path: "oauth/github", component: () => import("@/views/public/oauth/github/index") }, - { path: "about", component: () => import("@/views/public/about/index") }, - { path: "404", component: () => import("@/views/public/notFound/index") }, - ] - }, - { path: "*", redirect: "/public/404" } + { path: "/", component: () => import("@/views/home/index") }, + { + path: "/manage", + component: () => import("@/views/manage/index"), + children: [ + { path: "", redirect: "/manage/bookmarkTree" }, + { path: "bookmarkTree", component: () => import("@/views/manage/bookmarkTree/index") }, + { path: "personSpace/userInfo", component: () => import("@/views/manage/personSpace/index") }, + { path: "sso", component: () => import("@/views/manage/sso/index") } + ] + }, + { + path: "/public", + component: () => import("@/views/public/index"), + children: [ + { path: "login", component: () => import("@/views/public/login/index") }, + { path: "register", component: () => import("@/views/public/register/index") }, + { path: "resetPassword", component: () => import("@/views/public/passwordReset/index") }, + { path: "oauth/github", component: () => import("@/views/public/oauth/github/index") }, + { path: "about", component: () => import("@/views/public/about/index") }, + { path: "404", component: () => import("@/views/public/notFound/index") } + ] + }, + { path: "*", redirect: "/public/404" } ]; const router = new VueRouter({ - mode: "history", - routes + mode: "history", + routes }); /** * 在此进行登录信息判断,以及重定向到登录页面 */ router.beforeEach(async (to, from, next) => { - //进入主页面/管理页面时,确认已经进行初始化操作 - if (to.path === '/' || to.path.startsWith("/manage")) { - await vuex.loginInit(); - } - let supportNoLogin = to.path === '/' || to.path.startsWith("/public"); - vuex.default.commit(GLOBAL_CONFIG + "/" + SUPPORT_NO_LOGIN, supportNoLogin); - if (!supportNoLogin && !checkJwtValid(vuex.default.state[GLOBAL_CONFIG][TOKEN])) { - //如不支持未登录进入,切jwt已过期,直接跳转到登录页面,并清理缓存 - await vuex.default.dispatch("treeData/clear"); - await vuex.default.dispatch("globalConfig/clear"); - next({ - path: "/public/login?to=" + btoa(location.href), - replace: true - }); - } else { - next(); - } -}) - - + //进入主页面/管理页面时,确认已经进行初始化操作 + if (to.path === "/" || to.path.startsWith("/manage")) { + await vuex.loginInit(); + } + let supportNoLogin = to.path === "/" || to.path.startsWith("/public"); + vuex.default.commit(GLOBAL_CONFIG + "/" + SUPPORT_NO_LOGIN, supportNoLogin); + if (!supportNoLogin && !checkJwtValid(vuex.default.state[GLOBAL_CONFIG][TOKEN])) { + //如不支持未登录进入,切jwt已过期,直接跳转到登录页面,并清理缓存 + await vuex.default.dispatch("treeData/clear"); + await vuex.default.dispatch("globalConfig/clear"); + next({ + path: "/public/login?to=" + btoa(location.href), + replace: true + }); + } else { + next(); + } +}); export default router; diff --git a/bookmark_front/src/views/manage/sso/index.vue b/bookmark_front/src/views/manage/sso/index.vue new file mode 100644 index 0000000..4f63b01 --- /dev/null +++ b/bookmark_front/src/views/manage/sso/index.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/浏览器插件/bookmarkBrowserPlugin/background.js b/浏览器插件/bookmarkBrowserPlugin/background.js index 3cbaf49..92747d0 100644 --- a/浏览器插件/bookmarkBrowserPlugin/background.js +++ b/浏览器插件/bookmarkBrowserPlugin/background.js @@ -1,66 +1,26 @@ -window.envType = 'background'; -window.token = localStorage.getItem('token'); - -axios.defaults.baseURL = 'https://fleyx.com/bookmark/api'; -axios.defaults.headers.common['jwt-token'] = window.token; -axios.defaults.headers.post['Content-Type'] = 'application/json'; -axios.defaults.headers.put['Content-Type'] = 'application/json'; - - -let token = null; -let globalPort = null; - -chrome.extension.onConnect.addListener(port => { - console.log(port); - globalPort = port; - port.onMessage.addListener(msg => { - switch (msg.type) { - case 'sendToken': - console.log(msg); - localStorage.setItem('token', msg.data); - window.token = msg.data; - axios.defaults.headers.common['jwt-token'] = window.token; - token = msg.data; - break; - default: - console.error('未知的数据', msg); - } - }); -}); - chrome.contextMenus.create( { title: '添加到书签', - onclick: async function (info, tab) { - console.log(info, tab); - let { favIconUrl, title, url } = tab; - let icon = await axios.get(favIconUrl, { responseType: 'arraybuffer' }); - console.log(icon); - icon = `data:` + icon.headers['content-type'] + ';base64,' + window.btoa(String.fromCharCode(...new Uint8Array(icon.data))); - let body = { - path: "", - name: title, - url, - type: 0, - icon - } - chrome.tabs.sendMessage(tab.id, { code: "addBookmark", body }, res => { - log.info("send to content"); - console.log(res); - }) - let res = await axios.put("/bookmark", body); - if (res.data.code == -1) { - alert("还未登录,点击拓展按钮进行登录"); - } else if (res.data.code == 0) { - alert("系统错误"); - } - }, + id: "addBookmark", }, - () => { - console.log("创建右键菜单采购"); - } + () => console.log("创建右键菜单成功") ); + +chrome.contextMenus.onClicked.addListener(async function (info, tab) { + console.log(info, tab); + let body = { + path: "", + name: tab.title, + url: tab.url, + type: 0, + iconUrl: tab.favIconUrl + }; + sendToContent(tab.id, { code: "addBookmark", data: body, token: await getVal("token") }); +}) + + + /** * 构建一个标准命令 * @param {*} code code @@ -70,8 +30,44 @@ function createMsg (code, data) { return JSON.stringify({ code, data }); } -// 接收background发送的消息 -chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { - console.log(req); - sendResponse("收到"); -}) \ No newline at end of file +// 接收content发送的消息 +chrome.runtime.onMessage.addListener(async (data, sender, sendResponse) => { + if (!data.code) { + return; + } + console.log("收到content发送消息:", data); + if (data.code == 'setToken') { + setVal("token", data.data); + sendResponse({ code: "setTokenOk" }); + } +}) + +/** + * 向content发送消息 + * @param {*} tabId + * @param {*} data + */ +function sendToContent (tabId, data) { + console.log(tabId, data); + chrome.tabs.sendMessage(tabId, data, res => { + console.log("接受响应", res); + }) +} + +function setVal (key, val) { + return new Promise((resolve, reject) => { + chrome.storage.local.set({ [key]: val }, function () { + console.log("设置值成功:", key, val) + resolve(); + }) + }) +} + +function getVal (key) { + return new Promise((resolve, reject) => { + chrome.storage.local.get([key], function (res) { + console.log("取值成功", res); + resolve(res[key]); + }) + }) +} \ No newline at end of file diff --git a/浏览器插件/bookmarkBrowserPlugin/manifest.json b/浏览器插件/bookmarkBrowserPlugin/manifest.json index f23d8bd..ca0f0e9 100644 --- a/浏览器插件/bookmarkBrowserPlugin/manifest.json +++ b/浏览器插件/bookmarkBrowserPlugin/manifest.json @@ -2,27 +2,25 @@ "name": "bookmark-chrome", "description": "A Vue.js web extension", "version": "1.0", - "manifest_version": 2, - "permissions": ["contextMenus"], + "manifest_version": 3, + "permissions": ["contextMenus", "storage"], + "action": { + "default_popup": "popup/index.html" + }, "icons": { "48": "static/icons/icon_48.png", "128": "static/icons/icon_128.png" }, - "browser_action": { - "default_title": "bookmark-chrome", - "default_popup": "popup/index.html" - }, "background": { - "scripts": ["static/js/jquery.js", "static/js/axios.min.js", "background.js"] + "service_worker": "background.js" }, "options_ui": { - "page": "options/index.html", - "chrome_style": true + "page": "options/index.html" }, "content_scripts": [ { "matches": ["*://*/*"], - "js": ["static/js/jquery.js", "static/js/axios.min.js", "static/js/sso.js"] + "js": ["static/js/axios.min.js", "static/js/config.js", "static/js/content.js"] } ] } diff --git a/浏览器插件/bookmarkBrowserPlugin/options/index.html b/浏览器插件/bookmarkBrowserPlugin/options/index.html index c3bda45..2570f4f 100644 --- a/浏览器插件/bookmarkBrowserPlugin/options/index.html +++ b/浏览器插件/bookmarkBrowserPlugin/options/index.html @@ -11,6 +11,6 @@ -

chrome-plugin-test

+

option.html

diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.html b/浏览器插件/bookmarkBrowserPlugin/popup/index.html index a85b82c..dc91dd8 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.html +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.html @@ -5,6 +5,11 @@ Document diff --git a/浏览器插件/bookmarkBrowserPlugin/background.js b/浏览器插件/bookmarkBrowserPlugin/background.js index 92747d0..0cbee6b 100644 --- a/浏览器插件/bookmarkBrowserPlugin/background.js +++ b/浏览器插件/bookmarkBrowserPlugin/background.js @@ -1,44 +1,42 @@ -chrome.contextMenus.create( - { - title: '添加到书签', - id: "addBookmark", - }, - () => console.log("创建右键菜单成功") -); +chrome.runtime.onInstalled.addListener(() => { + chrome.contextMenus.create( + { + title: '添加到书签', + id: "addBookmark", + }, + () => console.log("创建右键菜单成功") + ); +}); + chrome.contextMenus.onClicked.addListener(async function (info, tab) { console.log(info, tab); let body = { - path: "", name: tab.title, url: tab.url, - type: 0, iconUrl: tab.favIconUrl }; sendToContent(tab.id, { code: "addBookmark", data: body, token: await getVal("token") }); -}) +}); - -/** - * 构建一个标准命令 - * @param {*} code code - * @param {*} data data - */ -function createMsg (code, data) { - return JSON.stringify({ code, data }); -} - -// 接收content发送的消息 +// 接收content/popup发送的消息 chrome.runtime.onMessage.addListener(async (data, sender, sendResponse) => { - if (!data.code) { + if (!data.code || !data.receiver == 'background') { return; } - console.log("收到content发送消息:", data); + sendResponse("ok"); + console.log("收到消息:", data, sender); if (data.code == 'setToken') { - setVal("token", data.data); - sendResponse({ code: "setTokenOk" }); + await setVal("token", data.data); + // sendToContent + await sendToContent(sender.tab.id, { code: "setTokenOk" }); + } else if (data.code == 'getToken') { + let token = await getVal("token"); + sendToPopup({ code: "setToken", data: await getVal("token") }); + } else if (data.code == "clearToken") { + await clearVal("token"); } }) @@ -49,11 +47,27 @@ chrome.runtime.onMessage.addListener(async (data, sender, sendResponse) => { */ function sendToContent (tabId, data) { console.log(tabId, data); + data.receiver = "content"; chrome.tabs.sendMessage(tabId, data, res => { console.log("接受响应", res); }) } +/** + * 向popup发送消息 + * @param {*} data + */ +function sendToPopup (data) { + data.receiver = "popup"; + chrome.runtime.sendMessage(data, res => console.log(res)); +} + +/** + * 设置值 + * @param {*} key + * @param {*} val + * @returns + */ function setVal (key, val) { return new Promise((resolve, reject) => { chrome.storage.local.set({ [key]: val }, function () { @@ -63,6 +77,11 @@ function setVal (key, val) { }) } +/** + * 获取值 + * @param {*} key + * @returns + */ function getVal (key) { return new Promise((resolve, reject) => { chrome.storage.local.get([key], function (res) { @@ -70,4 +89,13 @@ function getVal (key) { resolve(res[key]); }) }) +} + +function clearVal (key) { + return new Promise((resolve, reject) => { + chrome.storage.local.remove(key, function () { + console.log("remove成功", key); + resolve(); + }) + }) } \ No newline at end of file diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.html b/浏览器插件/bookmarkBrowserPlugin/popup/index.html index dc91dd8..a3b8ae9 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.html +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.html @@ -7,8 +7,8 @@ - 点击登录 + 点击登录 +

diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.js b/浏览器插件/bookmarkBrowserPlugin/popup/index.js index e99c117..5869476 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.js +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.js @@ -1,2 +1,49 @@ console.log("asdf"); -console.log(bookmarkHost); \ No newline at end of file +console.log(bookmarkHost); + +var token; +var login = document.getElementById("login"); +var action = document.getElementById("action"); + +(async () => { + //初始化 + login.href = bookmarkHost + "/manage/sso/auth"; + sendToBg("getToken", null); +})(); + +/** + * 退出登陆 + */ +document.getElementById("logout").addEventListener("click", () => { + console.log("click"); + sendToBg("clearToken", null); + action.style.display = "none"; + login.style.display = "block"; +}); + +/** + * 发送消息到后台 + * @param {*} data + */ +function sendToBg (code, data) { + chrome.runtime.sendMessage({ code, data, receiver: "background" }, res => console.log(res)); +} + + +// 接收content/background发送的消息 +chrome.runtime.onMessage.addListener(async (data, sender, sendResponse) => { + if (!data.code || !data.receiver == 'popup') { + return; + } + sendResponse("ok"); + console.log("popup收到消息:", data); + if (data.code == 'setToken') { + token = data.data; + if (token) { + action.style.display = "block"; + login.style.display = "none"; + } else { + login.style.display = "block"; + } + } +}) \ No newline at end of file diff --git a/浏览器插件/bookmarkBrowserPlugin/static/js/content.js b/浏览器插件/bookmarkBrowserPlugin/static/js/content.js index 6cadb99..bfa2cb4 100644 --- a/浏览器插件/bookmarkBrowserPlugin/static/js/content.js +++ b/浏览器插件/bookmarkBrowserPlugin/static/js/content.js @@ -1,59 +1,88 @@ console.log('注入了页面'); +var bookmarkInfo = null; +var addBlockDiv = null; +var iframe = null; + /** * 接收当前注入页面传来的消息 */ window.addEventListener('message', function (event) { + console.log(event); if (event.data.code === undefined) { return; } console.log('接受到网页消息:', event.data); - sendToBg(event.data); + if (event.data.code === 'getBookmarkData') { + iframe.contentWindow.postMessage({ code: "addBookmarkAction", data: bookmarkInfo }, "*"); + } else if (event.data.code === 'setToken') { + sendToBg(event.data); + } else if (event.data.code == 'closeIframe') { + addBlockDiv.remove(); + } }); /** - * 接收background发送的消息 + * 接收content/background发送的消息 */ -chrome.runtime.onMessage.addListener((data, sender, sendResponse) => dealBgMessage(data)); +chrome.runtime.onMessage.addListener(async (data, sender, sendResponse) => { + if (!data || !data.code || data.receiver != "content") { + return; + } + sendResponse("ok"); + console.log('收到消息:', data); + if (data.code == 'setTokenOk') { + sendToPage(data); + } else if (data.code == 'addBookmark') { + await addBookmark(data); + } +}); + +async function addBookmark (data) { + if (!checkTokenValid(data.token)) { + alert("登陆失效,请登陆后,重试"); + window.open(bookmarkHost + "/manage/sso/auth"); + return; + } + //新增书签 + try { + if (data.data.iconUrl) { + let icon = await axios.get(data.data.iconUrl, { responseType: 'arraybuffer' }); + data.data.icon = `data:` + icon.headers['content-type'] + ';base64,' + window.btoa(String.fromCharCode(...new Uint8Array(icon.data))); + } + } catch (error) { + console.error(error); + } + console.log("新增书签", data.data); + bookmarkInfo = data.data; + + addBlockDiv = document.createElement("div"); + addBlockDiv.setAttribute("style", "position:fixed;width:100%;height:100vh;z-index:100000;left:0;top:0;background:rgba(211, 211, 205, 0.8)"); + document.getElementsByTagName("body")[0].appendChild(addBlockDiv); + iframe = document.createElement("iframe"); + iframe.src = bookmarkHost + "/noHead/addBookmark?token=" + data.token; + iframe.setAttribute("style", "width:70%;min-height:60vh;margin-left:15%;margin-top:10vh;padding:0.3em;"); + addBlockDiv.appendChild(iframe); +} /** * 发送消息给bg * @param {*} data */ function sendToBg (data) { - chrome.runtime.sendMessage(data, response => dealBgMessage(response)); + data.receiver = "background"; + chrome.runtime.sendMessage(data, response => { + console.log(response); + }); } -/** - * 处理后台发送的消息 - */ -async function dealBgMessage (data) { - if (!data || !data.code) { - return; - } - console.log('收到来自bg的回复:', data); - if (data.code == 'setTokenOk') { - sendToPage(data); - } else if (data.code == 'addBookmark') { - if (!checkTokenValid(data.token)) { - alert("登陆失效,请登陆后,重试"); - window.open(bookmarkHost + "/manage/sso"); - return; - } - //新增书签 - let icon = await axios.get(data.data.iconUrl, { responseType: 'arraybuffer' }); - data.data.icon = `data:` + icon.headers['content-type'] + ';base64,' + window.btoa(String.fromCharCode(...new Uint8Array(icon.data))); - await axios.put("/bookmark", data.data); - } -} - - /** * 发消息到页面 * @param {*} data */ function sendToPage (data) { + data.receiver = "page"; window.postMessage(data, "*"); } From 50e1e0e95191fd21fadee89afcb551e1087fe883 Mon Sep 17 00:00:00 2001 From: fanxb Date: Thu, 14 Apr 2022 17:10:39 +0800 Subject: [PATCH 5/6] temp --- .../bookmark/constant/FileConstant.java | 16 ++++ .../business/bookmark/dao/HostIconDao.java | 33 ++++++++ .../service/impl/BookmarkServiceImpl.java | 81 +++++++++++++++---- .../business/user/constant/FileConstant.java | 3 +- .../fanxb/bookmark/common/util/HttpUtil.java | 47 +++++------ .../files/public/icon/1.1614853232994.html | 17 ---- .../files/public/icon/1.1614853330412.html | 17 ---- .../db/migration/V21__新增域名path表.sql | 10 +++ .../src/views/noHead/addBookmark/index.vue | 5 +- .../bookmarkBrowserPlugin/static/js/content.js | 11 +-- 10 files changed, 151 insertions(+), 89 deletions(-) create mode 100644 bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/constant/FileConstant.java create mode 100644 bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/HostIconDao.java delete mode 100644 bookMarkService/files/public/icon/1.1614853232994.html delete mode 100644 bookMarkService/files/public/icon/1.1614853330412.html create mode 100644 bookMarkService/web/src/main/resources/db/migration/V21__新增域名path表.sql diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/constant/FileConstant.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/constant/FileConstant.java new file mode 100644 index 0000000..0e9f78a --- /dev/null +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/constant/FileConstant.java @@ -0,0 +1,16 @@ +package com.fanxb.bookmark.business.bookmark.constant; + +import java.nio.file.Paths; + +/** + * TODO + * + * @author fanxb + */ +public class FileConstant { + + /** + * 网站icon存储路径 + */ + public static final String FAVICON_PATH = Paths.get("files", "public", "favicon").toString(); +} diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/HostIconDao.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/HostIconDao.java new file mode 100644 index 0000000..915100b --- /dev/null +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/dao/HostIconDao.java @@ -0,0 +1,33 @@ +package com.fanxb.bookmark.business.bookmark.dao; + +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +/** + * @author fanxb + */ +@Mapper +public interface HostIconDao { + + /** + * 插入一条数据 + * + * @param host host + * @param iconPath path + * @author fanxb + */ + @Insert("insert into host_icon(host,iconPath) value(#{host},#{iconPath})") + void insert(@Param("host") String host, @Param("iconPath") String iconPath); + + /** + * 根据host获取iconPath + * + * @param host host + * @return {@link String} + * @author fanxb + */ + @Select("select iconPath from host_icon where host=#{host}") + String selectByHost(String host); +} diff --git a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java index d7e794f..6e50bc6 100644 --- a/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java +++ b/bookMarkService/business/bookmark/src/main/java/com/fanxb/bookmark/business/bookmark/service/impl/BookmarkServiceImpl.java @@ -1,21 +1,29 @@ package com.fanxb.bookmark.business.bookmark.service.impl; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.fanxb.bookmark.business.api.UserApi; +import com.fanxb.bookmark.business.bookmark.constant.FileConstant; import com.fanxb.bookmark.business.bookmark.dao.BookmarkDao; +import com.fanxb.bookmark.business.bookmark.dao.HostIconDao; import com.fanxb.bookmark.business.bookmark.entity.BookmarkEs; import com.fanxb.bookmark.business.bookmark.entity.MoveNodeBody; import com.fanxb.bookmark.business.bookmark.entity.redis.BookmarkDeleteMessage; import com.fanxb.bookmark.business.bookmark.entity.redis.VisitNumPlus; import com.fanxb.bookmark.business.bookmark.service.BookmarkService; import com.fanxb.bookmark.business.bookmark.service.PinYinService; +import com.fanxb.bookmark.common.constant.CommonConstant; import com.fanxb.bookmark.common.constant.EsConstant; import com.fanxb.bookmark.common.constant.RedisConstant; import com.fanxb.bookmark.common.entity.po.Bookmark; +import com.fanxb.bookmark.common.exception.CustomException; import com.fanxb.bookmark.common.util.*; import lombok.extern.slf4j.Slf4j; +import okhttp3.Request; +import okhttp3.Response; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; @@ -31,6 +39,10 @@ import org.springframework.transaction.annotation.Transactional; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; @@ -51,13 +63,15 @@ public class BookmarkServiceImpl implements BookmarkService { private final PinYinService pinYinService; private final UserApi userApi; private final EsUtil esUtil; + private final HostIconDao hostIconDao; @Autowired - public BookmarkServiceImpl(BookmarkDao bookmarkDao, PinYinService pinYinService, UserApi userApi, EsUtil esUtil) { + public BookmarkServiceImpl(BookmarkDao bookmarkDao, PinYinService pinYinService, UserApi userApi, EsUtil esUtil, HostIconDao hostIconDao) { this.bookmarkDao = bookmarkDao; this.pinYinService = pinYinService; this.userApi = userApi; this.esUtil = esUtil; + this.hostIconDao = hostIconDao; } @Override @@ -201,9 +215,7 @@ public class BookmarkServiceImpl implements BookmarkService { bookmark.setUserId(userId); bookmark.setCreateTime(System.currentTimeMillis()); bookmark.setAddTime(bookmark.getCreateTime()); - if (bookmark.getIcon() == null) { - bookmark.setIcon(getIconBase64(bookmark.getUrl())); - } + bookmark.setIcon(getIconPath(bookmark.getUrl())); //文件夹和书签都建立搜索key pinYinService.changeBookmark(bookmark); bookmarkDao.insertOne(bookmark); @@ -217,7 +229,7 @@ public class BookmarkServiceImpl implements BookmarkService { bookmark.setUserId(userId); if (bookmark.getType() == 0) { pinYinService.changeBookmark(bookmark); - bookmark.setIcon(getIconBase64(bookmark.getUrl())); + bookmark.setIcon(getIconPath(bookmark.getUrl())); } bookmarkDao.editBookmark(bookmark); userApi.versionPlus(userId); @@ -276,7 +288,7 @@ public class BookmarkServiceImpl implements BookmarkService { while ((deal = bookmarkDao.selectUserNoIcon(userId, start, size)).size() > 0) { start += size; deal.forEach(item -> { - String icon = getIconBase64(item.getUrl()); + String icon = getIconPath(item.getUrl()); if (StrUtil.isNotEmpty(icon)) { bookmarkDao.updateIcon(item.getBookmarkId(), icon); } @@ -307,21 +319,60 @@ public class BookmarkServiceImpl implements BookmarkService { return resPath; } - private String getIconBase64(String url) { + /** + * 获取icon + * + * @param url url + * @return {@link String} + * @throws + * @author fanxb + */ + private String getIconPath(String url) { if (StrUtil.isEmpty(url)) { return ""; } + String host; try { URL urlObj = new URL(url); - byte[] data = HttpUtil.download(urlIconAddress + "/icon?url=" + urlObj.getHost() + "&size=8..16..64", false); - String base64 = new String(Base64.getEncoder().encode(data)); - if (StrUtil.isNotEmpty(base64)) { - return "data:image/png;base64," + base64; - } else { - log.warn("url无法获取icon:{}", url); - } - } catch (MalformedURLException e) { + host = urlObj.getHost(); + } catch (Exception e) { log.warn("url无法解析出domain:{}", url); + return ""; + } + String iconPath = hostIconDao.selectByHost(host); + if (iconPath != null) { + return iconPath; + } + iconPath = saveFile(host, "http://" + host + "/favicon.ico"); + if (StrUtil.isEmpty(iconPath)) { + iconPath = saveFile(host, urlIconAddress + "/icon?url=" + host + "&size=16..64..256"); + } + if (StrUtil.isNotEmpty(iconPath)) { + hostIconDao.insert(host, iconPath); + } + return iconPath; + } + + private String saveFile(String host, String url) { + try { + try (Response res = HttpUtil.getClient(false).newCall(new Request.Builder().url(url) + .header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36") + .get().build()).execute()) { + assert res.body() != null; + if (!HttpUtil.checkIsOk(res.code())) { + throw new CustomException("请求错误:" + res.code()); + } + byte[] data = res.body().byteStream().readAllBytes(); + if (data.length > 0) { + String iconUrl = res.request().url().toString(); + String fileName = URLEncoder.encode(host, StandardCharsets.UTF_8) + iconUrl.substring(iconUrl.lastIndexOf(".")); + String filePath = Paths.get(CommonConstant.fileSavePath, FileConstant.FAVICON_PATH, host.substring(0, 2), fileName).toString(); + FileUtil.writeBytes(data, filePath); + return filePath; + } else { + log.info("未获取到icon:{}", url); + } + } } catch (Exception e) { log.error("url获取icon故障:{}", url, e); } diff --git a/bookMarkService/business/user/src/main/java/com/fanxb/bookmark/business/user/constant/FileConstant.java b/bookMarkService/business/user/src/main/java/com/fanxb/bookmark/business/user/constant/FileConstant.java index eccc028..9f0ac6f 100644 --- a/bookMarkService/business/user/src/main/java/com/fanxb/bookmark/business/user/constant/FileConstant.java +++ b/bookMarkService/business/user/src/main/java/com/fanxb/bookmark/business/user/constant/FileConstant.java @@ -1,5 +1,6 @@ package com.fanxb.bookmark.business.user.constant; +import com.fanxb.bookmark.common.constant.CommonConstant; import org.springframework.stereotype.Component; import java.nio.file.Paths; @@ -17,6 +18,6 @@ public class FileConstant { /** * 用户头像目录 */ - public static String iconPath = Paths.get("files", "public", "icon").toString(); + public static String iconPath = Paths.get(CommonConstant.fileSavePath, "files", "public", "icon").toString(); } diff --git a/bookMarkService/common/src/main/java/com/fanxb/bookmark/common/util/HttpUtil.java b/bookMarkService/common/src/main/java/com/fanxb/bookmark/common/util/HttpUtil.java index ffc946f..17665d4 100644 --- a/bookMarkService/common/src/main/java/com/fanxb/bookmark/common/util/HttpUtil.java +++ b/bookMarkService/common/src/main/java/com/fanxb/bookmark/common/util/HttpUtil.java @@ -12,8 +12,6 @@ import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; -import java.io.InputStream; -import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Proxy; import java.util.Map; @@ -51,42 +49,33 @@ public class HttpUtil { /** * 无代理环境 */ - private static final OkHttpClient CLIENT = new OkHttpClient.Builder().connectTimeout(2, TimeUnit.SECONDS) + private static final OkHttpClient CLIENT = new OkHttpClient.Builder().connectTimeout(1, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) .build(); + + /** + * 获取客户端 + * + * @param proxy 是否代理 + * @return {@link OkHttpClient} + * @author fanxb + */ + public static OkHttpClient getClient(boolean proxy) { + return proxy ? PROXY_CLIENT : CLIENT; + } + public static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); @PostConstruct public void init() { - OkHttpClient.Builder builder = new OkHttpClient.Builder(); + OkHttpClient.Builder builder = new OkHttpClient.Builder().connectTimeout(1, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS); log.info("代理配置,ip:{},port:{}", proxyIp, proxyPort); if (StrUtil.isNotBlank(proxyIp) && StrUtil.isNotBlank(proxyPort)) { builder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, Integer.parseInt(proxyPort)))); proxyExist = true; - } - PROXY_CLIENT = builder.connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(60, TimeUnit.SECONDS) - .build(); - } - - /*** - * 下载文件 - * @author fanxb - * @param url 下载链接 - * @param proxy 是否使用代理 - * @return java.io.InputStream - * @date 2021/3/12 - **/ - public static byte[] download(String url, boolean proxy) { - try (Response res = (proxy ? PROXY_CLIENT : CLIENT).newCall(new Request.Builder().url(url).build()).execute()) { - assert res.body() != null; - if (checkIsOk(res.code())) { - return res.body().byteStream().readAllBytes(); - } else { - throw new CustomException("下载出现问题:" + res.body().string()); - } - } catch (Exception e) { - throw new CustomException(e); + PROXY_CLIENT = builder.build(); + } else { + PROXY_CLIENT = CLIENT; } } @@ -270,6 +259,8 @@ public class HttpUtil { } return ipAddress; } + + } diff --git a/bookMarkService/files/public/icon/1.1614853232994.html b/bookMarkService/files/public/icon/1.1614853232994.html deleted file mode 100644 index 909688a..0000000 --- a/bookMarkService/files/public/icon/1.1614853232994.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -Bookmarks -

Bookmarks Menu

- -

-

1 -
2 -

f1

-

-

f11 -
f12 -

-

diff --git a/bookMarkService/files/public/icon/1.1614853330412.html b/bookMarkService/files/public/icon/1.1614853330412.html deleted file mode 100644 index 909688a..0000000 --- a/bookMarkService/files/public/icon/1.1614853330412.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -Bookmarks -

Bookmarks Menu

- -

-

1 -
2 -

f1

-

-

f11 -
f12 -

-

diff --git a/bookMarkService/web/src/main/resources/db/migration/V21__新增域名path表.sql b/bookMarkService/web/src/main/resources/db/migration/V21__新增域名path表.sql new file mode 100644 index 0000000..3f3fdd0 --- /dev/null +++ b/bookMarkService/web/src/main/resources/db/migration/V21__新增域名path表.sql @@ -0,0 +1,10 @@ +CREATE TABLE bookmark.host_icon ( + id INT UNSIGNED auto_increment NOT NULL, + host varchar(300) NOT NULL COMMENT 'host', + iconPath varchar(330) NOT NULL, + CONSTRAINT host_icon_pk PRIMARY KEY (id) +) +ENGINE=InnoDB +DEFAULT CHARSET=utf8mb4 +COLLATE=utf8mb4_0900_ai_ci; +CREATE INDEX host_icon_host_IDX USING BTREE ON bookmark.host_icon (host(20)); diff --git a/bookmark_front/src/views/noHead/addBookmark/index.vue b/bookmark_front/src/views/noHead/addBookmark/index.vue index 5961dfa..1e9c1bc 100644 --- a/bookmark_front/src/views/noHead/addBookmark/index.vue +++ b/bookmark_front/src/views/noHead/addBookmark/index.vue @@ -1,5 +1,8 @@ diff --git a/bookmark_front/src/views/noHead/addBookmark/index.vue b/bookmark_front/src/views/noHead/addBookmark/index.vue index 1e9c1bc..c7596dd 100644 --- a/bookmark_front/src/views/noHead/addBookmark/index.vue +++ b/bookmark_front/src/views/noHead/addBookmark/index.vue @@ -1,17 +1,17 @@ diff --git a/浏览器插件/bookmarkBrowserPlugin/background.js b/浏览器插件/bookmarkBrowserPlugin/background.js index 0cbee6b..d42af06 100644 --- a/浏览器插件/bookmarkBrowserPlugin/background.js +++ b/浏览器插件/bookmarkBrowserPlugin/background.js @@ -15,7 +15,6 @@ chrome.contextMenus.onClicked.addListener(async function (info, tab) { let body = { name: tab.title, url: tab.url, - iconUrl: tab.favIconUrl }; sendToContent(tab.id, { code: "addBookmark", data: body, token: await getVal("token") }); }); diff --git a/浏览器插件/bookmarkBrowserPlugin/manifest.json b/浏览器插件/bookmarkBrowserPlugin/manifest.json index ca0f0e9..1e99669 100644 --- a/浏览器插件/bookmarkBrowserPlugin/manifest.json +++ b/浏览器插件/bookmarkBrowserPlugin/manifest.json @@ -1,6 +1,6 @@ { - "name": "bookmark-chrome", - "description": "A Vue.js web extension", + "name": "签签世界", + "description": "云书签管理平台", "version": "1.0", "manifest_version": 3, "permissions": ["contextMenus", "storage"], @@ -8,8 +8,8 @@ "default_popup": "popup/index.html" }, "icons": { - "48": "static/icons/icon_48.png", - "128": "static/icons/icon_128.png" + "48": "static/icons/favicon.png", + "128": "static/icons/favicon.png" }, "background": { "service_worker": "background.js" diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.html b/浏览器插件/bookmarkBrowserPlugin/popup/index.html index a3b8ae9..d82fbaa 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.html +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.html @@ -19,10 +19,11 @@ 点击登录

+
插件版本:
diff --git a/浏览器插件/bookmarkBrowserPlugin/popup/index.js b/浏览器插件/bookmarkBrowserPlugin/popup/index.js index 5869476..04e6582 100644 --- a/浏览器插件/bookmarkBrowserPlugin/popup/index.js +++ b/浏览器插件/bookmarkBrowserPlugin/popup/index.js @@ -8,6 +8,7 @@ var action = document.getElementById("action"); (async () => { //初始化 login.href = bookmarkHost + "/manage/sso/auth"; + document.getElementById("version").innerText = version; sendToBg("getToken", null); })(); diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/favicon.ico b/浏览器插件/bookmarkBrowserPlugin/static/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f354250216255c82cdb15986c2db012196fcb693 GIT binary patch literal 4286 zcmc(iS7=pR5Qa}|SYs^2ibe@BmItw-C|pDZ1rghW5P$KHD{i2nC{BeU5z=9s+Q6IRw?@3m(Bnfa%jNF*-$my{IYe)pF| zw%)#dt2b}n==JN@diCm+UcP*(7cXAu`Sa(24%d})NB8~v_qAfh3N2W$K#LbI*3zX* zwS4(TCQwr$GF%F@oAJGFcFZtdH*PX`Vh(BZ>}b>hSc zojrS27cXAawQJXO`}S=;e*8El2Ht^}JH?9^SJXF(i;J_J@A+8;3l>z7B1P1ARk(0r6(~?3Pi%e$9}=^N4N{?&#L7TXz1^rAs<> z>XeQjKd$WTZ0+B_-+aDf#|~}ZzTIL$Og3!TU@^hgWy_Y?B903eF4UDPSBwXLi-Y5E ze}HAytXaBu@1AiDAHgj+_T|eL{rK_2xC;N^BAnf{X_Mjj_3Kx_W%vvS^Q#*i@U~N@ zPUhbxO`7QD&6{$LqHEZ&Vd~MNhdqDr;DN<<W5$dLe6wrUF5?IH>eZ`f`Sk4BvwZ7DKE9kbZCaok4w6UMf)B|j z_=%3Bq$I%&d<8yYGH~F);O>wiLo7adan9rJd();(O-4dOg7J(R;~Yp!OAF*vABe5{ z7kuP;a&oerAzzLhIbzsz%RATSyYue!>CXHkoY13R39?<{1)Yi#ix03SYJ;eYsnzs8OotI?xJ zTi&`{w==ihZD%Kz9<%G$uj|mEL)yD{ujMv1c-^{n<_GHZ{Q2`WckW!xo;_RBr%%_s zdGjm=VDOw|&rN6e8T>kT?wrL68^C}MMvWR}zNFrHKE&F+X44D4fB$YiBL37OIEpXB zI{A(-@hjMi6)UE8?b=z~Im-vT&{wEXA=}Xb7WxGItW>Fzd>Kso#Fn}sZ%X3?pMb_eo||>&pGNft5KsyTC`}9E?>TEHJ9E--KG9ghfkh7sWWHJ zSZ=zn$i*pBrdSU_7FgXU{rdGYf5gfIa(wXM!75v}Y+xrcQc_Z^9)R)Z&!5IK@9S{x z>({S3cI=q?^yy=L%Js6BDpg9|yLY#~3}4}v+nsYqCi39GfB^%n?}cU2PkZ<7ZT7

I%FcKYqOG)Tv{6xO(+!o1f6jU5_C$-S>aPfi8LpGO?4h)V==w`>STnnr0*1 zgLmMeF1w#^+_+)-xPxx;`ND+@nmKc(@q}L4ty?#f%loj+dc;oP;l1w{BJa`t_BOkzunR@xrgXM_(8NJi(Xfaarl< z=_Uu?9z1x^-ci?v4Ge&1uk8P1YN zU?9htA(-bKlh4sLYSaigj;|+8nq+6_4>M-WuzrZ$%n#IbdIax0SLkQp!|t$tY81Aj z8=cf`bkb+wVDsk9)wOF^jT<*E$W!dV9%eMZ<9KuKB}a$c{voNx`2bXKtuC2+FC&$bi$L)TbFkyn} wXXd0I5*wcly)NZux629d@EWY}BrnX!L>F@}dC%`-Fd-u>GuHR0&;HlXzfmXQqW}N^ literal 0 HcmV?d00001 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/favicon.png b/浏览器插件/bookmarkBrowserPlugin/static/icons/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dff8881277f114786284a75b62d2257fa13ce0 GIT binary patch literal 63465 zcmV)_K!3l9P)eh4bY)!^&fNe2AOJ~3K~#90?7eBQ zW!H5cwuZg;8SZ`eP5pWvfCkV2L4W`O3gRG<1W9nzK-rNgkCIBM#F;IZ;>w>?Qi=UH z|C~xvP9>H6NXfF2SgP2GWr?z=frALnK%;@~*VF6a&F>Cp+Iy{)ALqU91_-h&fl(85 zR-L-l_rBZr?sLy~*80}C@gMjB{D1@v$N&HoU-!Bp0D!&z&3E2Y`$3z{eRF%`xzBy} ziJ$pszOwL@m%shb|F>V?`RcdM`SKm1JQW2~XI*2CDzL~zE)#TdR*#5-q9G^(7#RW@ z(7{U308jzIP$O9)5VC{-01V0otUyMrz=~u5fc?URKoAT;@b0P!0L?rY#HInH;b>3N zEQFa4TVNYW+hO^UpZ@IoKmEz2lc%VhSRg%q=7x#snI`G6g3HfXdK1YYYjD`?bA|#NF=&Kmwhlb{A%Y`MJ?(A)i}1 z_t=x!U*Z32`oFASxi(K$4)Q^AMF?>=%e~8ys;U#66`TQRWK;wIGEe|O=pjW2%6jk} z2xQ1+px9%dfY20;=m0s2(1YLb4w{Sr0IYxBe=>Pamd#QtbtQw6ilPzOom4m)z3{>( zKk}(hk4~IgJbG-Vws!M&W19JFZ!#UQ3q@$#c7HjDWT0vy@_l}per;%PyeHola{qx< zYrIv>TCi*|K*cWFV7U17b01h)So!t;_P<+w<(01KPUOWyi;H=db<-Ip$qgBtNm9>1 zpa_Q2D@Ftm05U~`eFb)KSlwI2=QKa8Et|!Y6+5m&4hIR}pv1^5w0q3Gv+0 zO2#20ccd7V&I5puDVl*9s-Y^Xq6wLhC9*^&WWCuX12%MuUeGBzMON(brwD=|WQL|_ ziUObj%GMv?R9Te_W|Cr76e~w-@5af-D%)-I&S&29%YXYnipGL2ALO^zw{PCw$g;eP z2{8=Ip&52{rwRmUW{7BJDxxBY2mp7K;vJ#4qnf%$?!U$Y&&Xlc%ph}O(6(AtGD|IO zPapq@=Rx`N|NF0h{fl2b7xD$BW_NeR`C-Vl?Hmx2_7?D7R!0T~VAxYG1O*0DKsI0{ zFaS^h1T;fXL;w&n=nWzEnnL%v8XR!7{Z}E8n-I@pno6q7*6a3tAN%<8Kl8Io$B$== zhkQA>y;ZfHAceM5&tbH%IGs+qC;)(<o5AyEeEnL4o!zdbr%tV2;jh4_44{# zorC}s`QQ(9@SwdSLsRI12#N}z^gTWZ00gNEVFz)ut(4qU<(UtD=mRf&;-M#>%$HZN z7|uG`oyPDn#>S-Y?0i# zW<9l129Sf7gg{99i)aS?`pesY2mmC+nrP2%h_WFUy%XQ~im^xiv%B2i5d(RAPcR8=!$0K7*jzV3&yx1BF|SMEQs5YQ8+m_jjF zSXtifoK*V2=?5=eSat2T4Z_mg!c*`2N$2%9{>T6R)yu2hpa7qD<7QA~!Nf%a(7=w+ zq>GBco;r~T3eNYc!H^VDkpu}07=VBPKtKV|&WoFK~JkL|xSrX?QBlTeN>{Rqk>@EPpn`^SSh1`E&5dbSNfSPrxQOyuM`=!Cc z$(0k6&D|SUZ?pn4!gqh{BY*SP{_fJd9)D?f_gdGsgL0>fKFqnSsOom7nk;0CE2EWE zcLj&VvOv3w9z{EF{Xp*_E_U$nI{J?^EDHm-*S3v8Hd>i1d1c_cl~dZzA^}SZF|M z3;_Y*&Pes^!1y+3kf$~YEH z90>ApTUE2V2n8Eyn^+Gr0nmrh;f~3(J1PQA@w>7DreNr@!qCSo$lP$u+|7-)iRaHe z@XSws@LlhH?_g!w4@Ql_`p$T3Iztx(NstUlfvo?oeH{tV<4KK)pr_=jBC4v0hzJNs z_kmCk7v70YtEw&)4B$i0TSF3$A^P^*VF(E z5iO}XQ&mxsC}=?Y%nINjfnaZct#$uz3^S9Mus4WmfF>xlHZ#(g!^(q4mrkyXtI12> z`qswvb!=%^EEep2RDk+nW=027fS-y3-BWj`l#Ub4W|;Ir0+J%Af+yVkX5-}~NYKl-t=k3E(R=UkcZ)z$WRFM)BEMbkE> zo}#@WRjLR8x*wz^>QC9sBqb3+qW;Asl{|Z3FfdYU-mraxIwB1g$YgKjf-S2+lLmxizj>m?}%V9XEQrg}d z&tfMCYSxMXlfH?j(H>Q1VrE3N?*po)lq4lYL_~)DeAK=2_C*!^P?*AAw*Z(ZiXxj4 zHWoXbwyxBs$ud0q@WUJ1>$h&+dc|HIJoVIQaR3;8?D>y{dG|m6!~bUO%9;sBfd$0F zhZbhHZv|EK43+@ynwdU^es9*f_Y)7$K)p)S1g*rAr_Nm6+?}dUlx{XP3`hUTfB9dO zCr|MFyf2HoX|LbB*+fCdZA_%-@&d)|4c^^B93Nm`O(9|*zEU-fDM>=)USsY54+Fq^ zOyhxX__i~SKLi?!(0NaQmJ-AcRhS_;t%Fnpm|(Y?>TH<*_`9DSaW=WJap~*lcW&+$ z+5Fn(?(rv|_@)2+?;U>k6R&JsziU^1)~lHD5mb_x|huYU#|`;_#7tG}lU6-`?7pOnjapIWaM!5JJ+|6E=J!e={>a z(4%Iisv^>BtT$Q4+gV+~4_srt&aeL0yU7sQdyjysnv$wh@JP%`4ua1YMo`yX)P>Q) zk3IeD`ES0ob9?KOyCg!xBcqBZbEh8o@Mk|;Qn>oZU*h`Gxswlc+uIVf}A380gN-a6H_>3IJ1>F0m;r%pZkc*|}$81B_=HJy?#R*oEP z>SzdAF(CGJ-F9u47w*kK(tolMAW&b#pazmm3o&g{wB=UesQzV4paBi;}CnRC0 z19ro__5M~n!!t+U_525(`0$6bg{Aq0!%YQ~ao2Xn>=apm01=767)-p+nLXIPu>%Am zLPRqX5i|#mTLEyWC}OQaLIhP)K?5Lj3I^B#(n0B>fsx`5fmQjl%l+qAWQ2kMA(HES zuFga9nPypZ9JvEa?1-R|))o1Qvk$Z}?p;~Ewsj+{mJgqOaNrm6`N8}Xi^EXt?d`qx z${-(Pw9$#uqCXw9J1;V=S=As7ba z(r393mO7P)U@D!NhRn0iCslJNJF>VS8JurSBs@6z4+#4ybKvi7ni%>@)*`gB(b2 zRg<)n(+ zJ6izC%-@Gri-<_-s~GMSUG?F0BJ5AZ?vaD@e47*XH4F#}OkHBP||isQ$RJA;b=+c$5l-M*P!8(h*>db(RrU%Par z7J1;@LvusYe01Wmrv_o>5TNvh``x z=EW25{fYN~{8J5umBqsq;k0g}0kLnoDv2Vw@1^7su@7~olzPXIi26{wiXtL0++z&^ z{(p`2|EUln8#utWuBB~3h58o3p4Sr*^))r-og?Q#EOufH=y-Je$mw)WS66p8cQs!1 ziBCUpYJM;P&qp6T_nwctTbo;7{TKf?r0P^~CtaDV&35+KP|!FF3ArQa7-E)h)y+oi z9(vc)ANa&i`S}$X3@4p7h;`Do?NW@u#6Upbk31k^RaITr5>cKP-ur#kWq@~?e5CF^6fq4Y!8i^g7A)#3$ z^H)YzW+%PNGhJgHfai#ArWVsSVW;k>m0Q%TpjN$o_h4D z4}J9PyPml*n;ls^a(#P4JriTo#gyWp%v{DvNxlaL`e6Fr-rjUNEs7$`a_?PTHz}pw zKK|&T=ljV0C+}belGxN@ha!xKrnq0u3D&mx4MwT)XhJ$8o|Z$WI!Vye0uQ|o;b z{8s8_;NJ7Gk3IXr4|gG7K6U2Gty?Y|bOMuEd5F-Z>5vwQtX{|IWSdxbyB;r_0mHrT1#8RPuv2OfUzJ%^5+7|)un zONB4I_eL7gR8xu_8aN;a*yk4`YHM95(IuGAhesC=L!(>k+q0@E%i&;tq`{%XY*0M> z*h8RleeK%qjoXxE!$V8E&1_Ov74VdJy@}Um)%!p3nP;AVVRY(D=fYkalMBgA5t+Gf zZ*`8MBoj0MRa4crYnhmcVvMRXAntLB#2FIvfs|9W(cN8~}9= z9a*)taq-*Vy78TtR@jXIGto@tpp2)l=Rw-9fbDJQ+bm3a|4ku)1tf1c-rlMvdzK;^ zFrleL={i<$b|)r80uGRf4AI2Uz#}nmp68=OrGJD$aA!8VeDP}I;N&|VsAAj1)N%gY zCqEGa{qAr4##eSW>*7dBFh3ZC!F*!Bv$Z#W`t)-zeEj&ib6O0rDC4X)A_c(xVip4s zAO=%l^6Znvs;UNqp{mBNA;hL>{_yKBZf&kFFD;Bl0|XUGOaP`#prH2p5U9cHG}fEu zq2JbW|AFO@yo18|jaxVOwzstF7(M$SNkmit)Dsc0b1AiKfZ&K(44fKwYEd=C&N-i# zi>Hr1n0dZ_{nqV`>sPOV$5W?{OsmO!Hb;luyFTzC%)+1i{_lP3>eUB06ve3Z{??@0 zBlq*4``qD29>)2(8m+Bnchhr5fC5H+s}3O{q9jQv<#}-@b+faxv%0#vy1E);Ja_Kg z!u*1W^bHh!bQH|Y^oN3Y{6)$A2NnPXa)T_pxV<&r*-2d_7mzu{q;`*CaLmp*0Ef=Yw)|>d0XS;%R$x^Y*3db4L}3 ztq&FI1iQ{3f8_B;pL-6M7A7Xsu89J9UiJ&?gX{;%by9#BBM2a(bFPn6O(v5oSFZG^ zLc}9Sj?B%?iAW!MP}Kw4{-dUozQ5dmU@@R0D9fz7wOx&;DK;2NMpFP}XWW-yY8E_Z zS;pXuqN=JoA~PUBV-tkR+N8w6=PRS58E1vxxxI1q^3`*XoQWK=Q2`+aA_kN^D7HzD)R)gq0Eb3N%)wz~-c!Tp}(7?U&fKI^)!D2m+UW?7a}5|J1q5$&fJf8>na_m}$*EHgucfzJ`FuBL6(gc4Mh5WRC4 zFj`U(gy0-I01_}URdvpj%h4h;b&iF3hEci>0eCJP3CC9!=cl{dS1(_E=%EL!%$lUr zBsIZL|NP&WtNBa+^tWDJT`lM4-uJ1`T-)5*sHcPZrC~nM)>MrR5OjYw5&#+jfFU^N zFsX=SSyolmg$ox}S1&b9n-@6%tgNi`XXJy&h;>unwTAp}kR5~{24Ep5sR2^(ema>< z#^dEf$0c>13wBHdAYf*q+Ez_UFrc8ePi{PW=~U5-3_Jo@)C8!W*&_|Y{L0Gm&1+XD zvsrYU4fE2obAV8O@DraoGPfB2`9Irgnzh|=D)KtEUX2hG!~>ua8})vf0FkL60RS@- z2$-qFuf6!EtE;QbT$Wi~Ro?sMr3I6u5}5;nGD4p*L?YU+YyUSz?mw^q08}(}j5gWb z+1=eaOwc7ohbnrfyS!`L^;@@mCr9R&vvP>YNd*`LwM{7k0;+j(j)0K>MW{`tmdcgI zShdavXFjl>3x2w>wNNacd-^?p`OuN8>o)C|FJ9gNtT%@2 zzPl(C4@N5fprj|rDMnD6?2TuW2~xijZBv^Nfr*G>>~7z_%}pxFXXTKHl1WOUB!)l) zYSK4Z8CX;`WD3EdM-h)?qLR!bXXxtIiSus$(3!dU`3E0d+qi9^$cBY=DJAiQh}4&G zq7kC*xA_L30?ClYs_eGHSb~ZQ^uq&u7KT;lqsNJXcMHmqOS5M3z}W|Vb^=RQ z5lIGSY{cOA%gu?+Ok$T1D1ZPNTQW=#8%&&05WtX>xl0BJ34x4~nGh(F5hesB zQbHr_QDuaboC-29T89>mR6!$HL~6+*8F-gx<+M`}$gLiz%z*_GMl)o6YYC_C=2)aE z$xHw`NmZ555j*FKEU-&WvZyg?f{s9fnX#Eg5kZTDuwMs!fJui%`SjCIfBhR@y?X8HxS3qMap~FTp2_Em zEN4{^5tLMf8~{?(E_SBcCdu=>$b1{AZ5k1A&Y5!(lPRDgBO&#zGirzeP*thXo0Be%2IZA2*Is@3rR~j4ylXWM=KUG;bJWJ;@nATdRdt(EUY1>#27|%Q z-Y$8UWhJtw&K)T;+}%!!z-;LJp!D-aH=P0s8E`hH!46>qc(yuim04CeR^$uZEa`$ z`ueSG&s|%)a{BbC2OoUs$dMy?o|&075fMqD@BtBd-KR+Kl247Uu-4|c{@^CP?ar4G_Z!D7FdrUG$MCbk7 z+=#OB7-F^j>sg|9-;zzmKRTp%L`BqcWX2Gkz> zS_&p$`(|COpBWxaT2V1;MLSJVQqyM!)DpSj{Gq0cvv#-B76Dua%ZFE%PaHpbXk{>3 z&hn81Tq;MQYrpdcpWk}*{2-$|kOm?H|NRC!|Cxb>{jd}PV;>w@GC@ZG&~|MXyVfcP z7y#KLJ0b-W742eMDY5!+kT&hH)$@D=P^Ek3yX-&gW6K#ZKx$K&Z>+ue;)_0nBHtJ9y(X#ZdODfZ)7h+=p-S$Z1y;4`bX-p-!@*#C zX9p300r}07Ga_>1#?8TCR162Vx3{)7wojfuwXn44^Q^5~NwxDtVw3S?;5-iJ+;Et( zV&?s(3J34_&TJe~KqWFDMM|R6u2r+7k|cGaQBqWipaP(P$`rD^7!BvRbOlP4y1CNWCS_zs*#GqPT38NPl% z&jE(_{Xqs~z-ilX@FNa4c6P6wzp&^-)k$h2A~70QdN6Yz_MJyF+8=k(_j(-+#fN^ZF#rG>cteC_O`OYvtLyD+Yu(Pc@Oc$e zG9zF3-~j*}S({wQ7LTkPJ$drtE9VI~^8^4UHr?5qZ1463!RUNh6j@n_$e=8J2+Uj* zMNyX3Y{sArrqXuWrL@0?KwnIZrVMJ5nq~^3)ca`wC|&N586w=Be01+XWdJaRSv9-9 zwnmP+sBMy2+nwCmF6IVBSq4Ih#*FBF6jA2J@tEnv(IaS`XLf|l?7Vj&unRuR$pvEX z^5OiU!!CrfD9b@PoSPet7K-7ZEDFv%J5SClLf__!hzCU(l!y|M5GS$(stBSg3X(ts zbE8b%K%kn+*S_?P^=s>gl{0f0X0D6)mXn*`P2Lqz9U>5df&$e|+MG_ep`ORZx>XL& zXWmgx(qUVJ#DE$A9Izv|KPv$dO$qn+cpw8p>o*{|115m|o_8{@%#ye@L+_pHY&v`S zrI$`U`4j-B)G=|uEQx?9IqoD52ZIM6d~j!DUB{JknPWDv7`wjQAjUYGO{bH+VvxtK zbKVnCObGx&2;TYFRS3zWAtIp>Q(u~@stPKm(nUq{-Ua6XP*qJ^GO+}R#6*3mH1=(2 z2K$5L5#|QN*i^<2$azQT-Sz9&^RhU3@^tV{nnnP<<7riS;(U4ertk(kzO-&5cc_JTD5@6TGSb-(T zhbyNpTw9GK&Or#ia8QIIU>3lfY7lnGk?oIqLN+oWKm;IDLgd~`9zYH5#^RU>c{GY@ z$zh%iDujRe`QQ8Nk3NdIBSHY}Vv`IcDh3ir&ikXsjy?J0lVAP)FLa8OXR6k9UDMP| z9CE+7G~abyHJdue&Sl=QbC6O}X^m}I<~v)rC3W71EX%xe%xnk(CT5<&&E;JewT)`t zhu|ENVbwNuQ*+2UFW?}>c@P~%0AK)@WmP4BWDIJM<>AVeE97046^9lU)uijhfFfup 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 literal 0 HcmV?d00001 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/icon.xcf b/浏览器插件/bookmarkBrowserPlugin/static/icons/icon.xcf deleted file mode 100644 index e1cde958703ab2d41ce3f1bbc57a28601b55503a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44178 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∈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 XLHWW>^V}R&0Jm0!pEbCxpgVs7rb#;= diff --git a/浏览器插件/bookmarkBrowserPlugin/static/icons/icon_128.png b/浏览器插件/bookmarkBrowserPlugin/static/icons/icon_128.png deleted file mode 100644 index c4ed86867f0af17ecb564eb6a7ebaf07a079c02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10042 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 diff --git a/浏览器插件/bookmarkBrowserPlugin/static/js/config.js b/浏览器插件/bookmarkBrowserPlugin/static/js/config.js index ca2605b..bc1301e 100644 --- a/浏览器插件/bookmarkBrowserPlugin/static/js/config.js +++ b/浏览器插件/bookmarkBrowserPlugin/static/js/config.js @@ -1,6 +1,7 @@ -// var bookmarkHost = "https://fleyx.com"; -var bookmarkHost = "http://localhost:8080"; +var bookmarkHost = "https://fleyx.com"; +// var bookmarkHost = "http://localhost:8080"; +var version = "0.1"; window.token = localStorage.getItem('token'); axios.defaults.baseURL = bookmarkHost + '/bookmark/api';