diff options
author | Matthew Miller <matthew@millerti.me> | 2024-04-11 18:20:57 -0700 |
---|---|---|
committer | Matthew Miller <matthew@millerti.me> | 2024-04-11 18:20:57 -0700 |
commit | b1b6d33c8c07f445b63f9c29cc98c47db65767d7 (patch) | |
tree | 79e884a124ad5ebab71e4d063901de58113e27f4 /packages/server/src/helpers/generateUserID.ts | |
parent | fe90e2765b2bfab2405ef2875c9c98d39d66416e (diff) |
Add method to generate user IDs
Diffstat (limited to 'packages/server/src/helpers/generateUserID.ts')
-rw-r--r-- | packages/server/src/helpers/generateUserID.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/packages/server/src/helpers/generateUserID.ts b/packages/server/src/helpers/generateUserID.ts new file mode 100644 index 0000000..eaf9bb0 --- /dev/null +++ b/packages/server/src/helpers/generateUserID.ts @@ -0,0 +1,21 @@ +import { isoCrypto } from './iso/index.ts'; + +/** + * Generate a suitably random value to be used as user ID + */ +export async function generateUserID(): Promise<Uint8Array> { + /** + * WebAuthn spec says user.id has a max length of 64 bytes. I prefer how 32 random bytes look + * after they're base64url-encoded so I'm choosing to go with that here. + */ + const newUserID = new Uint8Array(32); + + await isoCrypto.getRandomValues(newUserID); + + return _generateUserIDInternals.stubThis(newUserID); +} + +// Make it possible to stub the return value during testing +export const _generateUserIDInternals = { + stubThis: (value: Uint8Array) => value, +}; |