@tapni/auth 1.0.52 → 1.0.54

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.
package/src/App.vue CHANGED
@@ -1,333 +1,322 @@
1
1
  <script setup>
2
- import { RouterView } from 'vue-router'
2
+ import { RouterView } from 'vue-router';
3
3
  // add Buffer globally
4
4
  import { Buffer } from 'buffer/';
5
5
  window.Buffer = Buffer;
6
- document.addEventListener('DOMContentLoaded', function() {
7
- const recaptchaScript = document.createElement('script');
8
- recaptchaScript.src = `https://www.google.com/recaptcha/api.js?render=${import.meta.env.VITE_GOOGLE_RECAPTCHA_SITE_KEY}`;
9
- document.head.appendChild(recaptchaScript);
6
+ document.addEventListener('DOMContentLoaded', function () {
7
+ const recaptchaScript = document.createElement('script');
8
+ recaptchaScript.src = `https://www.google.com/recaptcha/api.js?render=${import.meta.env.VITE_GOOGLE_RECAPTCHA_SITE_KEY}`;
9
+ document.head.appendChild(recaptchaScript);
10
10
  });
11
11
  </script>
12
12
 
13
-
14
13
  <template>
15
- <div id="ssoapp">
16
- <a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="https://cdn.tapni.co/images/logo-dark.png"class="header-logo-img"></a>
14
+ <div id="ssoapp" :style="containerStyle">
15
+ <a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="https://cdn.tapni.co/images/logo-dark.png" class="header-logo-img" /></a>
17
16
 
18
- <AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
19
- <AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
20
- <AuthGeneral v-else-if="initialized && renderView === 'AuthGeneral'" :isModal="isModal" @update:viewProp="setView" />
21
- <AuthAccount v-else-if="initialized && renderView === 'AuthAccount'" :isModal="isModal" @update:viewProp="setView" />
22
- <AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
23
- <AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
24
- <AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" @update:viewProp="setView" />
25
- <AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
26
- <AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
27
- <RouterView v-else-if="display !== 'npm'" />
17
+ <AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
18
+ <AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
19
+ <AuthGeneral v-else-if="initialized && renderView === 'AuthGeneral'" :isModal="isModal" @update:viewProp="setView" />
20
+ <AuthAccount v-else-if="initialized && renderView === 'AuthAccount'" :isModal="isModal" @update:viewProp="setView" />
21
+ <AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
22
+ <AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
23
+ <AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" @update:viewProp="setView" />
24
+ <AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
25
+ <AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
26
+ <RouterView v-else-if="display !== 'npm'" />
28
27
 
29
- <div class="snackbar snackbar-boxed" id="snackbar">
30
- <p class="snack-body" id="errorSnack">
31
- <span id="errorMessage"> {{ ssoLang[appLanguage].error }} </span>
32
- <a
33
- @click="closeSnacks"
34
- style="
35
- position: absolute;
36
- right: 10px;
37
- top: 10px;
38
- width: 50px;
39
- height: 50px;
40
- "
41
- >
42
- <img
43
- src="https://cdn.tapni.co/icons/notification-close.png"
44
- style="width: 100%;"
45
- />
46
- </a>
47
- </p>
48
- <p class="snack-body" id="successSnack">
49
- <span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
50
- <a
51
- @click="closeSnacks"
52
- style="
53
- position: absolute;
54
- right: 10px;
55
- top: 10px;
56
- width: 50px;
57
- height: 50px;
58
- "
59
- >
60
- <img
61
- src="https://cdn.tapni.co/icons/notification-close.png"
62
- style="width: 100%"
63
- />
64
- </a>
65
- </p>
66
- </div>
67
- </div>
28
+ <div class="snackbar snackbar-boxed" id="snackbar">
29
+ <p class="snack-body" id="errorSnack">
30
+ <span id="errorMessage"> {{ ssoLang[appLanguage].error }} </span>
31
+ <a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
32
+ <img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
33
+ </a>
34
+ </p>
35
+ <p class="snack-body" id="successSnack">
36
+ <span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
37
+ <a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
38
+ <img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
39
+ </a>
40
+ </p>
41
+ </div>
42
+ </div>
68
43
  </template>
69
44
 
70
45
  <script>
71
- import AuthWelcome from "@/views/Welcome.vue";
72
- import AuthLogin from "@/views/Login.vue";
73
- import AuthAccount from "@/views/Account.vue";
74
- import AuthRegister from "@/views/Register.vue";
75
- import AuthVerify from "@/views/Verify.vue";
76
- import AuthSecurity from "@/views/Security.vue";
77
- import AuthGeneral from "@/views/General.vue";
78
- import AuthReset from "@/views/Reset.vue";
79
- import AuthCallback from "@/views/Callback.vue";
80
- import {EventBus} from "./store/event-bus.js";
81
- import AuthMixin from "@/mixins/auth.mixin.js";
82
- import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3'
46
+ import AuthWelcome from '@/views/Welcome.vue';
47
+ import AuthLogin from '@/views/Login.vue';
48
+ import AuthAccount from '@/views/Account.vue';
49
+ import AuthRegister from '@/views/Register.vue';
50
+ import AuthVerify from '@/views/Verify.vue';
51
+ import AuthSecurity from '@/views/Security.vue';
52
+ import AuthGeneral from '@/views/General.vue';
53
+ import AuthReset from '@/views/Reset.vue';
54
+ import AuthCallback from '@/views/Callback.vue';
55
+ import { EventBus } from './store/event-bus.js';
56
+ import AuthMixin from '@/mixins/auth.mixin.js';
57
+ import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3';
83
58
  import store from './store/auth.js';
84
59
  import UtilService from './services/UtilService.js';
85
60
 
86
61
  export default {
87
- store,
88
- name: 'TapniAuth',
89
- mixins: [ReactiveStorage, AuthMixin],
90
- data () {
91
- return {
92
- storeInterval: null,
93
- isSetup: false
94
- }
95
- },
96
- components: {
97
- AuthCallback, AuthReset, AuthVerify, AuthSecurity, AuthRegister, AuthLogin, AuthAccount, AuthWelcome, AuthGeneral
98
- },
99
- props: {
100
- viewProp: {
101
- type: String,
102
- default: ''
103
- },
104
- isModal: {
105
- type: Boolean,
106
- default: false
107
- },
108
- payload: {
109
- type: Object,
110
- default: {}
111
- },
112
- options: {
113
- type: Object,
114
- default: {
115
- 'token': '',
116
- 'refreshTokens': '',
117
- 'username': '',
118
- 'UserId': '',
119
- 'verifyEmail': '',
120
- 'subdomain': '',
121
- 'localUser': ''
122
- }
123
- }
124
- },
125
- computed: {
126
- initialized () {
127
- return this.isSetup || this.isModal;
128
- }
129
- },
130
- async mounted() {
131
- this.applyBgStyle()
132
- this.setView(this.viewProp);
62
+ store,
63
+ name: 'TapniAuth',
64
+ mixins: [ReactiveStorage, AuthMixin],
65
+ data() {
66
+ return {
67
+ storeInterval: null,
68
+ isSetup: false
69
+ };
70
+ },
71
+ components: {
72
+ AuthCallback,
73
+ AuthReset,
74
+ AuthVerify,
75
+ AuthSecurity,
76
+ AuthRegister,
77
+ AuthLogin,
78
+ AuthAccount,
79
+ AuthWelcome,
80
+ AuthGeneral
81
+ },
82
+ props: {
83
+ viewProp: {
84
+ type: String,
85
+ default: ''
86
+ },
87
+ isModal: {
88
+ type: Boolean,
89
+ default: false
90
+ },
91
+ payload: {
92
+ type: Object,
93
+ default: {}
94
+ },
95
+ options: {
96
+ type: Object,
97
+ default: {
98
+ token: '',
99
+ refreshTokens: '',
100
+ username: '',
101
+ UserId: '',
102
+ verifyEmail: '',
103
+ subdomain: '',
104
+ localUser: ''
105
+ }
106
+ }
107
+ },
108
+ computed: {
109
+ initialized() {
110
+ return this.isSetup || this.isModal;
111
+ },
112
+ containerStyle() {
113
+ return {
114
+ maxHeight: this.isModal ? '90vh' : 'auto',
115
+ overflowY: this.isModal ? 'hidden' : 'auto'
116
+ }
117
+ }
118
+ },
119
+ async mounted() {
120
+ this.applyBgStyle();
121
+ this.setView(this.viewProp);
133
122
 
134
- EventBus.$on('ssoEvent', this.ssoOutgoingEvent)
135
- EventBus.$on('ssoLogout',(data) => this.logout(data))
136
- EventBus.$on('getLoggedInAccounts',() => this.getLoggedInAccounts())
137
- EventBus.$on('refreshTokenAction',(data) => this.refreshTokenAction({...data, storage: this.$storex}))
138
- EventBus.$on('switchAccount',(data) => this.switchAccount(data))
139
- EventBus.$on('setToken',(data) => this.setToken(data))
140
- EventBus.$on('setStorageItem',(data) => this.setStorageItem(data))
123
+ EventBus.$on('ssoEvent', this.ssoOutgoingEvent);
124
+ EventBus.$on('ssoLogout', (data) => this.logout(data));
125
+ EventBus.$on('getLoggedInAccounts', () => this.getLoggedInAccounts());
126
+ EventBus.$on('refreshTokenAction', (data) => this.refreshTokenAction({ ...data, storage: this.$storex }));
127
+ EventBus.$on('switchAccount', (data) => this.switchAccount(data));
128
+ EventBus.$on('setToken', (data) => this.setToken(data));
129
+ EventBus.$on('setStorageItem', (data) => this.setStorageItem(data));
141
130
 
142
- if (import.meta.env.VITE_APP_COMPARE_LANGUAGE_KEYS === "true") {
143
- UtilService.compareLangKeys();
144
- }
145
- },
146
- methods: {
147
- async init () {
148
- this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VUE_APP_API_ROOT);
131
+ if (import.meta.env.VITE_APP_COMPARE_LANGUAGE_KEYS === 'true') {
132
+ UtilService.compareLangKeys();
133
+ }
134
+ },
135
+ methods: {
136
+ async init() {
137
+ this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VUE_APP_API_ROOT);
149
138
 
150
- // Set $storage into vuex $storex
151
- this.setStorage(this.strg);
139
+ // Set $storage into vuex $storex
140
+ this.setStorage(this.strg);
152
141
 
153
- // Make sure the function is called just once
154
- if (this.isSetup) return;
155
- this.isSetup = true;
142
+ // Make sure the function is called just once
143
+ if (this.isSetup) return;
144
+ this.isSetup = true;
156
145
 
157
- await this.getLoggedInAccounts();
146
+ await this.getLoggedInAccounts();
158
147
 
159
- // Let App know that the auth is ready
160
- this.$emit('ssoLibraryReady', this.$storex);
161
- },
162
- ssoOutgoingEvent (data) {
163
- this.$emit('ssoEvent', data)
164
- },
165
- ssoIncomingEvent (data) {
166
- EventBus.$emit(data.name, data.data)
167
- },
168
- applyBgStyle () {
169
- if (this.display === 'redirect') {
170
- document.getElementsByTagName("html")[0].style = "background: #dfeefe;"
171
- } else {
172
- document.getElementsByTagName("html")[0].style = ""
173
- }
174
- },
175
- },
176
- watch: {
177
- viewProp (nv) {
178
- this.setView(nv);
179
- },
180
- display () {
181
- this.applyBgStyle()
182
- },
183
- 'strgReady.value' (nv) {
184
- if (nv) {
185
- // Initialize Library after all event listeners & storage are set
186
- this.$nextTick(() => {
187
- this.init()
188
- })
189
- }
190
- },
191
- '$storex': {
192
- handler(nv) {
193
- clearInterval(this.storeInterval);
194
- this.storeInterval = setTimeout(() => {
195
- Object.keys(nv).forEach(key => {
196
- this.strg[key] = nv[key];
197
- });
198
- }, 250)
199
- },
200
- deep: true
201
- }
202
- }
203
- }
148
+ // Let App know that the auth is ready
149
+ this.$emit('ssoLibraryReady', this.$storex);
150
+ },
151
+ ssoOutgoingEvent(data) {
152
+ this.$emit('ssoEvent', data);
153
+ },
154
+ ssoIncomingEvent(data) {
155
+ EventBus.$emit(data.name, data.data);
156
+ },
157
+ applyBgStyle() {
158
+ if (this.display === 'redirect') {
159
+ document.getElementsByTagName('html')[0].style = 'background: #dfeefe;';
160
+ } else {
161
+ document.getElementsByTagName('html')[0].style = '';
162
+ }
163
+ }
164
+ },
165
+ watch: {
166
+ viewProp(nv) {
167
+ this.setView(nv);
168
+ },
169
+ display() {
170
+ this.applyBgStyle();
171
+ },
172
+ 'strgReady.value'(nv) {
173
+ if (nv) {
174
+ // Initialize Library after all event listeners & storage are set
175
+ this.$nextTick(() => {
176
+ this.init();
177
+ });
178
+ }
179
+ },
180
+ $storex: {
181
+ handler(nv) {
182
+ clearInterval(this.storeInterval);
183
+ this.storeInterval = setTimeout(() => {
184
+ Object.keys(nv).forEach((key) => {
185
+ this.strg[key] = nv[key];
186
+ });
187
+ }, 250);
188
+ },
189
+ deep: true
190
+ }
191
+ }
192
+ };
204
193
  </script>
