From 77ee48366e826ee8de069a8a2321a51dadca9ba0 Mon Sep 17 00:00:00 2001 From: Peng-YM <1048217874pengym@gmail.com> Date: Sun, 6 Sep 2020 20:53:11 +0800 Subject: [PATCH] Allow share QR Code --- backend/sub-store.js | 11 ++-- web/package-lock.json | 50 ++++++++++-------- web/package.json | 5 +- web/src/components/ProxyList.vue | 88 +++++++++++++++++++++++++++----- 4 files changed, 112 insertions(+), 42 deletions(-) diff --git a/backend/sub-store.js b/backend/sub-store.js index 684b7fb..8d1a78b 100644 --- a/backend/sub-store.js +++ b/backend/sub-store.js @@ -666,16 +666,17 @@ function ProxyParser(targetPlatform) { raw = raw.replace(/ -\n.*name/g, " - name").replace(/\$|\`/g, "").split("proxy-providers:")[0].split("proxy-groups:")[0].replace(/\"(name|type|server|port|cipher|password|)\"/g, "$1") const proxies = YAML.eval(raw).proxies; output = proxies.map((p) => JSON.stringify(p)); - } else if (raw.indexOf("ssd://") == 0) { + } else if (raw.indexOf("ssd://") === 0) { + // preprocessing for SSD subscription format output = []; const Base64 = new Base64Code(); let ssdinfo = JSON.parse(Base64.safeDecode(raw.split("ssd://")[1])); // options (traffic_used, traffic_total, expiry, url) - var traffic_used = ssdinfo.traffic_used; // GB - var traffic_total = ssdinfo.traffic_total; // GB, -1 means unlimited - var expiry = ssdinfo.expiry; // YYYY-MM-DD HH:mm:ss + const traffic_used = ssdinfo.traffic_used; // GB + const traffic_total = ssdinfo.traffic_total; // GB, -1 means unlimited + const expiry = ssdinfo.expiry; // YYYY-MM-DD HH:mm:ss // default setting - var name = ssdinfo.airport; // name of the airport + let name = ssdinfo.airport; // name of the airport let port = ssdinfo.port; let method = ssdinfo.encryption; let password = ssdinfo.password; diff --git a/web/package-lock.json b/web/package-lock.json index fa50656..c870d44 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -3716,9 +3716,9 @@ "dev": true }, "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha1-VIGgPeoRI9iKmIxv+LeCRyFPC4g=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", "dev": true, "requires": { "cacache": "^12.0.3", @@ -3731,7 +3731,7 @@ "normalize-path": "^3.0.0", "p-limit": "^2.2.1", "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", + "serialize-javascript": "^4.0.0", "webpack-log": "^2.0.0" }, "dependencies": { @@ -3772,8 +3772,8 @@ }, "ignore": { "version": "3.3.10", - "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz", - "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "pify": { @@ -3784,8 +3784,8 @@ }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590789322916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", @@ -3793,12 +3793,6 @@ "ajv-keywords": "^3.1.0" } }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz", - "integrity": "sha1-7OxTsOAxe9yV73arcHS3OEeF+mE=", - "dev": true - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz?cache=0&sync_timestamp=1589682715547&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslash%2Fdownload%2Fslash-1.0.0.tgz", @@ -4163,7 +4157,7 @@ }, "de-indent": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, @@ -8939,6 +8933,11 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, + "qrcode-js-package": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/qrcode-js-package/-/qrcode-js-package-1.0.4.tgz", + "integrity": "sha1-uhH39nK1NwE8OA0DPjuqhl0Htb0=" + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", @@ -10966,9 +10965,9 @@ "dev": true }, "vue": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz?cache=0&sync_timestamp=1595983987853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.11.tgz", - "integrity": "sha1-dllNh31LEiNEBuhONSdcbVFBJcU=" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-cli-plugin-vuetify": { "version": "2.0.7", @@ -11122,6 +11121,15 @@ } } }, + "vue-qrcode-component": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vue-qrcode-component/-/vue-qrcode-component-2.1.1.tgz", + "integrity": "sha1-csN1Z62QvKKpNyRWvSiE8PQ+3zg=", + "requires": { + "qrcode-js-package": "^1.0.4", + "vue": "^2.0.1" + } + }, "vue-router": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", @@ -11146,9 +11154,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.11.tgz", - "integrity": "sha1-wEcE749JixUxMAGJk+VjCdRpgIA=", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", diff --git a/web/package.json b/web/package.json index cdf605f..c84182f 100644 --- a/web/package.json +++ b/web/package.json @@ -16,7 +16,8 @@ "material-design-icons-iconfont": "^5.0.1", "monaco-editor-vue": "^1.0.10", "v-clipboard": "^2.2.3", - "vue": "^2.6.11", + "vue": "^2.6.12", + "vue-qrcode-component": "^2.1.1", "vue-router": "^3.4.3", "vuetify": "^2.2.11", "vuex": "^3.5.1" @@ -31,7 +32,7 @@ "sass": "^1.19.0", "sass-loader": "^8.0.0", "vue-cli-plugin-vuetify": "~2.0.7", - "vue-template-compiler": "^2.6.11", + "vue-template-compiler": "^2.6.12", "vuetify-loader": "^1.3.0" }, "eslintConfig": { diff --git a/web/src/components/ProxyList.vue b/web/src/components/ProxyList.vue index d1b8818..474b498 100644 --- a/web/src/components/ProxyList.vue +++ b/web/src/components/ProxyList.vue @@ -23,25 +23,56 @@ - - mdi-information - + + + + mdi-qrcode + + + + + mdi-information + + + - + - {{info.name}} + {{ info.name }} - {{info.isp}} + {{ info.isp }}
- {{info.region}} + {{ info.region }}
- {{info.ip}} + {{ info.ip }} +
+
+
+ + + + {{ info.name }} + + + @@ -50,22 +81,27 @@