summary refs log tree commit diff
path: root/util/src/entities/BackupCodes.ts
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2022-08-06 02:41:00 +0200
committerGitHub <noreply@github.com>2022-08-06 02:41:00 +0200
commitf291143969d0c755acbf8bf25cd3bfff63c8762c (patch)
treeb9cf427d3c173cbe4029e5230eda6acc4fd61cf0 /util/src/entities/BackupCodes.ts
parentMerge pull request #804 from MaddyUnderStars/feat/notesTable (diff)
parentMerge branch 'master' into 2fa (diff)
downloadserver-f291143969d0c755acbf8bf25cd3bfff63c8762c.tar.xz
Merge pull request #800 from MaddyUnderStars/2fa
2 Factor Authentication (TOTP)
Diffstat (limited to 'util/src/entities/BackupCodes.ts')
-rw-r--r--util/src/entities/BackupCodes.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/util/src/entities/BackupCodes.ts b/util/src/entities/BackupCodes.ts
new file mode 100644

index 00000000..d532a39a --- /dev/null +++ b/util/src/entities/BackupCodes.ts
@@ -0,0 +1,35 @@ +import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm"; +import { BaseClass } from "./BaseClass"; +import { User } from "./User"; +import crypto from "crypto"; + +@Entity("backup_codes") +export class BackupCode extends BaseClass { + @JoinColumn({ name: "user_id" }) + @ManyToOne(() => User, { onDelete: "CASCADE" }) + user: User; + + @Column() + code: string; + + @Column() + consumed: boolean; + + @Column() + expired: boolean; +} + +export function generateMfaBackupCodes(user_id: string) { + let backup_codes: BackupCode[] = []; + for (let i = 0; i < 10; i++) { + const code = BackupCode.create({ + user: { id: user_id }, + code: crypto.randomBytes(4).toString("hex"), // 8 characters + consumed: false, + expired: false, + }); + backup_codes.push(code); + } + + return backup_codes; +} \ No newline at end of file