@tapni/auth 0.0.169 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/assets/Account-CElX1bG1.js +1 -0
  2. package/dist/assets/Apps-B-GkviQb.css +1 -0
  3. package/dist/assets/Apps-DH6XpQ6k.js +1 -0
  4. package/dist/assets/CustomApp-D-PMGrCn.js +1 -0
  5. package/dist/assets/CustomApp-x1ZBgKin.css +1 -0
  6. package/dist/assets/General-BD2qnORR.js +1 -0
  7. package/dist/assets/General-OSR9oXHj.css +1 -0
  8. package/dist/assets/Inter-ZO3WBJgw.ttf +0 -0
  9. package/dist/assets/QR-CpmQl6vr.js +1 -0
  10. package/dist/assets/fontawesome-webfont-CQDK8MU3.ttf +0 -0
  11. package/dist/assets/fontawesome-webfont-DXgy9qkh.svg +2671 -0
  12. package/dist/assets/fontawesome-webfont-G5YE5S7X.eot +0 -0
  13. package/dist/assets/index-CNOQuLc_.css +1 -0
  14. package/dist/assets/index-DXEfDC45.js +176 -0
  15. package/dist/assets/web-1uupGAU9.js +5 -0
  16. package/dist/assets/web-BMHaq5cV.js +1 -0
  17. package/dist/assets/web-CvQGphDR.js +1 -0
  18. package/dist/assets/web-DMittTOZ.js +1 -0
  19. package/dist/assets/web-DhQdITWf.js +1 -0
  20. package/dist/assets/web-EiIhTtxC.js +1 -0
  21. package/dist/assets/web-OwpPF4YF.js +1 -0
  22. package/dist/index.css +193 -0
  23. package/dist/index.html +36 -0
  24. package/package.json +3 -3
  25. package/src/App.vue +6 -20
  26. package/src/components/{Language.vue → DELETE_Language.vue} +1 -1
  27. package/src/components/{ModalOverlay.vue → DELETE_ModalOverlay.vue} +2 -2
  28. package/src/components/{OTP.vue → DELETE_OTP.vue} +3 -3
  29. package/src/main.js +1 -0
  30. package/src/mixins/DELETE_mfa-auth.mixin.js +53 -0
  31. package/src/mixins/auth.mixin.js +8 -1
  32. package/src/mixins/global.mixin.js +7 -0
  33. package/src/routes.js +27 -15
  34. package/src/store/auth.js +7 -1
  35. package/src/store/constants.js +2 -6
  36. package/src/store/locales/en.js +28 -3
  37. package/src/views/Account.vue +72 -110
  38. package/src/views/Apps.vue +106 -0
  39. package/src/views/CustomApp.vue +106 -0
  40. package/src/views/General.vue +192 -0
  41. package/src/views/Login.vue +27 -10
  42. package/src/views/QR.vue +1 -1
  43. package/src/views/Security.vue +322 -0
  44. package/src/views/Welcome.vue +10 -4
  45. package/dist/.vite/manifest.json +0 -58
  46. package/dist/Account-ja1hZJy5.js +0 -113
  47. package/dist/QR-ybXT1KGe.js +0 -41
  48. package/dist/TapniAuth.es.js +0 -4
  49. package/dist/TapniAuth.umd.js +0 -141
  50. package/dist/install-4aK3Wz63.js +0 -18458
  51. package/dist/style.css +0 -1
  52. package/dist/web-5VtGcKeU.js +0 -86
  53. package/dist/web-AImUTDQQ.js +0 -54
  54. package/dist/web-L3jORB19.js +0 -92
  55. package/dist/web-NrPZl3qD.js +0 -124
  56. package/src/mixins/mfa-auth.mixin.js +0 -76
  57. package/src/views/MFA.vue +0 -117
  58. /package/src/components/{LinkIcon.vue → DELETE_LinkIcon.vue} +0 -0