205
194
 
206
195
  <style>
207
196
  html * {
208
- font-family: "Inter", sans-serif;
197
+ font-family: 'Inter', sans-serif;
209
198
  }
210
199
 
211
200
  #bodyId {
212
- padding-top: 3%;
213
- max-width: 667px !important;
214
- margin: auto;
215
- height: 95%!important;
216
- margin-top: 1.5%;
217
- border-radius: 20px;
201
+ padding-top: 3%;
202
+ max-width: 667px !important;
203
+ margin: auto;
204
+ height: 95% !important;
205
+ margin-top: 1.5%;
206
+ border-radius: 20px;
218
207
  }
219
208
 
220
209
  .action-block-top .default-text,
221
210
  .action-block-top .default-text:after {
222
- border-radius: 50%;
223
- width: 10em !important;
224
- height: 10em !important;
211
+ border-radius: 50%;
212
+ width: 10em !important;
213
+ height: 10em !important;
225
214
  }
226
215
  .action-block-top .default-text {
227
- margin: 10px auto;
228
- font-size: 3px;
229
- position: relative;
230
- text-indent: -9999em;
231
- /*
216
+ margin: 10px auto;
217
+ font-size: 3px;
218
+ position: relative;
219
+ text-indent: -9999em;
220
+ /*
232
221
  border-left: 0.5em solid #ffffff;
233
222
  border-top: 0.5em solid rgba(255, 255, 255, 0.2);
234
223
  border-right: 0.5em solid rgba(255, 255, 255, 0.2);
235
224
  border-bottom: 0.5em solid rgba(255, 255, 255, 0.2);
236
225
  */
237
- border-left: 0.5em solid #000000;
238
- border-top: 0.5em solid rgba(0, 0, 0, 0.2);
239
- border-right: 0.5em solid rgba(0, 0, 0, 0.2);
240
- border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
241
- -webkit-transform: translateZ(0);
242
- -ms-transform: translateZ(0);
243
- transform: translateZ(0);
244
- -webkit-animation: load8 1.1s infinite linear;
245
- animation: load8 1.1s infinite linear;
226
+ border-left: 0.5em solid #000000;
227
+ border-top: 0.5em solid rgba(0, 0, 0, 0.2);
228
+ border-right: 0.5em solid rgba(0, 0, 0, 0.2);
229
+ border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
230
+ -webkit-transform: translateZ(0);
231
+ -ms-transform: translateZ(0);
232
+ transform: translateZ(0);
233
+ -webkit-animation: load8 1.1s infinite linear;
234
+ animation: load8 1.1s infinite linear;
246
235
  }
