summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2020-05-26 22:30:25 -0700
committerMatthew Miller <matthew@millerti.me>2020-05-26 22:30:25 -0700
commit8b5f547e66230cafd01649d37a9870edb57a1e09 (patch)
tree7fbe1a9b5cb342b57ee03d5a9f2a42a0f711709f /packages/server/src
parentdbfae004d1944c7879340b9634faceee9dabc35b (diff)
Update generateAssertionOptions
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/assertion/generateAssertionOptions.test.ts51
-rw-r--r--packages/server/src/assertion/generateAssertionOptions.ts35
2 files changed, 48 insertions, 38 deletions
diff --git a/packages/server/src/assertion/generateAssertionOptions.test.ts b/packages/server/src/assertion/generateAssertionOptions.test.ts
index 257657b..aa345af 100644
--- a/packages/server/src/assertion/generateAssertionOptions.test.ts
+++ b/packages/server/src/assertion/generateAssertionOptions.test.ts
@@ -3,40 +3,41 @@ import generateAssertionOptions from './generateAssertionOptions';
test('should generate credential request options suitable for sending via JSON', () => {
const challenge = 'totallyrandomvalue';
- const options = generateAssertionOptions(
+ const options = generateAssertionOptions({
challenge,
- 1,
- [
+ timeout: 1,
+ allowedBase64CredentialIDs: [
Buffer.from('1234', 'ascii').toString('base64'),
Buffer.from('5678', 'ascii').toString('base64'),
],
- );
+ });
expect(options).toEqual({
- publicKey: {
- challenge,
- allowCredentials: [
- {
- id: 'MTIzNA==',
- type: 'public-key',
- transports: ['usb', 'ble', 'nfc', 'internal'],
- },
- {
- id: 'NTY3OA==',
- type: 'public-key',
- transports: ['usb', 'ble', 'nfc', 'internal'],
- },
- ],
- timeout: 1,
- },
+ challenge,
+ allowCredentials: [
+ {
+ id: 'MTIzNA==',
+ type: 'public-key',
+ transports: ['usb', 'ble', 'nfc', 'internal'],
+ },
+ {
+ id: 'NTY3OA==',
+ type: 'public-key',
+ transports: ['usb', 'ble', 'nfc', 'internal'],
+ },
+ ],
+ timeout: 1,
});
});
test('defaults to 60 seconds if no timeout is specified', () => {
- const options = generateAssertionOptions('totallyrandomvalue', undefined, [
- Buffer.from('1234', 'ascii').toString('base64'),
- Buffer.from('5678', 'ascii').toString('base64'),
- ]);
+ const options = generateAssertionOptions({
+ challenge: 'totallyrandomvalue',
+ allowedBase64CredentialIDs: [
+ Buffer.from('1234', 'ascii').toString('base64'),
+ Buffer.from('5678', 'ascii').toString('base64'),
+ ],
+ });
- expect(options.publicKey.timeout).toEqual(60000);
+ expect(options.timeout).toEqual(60000);
});
diff --git a/packages/server/src/assertion/generateAssertionOptions.ts b/packages/server/src/assertion/generateAssertionOptions.ts
index b30344d..035c2da 100644
--- a/packages/server/src/assertion/generateAssertionOptions.ts
+++ b/packages/server/src/assertion/generateAssertionOptions.ts
@@ -2,6 +2,13 @@ import type {
PublicKeyCredentialRequestOptionsJSON,
} from '@simplewebauthn/typescript-types';
+type Options = {
+ challenge: string,
+ allowedBase64CredentialIDs: string[],
+ suggestedTransports?: AuthenticatorTransport[],
+ timeout?: number,
+};
+
/**
* Prepare a value to pass into navigator.credentials.get(...) for authenticator "login"
*
@@ -12,20 +19,22 @@ import type {
* @param suggestedTransports Suggested types of authenticators for assertion
*/
export default function generateAssertionOptions(
- challenge: string,
- timeout = 60000,
- allowedBase64CredentialIDs: string[],
- suggestedTransports: AuthenticatorTransport[] = ['usb', 'ble', 'nfc', 'internal'],
+ opts: Options,
): PublicKeyCredentialRequestOptionsJSON {
+ const {
+ challenge,
+ allowedBase64CredentialIDs,
+ suggestedTransports = ['usb', 'ble', 'nfc', 'internal'],
+ timeout = 60000,
+ } = opts;
+
return {
- publicKey: {
- challenge,
- allowCredentials: allowedBase64CredentialIDs.map(id => ({
- id,
- type: 'public-key',
- transports: suggestedTransports,
- })),
- timeout,
- },
+ challenge,
+ allowCredentials: allowedBase64CredentialIDs.map(id => ({
+ id,
+ type: 'public-key',
+ transports: suggestedTransports,
+ })),
+ timeout,
};
}