@@ -514,8 +514,33 @@ export default {
514
514
  mfa: "Multi-Factor Authentication",
515
515
  otp_title: "Enter MFA Code to continue",
516
516
  otp_code: "MFA Code",
517
- otp_subtitle: "To continue, turn on or view your MFA device and type the authentication code below.",
518
- otp_p1: "If you have trouble signing in, <br> please contact us at",
519
- change_language: "Change language"
517
+ otp_subtitle: "Enter the code from your authenticator app",
518
+ otp_p1: "If you have trouble with MFA, <br> please contact us at",
519
+ change_language: "Change language",
520
+ welcome_account: "Welcome to Account Center",
521
+ security: "Security",
522
+ security_p: "Manage your authentication options & account status",
523
+ general: "General",
524
+ general_p: "Manage your personal details & other preferences",
525
+ billing: "Billing",
526
+ apps: "Apps",
527
+ apps_p: "View your active apps & explore other",
528
+ apps_my: "My apps",
529
+ mfa_auth: '2 Factor Authentication',
530
+ mfa_auth_enabled: 'Your account is protected via MFA.',
531
+ mfa_auth_p: 'Protect your account from unauthorized access by enabling multi-factor authentication (MFA)',
532
+ mfa_auth_qr: 'Scan the QR code above or enter the secret key into your authenticator app.',
533
+ change_password: 'Change Password',
534
+ active_account: 'Active Account',
535
+ active_account_p: 'When turned off, your account will be temporary deactivated until turned back on.',
536
+ delete_account: 'Delete Account',
537
+ delete_account_p: 'Delete Account',
538
+ permanent_delete: 'Permanent delete',
539
+ permanent_delete_p: 'If you delete your account, all your data will be permanently deleted. This action cannot be undone. If you are unsure, you can temporary deactivate your account.',
540
+
541
+ personal_details: 'Personal Details',
542
+ app_language_p: 'Translate the app on your preferred language',
543
+ app_region: 'Region',
544
+ app_region_p: 'Select your region for personalized billing and support experience',
520
545
  },
521
546
  };
@@ -1,8 +1,9 @@
1
1
  <template>
2
2
  <div class="page-login content-boxed content-boxed-padding center-text" style="margin-top: -1px; overflow: hidden; border: solid 0px #ffffff;">
3
3
  <br>
4
- <h1 class="bold full-top no-bottom center-text">{{ssoLang[appLanguage].welcome}}</h1>
5
- <p class="full-bottom half-top center-text color-black font-16">{{account.email}}</p>
4
+ <img v-if="false" :src="account.photo" class="user-photo margin-center" style="max-width: 110px;" alt="">
5
+ <h1 class="bold full-top no-bottom center-text">{{ssoLang[appLanguage].welcome_account}}</h1>
6
+ <p class="full-bottom half-top center-text font-16">{{account.email}}</p>
6
7
 
7
8
  <div v-if="display !== 'npm' && false" class="full-top full-bottom">
8
9
  <a @click="continueTo('app')" class="button-center button button-90 google-button bg-tapni-grey pointer">
@@ -15,7 +16,7 @@
15
16
  </div>
16
17
  </div>
17
18
 
18
- <div class="container">
19
+ <div class="container left-text">
19
20
  <div v-if="false" class="accountCard pointer" @click="expanded = !expanded">
20
21
  <div class="activeAccount">
21
22
  <div class="left" v-if="$storex.username">
@@ -78,69 +79,75 @@
78
79
  </div>
79
80
  </div>
80
81
 
81
- <div class="settingsCard pointer left-text">
82
- <div class="device" @click="toggleAccountSettingsModal">
83
- <div class="left">
84
- <img
85
- src="https://cdn.tapni.co/icons/newSettings.svg"
86
- style="width: 50px; border-radius: 20px"
87
- />
88
- </div>
89
- <div class="middle">
90
- <h4>{{ssoLang[appLanguage].mfa }}</h4>
91
- </div>
92
- <div class="right">
93
- <img
94
- src="https://cdn.tapni.co/icons/newArrowRight.svg"
95
- />
96
- </div>
82
+ <router-link to="/general" class="settingRow">
83
+ <div class="firstRow">
84
+ <img
85
+ :src="getIcon('user-black.svg')"
86
+ class="withBackground"
87
+ />
88
+ <h4>{{ssoLang[appLanguage].general }}</h4>
89
+
90
+ <img :src="getIcon('arrow-gray-right.svg')" />
97
91
  </div>
