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 @@