247
236
  @-webkit-keyframes load8 {
248
- 0% {
249
- -webkit-transform: rotate(0deg);
250
- transform: rotate(0deg);
251
- }
252
- 100% {
253
- -webkit-transform: rotate(360deg);
254
- transform: rotate(360deg);
255
- }
237
+ 0% {
238
+ -webkit-transform: rotate(0deg);
239
+ transform: rotate(0deg);
240
+ }
241
+ 100% {
242
+ -webkit-transform: rotate(360deg);
243
+ transform: rotate(360deg);
244
+ }
256
245
  }
257
246
  @keyframes load8 {
258
- 0% {
259
- -webkit-transform: rotate(0deg);
260
- transform: rotate(0deg);
261
- }
262
- 100% {
263
- -webkit-transform: rotate(360deg);
264
- transform: rotate(360deg);
265
- }
247
+ 0% {
248
+ -webkit-transform: rotate(0deg);
249
+ transform: rotate(0deg);
250
+ }
251
+ 100% {
252
+ -webkit-transform: rotate(360deg);
253
+ transform: rotate(360deg);
254
+ }
266
255
  }
267
256
  .smartbanner-ios {
268
- background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
269
- box-shadow: 0 0px 0px #ffffff;
270
- border-bottom: 1px solid #dddddd;
257
+ background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
258
+ box-shadow: 0 0px 0px #ffffff;
259
+ border-bottom: 1px solid #dddddd;
271
260
  }