92
+ </router-link>
98
93
 
99
- <div class="divider"></div>
94
+ <router-link to="/security" class="settingRow">
95
+ <div class="firstRow">
96
+ <img
97
+ :src="getIcon('shield-black.svg')"
98
+ class="withBackground"
99
+ />
100
+ <h4>{{ssoLang[appLanguage].security }}</h4>
100
101
 
101
- <div class="device" @click="toggleLanguageModal">
102
- <div class="left">
103
- <img
104
- src="https://cdn.tapni.co/icons/newPublicProfile.svg"
105
- style="width: 50px; border-radius: 20px"
106
- />
107
- </div>
108
- <div class="middle">
109
- <h4>{{ssoLang[appLanguage].change_language }}</h4>
110
- </div>
111
- <div class="right">
112
- <img
113
- src="https://cdn.tapni.co/icons/newArrowRight.svg"
114
- />
115
- </div>
102
+ <img :src="getIcon('arrow-gray-right.svg')" />
116
103
  </div>
104
+ </router-link>
117
105
 
118
- <div class="divider"></div>
106
+ <router-link to="/apps" class="settingRow">
107
+ <div class="firstRow">
108
+ <img
109
+ :src="getIcon('apps-black.svg')"
110
+ class="withBackground"
111
+ />
112
+ <h4>{{ssoLang[appLanguage].apps }}</h4>
119
113
 
120
- <div class="device" @click="logoutAccount">
121
- <div class="left">
122
- <img
123
- src="https://cdn.tapni.co/icons/newLogout.svg"
124
- style="width: 50px; border-radius: 20px"
125
- />
126
- </div>
127
- <div class="middle">
128
- <h4>{{ssoLang[appLanguage].logout }}</h4>
129
- </div>
130
- <div class="right">
131
- <img
132
- src="https://cdn.tapni.co/icons/newArrowRight.svg"
133
- />
134
- </div>
114
+ <img :src="getIcon('arrow-gray-right.svg')" />
135
115
  </div>
116
+ </router-link>
136
117
 
137
- <!-- Additional items can be added here in the future -->
138
- <div v-if="false" class="moreFooter">
139
- <p class="app-version" style="margin-top: 10px">
140
- {{ssoLang[appLanguage].version }}: {{ appVersion }}
141
- </p>
142
- <h4 v-if="false">{{ssoLang[appLanguage].terms_and_privacy }}</h4>
118
+ <router-link to="/billing" class="settingRow">
119
+ <div class="firstRow">
120
+ <img
121
+ :src="getIcon('billing-card-black.svg')"
122
+ class="withBackground"
123
+ />
124
+ <h4>{{ssoLang[appLanguage].billing }}</h4>
125
+
126
+ <img :src="getIcon('arrow-gray-right.svg')" />
143
127
  </div>
128
+ </router-link>
129
+
130
+
131
+ <div class="settingRow" @click="logoutAccount">
132
+ <div class="firstRow">
133
+ <img
134
+ :src="getIcon('logout-red.svg')"
135
+ class="withBackground"
136
+ />
137
+ <h4 class="red-text">{{ssoLang[appLanguage].logout }}</h4>
138
+
139
+ <img
140
+ :src="getIcon('arrow-gray-right.svg')"
141
+ />
142
+ </div>
143
+ </div>
144
+
145
+ <!-- Additional items can be added here in the future -->
146
+ <div class="moreFooter">
147
+ <p class="app-version" style="margin-top: 10px">
148
+ {{ssoLang[appLanguage].version }}: {{ appVersion }}
149
+ </p>
150
+ <h4 v-if="false">{{ssoLang[appLanguage].terms_and_privacy }}</h4>
144
151
  </div>
145
152
  </div>
146
153
  </div>
@@ -149,16 +156,20 @@
149
156
  <script>
150
157
  import AuthMixin from "../mixins/auth.mixin";
151
158
  import { EventBus } from "../store/event-bus.js";
