44-->
55<template >
66 <NcDialog v-if =" signMethodsStore.modal.sms"
7- :name =" t('libresign', 'Sign with your cellphone number.')"
7+ :name =" t('libresign', 'Sign with your phone number.')"
88 @closing =" signMethodsStore.closeModal('sms')" >
9- <div v-if =" newPhoneNumber " class =" code-request" >
9+ <div v-if =" tokenRequested " class =" code-request" >
1010 <h3 class =" phone" >
1111 {{ newPhoneNumber }}
1212 </h3 >
1313
14- <NcTextField v-if =" tokenRequested"
15- v-model =" token"
14+ <NcTextField v-model =" token"
1615 :disabled =" loading"
1716 name =" code"
1817 type =" text" />
2625 @change =" sanitizeNumber" />
2726 </div >
2827 <template #actions >
29- <NcButton v-if =" newPhoneNumber && !tokenRequested" :disabled =" loading" @click =" requestCode" >
28+ <NcButton v-if =" !tokenRequested" :disabled =" loading || newPhoneNumber.length < 10 " @click =" requestCode" >
3029 <template #icon >
3130 <NcLoadingIcon v-if =" loading" :size =" 20" />
3231 </template >
3332 {{ t('libresign', 'Request code.') }}
3433 </NcButton >
35- <NcButton v-if = " newPhoneNumber && tokenRequested " :disabled =" loading" @click =" sendCode" >
34+ <NcButton v-else :disabled =" loading || token.length < 3 " @click =" sendCode" >
3635 <template #icon >
3736 <NcLoadingIcon v-if =" loading" :size =" 20" />
3837 </template >
3938 {{ t('libresign', 'Send code.') }}
4039 </NcButton >
41- <NcButton v-if =" !newPhoneNumber" :disabled =" loading || newPhoneNumber.length < 10" @click =" saveNumber" >
42- <template #icon >
43- <NcLoadingIcon v-if =" loading" :size =" 20" />
44- </template >
45- {{ t('libresign', 'Save your number.') }}
46- </NcButton >
4740 </template >
4841 </NcDialog >
4942</template >
@@ -61,14 +54,15 @@ import NcTextField from '@nextcloud/vue/components/NcTextField'
6154
6255import { settingsService } from ' ../../../domains/settings/index.js'
6356import { useSignStore } from ' ../../../store/sign.js'
57+ import { useSignMethodsStore } from ' ../../../store/signMethods.js'
6458
6559const sanitizeNumber = val => {
6660 val = val .replace (/ \D / g , ' ' )
6761 return ` +${ val} `
6862}
6963
7064export default {
71- name: ' ModalSMSManager ' ,
65+ name: ' ModalTokenManager ' ,
7266 components: {
7367 NcDialog,
7468 NcLoadingIcon,
@@ -78,19 +72,34 @@ export default {
7872 props: {
7973 phoneNumber: {
8074 type: String ,
81- required: true ,
75+ required: false ,
76+ default: ' ' ,
8277 },
8378 },
8479 setup () {
8580 const signStore = useSignStore ()
86- return { signStore }
81+ const signMethodsStore = useSignMethodsStore ()
82+ return { signStore, signMethodsStore }
83+ },
84+ data () {
85+ return {
86+ token: ' ' ,
87+ newPhoneNumber: this .phoneNumber || ' ' ,
88+ tokenRequested: false ,
89+ loading: false ,
90+ }
91+ },
92+ computed: {
93+ activeTokenMethod () {
94+ const tokenMethods = [' sms' , ' whatsapp' , ' signal' , ' telegram' , ' xmpp' ]
95+ return tokenMethods .find (method =>
96+ Object .hasOwn (this .signMethodsStore .settings , method)
97+ ) || ' sms'
98+ },
99+ activeIdentifyMethod () {
100+ return this .activeTokenMethod
101+ },
87102 },
88- data : () => ({
89- token: ' ' ,
90- newPhoneNumber: this .phoneNumber ,
91- tokenRequested: false ,
92- loading: false ,
93- }),
94103 methods: {
95104 async saveNumber () {
96105 this .loading = true
@@ -123,22 +132,40 @@ export default {
123132 await this .$nextTick ()
124133
125134 try {
135+ const params = {
136+ identifyMethod: this .activeIdentifyMethod ,
137+ signMethod: this .activeTokenMethod ,
138+ }
139+
126140 if (this .signStore .document .fileId ) {
127- const { data } = await axios .post (generateOcsUrl (' /apps/libresign/api/v1/sign/file_id/{fileId}/code' , {
128- fileId: this .signStore .document .fileId ,
129- }))
141+ const { data } = await axios .post (
142+ generateOcsUrl (' /apps/libresign/api/v1/sign/file_id/{fileId}/code' , {
143+ fileId: this .signStore .document .fileId ,
144+ }),
145+ params
146+ )
130147 showSuccess (data .ocs .data .message )
131148 } else {
132- const signer = this .signStore .document .signers .find (row => row .me ) || {}
133- const { data } = await axios .post (generateOcsUrl (' /apps/libresign/api/v1/sign/uuid/{fileId}/code' , {
149+ const signer = this .signStore .document .signers .find (row => row .me ) || {}
150+ const { data } = await axios .post (
151+ generateOcsUrl (' /apps/libresign/api/v1/sign/uuid/{uuid}/code' , {
134152 uuid: signer .sign_uuid ,
135- }))
153+ }),
154+ params
155+ )
136156 showSuccess (data .ocs .data .message )
137157 }
138- this .tokenRequested = true
139- } catch (err) {
140- showError (err .response .data .ocs .data .message )
141- } finally {
158+ this .tokenRequested = true
159+ } catch (err) {
160+ const errorMessage = err .response ? .data ? .ocs ? .data ? .message || err .response ? .data ? .message || err .message
161+
162+ if (errorMessage && errorMessage .includes (' Invalid configuration' )) {
163+ const method = this .activeTokenMethod .charAt (0 ).toUpperCase () + this .activeTokenMethod .slice (1 )
164+ showError (t (' libresign' , ' {method} is not configured. Please contact your administrator.' , { method }))
165+ } else {
166+ showError (errorMessage)
167+ }
168+ } finally {
142169 this .loading = false
143170 }
144171 },
0 commit comments