272
261
  .smartbanner-icon {
273
- border-radius: 16px;
262
+ border-radius: 16px;
274
263
  }
275
264
  .smartbanner-ios .smartbanner-button {
276
- font-size: 13px;
277
- padding: 9px 0px;
278
- height: 40px;
279
- border-radius: 13px;
280
- background: #f4f4f4;
281
- color: #0a99d2;
282
- border: none;
283
- box-shadow: none;
284
- text-transform: uppercase;
265
+ font-size: 13px;
266
+ padding: 9px 0px;
267
+ height: 40px;
268
+ border-radius: 13px;
269
+ background: #f4f4f4;
270
+ color: #0a99d2;
271
+ border: none;
272
+ box-shadow: none;
273
+ text-transform: uppercase;
285
274
  }
286
275
 
287
276
  .snack-body {
288
- display: none;
289
- border-radius: 40px;
290
- font-size: 15px !important;
277
+ display: none;
278
+ border-radius: 40px;
279
+ font-size: 15px !important;
291
280
  }
292
281
 
293
282
  #errorSnack {
294
- background-color: #fee3e3 !important;
295
- border: 2px solid #edd9d9 !important;
296
- color: #000000;
283
+ background-color: #fee3e3 !important;
284
+ border: 2px solid #edd9d9 !important;
285
+ color: #000000;
297
286
  }
