summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/i/2fa/remove-key.ts
diff options
context:
space:
mode:
authorMary <Ipadlover8322@gmail.com>2019-07-03 07:18:07 -0400
committersyuilo <Syuilotan@yahoo.co.jp>2019-07-03 20:18:07 +0900
commitfd94b817abd8fa628586746eed3a1f61b4a2b3d8 (patch)
tree53eccf1b923f9b29f73ec6651b361b1682af3247 /src/server/api/endpoints/i/2fa/remove-key.ts
parentResolve #5072 (diff)
downloadsharkey-fd94b817abd8fa628586746eed3a1f61b4a2b3d8.tar.gz
sharkey-fd94b817abd8fa628586746eed3a1f61b4a2b3d8.tar.bz2
sharkey-fd94b817abd8fa628586746eed3a1f61b4a2b3d8.zip
Implement Webauthn ๐ŸŽ‰ (#5088)
* Implement Webauthn :tada: * Share hexifyAB * Move hr inside template and add AttestationChallenges janitor daemon * Apply suggestions from code review Co-Authored-By: Acid Chicken (็กซ้…ธ้ถ) <root@acid-chicken.com> * Add newline at the end of file * Fix stray newline in promise chain * Ignore var in try{}catch(){} block Co-Authored-By: Acid Chicken (็กซ้…ธ้ถ) <root@acid-chicken.com> * 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
Diffstat (limited to 'src/server/api/endpoints/i/2fa/remove-key.ts')
-rw-r--r--src/server/api/endpoints/i/2fa/remove-key.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/server/api/endpoints/i/2fa/remove-key.ts b/src/server/api/endpoints/i/2fa/remove-key.ts
new file mode 100644
index 0000000000..cb28c8fbfb
--- /dev/null
+++ b/src/server/api/endpoints/i/2fa/remove-key.ts
@@ -0,0 +1,46 @@
+import $ from 'cafy';
+import * as bcrypt from 'bcryptjs';
+import define from '../../../define';
+import { UserProfiles, UserSecurityKeys, Users } from '../../../../../models';
+import { ensure } from '../../../../../prelude/ensure';
+import { publishMainStream } from '../../../../../services/stream';
+
+export const meta = {
+ requireCredential: true,
+
+ secure: true,
+
+ params: {
+ password: {
+ validator: $.str
+ },
+ credentialId: {
+ validator: $.str
+ },
+ }
+};
+
+export default define(meta, async (ps, user) => {
+ const profile = await UserProfiles.findOne(user.id).then(ensure);
+
+ // Compare password
+ const same = await bcrypt.compare(ps.password, profile.password!);
+
+ if (!same) {
+ throw new Error('incorrect password');
+ }
+
+ // Make sure we only delete the user's own creds
+ await UserSecurityKeys.delete({
+ userId: user.id,
+ id: ps.credentialId
+ });
+
+ // Publish meUpdated event
+ publishMainStream(user.id, 'meUpdated', await Users.pack(user.id, user, {
+ detail: true,
+ includeSecrets: true
+ }));
+
+ return {};
+});