@adminforth/two-factors-auth 2.0.3 → 2.0.5
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/build.log +2 -2
- package/custom/TwoFactorsConfirmation.vue +12 -1
- package/dist/custom/TwoFactorsConfirmation.vue +12 -1
- package/dist/index.js +6 -0
- package/index.ts +6 -0
- package/package.json +1 -1
package/build.log
CHANGED
|
@@ -13,5 +13,5 @@ custom/package.json
|
|
|
13
13
|
custom/tsconfig.json
|
|
14
14
|
custom/utils.js
|
|
15
15
|
|
|
16
|
-
sent
|
|
17
|
-
total size is
|
|
16
|
+
sent 69,639 bytes received 172 bytes 139,622.00 bytes/sec
|
|
17
|
+
total size is 69,008 speedup is 0.99
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
>
|
|
72
72
|
<p class="pl-6">{{ codeError }} </p>
|
|
73
73
|
</div>
|
|
74
|
-
<div v-else class="h-[36px]">
|
|
74
|
+
<div v-else class="h-[36px] opacity-0">
|
|
75
75
|
|
|
76
76
|
</div>
|
|
77
77
|
</div>
|
|
@@ -150,8 +150,11 @@
|
|
|
150
150
|
await nextTick();
|
|
151
151
|
await isCMAAvailable();
|
|
152
152
|
tagOtpInputs();
|
|
153
|
+
console.log("Checking if device supports passkeys:", isPasskeysSupported.value);
|
|
153
154
|
if (isPasskeysSupported.value === true) {
|
|
155
|
+
console.log("Device supports passkeys, checking if user has passkeys...");
|
|
154
156
|
await checkIfUserHasPasskeys();
|
|
157
|
+
console.log("Does user have passkeys:", doesUserHavePasskeys.value);
|
|
155
158
|
}
|
|
156
159
|
document.addEventListener('focusin', handleGlobalFocusIn, true);
|
|
157
160
|
focusFirstAvailableOtpInput();
|
|
@@ -190,6 +193,8 @@
|
|
|
190
193
|
async function sendCode (value: any, factorMode: 'TOTP' | 'passkey', passkeyOptions: any) {
|
|
191
194
|
inProgress.value = true;
|
|
192
195
|
const usePasskey = factorMode === 'passkey';
|
|
196
|
+
console.log("Sending code with factorMode:", factorMode);
|
|
197
|
+
console.log("Passkey options:", passkeyOptions);
|
|
193
198
|
const resp = await callAdminForthApi({
|
|
194
199
|
method: 'POST',
|
|
195
200
|
path: '/plugin/twofa/confirmLogin',
|
|
@@ -200,12 +205,15 @@
|
|
|
200
205
|
secret: null,
|
|
201
206
|
}
|
|
202
207
|
})
|
|
208
|
+
console.log("Response from confirmLogin:", resp);
|
|
203
209
|
if ( resp.allowedLogin ) {
|
|
204
210
|
if ( route.meta.isPasskeysEnabled && !doesUserHavePasskeys.value ) {
|
|
205
211
|
handlePasskeyAlert(route.meta.suggestionPeriod, router);
|
|
206
212
|
}
|
|
213
|
+
console.log("Login confirmed, finishing login...");
|
|
207
214
|
await user.finishLogin();
|
|
208
215
|
} else {
|
|
216
|
+
console.log("Login not allowed, showing error:", resp.error);
|
|
209
217
|
if (usePasskey) {
|
|
210
218
|
showErrorTost(t(resp.error));
|
|
211
219
|
codeError.value = resp.error || t('Passkey authentication failed');
|
|
@@ -269,15 +277,18 @@
|
|
|
269
277
|
|
|
270
278
|
async function createSignInRequest() {
|
|
271
279
|
let response;
|
|
280
|
+
console.log("Creating sign-in request for passkey...");
|
|
272
281
|
try {
|
|
273
282
|
response = await callAdminForthApi({
|
|
274
283
|
path: `/plugin/passkeys/signInRequest`,
|
|
275
284
|
method: 'POST',
|
|
276
285
|
});
|
|
277
286
|
} catch (error) {
|
|
287
|
+
console.log("Error creating sign-in request:", error);
|
|
278
288
|
console.error('Error creating sign-in request:', error);
|
|
279
289
|
return;
|
|
280
290
|
}
|
|
291
|
+
console.log("Sign-in request response:", response);
|
|
281
292
|
if (response.ok === true) {
|
|
282
293
|
return { _options: response.data, challengeId: response.challengeId };
|
|
283
294
|
} else {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
>
|
|
72
72
|
<p class="pl-6">{{ codeError }} </p>
|
|
73
73
|
</div>
|
|
74
|
-
<div v-else class="h-[36px]">
|
|
74
|
+
<div v-else class="h-[36px] opacity-0">
|
|
75
75
|
|
|
76
76
|
</div>
|
|
77
77
|
</div>
|
|
@@ -150,8 +150,11 @@
|
|
|
150
150
|
await nextTick();
|
|
151
151
|
await isCMAAvailable();
|
|
152
152
|
tagOtpInputs();
|
|
153
|
+
console.log("Checking if device supports passkeys:", isPasskeysSupported.value);
|
|
153
154
|
if (isPasskeysSupported.value === true) {
|
|
155
|
+
console.log("Device supports passkeys, checking if user has passkeys...");
|
|
154
156
|
await checkIfUserHasPasskeys();
|
|
157
|
+
console.log("Does user have passkeys:", doesUserHavePasskeys.value);
|
|
155
158
|
}
|
|
156
159
|
document.addEventListener('focusin', handleGlobalFocusIn, true);
|
|
157
160
|
focusFirstAvailableOtpInput();
|
|
@@ -190,6 +193,8 @@
|
|
|
190
193
|
async function sendCode (value: any, factorMode: 'TOTP' | 'passkey', passkeyOptions: any) {
|
|
191
194
|
inProgress.value = true;
|
|
192
195
|
const usePasskey = factorMode === 'passkey';
|
|
196
|
+
console.log("Sending code with factorMode:", factorMode);
|
|
197
|
+
console.log("Passkey options:", passkeyOptions);
|
|
193
198
|
const resp = await callAdminForthApi({
|
|
194
199
|
method: 'POST',
|
|
195
200
|
path: '/plugin/twofa/confirmLogin',
|
|
@@ -200,12 +205,15 @@
|
|
|
200
205
|
secret: null,
|
|
201
206
|
}
|
|
202
207
|
})
|
|
208
|
+
console.log("Response from confirmLogin:", resp);
|
|
203
209
|
if ( resp.allowedLogin ) {
|
|
204
210
|
if ( route.meta.isPasskeysEnabled && !doesUserHavePasskeys.value ) {
|
|
205
211
|
handlePasskeyAlert(route.meta.suggestionPeriod, router);
|
|
206
212
|
}
|
|
213
|
+
console.log("Login confirmed, finishing login...");
|
|
207
214
|
await user.finishLogin();
|
|
208
215
|
} else {
|
|
216
|
+
console.log("Login not allowed, showing error:", resp.error);
|
|
209
217
|
if (usePasskey) {
|
|
210
218
|
showErrorTost(t(resp.error));
|
|
211
219
|
codeError.value = resp.error || t('Passkey authentication failed');
|
|
@@ -269,15 +277,18 @@
|
|
|
269
277
|
|
|
270
278
|
async function createSignInRequest() {
|
|
271
279
|
let response;
|
|
280
|
+
console.log("Creating sign-in request for passkey...");
|
|
272
281
|
try {
|
|
273
282
|
response = await callAdminForthApi({
|
|
274
283
|
path: `/plugin/passkeys/signInRequest`,
|
|
275
284
|
method: 'POST',
|
|
276
285
|
});
|
|
277
286
|
} catch (error) {
|
|
287
|
+
console.log("Error creating sign-in request:", error);
|
|
278
288
|
console.error('Error creating sign-in request:', error);
|
|
279
289
|
return;
|
|
280
290
|
}
|
|
291
|
+
console.log("Sign-in request response:", response);
|
|
281
292
|
if (response.ok === true) {
|
|
282
293
|
return { _options: response.data, challengeId: response.challengeId };
|
|
283
294
|
} else {
|
package/dist/index.js
CHANGED
|
@@ -343,15 +343,21 @@ export default class TwoFactorsAuthPlugin extends AdminForthPlugin {
|
|
|
343
343
|
let verified = null;
|
|
344
344
|
if (body.usePasskey && this.options.passkeys) {
|
|
345
345
|
// passkeys are enabled and user wants to use them
|
|
346
|
+
console.log("Using passkey for 2FA verification");
|
|
346
347
|
const passkeysCookies = this.adminforth.auth.getCustomCookie({ cookies: cookies, name: `passkeyLoginTemporaryJWT` });
|
|
348
|
+
console.log("Passkey cookies:", passkeysCookies);
|
|
347
349
|
if (!passkeysCookies) {
|
|
348
350
|
return { error: 'Passkey token is required' };
|
|
349
351
|
}
|
|
352
|
+
console.log("Verifying passkey cookies");
|
|
350
353
|
const decodedPasskeysCookies = yield this.adminforth.auth.verify(passkeysCookies, 'tempLoginPasskeyChallenge', false);
|
|
351
354
|
if (!decodedPasskeysCookies) {
|
|
352
355
|
return { error: 'Invalid passkey' };
|
|
353
356
|
}
|
|
357
|
+
console.log("Passkey cookies decoded:", decodedPasskeysCookies);
|
|
358
|
+
console.log("Verifying passkey response");
|
|
354
359
|
const res = yield this.verifyPasskeyResponse(body.passkeyOptions, decoded.pk, decodedPasskeysCookies);
|
|
360
|
+
console.log("Passkey response verification result:", res);
|
|
355
361
|
if (res.ok && res.passkeyConfirmed) {
|
|
356
362
|
verified = true;
|
|
357
363
|
}
|
package/index.ts
CHANGED
|
@@ -383,15 +383,21 @@ export default class TwoFactorsAuthPlugin extends AdminForthPlugin {
|
|
|
383
383
|
let verified = null;
|
|
384
384
|
if (body.usePasskey && this.options.passkeys) {
|
|
385
385
|
// passkeys are enabled and user wants to use them
|
|
386
|
+
console.log("Using passkey for 2FA verification");
|
|
386
387
|
const passkeysCookies = this.adminforth.auth.getCustomCookie({cookies: cookies, name: `passkeyLoginTemporaryJWT`});
|
|
388
|
+
console.log("Passkey cookies:", passkeysCookies);
|
|
387
389
|
if (!passkeysCookies) {
|
|
388
390
|
return { error: 'Passkey token is required' };
|
|
389
391
|
}
|
|
392
|
+
console.log("Verifying passkey cookies");
|
|
390
393
|
const decodedPasskeysCookies = await this.adminforth.auth.verify(passkeysCookies, 'tempLoginPasskeyChallenge', false);
|
|
391
394
|
if (!decodedPasskeysCookies) {
|
|
392
395
|
return { error: 'Invalid passkey' };
|
|
393
396
|
}
|
|
397
|
+
console.log("Passkey cookies decoded:", decodedPasskeysCookies);
|
|
398
|
+
console.log("Verifying passkey response");
|
|
394
399
|
const res = await this.verifyPasskeyResponse(body.passkeyOptions, decoded.pk, decodedPasskeysCookies);
|
|
400
|
+
console.log("Passkey response verification result:", res);
|
|
395
401
|
if (res.ok && res.passkeyConfirmed) {
|
|
396
402
|
verified = true;
|
|
397
403
|
}
|