298
287
 
299
288
  #successSnack {
300
- background-color: #eff5eb !important;
301
- border: 2px solid #e3ecd7 !important;
302
- color: #000000;
289
+ background-color: #eff5eb !important;
290
+ border: 2px solid #e3ecd7 !important;
291
+ color: #000000;
303
292
  }
304
293
 
305
294
  .grecaptcha-badge {
306
- visibility: hidden;
295
+ visibility: hidden;
307
296
  }
308
297
 
309
298
  .header-logo {
310
- position: absolute;
311
- left: 50%;
312
- transform: translate(-50%, -50%);
313
- margin-top: 0px;
314
- z-index: 2;
299
+ position: absolute;
300
+ left: 50%;
301
+ transform: translate(-50%, -50%);
302
+ margin-top: 0px;
303
+ z-index: 2;
315
304
  }
316
305
 
317
306
  .header-logo-img {
318
- height: 40px;
319
- margin-top: 10px;
307
+ height: 40px;
308
+ margin-top: 10px;
320
309
  }
321
310
 
322
311
  @media (max-width: 768px) {
323
- #bodyId {
324
- margin-top: 0;
325
- border-radius: 0;
326
- height: 100%!important;
327
- }
312
+ #bodyId {
313
+ margin-top: 0;
314
+ border-radius: 0;
315
+ height: 100% !important;
316
+ }
328
317
 