152
- import AuthService from "../services/AuthService.js";
159
+ import CONSTANTS from "../store/constants.js";
153
160
  export default {
154
161
  mixins: [AuthMixin],
155
162
  data () {
156
163
  return {
157
164
  expanded: false,
158
165
  addAccountReady: false,
159
- appVersion: import.meta.env.APP_VERSION,
160
166
  }
161
167
  },
168
+ computed: {
169
+ appVersion() {
170
+ return CONSTANTS.WEB_VERSION;
171
+ },
172
+ },
162
173
  async mounted () {
163
174
  if (!this.isLoggedIn) {
164
175
  return this.$router.push('/');
@@ -175,10 +186,6 @@ export default {
175
186
  switchAccount (username) {
176
187
  console.log('switch', username);
177
188
  },
178
- toggleAccountSettingsModal () {
179
- this.$router.push('/mfa');
180
- // EventBus.$emit('toggleAccountSettingsModal')
181
- },
182
189
  toggleLanguageModal () {
183
190
  EventBus.$emit('toggleSSOLanguageModal')
184
191
  },
@@ -189,51 +196,6 @@ export default {
189
196
  };
190
197
  </script>
191
198
 
192
- <style scoped>
193
- .container {
194
- padding: 20px !important;
195
- display: flex;
196
- flex-direction: column;
197
- gap: 20px;
198
- padding-bottom: 100px !important;
199
- }
200
- .settingsCard {
201
- background-color: white;
202
- padding: 20px;
203
- border-radius: 26px;
204
- align-items: center;
205
- }
206
-
207
- .device {
208
- display: flex;
209
- align-items: center;
210
- }
211
-
212
- h4 {
213
- margin-left: 20px;
214
- font-weight: bold;
215
- }
216
-
217
- .middle {
218
- flex: 1;
219
- }
220
-
221
- .left img {
222
- background-color: #f7f8f9;
223
- border-radius: 20px;
224
- padding: 10px;
225
- }
226
-
227
- .divider {
228
- height: 1px;
229
- background-color: #f0f0f0;
230
- margin: 20px 0;
231
- }
232
-
233
- .moreFooter {
234
- display: flex;
235
- align-items: center;
236
- justify-content: space-between;
237
- padding: 0 10px;
238
- }
199
+ <style>
200
+
239
201
  </style>
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div class="page-login content-boxed content-boxed-padding">
3
+ <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right;">
4
+ <i class="font-17 color-black">
5
+ <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%;"/>
6
+ </i>
7
+ </a>
8
+ <div class="subheaderContainer full-top">
9
+ <!-- Back Button -->
10
+ <router-link to="/account" class="button gray-button pointer left-button">
11
+ <img
12
+ :src="getIcon('arrow-gray-right.svg')"
13
+ height="20"
14
+ width="20"
15
+ class="btn-icon"
16
+ style="rotate: 180deg;"
17
+ />
18
+ </router-link>
19
+
20
+ <!-- Centered Text -->
21
+ <h2 class="center-text" style="flex-grow: 1; text-align: center; margin: 0; font-weight: 600;">
22
+ {{ssoLang[appLanguage].apps }}
23
+ </h2>
24
+ </div>
25
+
26
+ <div class="container left-text">
27
+ <p class="center-text">{{ssoLang[appLanguage].apps_p }}</p>
28
+
29
+ <div class="full-top">
30
+ <h3 v-if="false" class="full-top bold small-bottom">{{ssoLang[appLanguage].apps_my}}</h3>
31
+
32
+ <router-link to="/apps/tapni" class="settingRow">
33
+ <div class="firstRow">
34
+ <img
35
+ :src="getIcon('tapni-logo-small-black.png')"
36
+ class="withBackground"
37
+ />
38
+ <h4>Tapni</h4>
39
+
40
+ <img :src="getIcon('arrow-gray-right.svg')" />
41
+ </div>
42
+ </router-link>
43
+
44
+ <router-link to="/apps/mailsign" class="settingRow half-top">
45
+ <div class="firstRow">
46
+ <img
47
+ :src="getIcon('app-logo-mailsign.svg')"
48
+ class="withBackground"
49
+ />
50
+ <h4>MailSign</h4>
51
+
52
+ <img :src="getIcon('arrow-gray-right.svg')" />
53
+ </div>
54
+ </router-link>
55
+
56
+ <router-link v-if="false" to="/apps/qrcodetoolkit" class="settingRow half-top">
57
+ <div class="firstRow">
58
+ <img
59
+ :src="getIcon('app-logo-qrcodetoolkit.svg')"
60
+ class="withBackground"
61
+ />
62
+ <h4>QRCode Toolkit</h4>
63
+
64
+ <img :src="getIcon('arrow-gray-right.svg')" />
65
+ </div>
66
+ </router-link>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </template>
71
+
72
+
73
+ <script>
74
+ import AuthMixin from "../mixins/auth.mixin";
75
+ import {EventBus} from "@/store/event-bus.js";
76
+
77
+ export default {
78
+ name: "AuthSecurity",
79
+ mixins: [AuthMixin],
80
+ props: {
81
+ payload: {
82
+ type: Object,
83
+ default: {}
84
+ },
85
+ },
86
+ data () {
87
+ return {
88
+ loading: false,
89
+ }
90
+ },
91
+ async mounted() {
92
+ if (!this.isLoggedIn) this.$router.push('/login');
93
+ },
94
+ methods: {
95
+ close () {
96
+ EventBus.$emit('ssoEvent', {name: 'toggleAuthModal', data: true})
97
+ },
98
+ }
99
+ };
100
+ </script>
101
+
102
+ <style scoped>
103
+ .withBackground {
104
+ height: 50px;
105
+ }
106
+ </style>
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div class="page-login content-boxed content-boxed-padding">
3
+ <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right;">
4
+ <i class="font-17 color-black">
5
+ <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%;"/>
6
+ </i>
7
+ </a>
8
+ <div class="subheaderContainer full-top">
9
+ <!-- Back Button -->
10
+ <router-link to="/account" class="button gray-button pointer left-button">
11
+ <img
12
+ :src="getIcon('arrow-gray-right.svg')"
13
+ height="20"
14
+ width="20"
15
+ class="btn-icon"
16
+ style="rotate: 180deg;"
17
+ />
18
+ </router-link>
19
+
20
+ <!-- Centered Text -->
21
+ <h2 class="center-text" style="flex-grow: 1; text-align: center; margin: 0; font-weight: 600;">
22
+ {{$route.params.app }}
23
+ </h2>
24
+ </div>
25
+
26
+ <div class="container left-text">
27
+ <p class="center-text">{{ssoLang[appLanguage].apps_p }}</p>
28
+
29
+ <div class="full-top">
30
+ <h3 v-if="false" class="full-top bold small-bottom">{{ssoLang[appLanguage].apps_my}}</h3>
31
+
32
+ <router-link to="/apps/tapni" class="settingRow">
33
+ <div class="firstRow">
34
+ <img
35
+ :src="getIcon('tapni-logo-small-black.png')"
36
+ class="withBackground"
37
+ />
38
+ <h4>Tapni</h4>
39
+
40
+ <img :src="getIcon('arrow-gray-right.svg')" />
41
+ </div>
42
+ </router-link>
43
+
44
+ <router-link to="/apps/mailsign" class="settingRow half-top">
45
+ <div class="firstRow">
46
+ <img
47
+ :src="getIcon('app-logo-mailsign.svg')"
48
+ class="withBackground"
49
+ />
50
+ <h4>MailSign</h4>
51
+
52
+ <img :src="getIcon('arrow-gray-right.svg')" />
53
+ </div>
54
+ </router-link>
55
+
56
+ <router-link v-if="false" to="/apps/qrcodetoolkit" class="settingRow half-top">
57
+ <div class="firstRow">
58
+ <img
59
+ :src="getIcon('app-logo-qrcodetoolkit.svg')"
60
+ class="withBackground"
61
+ />
62
+ <h4>QRCode Toolkit</h4>
63
+
64
+ <img :src="getIcon('arrow-gray-right.svg')" />
65
+ </div>
66
+ </router-link>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </template>
71
+
72
+
73
+ <script>
74
+ import AuthMixin from "../mixins/auth.mixin";
75
+ import {EventBus} from "@/store/event-bus.js";
76
+
77
+ export default {
78
+ name: "AuthSecurity",
79
+ mixins: [AuthMixin],
80
+ props: {
81
+ payload: {
82
+ type: Object,
83
+ default: {}
84
+ },
85
+ },
86
+ data () {
87
+ return {
88
+ loading: false,
89
+ }
90
+ },
91
+ async mounted() {
92
+ if (!this.isLoggedIn) this.$router.push('/login');
93
+ },
94
+ methods: {
95
+ close () {
96
+ EventBus.$emit('ssoEvent', {name: 'toggleAuthModal', data: true})
97
+ },
98
+ }
99
+ };
100
+ </script>
101
+
102
+ <style scoped>
103
+ .withBackground {
104
+ height: 50px;
105
+ }
106
+ </style>
@@ -0,0 +1,192 @@
1
+ <template>
2
+ <div class="page-login content-boxed content-boxed-padding">
3
+ <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right;">
4
+ <i class="font-17 color-black">
5
+ <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%;"/>
6
+ </i>
7
+ </a>
8
+ <div class="subheaderContainer full-top">
9
+ <!-- Back Button -->
10
+ <router-link to="/account" class="button gray-button pointer left-button">
11
+ <img
12
+ :src="getIcon('arrow-gray-right.svg')"
13
+ height="20"
14
+ width="20"
15
+ class="btn-icon"
16
+ style="rotate: 180deg;"
17
+ />
18
+ </router-link>
19
+
20
+ <!-- Centered Text -->
21
+ <h2 class="center-text" style="flex-grow: 1; text-align: center; margin: 0; font-weight: 600;">
22
+ {{ssoLang[appLanguage].general }}
23
+ </h2>
24
+ </div>
25
+
26
+ <div class="container left-text">
27
+ <p class="center-text">{{ssoLang[appLanguage].general_p }}</p>
28
+
29
+ <form class="full-top" @submit.prevent="submitGeneralUpdate">
30
+
31
+ <h3 class="full-top bold small-bottom">{{ssoLang[appLanguage].personal_details}}</h3>
32
+
33
+ <input type="text" v-model="account.name" :placeholder="ssoLang[appLanguage].name"
34
+ class="edit-input h-40 lh-40 small-bottom" required style="width: 100%"/>
35
+
36
+ <input disabled type="email" v-model="account.email" :placeholder="ssoLang[appLanguage].email"
37
+ class="bg-white edit-input h-40 lh-40 small-bottom" required style="width: 100%"/>
38
+
39
+
40
+ <h3 class="full-top bold">{{ssoLang[appLanguage].app_region}}</h3>
41
+ <VueSelect
42
+ v-model="region"
43
+ :options="[
44
+ { label: 'United States', value: 'us' },
45
+ { label: 'United Kingdom', value: 'uk' },
46
+ { label: 'European Union', value: 'eu' },
47
+ { label: 'Mexico', value: 'mx' },
48
+ { label: 'Mauritius', value: 'mu' },
49
+ { label: 'Colombia', value: 'co' },
50
+ { label: 'Serbia', value: 'sr' },
51
+ { label: 'China', value: 'cn' },
52
+ ]"
53
+ :isClearable="false"
54
+ placeholder="Select region"
55
+ />
56
+ <p>Default currency for this region is {{account.billing?.currency?.toUpperCase()}}</p>
57
+
58
+
59
+ <h3 class="full-top bold">{{ssoLang[appLanguage].app_language}}</h3>
60
+ <VueSelect
61
+ v-model="account.lang"
62
+ :options="[
63
+ { label: ssoLang[appLanguage].english, value: 'en' },
64
+ { label: ssoLang[appLanguage].german, value: 'de' },
65
+ { label: ssoLang[appLanguage].spanish, value: 'es' },
66
+ { label: ssoLang[appLanguage].italian, value: 'it' },
67
+ { label: ssoLang[appLanguage].french, value: 'fr' },
68
+ { label: ssoLang[appLanguage].turkish, value: 'tr' },
69
+ { label: ssoLang[appLanguage].serbian, value: 'sr' },
70
+ { label: ssoLang[appLanguage].korean, value: 'kr' },
71
+ { label: ssoLang[appLanguage].chinese, value: 'cn' },
72
+ ]"
73
+ :isClearable="false"
74
+ placeholder="Select language"
75
+ />
76
+ <p>Translate the app on your preferred language.</p>
77
+
78
+ <button
79
+ type="submit"
80
+ class="button black-button button-full google-button bg-tapni-grey button-90 button-center uppercase bold full-top pointer"
81
+ >
82
+ <span v-if="!loading">{{ ssoLang[appLanguage].save }}</span>
83
+ <span v-else class="button--loading button__loader"></span>
84
+ </button>
85
+ </form>
86
+ </div>
87
+ </div>
88
+ </template>
89
+
90
+
91
+ <script>
92
+ import AuthMixin from "../mixins/auth.mixin";
93
+ import AuthService from '../services/AuthService'
94
+ import to from "await-to-js";
95
+ import {EventBus} from "@/store/event-bus.js";
96
+ import VueSelect from "vue3-select-component";
97
+
98
+ export default {
99
+ name: "AuthSecurity",
100
+ mixins: [AuthMixin],
101
+ components: {
102
+ VueSelect
103
+ },
104
+ props: {
105
+ payload: {
106
+ type: Object,
107
+ default: {}
108
+ },
109
+ },
110
+ data () {
111
+ return {
112
+ loading: false,
113
+ }
114
+ },
115
+ async mounted() {
116
+ if (!this.isLoggedIn) this.$router.push('/login');
117
+ },
118
+ methods: {
119
+ close () {
120
+ EventBus.$emit('ssoEvent', {name: 'toggleAuthModal', data: true})
121
+ },
122
+ async submitGeneralUpdate () {
123
+ if (this.password.length < 8) return this.errorSnack(this.ssoLang[this.appLanguage].password_8_chars)
124
+
125
+ this.loading = true;
126
+ const result = await this.newPassword({
127
+
128
+ })
129
+ if (result === true) {
130
+ this.successSnack(this.ssoLang[this.appLanguage].password_change_success)
131
+ this.changePassword = false;
132
+ }
133
+ this.loading = false;
134
+ },
135
+ }
136
+ };
137
+ </script>
138
+
139
+ <style scoped>
140
+ :deep(.vue-select) {
141
+ padding: 5px 0;
142
+ }
143
+
144
+ :deep(.vue-select .dropdown-icon) {
145
+ color: #1d1d1d;
146
+ width: 25px!important;
147
+ height: 25px!important;
148
+ }
149
+ :deep(.vue-select .menu-option:hover) {
150
+ background-color: #D9D9D9;
151
+ }
152
+ :deep(.vue-select .menu-option.focused) {
153
+ background-color: #f4f4f4;
154
+ }
155
+ :deep(.vue-select .menu-option) {
156
+ border-bottom: 1px solid #D9D9D9;
157
+ font-size: 15px;
158
+ color: #151515;
159
+ }
160
+ :deep(.vue-select .menu-option:last-child) {
161
+ border-bottom: none;
162
+ }
163
+
164
+ :deep(.vue-select .menu) {
165
+ border-radius: 10px;
166
+ border: none;
167
+ }
168
+ :deep(.vue-select .control.focused) {
169
+ border: none;
170
+ box-shadow: none;
171
+ }
172
+ :deep(.vue-select .control) {
173
+ min-height: 54px!important;
174
+ background-color: #F4F4F4;
175
+ border: none;
176
+ border-radius: 10px;
177
+ }
178
+
179
+ :deep(.vue-select .menu-option.selected) {
180
+ background-color: #E4E4E4;
181
+ }
182
+ :deep(.vue-select .indicators-container) {
183
+ padding: 5px 15px!important
184
+ }
185
+ :deep(.vue-select .value-container) {
186
+ padding: 5px 15px;
187
+ }
188
+
189
+ :deep(.vue-select .menu-option) {
190
+ background-color: #f4f4f4;
191
+ }
192
+ </style>