From fd94b817abd8fa628586746eed3a1f61b4a2b3d8 Mon Sep 17 00:00:00 2001 From: Mary Date: Wed, 3 Jul 2019 07:18:07 -0400 Subject: Implement Webauthn 🎉 (#5088) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement Webauthn :tada: * Share hexifyAB * Move hr inside template and add AttestationChallenges janitor daemon * Apply suggestions from code review Co-Authored-By: Acid Chicken (硫酸鶏) * Add newline at the end of file * Fix stray newline in promise chain * Ignore var in try{}catch(){} block Co-Authored-By: Acid Chicken (硫酸鶏) * Add missing comma * Add missing semicolon * Support more attestation formats * add support for more key types and linter pass * Refactor * Refactor * credentialId --> id * Fix * Improve readability * Add indexes * fixes for credentialId->id * Avoid changing store state * Fix syntax error and code style * Remove unused import * Refactor of getkey API * Create 1561706992953-webauthn.ts * Update ja-JP.yml * Add type annotations * Fix code style * Specify depedency version * Fix code style * Fix janitor daemon and login requesting 2FA regardless of status --- src/boot/master.ts | 1 + src/client/app/common/scripts/2fa.ts | 5 + .../app/common/views/components/settings/2fa.vue | 163 +++++++- src/client/app/common/views/components/signin.vue | 182 +++++++-- src/daemons/janitor.ts | 18 + src/db/postgre.ts | 6 +- src/models/entities/attestation-challenge.ts | 46 +++ src/models/entities/user-profile.ts | 5 + src/models/entities/user-security-key.ts | 48 +++ src/models/index.ts | 4 + src/models/repositories/user.ts | 16 +- src/server/api/2fa.ts | 422 +++++++++++++++++++++ src/server/api/endpoints/i/2fa/getkeys.ts | 67 ++++ src/server/api/endpoints/i/2fa/key-done.ts | 151 ++++++++ src/server/api/endpoints/i/2fa/register-key.ts | 60 +++ src/server/api/endpoints/i/2fa/remove-key.ts | 46 +++ src/server/api/private/signin.ts | 137 +++++-- 17 files changed, 1317 insertions(+), 60 deletions(-) create mode 100644 src/client/app/common/scripts/2fa.ts create mode 100644 src/daemons/janitor.ts create mode 100644 src/models/entities/attestation-challenge.ts create mode 100644 src/models/entities/user-security-key.ts create mode 100644 src/server/api/2fa.ts create mode 100644 src/server/api/endpoints/i/2fa/getkeys.ts create mode 100644 src/server/api/endpoints/i/2fa/key-done.ts create mode 100644 src/server/api/endpoints/i/2fa/register-key.ts create mode 100644 src/server/api/endpoints/i/2fa/remove-key.ts (limited to 'src') diff --git a/src/boot/master.ts b/src/boot/master.ts index 6c23a528fa..b698548d47 100644 --- a/src/boot/master.ts +++ b/src/boot/master.ts @@ -79,6 +79,7 @@ export async function masterMain() { require('../daemons/server-stats').default(); require('../daemons/notes-stats').default(); require('../daemons/queue-stats').default(); + require('../daemons/janitor').default(); } bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true); diff --git a/src/client/app/common/scripts/2fa.ts b/src/client/app/common/scripts/2fa.ts new file mode 100644 index 0000000000..f638cce156 --- /dev/null +++ b/src/client/app/common/scripts/2fa.ts @@ -0,0 +1,5 @@ +export function hexifyAB(buffer) { + return Array.from(new Uint8Array(buffer)) + .map(item => item.toString(16).padStart(2, 0)) + .join(''); +} diff --git a/src/client/app/common/views/components/settings/2fa.vue b/src/client/app/common/views/components/settings/2fa.vue index 6e8d19d83a..eb645898e2 100644 --- a/src/client/app/common/views/components/settings/2fa.vue +++ b/src/client/app/common/views/components/settings/2fa.vue @@ -1,11 +1,54 @@