329
- .header-logo {
330
- margin-top: 15px;
331
- }
318
+ .header-logo {
319
+ margin-top: 15px;
320
+ }
332
321
  }
333
322
  </style>
@@ -7,7 +7,7 @@
7
7
  </a>
8
8
  <div class="subheaderContainer full-top">
9
9
  <!-- Back Button -->
10
- <div v-if="isModal" class="button gray-button pointer left-button" @click="$emit('update:viewProp', 'AuthAccount')">
10
+ <div v-if="isModal" class="pointer left-button" @click="$emit('update:viewProp', 'AuthAccount')">
11
11
  <img
12
12
  :src="getIcon('arrow-gray-right.svg')"
13
13
  height="20"
@@ -16,7 +16,7 @@
16
16
  style="rotate: 180deg;"
17
17
  />
18
18
  </div>
19
- <router-link v-else to="/account" class="button gray-button pointer left-button">
19
+ <router-link v-else to="/account" class="button gray-button pointer left-button" >
20
20
  <img
21
21
  :src="getIcon('arrow-gray-right.svg')"
22
22
  height="20"
@@ -172,7 +172,4 @@ export default {
172
172
  },
173
173
  }
174
174
  };
175
- </script>
176
-
177
- <style>
178
- </style>
175
+ </script>
@@ -7,7 +7,7 @@
7
7
  </a>
8
8
  <div class="subheaderContainer full-top">
9
9
  <!-- Back Button -->
10
- <div v-if="isModal" class="button gray-button pointer left-button" @click="$emit('update:viewProp', 'AuthAccount')">
10
+ <div v-if="isModal" class="pointer left-button" @click="$emit('update:viewProp', 'AuthAccount')">
11
11
  <img
12
12
  :src="getIcon('arrow-gray-right.svg')"
13
13
  height="20"
@@ -113,8 +113,8 @@
113
113
  <img class="transition-icon" :class="{ 'rotate-icon': !!changePassword }" :src="getIcon('arrow-gray-down.svg')" />
114
114
  </div>
115
115
  </div>
116
- <form v-show="changePassword" class="center-text half-top">
117
- <form @submit.prevent="submitChangePassword">
116
+
117
+ <form @submit.prevent="submitChangePassword" v-show="changePassword" class="center-text half-top">
118
118
  <input type="password" v-model="currentPassword" :placeholder="ssoLang[appLanguage].password_current_p"
119
119
  class="edit-input h-40 lh-40" required minlength="8" style="width: 100%"/>
120
120
  <p class="small-text small-top-padding small-bottom">{{ssoLang[appLanguage].password_current}}</p>
@@ -140,9 +140,7 @@
140
140
  <router-link to="/reset" exact class="color-black">{{ssoLang[appLanguage].by_clicking_here}}</router-link>
141
141
  </p>
142
142
  </form>
143
- </form>
144
-
145
-
143
+
146
144
  <!-- Delete Account -->
147
145
  <div class="settingRow full-top" @click="accountDelete = !accountDelete">
148
146
  <div class="firstRow">