lejianwen 1 год назад
Родитель
Сommit
f68a9a9562
3 измененных файлов с 42 добавлено и 27 удалено
  1. 4 1
      src/utils/auth.js
  2. 22 11
      src/utils/webclient.js
  3. 16 15
      src/views/address_book/components/shareByWebClient.vue

+ 4 - 1
src/utils/auth.js

@@ -1,3 +1,5 @@
1
+import {setToken as setWCToken} from '@/utils/webclient'
2
+
1
 const TokenKey = 'access_token'
3
 const TokenKey = 'access_token'
2
 const OidcCode = 'oidc_code'
4
 const OidcCode = 'oidc_code'
3
 const OidcCodeExpiry = 'oidc_code_expiry';
5
 const OidcCodeExpiry = 'oidc_code_expiry';
@@ -7,6 +9,7 @@ export function getToken () {
7
 }
9
 }
8
 
10
 
9
 export function setToken (token) {
11
 export function setToken (token) {
12
+  setWCToken(token)
10
   return localStorage.setItem(TokenKey, token)
13
   return localStorage.setItem(TokenKey, token)
11
 }
14
 }
12
 
15
 
@@ -40,4 +43,4 @@ export function getCode() {
40
 export function removeCode() {
43
 export function removeCode() {
41
   localStorage.removeItem(OidcCode);
44
   localStorage.removeItem(OidcCode);
42
   localStorage.removeItem(OidcCodeExpiry);
45
   localStorage.removeItem(OidcCodeExpiry);
43
-}
46
+}

+ 22 - 11
src/utils/webclient.js

@@ -6,30 +6,37 @@ import * as message from '@/utils/webclient/message'
6
 import { ElMessageBox } from 'element-plus'
6
 import { ElMessageBox } from 'element-plus'
7
 import { T } from '@/utils/i18n'
7
 import { T } from '@/utils/i18n'
8
 
8
 
9
+const prefix = 'wc-'
10
+
11
+export function setToken (token) {
12
+  localStorage.setItem(`${prefix}option:local:access_token`, token)
13
+}
14
+
9
 export const toWebClientLink = (row) => {
15
 export const toWebClientLink = (row) => {
10
-  window.open(`${rustdeskConfig.value.api_server}/webclient/#/?id=${row.id}`)
16
+  //v2
17
+  window.open(`${rustdeskConfig.value.api_server}/webclient2/#/${row.id}`)
18
+  // window.open(`${rustdeskConfig.value.api_server}/webclient/#/?id=${row.id}`)
11
 }
19
 }
12
 
20
 
13
-export function loadRustdeskConfig () {
14
-  const rustdeskConfig = ref({})
15
-  const fetchConfig = async () => {
21
+export const rustdeskConfig = ref({})
22
+
23
+export async function loadRustdeskConfig () {
24
+  console.log('loadRustdeskConfig')
25
+  if (rustdeskConfig.value.id_server === undefined || rustdeskConfig.value.key === undefined) {
16
     const res = await server().catch(_ => false)
26
     const res = await server().catch(_ => false)
17
     if (res) {
27
     if (res) {
18
       rustdeskConfig.value = res.data
28
       rustdeskConfig.value = res.data
19
-      localStorage.setItem('custom-rendezvous-server', res.data.id_server)
20
-      localStorage.setItem('key', res.data.key)
21
-      localStorage.setItem('api-server', res.data.api_server)
29
+      localStorage.setItem(`${prefix}custom-rendezvous-server`, res.data.id_server)
30
+      localStorage.setItem(`${prefix}key`, res.data.key)
31
+      localStorage.setItem(`${prefix}api-server`, res.data.api_server)
22
     }
32
     }
23
   }
33
   }
24
-  if (rustdeskConfig.value.id_server === undefined || rustdeskConfig.value.key === undefined) {
25
-    fetchConfig()
26
-  }
27
   return {
34
   return {
28
     rustdeskConfig,
35
     rustdeskConfig,
29
   }
36
   }
30
 }
37
 }
31
 
38
 
32
-export const { rustdeskConfig } = loadRustdeskConfig()
39
+
33
 export async function getPeerSlat (id) {
40
 export async function getPeerSlat (id) {
34
   const [addr, port] = rustdeskConfig.value.id_server.split(':')
41
   const [addr, port] = rustdeskConfig.value.id_server.split(':')
35
   if (!addr) {
42
   if (!addr) {
@@ -107,3 +114,7 @@ export async function getPeerSlat (id) {
107
   }
114
   }
108
 
115
 
109
 }
116
 }
117
+
118
+export function getV2ShareUrl (token) {
119
+  return `${rustdeskConfig.value.api_server}/webclient2/#/?share_token=${token}`
120
+}

+ 16 - 15
src/views/address_book/components/shareByWebClient.vue

@@ -3,17 +3,17 @@
3
     <el-form-item :label="T('ID')" prop="id" required>
3
     <el-form-item :label="T('ID')" prop="id" required>
4
       {{ formData.id }}
4
       {{ formData.id }}
5
     </el-form-item>
5
     </el-form-item>
6
-    <el-form-item :label="T('PasswordType')">
7
-      <div>
8
-        <el-radio-group v-model="formData.password_type" @change="changePwdType">
9
-          <el-radio value="once">{{ T('OncePassword') }}</el-radio>
10
-          <el-radio value="fixed">{{ T('FixedPassword') }}</el-radio>
11
-        </el-radio-group>
12
-        <div v-if="formData.password_type==='fixed'" style="color: red">
13
-          {{ T('FixedPasswordWarning') }}
14
-        </div>
15
-      </div>
16
-    </el-form-item>
6
+    <!--    <el-form-item :label="T('PasswordType')">
7
+          <div>
8
+            <el-radio-group v-model="formData.password_type" @change="changePwdType">
9
+              <el-radio value="once">{{ T('OncePassword') }}</el-radio>
10
+              <el-radio value="fixed">{{ T('FixedPassword') }}</el-radio>
11
+            </el-radio-group>
12
+            <div v-if="formData.password_type==='fixed'" style="color: red">
13
+              {{ T('FixedPasswordWarning') }}
14
+            </div>
15
+          </div>
16
+        </el-form-item>-->
17
     <el-form-item :label="T('Password')" prop="password" required>
17
     <el-form-item :label="T('Password')" prop="password" required>
18
       <el-input v-model="formData.password" type="password" show-password></el-input>
18
       <el-input v-model="formData.password" type="password" show-password></el-input>
19
     </el-form-item>
19
     </el-form-item>
@@ -45,13 +45,14 @@
45
 <script setup>
45
 <script setup>
46
   import { T } from '@/utils/i18n'
46
   import { T } from '@/utils/i18n'
47
   import { computed, reactive, ref, watch } from 'vue'
47
   import { computed, reactive, ref, watch } from 'vue'
48
-  import { getPeerSlat, rustdeskConfig } from '@/utils/webclient'
48
+  import { loadRustdeskConfig, getV2ShareUrl } from '@/utils/webclient'
49
   import * as sha256 from 'fast-sha256'
49
   import * as sha256 from 'fast-sha256'
50
   import { shareByWebClient } from '@/api/address_book'
50
   import { shareByWebClient } from '@/api/address_book'
51
   import { CopyDocument } from '@element-plus/icons'
51
   import { CopyDocument } from '@element-plus/icons'
52
   import { handleClipboard } from '@/utils/clipboard'
52
   import { handleClipboard } from '@/utils/clipboard'
53
   import { ElMessageBox } from 'element-plus'
53
   import { ElMessageBox } from 'element-plus'
54
 
54
 
55
+  loadRustdeskConfig()
55
   const props = defineProps({
56
   const props = defineProps({
56
     id: String,
57
     id: String,
57
     hash: String,
58
     hash: String,
@@ -106,7 +107,7 @@
106
     }
107
     }
107
     loading.value = true
108
     loading.value = true
108
     const _formData = { ...formData }
109
     const _formData = { ...formData }
109
-    if (formData.password !== formData.hash) {
110
+    /*if (formData.password !== formData.hash) {
110
       const res = await getPeerSlat(formData.id).catch(e => {
111
       const res = await getPeerSlat(formData.id).catch(e => {
111
         ElMessageBox.alert(T('Timeout'), T('Error'))
112
         ElMessageBox.alert(T('Timeout'), T('Error'))
112
         return false
113
         return false
@@ -117,10 +118,10 @@
117
       }
118
       }
118
       const p = hash([formData.password, res.salt])
119
       const p = hash([formData.password, res.salt])
119
       _formData.password = btoa(p.toString().split(',').map((v) => String.fromCharCode(v)).join(''))
120
       _formData.password = btoa(p.toString().split(',').map((v) => String.fromCharCode(v)).join(''))
120
-    }
121
+    }*/
121
     const res = await shareByWebClient(_formData).catch(_ => false)
122
     const res = await shareByWebClient(_formData).catch(_ => false)
122
     if (res) {
123
     if (res) {
123
-      link.value = `${rustdeskConfig.value.api_server}/webclient/#/?share_token=${res.data.share_token}`
124
+      link.value = getV2ShareUrl(res.data.share_token)
124
       emits('success')
125
       emits('success')
125
     }
126
     }
126
     loading.value = false
127
     loading.value = false