@tapni/auth 1.0.56 → 1.0.59
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/dist/.vite/manifest.json +10 -10
- package/dist/{Apps-NKrqklKY.js → Apps-BgB6SKS2.js} +1 -1
- package/dist/{Billing-BUzKx9xh.js → Billing-CTH6Rjus.js} +1 -1
- package/dist/{CustomApp-BsHMfNck.js → CustomApp-CkmOXQEr.js} +1 -1
- package/dist/{QR-BrzkfUU3.js → QR-bIeEDwMm.js} +1 -1
- package/dist/TapniAuth.es.js +1 -1
- package/dist/TapniAuth.umd.js +3 -3
- package/dist/{install-DvMvXfuA.js → install-zR08RvXn.js} +35 -91
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/services/AuthService.js +7 -1
- package/src/store/auth.js +463 -538
- package/src/views/General.vue +1 -3
- package/src/views/Security.vue +2 -5
- package/src/views/Verify.vue +4 -4
package/src/store/auth.js
CHANGED
|
@@ -17,565 +17,490 @@ import kr from "../store/locales/kr.js";
|
|
|
17
17
|
import { EventBus } from "@/store/event-bus.js";
|
|
18
18
|
import router from '../router/index.js';
|
|
19
19
|
export default {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
},
|
|
128
|
-
setRealm(state, realm) {
|
|
129
|
-
state.realm = realm;
|
|
130
|
-
},
|
|
131
|
-
setApiRoot(state, apiRoot) {
|
|
132
|
-
state.apiRoot = apiRoot;
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
actions: {
|
|
136
|
-
async getAccountSettings({ state, commit, dispatch }) {
|
|
137
|
-
const [err, response] = await to(
|
|
138
|
-
AuthService.getAccountSettings()
|
|
139
|
-
);
|
|
140
|
-
if (err) return dispatch('errorHandler', err);
|
|
141
|
-
if (response.data.success) {
|
|
142
|
-
commit('setAccountSettings', response.data.data);
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
setStorageItem({ commit }, item) {
|
|
146
|
-
commit('setStorageItem', item);
|
|
147
|
-
},
|
|
148
|
-
setStorage({ commit }, storage) {
|
|
149
|
-
commit('setStorage', storage);
|
|
150
|
-
},
|
|
151
|
-
errorHandler({ dispatch }, error) {
|
|
152
|
-
if (
|
|
153
|
-
error &&
|
|
154
|
-
error.response &&
|
|
155
|
-
error.response.data &&
|
|
156
|
-
error.response.data.error
|
|
157
|
-
) {
|
|
158
|
-
if (error.response.data.error === "ACCESS_DENIED") {
|
|
159
|
-
return dispatch('logout');
|
|
160
|
-
}
|
|
20
|
+
namespaced: true,
|
|
21
|
+
state: {
|
|
22
|
+
$storex: {},
|
|
23
|
+
view: '',
|
|
24
|
+
lang: 'en',
|
|
25
|
+
realm: 'app',
|
|
26
|
+
refreshing: false,
|
|
27
|
+
loggedInUserId: '',
|
|
28
|
+
apiRoot: '',
|
|
29
|
+
account: {},
|
|
30
|
+
device: {},
|
|
31
|
+
loggedInAccounts: {},
|
|
32
|
+
ssoLang: {
|
|
33
|
+
en: en.state,
|
|
34
|
+
de: de.state,
|
|
35
|
+
es: es.state,
|
|
36
|
+
fr: fr.state,
|
|
37
|
+
it: it.state,
|
|
38
|
+
sr: sr.state,
|
|
39
|
+
tr: tr.state,
|
|
40
|
+
cn: cn.state,
|
|
41
|
+
kr: kr.state
|
|
42
|
+
},
|
|
43
|
+
display: import.meta.env.VITE_APP_MODE,
|
|
44
|
+
redirect_uri: import.meta.env.VITE_APP_APP_ROOT + '/app/callback/auth',
|
|
45
|
+
response_type: 'token',
|
|
46
|
+
state: '',
|
|
47
|
+
allowedOriginsAuth: ['https://business.tapni.com', 'https://business-dev.tapni.com', 'https://tapni.com', 'https://tapni.co', 'https://t.link', 'https://my.tapni.com', 'https://my.tapni.co', 'https://dev.tapni.co', 'https://dev.tapni.com', 'https://auth.tapni.com', 'https://auth.tapni.co', 'https://mailsign.link', 'https://sign.tapni.com', 'https://qrcodetoolkit.com', 'https://qr.tapni.com', 'https://designer.tapni.com', 'https://designer-dev.tapni.com', 'http://localhost:8081', 'http://localhost:7777', 'https://localhost:7777', 'http://localhost:8086', 'https://localhost:8085', 'http://localhost:8085', 'http://localhost', 'https://localhost', 'https://bigeye.tapni.com', 'https://bigeye-dev.tapni.com', 'capacitor://localhost']
|
|
48
|
+
},
|
|
49
|
+
mutations: {
|
|
50
|
+
setAccountSettings(state, account) {
|
|
51
|
+
state.account = account;
|
|
52
|
+
},
|
|
53
|
+
setStorageItem(state, item) {
|
|
54
|
+
state.$storex[item.name] = item.data;
|
|
55
|
+
},
|
|
56
|
+
setStorage(state, storage) {
|
|
57
|
+
state.$storex = {
|
|
58
|
+
...state.$storex,
|
|
59
|
+
...storage
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
setLoggedInAccounts(state, accounts) {
|
|
63
|
+
state.loggedInAccounts = {};
|
|
64
|
+
accounts.forEach((account) => {
|
|
65
|
+
state.loggedInAccounts[account.username] = account;
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
setLoggedInUserId(state, id) {
|
|
69
|
+
state.loggedInUserId = id;
|
|
70
|
+
},
|
|
71
|
+
setRefreshTokens(state, refreshTokens) {
|
|
72
|
+
state.$storex.refreshTokens = refreshTokens;
|
|
73
|
+
},
|
|
74
|
+
setRefreshToken(state, token) {
|
|
75
|
+
if (!token) return;
|
|
76
|
+
let refreshTokens = state.$storex.refreshTokens ? state.$storex.refreshTokens.split(',') : [];
|
|
77
|
+
refreshTokens = [token, ...refreshTokens.filter((t) => t !== token)];
|
|
78
|
+
state.$storex.refreshTokens = refreshTokens.join(',');
|
|
79
|
+
},
|
|
80
|
+
setToken(state, token) {
|
|
81
|
+
state.$storex.token = token;
|
|
82
|
+
},
|
|
83
|
+
updateLang(state, lang) {
|
|
84
|
+
state.lang = lang;
|
|
85
|
+
},
|
|
86
|
+
setView(state, view) {
|
|
87
|
+
state.view = view;
|
|
88
|
+
},
|
|
89
|
+
setRedirectUri(state, uri) {
|
|
90
|
+
state.redirect_uri = uri;
|
|
91
|
+
},
|
|
92
|
+
setDisplay(state, display) {
|
|
93
|
+
state.display = display;
|
|
94
|
+
},
|
|
95
|
+
setState(state, stateValue) {
|
|
96
|
+
state.state = stateValue;
|
|
97
|
+
},
|
|
98
|
+
setResponseType(state, responseType) {
|
|
99
|
+
state.response_type = responseType;
|
|
100
|
+
},
|
|
101
|
+
setRealm(state, realm) {
|
|
102
|
+
state.realm = realm;
|
|
103
|
+
},
|
|
104
|
+
setApiRoot(state, apiRoot) {
|
|
105
|
+
state.apiRoot = apiRoot;
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
actions: {
|
|
109
|
+
async getAccountSettings({ state, commit, dispatch }) {
|
|
110
|
+
const [err, response] = await to(AuthService.getAccountSettings());
|
|
111
|
+
if (err) return dispatch('errorHandler', err);
|
|
112
|
+
if (response.data.success) {
|
|
113
|
+
commit('setAccountSettings', response.data.data);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
setStorageItem({ commit }, item) {
|
|
117
|
+
commit('setStorageItem', item);
|
|
118
|
+
},
|
|
119
|
+
setStorage({ commit }, storage) {
|
|
120
|
+
commit('setStorage', storage);
|
|
121
|
+
},
|
|
122
|
+
errorHandler({ dispatch }, error) {
|
|
123
|
+
if (error && error.response && error.response.data && error.response.data.error) {
|
|
124
|
+
if (error.response.data.error === 'ACCESS_DENIED') {
|
|
125
|
+
return dispatch('logout');
|
|
126
|
+
}
|
|
161
127
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
128
|
+
if (error.response.data.error === 'OTP_REQUIRED') {
|
|
129
|
+
return EventBus.$emit('toggleOTPField', true);
|
|
130
|
+
}
|
|
165
131
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
axios.get("https://status.tapni.co/data/maintenance.json")
|
|
216
|
-
);
|
|
217
|
-
if (err) return console.error(err);
|
|
218
|
-
if (response) {
|
|
219
|
-
let maintenanceState = response.data;
|
|
220
|
-
if (typeof response.data === "string") {
|
|
221
|
-
maintenanceState = JSON.parse(response.data);
|
|
222
|
-
}
|
|
132
|
+
// Link click network error bug fix
|
|
133
|
+
if (!error.response.data.error.includes('Network Error') && !error.response.data.error.includes('TOKEN_EXPIRED') && !error.response.data.error.includes('Cannot read properties')) {
|
|
134
|
+
dispatch('errorSnack', error.response.data.error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return error;
|
|
138
|
+
},
|
|
139
|
+
errorSnack({ commit }, message) {
|
|
140
|
+
let snackbar = document.getElementById('snackbar');
|
|
141
|
+
let errMessage = document.getElementById('errorMessage');
|
|
142
|
+
let errorSnack = document.getElementById('errorSnack');
|
|
143
|
+
errMessage.innerHTML = message;
|
|
144
|
+
snackbar.classList.add('show-snack');
|
|
145
|
+
errorSnack.classList.add('active-snack');
|
|
146
|
+
setTimeout(function () {
|
|
147
|
+
errorSnack.classList.remove('active-snack');
|
|
148
|
+
snackbar.classList.remove('show-snack');
|
|
149
|
+
}, 3000);
|
|
150
|
+
},
|
|
151
|
+
successSnack({ commit }, message) {
|
|
152
|
+
let snackbar = document.getElementById('snackbar');
|
|
153
|
+
let successMessage = document.getElementById('successMessage');
|
|
154
|
+
let successSnack = document.getElementById('successSnack');
|
|
155
|
+
successMessage.innerHTML = message;
|
|
156
|
+
snackbar.classList.add('show-snack');
|
|
157
|
+
successSnack.classList.add('active-snack');
|
|
158
|
+
setTimeout(function () {
|
|
159
|
+
successSnack.classList.remove('active-snack');
|
|
160
|
+
snackbar.classList.remove('show-snack');
|
|
161
|
+
}, 3000);
|
|
162
|
+
},
|
|
163
|
+
closeSnacks({ commit }) {
|
|
164
|
+
document.getElementById('snackbar').classList.remove('show-snack');
|
|
165
|
+
document.getElementById('successSnack').classList.remove('active-snack');
|
|
166
|
+
document.getElementById('errorSnack').classList.remove('active-snack');
|
|
167
|
+
},
|
|
168
|
+
async eventLog({ commit, dispatch }, data) {
|
|
169
|
+
const [err, response] = await to(UserService.eventLog(data));
|
|
170
|
+
if (err) return dispatch('errorHandler', err);
|
|
171
|
+
return response;
|
|
172
|
+
},
|
|
173
|
+
async maintenance({ commit }) {
|
|
174
|
+
const [err, response] = await to(axios.get('https://status.tapni.co/data/maintenance.json'));
|
|
175
|
+
if (err) return console.error(err);
|
|
176
|
+
if (response) {
|
|
177
|
+
let maintenanceState = response.data;
|
|
178
|
+
if (typeof response.data === 'string') {
|
|
179
|
+
maintenanceState = JSON.parse(response.data);
|
|
180
|
+
}
|
|
223
181
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if (response.data.refreshToken) commit('setRefreshToken', response.data.refreshToken);
|
|
182
|
+
if (maintenanceState.api && maintenanceState.api.maintenanceActive) {
|
|
183
|
+
location.href = 'https://t.link/maintenance?msg=' + maintenanceState.api.msg;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
async loginSetup({ commit, dispatch }, response) {
|
|
188
|
+
// Save Refresh Token
|
|
189
|
+
if (response.data.refreshToken) commit('setRefreshToken', response.data.refreshToken);
|
|
233
190
|
|
|
234
|
-
|
|
235
|
-
|
|
191
|
+
// Save Access Token
|
|
192
|
+
if (response.data.token) commit('setToken', response.data.token);
|
|
236
193
|
|
|
237
|
-
|
|
194
|
+
commit('setLoggedInUserId', response.data.data.id);
|
|
238
195
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
196
|
+
commit('setStorage', {
|
|
197
|
+
UserId: response.data.data.id,
|
|
198
|
+
username: response.data.data.username,
|
|
199
|
+
localUser: response.data.data
|
|
200
|
+
});
|
|
244
201
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
202
|
+
if (response.isModal === true) {
|
|
203
|
+
dispatch('setLoggedInAccounts', [
|
|
204
|
+
{
|
|
205
|
+
id: response.data.data.id,
|
|
206
|
+
username: response.data.data.username,
|
|
207
|
+
name: response.data.data.name,
|
|
208
|
+
refreshToken: response.data.refreshToken,
|
|
209
|
+
photo: response.data.data.photo
|
|
210
|
+
}
|
|
211
|
+
]);
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
async switchAccount({ commit, dispatch, state }, username) {
|
|
215
|
+
if (state.loggedInAccounts[username]) {
|
|
216
|
+
commit('setStorage', {
|
|
217
|
+
username: username,
|
|
218
|
+
UserId: state.loggedInAccounts[username].id,
|
|
219
|
+
localUser: state.loggedInAccounts[username]
|
|
220
|
+
});
|
|
221
|
+
commit('setLoggedInUserId', state.loggedInAccounts[username].id);
|
|
222
|
+
commit('setRefreshToken', state.loggedInAccounts[username].refreshToken);
|
|
223
|
+
await dispatch('refreshTokenAction', state.loggedInAccounts[username]);
|
|
224
|
+
}
|
|
225
|
+
EventBus.$emit('ssoEvent', { name: 'switchAccount', data: { username } });
|
|
226
|
+
},
|
|
227
|
+
async refreshTokenAction({ dispatch, commit, state, getters }, data) {
|
|
228
|
+
if (state.refreshing) {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
274
231
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
232
|
+
state.refreshing = true;
|
|
233
|
+
const [err, response] = await to(
|
|
234
|
+
AuthService.refreshToken({
|
|
235
|
+
id: data.id,
|
|
236
|
+
refreshToken: getters.refreshTokens[0],
|
|
237
|
+
refreshTokenAction: true
|
|
238
|
+
})
|
|
239
|
+
);
|
|
240
|
+
if (err && err.response && err.response.data.error === 'ACCESS_DENIED') {
|
|
241
|
+
dispatch('logout', { refreshToken: getters.refreshTokens[0] });
|
|
285
242
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
243
|
+
setTimeout(() => {
|
|
244
|
+
return location.reload();
|
|
245
|
+
}, 1500);
|
|
246
|
+
}
|
|
290
247
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if (err) return dispatch('errorHandler', err);
|
|
301
|
-
if (response.data.success) {
|
|
302
|
-
if (state.display !== 'popup') {
|
|
303
|
-
dispatch('loginSetup', { ...response, isModal: data.isModal });
|
|
304
|
-
await dispatch('getLoggedInAccounts');
|
|
305
|
-
}
|
|
248
|
+
// Set new access token
|
|
249
|
+
if (response && response.data) {
|
|
250
|
+
commit('setToken', response.data.token);
|
|
251
|
+
EventBus.$emit('ssoEvent', { name: 'setStorage', data: state.$storex });
|
|
252
|
+
}
|
|
253
|
+
state.refreshing = false;
|
|
254
|
+
},
|
|
255
|
+
async login({ commit, state, dispatch }, data) {
|
|
256
|
+
const [err, response] = await to(AuthService.login(data));
|
|
306
257
|
|
|
307
|
-
|
|
258
|
+
if (err) return dispatch('errorHandler', err);
|
|
259
|
+
if (response.data.success) {
|
|
260
|
+
if (state.display !== 'popup') {
|
|
261
|
+
dispatch('loginSetup', { ...response, isModal: data.isModal });
|
|
262
|
+
await dispatch('getLoggedInAccounts');
|
|
263
|
+
}
|
|
308
264
|
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
|
-
loginSuccess({ commit, state, dispatch, getters }, response) {
|
|
313
|
-
if (state.display === "redirect") {
|
|
314
|
-
if (state.redirect_uri &&
|
|
315
|
-
!state.allowedOriginsAuth.some((domain) =>
|
|
316
|
-
state.redirect_uri.startsWith(domain)
|
|
317
|
-
)
|
|
318
|
-
) {
|
|
319
|
-
return console.error("Redirect URI not allowed");
|
|
320
|
-
}
|
|
265
|
+
dispatch('loginSuccess', { ...response, isModal: data.isModal });
|
|
321
266
|
|
|
322
|
-
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
loginSuccess({ commit, state, dispatch, getters }, response) {
|
|
271
|
+
if (state.display === 'redirect') {
|
|
272
|
+
if (state.redirect_uri && !state.allowedOriginsAuth.some((domain) => state.redirect_uri.startsWith(domain))) {
|
|
273
|
+
return console.error('Redirect URI not allowed');
|
|
274
|
+
}
|
|
323
275
|
|
|
324
|
-
|
|
325
|
-
"?code=" +
|
|
326
|
-
response.data.auth_code +
|
|
327
|
-
"&state=" +
|
|
328
|
-
state.state;
|
|
329
|
-
} else if (state.display === "popup") {
|
|
330
|
-
state.allowedOriginsAuth.forEach((domain) => {
|
|
331
|
-
window.parent?.postMessage(
|
|
332
|
-
{ code: response.data.auth_code, state: state.state },
|
|
333
|
-
domain
|
|
334
|
-
);
|
|
335
|
-
});
|
|
336
|
-
} else if (state.display === 'npm') {
|
|
337
|
-
EventBus.$emit('ssoEvent', { name: 'setLoading', data: true })
|
|
338
|
-
EventBus.$emit("ssoEvent", { name: "setStorage", data: state.$storex });
|
|
339
|
-
EventBus.$emit("ssoEvent", { name: "getUser", data: { username: response.data.data.username } });
|
|
276
|
+
return router.push('/account');
|
|
340
277
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
278
|
+
location.href = state.redirect_uri + '?code=' + response.data.auth_code + '&state=' + state.state;
|
|
279
|
+
} else if (state.display === 'popup') {
|
|
280
|
+
state.allowedOriginsAuth.forEach((domain) => {
|
|
281
|
+
window.parent?.postMessage({ code: response.data.auth_code, state: state.state }, domain);
|
|
282
|
+
});
|
|
283
|
+
} else if (state.display === 'npm') {
|
|
284
|
+
EventBus.$emit('ssoEvent', { name: 'setLoading', data: true });
|
|
285
|
+
EventBus.$emit('ssoEvent', { name: 'setStorage', data: state.$storex });
|
|
286
|
+
EventBus.$emit('ssoEvent', { name: 'getUser', data: { username: response.data.data.username } });
|
|
350
287
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
288
|
+
dispatch('setLoggedInAccounts', [
|
|
289
|
+
{
|
|
290
|
+
id: response.data.data.id,
|
|
291
|
+
username: response.data.data.username,
|
|
292
|
+
name: response.data.data.name,
|
|
293
|
+
refreshToken: response.data.refreshToken,
|
|
294
|
+
photo: response.data.data.photo
|
|
295
|
+
}
|
|
296
|
+
]);
|
|
357
297
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
);
|
|
365
|
-
if (err) return dispatch('errorHandler', err);
|
|
366
|
-
return response;
|
|
367
|
-
},
|
|
368
|
-
async verify({ commit, dispatch }, data) {
|
|
369
|
-
const [err, response] = await to(AuthService.verify(data));
|
|
370
|
-
if (err) return dispatch('errorHandler', err);
|
|
371
|
-
return response;
|
|
372
|
-
},
|
|
373
|
-
async reset({ commit, state, getters, dispatch }, data) {
|
|
374
|
-
const [err, response] = await to(
|
|
375
|
-
AuthService.sendResetEmail(data)
|
|
376
|
-
);
|
|
377
|
-
if (err) return dispatch('errorHandler', err);
|
|
378
|
-
if (response.data.success) {
|
|
379
|
-
dispatch('successSnack', state.ssoLang[getters.appLanguage].password_reset_success);
|
|
380
|
-
}
|
|
381
|
-
},
|
|
382
|
-
async exchangeAuthCode({ commit, dispatch }, data) {
|
|
383
|
-
const [err, response] = await to(AuthService.exchangeAuthCode(data));
|
|
384
|
-
if (err) return dispatch('errorHandler', err);
|
|
385
|
-
await dispatch('loginSetup', response);
|
|
386
|
-
await dispatch('getLoggedInAccounts');
|
|
387
|
-
dispatch('loginSuccess', response);
|
|
388
|
-
},
|
|
389
|
-
async changePassword({ commit, dispatch }, data) {
|
|
390
|
-
const [err, response] = await to(
|
|
391
|
-
AuthService.changePassword(data)
|
|
392
|
-
);
|
|
393
|
-
if (err) return dispatch('errorHandler', err);
|
|
394
|
-
return response.data.success;
|
|
395
|
-
},
|
|
396
|
-
async newPassword({ commit, dispatch }, data) {
|
|
397
|
-
const [err, response] = await to(
|
|
398
|
-
UserService.newPassword(data)
|
|
399
|
-
);
|
|
400
|
-
if (err) return dispatch('errorHandler', err);
|
|
401
|
-
return response.data.success;
|
|
402
|
-
},
|
|
403
|
-
async deleteAccount({ commit, dispatch }, data) {
|
|
404
|
-
const [err, response] = await to(
|
|
405
|
-
UserService.deleteAccount(data)
|
|
406
|
-
);
|
|
407
|
-
if (err) return dispatch('errorHandler', err);
|
|
408
|
-
return response.data.success;
|
|
409
|
-
},
|
|
410
|
-
async registerDevice({ commit, dispatch }) {
|
|
411
|
-
const deviceID = await Device.getId();
|
|
412
|
-
const deviceInfo = await Device.getInfo();
|
|
413
|
-
let deviceData = {
|
|
414
|
-
device_id: deviceID.uuid,
|
|
415
|
-
platform: deviceInfo.platform,
|
|
416
|
-
device_info: {
|
|
417
|
-
model: deviceInfo.model,
|
|
418
|
-
manufacturer: deviceInfo.manufacturer,
|
|
419
|
-
operatingSystem: deviceInfo.operatingSystem,
|
|
420
|
-
osVersion: deviceInfo.osVersion,
|
|
421
|
-
isVirtual: deviceInfo.isVirtual,
|
|
422
|
-
webViewVersion: deviceInfo.webViewVersion,
|
|
423
|
-
},
|
|
424
|
-
};
|
|
425
|
-
const [err, response] = await to(
|
|
426
|
-
DeviceService.registerDevice(deviceData)
|
|
427
|
-
);
|
|
428
|
-
if (err) return dispatch('errorHandler', err);
|
|
429
|
-
return response;
|
|
430
|
-
},
|
|
431
|
-
async addFcmToken({ commit, dispatch }, data) {
|
|
432
|
-
const [err, response] = await to(
|
|
433
|
-
DeviceService.addFcmToken(data)
|
|
434
|
-
);
|
|
435
|
-
if (err) return dispatch('errorHandler', err);
|
|
436
|
-
return response;
|
|
437
|
-
},
|
|
438
|
-
async acceptCompanyInvitation({ commit, dispatch }, code) {
|
|
439
|
-
const [err, response] = await to(
|
|
440
|
-
CompanyService.acceptCompanyInvitation(code)
|
|
441
|
-
);
|
|
442
|
-
if (err) return dispatch('errorHandler', err);
|
|
443
|
-
return response;
|
|
444
|
-
},
|
|
445
|
-
async logout({ commit, dispatch, state }, { refreshToken, sendRequest = true }) {
|
|
446
|
-
if (sendRequest && refreshToken) {
|
|
447
|
-
AuthService.logout({ token: refreshToken });
|
|
448
|
-
}
|
|
298
|
+
if (response.isModal) {
|
|
299
|
+
dispatch('successSnack', state.ssoLang[getters.appLanguage].success_login);
|
|
300
|
+
setTimeout(() => {
|
|
301
|
+
location.reload();
|
|
302
|
+
}, 1500);
|
|
303
|
+
}
|
|
449
304
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
305
|
+
EventBus.$emit('ssoEvent', { name: 'redirect', data: '/' + response.data.data.username + '#edit' });
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
async register({ commit, dispatch }, data) {
|
|
309
|
+
const [err, response] = await to(AuthService.register(data));
|
|
310
|
+
if (err) return dispatch('errorHandler', err);
|
|
311
|
+
return response;
|
|
312
|
+
},
|
|
313
|
+
async verify({ commit, dispatch }, data) {
|
|
314
|
+
const [err, response] = await to(AuthService.verify(data));
|
|
315
|
+
if (err) return dispatch('errorHandler', err);
|
|
316
|
+
return response;
|
|
317
|
+
},
|
|
318
|
+
async reset({ commit, state, getters, dispatch }, data) {
|
|
319
|
+
const [err, response] = await to(AuthService.sendResetEmail(data));
|
|
320
|
+
if (err) return dispatch('errorHandler', err);
|
|
321
|
+
if (response.data.success) {
|
|
322
|
+
dispatch('successSnack', state.ssoLang[getters.appLanguage].password_reset_success);
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
async exchangeAuthCode({ commit, dispatch }, data) {
|
|
326
|
+
const [err, response] = await to(AuthService.exchangeAuthCode(data));
|
|
327
|
+
if (err) return dispatch('errorHandler', err);
|
|
328
|
+
await dispatch('loginSetup', response);
|
|
329
|
+
await dispatch('getLoggedInAccounts');
|
|
330
|
+
dispatch('loginSuccess', response);
|
|
331
|
+
},
|
|
332
|
+
async changePassword({ commit, dispatch }, data) {
|
|
333
|
+
const [err, response] = await to(AuthService.changePassword(data));
|
|
334
|
+
if (err) return dispatch('errorHandler', err);
|
|
335
|
+
return response.data.success;
|
|
336
|
+
},
|
|
337
|
+
async newPassword({ commit, dispatch }, data) {
|
|
338
|
+
const [err, response] = await to(UserService.newPassword(data));
|
|
339
|
+
if (err) return dispatch('errorHandler', err);
|
|
340
|
+
return response.data.success;
|
|
341
|
+
},
|
|
342
|
+
async deleteAccount({ commit, dispatch }, data) {
|
|
343
|
+
const [err, response] = await to(UserService.deleteAccount(data));
|
|
344
|
+
if (err) return dispatch('errorHandler', err);
|
|
345
|
+
return response.data.success;
|
|
346
|
+
},
|
|
347
|
+
async registerDevice({ commit, dispatch }) {
|
|
348
|
+
const deviceID = await Device.getId();
|
|
349
|
+
const deviceInfo = await Device.getInfo();
|
|
350
|
+
let deviceData = {
|
|
351
|
+
device_id: deviceID.uuid,
|
|
352
|
+
platform: deviceInfo.platform,
|
|
353
|
+
device_info: {
|
|
354
|
+
model: deviceInfo.model,
|
|
355
|
+
manufacturer: deviceInfo.manufacturer,
|
|
356
|
+
operatingSystem: deviceInfo.operatingSystem,
|
|
357
|
+
osVersion: deviceInfo.osVersion,
|
|
358
|
+
isVirtual: deviceInfo.isVirtual,
|
|
359
|
+
webViewVersion: deviceInfo.webViewVersion
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
const [err, response] = await to(DeviceService.registerDevice(deviceData));
|
|
363
|
+
if (err) return dispatch('errorHandler', err);
|
|
364
|
+
return response;
|
|
365
|
+
},
|
|
366
|
+
async addFcmToken({ commit, dispatch }, data) {
|
|
367
|
+
const [err, response] = await to(DeviceService.addFcmToken(data));
|
|
368
|
+
if (err) return dispatch('errorHandler', err);
|
|
369
|
+
return response;
|
|
370
|
+
},
|
|
371
|
+
async acceptCompanyInvitation({ commit, dispatch }, code) {
|
|
372
|
+
const [err, response] = await to(CompanyService.acceptCompanyInvitation(code));
|
|
373
|
+
if (err) return dispatch('errorHandler', err);
|
|
374
|
+
return response;
|
|
375
|
+
},
|
|
376
|
+
async logout({ commit, dispatch, state }, { refreshToken, sendRequest = true }) {
|
|
377
|
+
if (sendRequest && refreshToken) {
|
|
378
|
+
AuthService.logout({ token: refreshToken });
|
|
379
|
+
}
|
|
457
380
|
|
|
458
|
-
|
|
381
|
+
if (state.$storex) {
|
|
382
|
+
state.$storex.username = '';
|
|
383
|
+
state.$storex.UserId = '';
|
|
384
|
+
state.$storex.localUser = '';
|
|
385
|
+
commit('setToken', '');
|
|
386
|
+
}
|
|
387
|
+
commit('setLoggedInUserId', '');
|
|
459
388
|
|
|
460
|
-
|
|
461
|
-
Object.keys(state.loggedInAccounts).forEach((username) => {
|
|
462
|
-
if (state.loggedInAccounts[username].refreshToken === remainingRefreshTokens[0]) {
|
|
463
|
-
commit('setStorage', {
|
|
464
|
-
username: username,
|
|
465
|
-
UserId: state.loggedInAccounts[username].id,
|
|
466
|
-
localUser: state.loggedInAccounts[username]
|
|
467
|
-
})
|
|
468
|
-
commit('setRefreshToken', remainingRefreshTokens[0]);
|
|
469
|
-
commit('setLoggedInUserId', state.loggedInAccounts[username].id);
|
|
470
|
-
dispatch('refreshTokenAction', state.loggedInAccounts[username]).then(() => {
|
|
471
|
-
EventBus.$emit("ssoEvent", { name: "switchAccount", data: { username }, });
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
} else {
|
|
476
|
-
if (state.display === "redirect") {
|
|
477
|
-
return router.push('/welcome');
|
|
478
|
-
} else if (state.display === "npm") {
|
|
479
|
-
EventBus.$emit("ssoEvent", { name: "redirect", data: "/welcome" });
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
},
|
|
483
|
-
async getCompanyBySSOEmail({ commit, dispatch }, data) {
|
|
484
|
-
const [err, response] = await to(
|
|
485
|
-
CompanyService.getBySSOEmail(data.email)
|
|
486
|
-
);
|
|
487
|
-
if (err) return dispatch('errorHandler', err);
|
|
488
|
-
if (response.data.success) {
|
|
489
|
-
return response.data;
|
|
490
|
-
}
|
|
491
|
-
},
|
|
492
|
-
async getLoggedInAccounts({ getters, dispatch }) {
|
|
493
|
-
if (getters.refreshTokens && getters.refreshTokens.length >= 1) {
|
|
494
|
-
const [err, response] = await to(
|
|
495
|
-
AuthService.getLoggedInAccounts({ refreshTokens: getters.refreshTokens })
|
|
496
|
-
);
|
|
497
|
-
if (err) return dispatch('errorHandler', err);
|
|
498
|
-
if (response && response.data && response.data.success) {
|
|
499
|
-
dispatch('setLoggedInAccounts', response.data.accounts);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
},
|
|
503
|
-
async loginUsingQR({ commit, dispatch }, data) {
|
|
504
|
-
const [err, response] = await to(
|
|
505
|
-
UserService.loginUsingQR(data)
|
|
506
|
-
);
|
|
507
|
-
if (err) return dispatch('errorHandler', err);
|
|
508
|
-
return response.data.success;
|
|
509
|
-
},
|
|
510
|
-
setLoggedInAccounts({ commit }, accounts) {
|
|
511
|
-
commit('setLoggedInAccounts', accounts);
|
|
512
|
-
EventBus.$emit("ssoEvent", { name: "setLoggedInAccounts", data: accounts });
|
|
513
|
-
},
|
|
514
|
-
setLoggedInUserId({ commit }, id) {
|
|
515
|
-
commit('setLoggedInUserId', id);
|
|
516
|
-
},
|
|
517
|
-
setRefreshToken({ commit }, token) {
|
|
518
|
-
commit('setRefreshToken', token);
|
|
519
|
-
},
|
|
520
|
-
async unsetRefreshToken({ commit, state, dispatch, getters }, refreshToken) {
|
|
521
|
-
let refreshTokens = getters.refreshTokens;
|
|
389
|
+
const remainingRefreshTokens = await dispatch('unsetRefreshToken', refreshToken);
|
|
522
390
|
|
|
523
|
-
|
|
524
|
-
|
|
391
|
+
if (remainingRefreshTokens.length >= 1) {
|
|
392
|
+
Object.keys(state.loggedInAccounts).forEach((username) => {
|
|
393
|
+
if (state.loggedInAccounts[username].refreshToken === remainingRefreshTokens[0]) {
|
|
394
|
+
commit('setStorage', {
|
|
395
|
+
username: username,
|
|
396
|
+
UserId: state.loggedInAccounts[username].id,
|
|
397
|
+
localUser: state.loggedInAccounts[username]
|
|
398
|
+
});
|
|
399
|
+
commit('setRefreshToken', remainingRefreshTokens[0]);
|
|
400
|
+
commit('setLoggedInUserId', state.loggedInAccounts[username].id);
|
|
401
|
+
dispatch('refreshTokenAction', state.loggedInAccounts[username]).then(() => {
|
|
402
|
+
EventBus.$emit('ssoEvent', { name: 'switchAccount', data: { username } });
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
} else {
|
|
407
|
+
if (state.display === 'redirect') {
|
|
408
|
+
return router.push('/welcome');
|
|
409
|
+
} else if (state.display === 'npm') {
|
|
410
|
+
EventBus.$emit('ssoEvent', { name: 'redirect', data: '/welcome' });
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
async getCompanyBySSOEmail({ commit, dispatch }, data) {
|
|
415
|
+
const [err, response] = await to(CompanyService.getBySSOEmail(data.email));
|
|
416
|
+
if (err) return dispatch('errorHandler', err);
|
|
417
|
+
if (response.data.success) {
|
|
418
|
+
return response.data;
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
async getLoggedInAccounts({ getters, dispatch }) {
|
|
422
|
+
if (getters.refreshTokens && getters.refreshTokens.length >= 1) {
|
|
423
|
+
const [err, response] = await to(AuthService.getLoggedInAccounts({ refreshTokens: getters.refreshTokens }));
|
|
424
|
+
if (err) return dispatch('errorHandler', err);
|
|
425
|
+
if (response && response.data && response.data.success) {
|
|
426
|
+
dispatch('setLoggedInAccounts', response.data.accounts);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
async loginUsingQR({ commit, dispatch }, data) {
|
|
431
|
+
const [err, response] = await to(UserService.loginUsingQR(data));
|
|
432
|
+
if (err) return dispatch('errorHandler', err);
|
|
433
|
+
return response.data.success;
|
|
434
|
+
},
|
|
435
|
+
setLoggedInAccounts({ commit }, accounts) {
|
|
436
|
+
commit('setLoggedInAccounts', accounts);
|
|
437
|
+
EventBus.$emit('ssoEvent', { name: 'setLoggedInAccounts', data: accounts });
|
|
438
|
+
},
|
|
439
|
+
setLoggedInUserId({ commit }, id) {
|
|
440
|
+
commit('setLoggedInUserId', id);
|
|
441
|
+
},
|
|
442
|
+
setRefreshToken({ commit }, token) {
|
|
443
|
+
commit('setRefreshToken', token);
|
|
444
|
+
},
|
|
445
|
+
async unsetRefreshToken({ commit, state, dispatch, getters }, refreshToken) {
|
|
446
|
+
let refreshTokens = getters.refreshTokens;
|
|
525
447
|
|
|
526
|
-
|
|
527
|
-
|
|
448
|
+
// Remove the specified refresh token from the list
|
|
449
|
+
refreshTokens = refreshTokens?.filter((t) => t !== refreshToken);
|
|
528
450
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
451
|
+
// Update the refresh tokens in the state
|
|
452
|
+
commit('setRefreshTokens', refreshTokens.join(','));
|
|
453
|
+
|
|
454
|
+
return refreshTokens;
|
|
455
|
+
},
|
|
456
|
+
setToken({ commit }, token) {
|
|
457
|
+
commit('setToken', token);
|
|
458
|
+
},
|
|
459
|
+
updateLang({ commit }, lang) {
|
|
460
|
+
commit('updateLang', lang);
|
|
461
|
+
},
|
|
462
|
+
setView({ commit }, view) {
|
|
463
|
+
commit('setView', view);
|
|
464
|
+
},
|
|
465
|
+
setRedirectUri({ commit }, uri) {
|
|
466
|
+
commit('setRedirectUri', uri);
|
|
467
|
+
},
|
|
468
|
+
setDisplay({ commit }, display) {
|
|
469
|
+
commit('setDisplay', display);
|
|
470
|
+
},
|
|
471
|
+
setState({ commit }, stateValue) {
|
|
472
|
+
commit('setState', stateValue);
|
|
473
|
+
},
|
|
474
|
+
setResponseType({ commit }, responseType) {
|
|
475
|
+
commit('setResponseType', responseType);
|
|
476
|
+
},
|
|
477
|
+
setRealm({ commit }, realm) {
|
|
478
|
+
commit('setRealm', realm);
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
getters: {
|
|
482
|
+
isLoggedIn: (state) => {
|
|
483
|
+
return !!state.$storex.token && state.$storex.token !== '' && state.$storex.token !== 'null';
|
|
484
|
+
},
|
|
485
|
+
renderView: (state, getters, rootState) => {
|
|
486
|
+
if (state.display !== 'npm') {
|
|
487
|
+
return rootState.route?.name;
|
|
488
|
+
} else return state.view;
|
|
489
|
+
},
|
|
490
|
+
appRealm: (state) => {
|
|
491
|
+
return state.realm;
|
|
492
|
+
},
|
|
493
|
+
appLanguage: (state) => {
|
|
494
|
+
return state.lang;
|
|
495
|
+
},
|
|
496
|
+
accessToken: (state) => {
|
|
497
|
+
return state.$storex.token;
|
|
498
|
+
},
|
|
499
|
+
refreshTokens: (state) => {
|
|
500
|
+
return state.$storex.refreshTokens.split(',');
|
|
501
|
+
},
|
|
502
|
+
apiRoot: (state) => {
|
|
503
|
+
return state.apiRoot;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
581
506
|
};
|