Files
2024-02-15 17:01:50 +00:00

147 lines
4.5 KiB
TypeScript

import type {
RecoveryAuthenticator,
SmsAuthenticator,
TotpAuthenticator,
U2fAuthenticator,
UserEnrolledAuthenticator,
} from 'sentry/types';
export function AuthenticatorsFixture(): {
Recovery: (props?: Partial<RecoveryAuthenticator>) => RecoveryAuthenticator;
Sms: (props?: Partial<SmsAuthenticator>) => SmsAuthenticator;
Totp: (props?: Partial<TotpAuthenticator>) => TotpAuthenticator;
U2f: (props?: Partial<U2fAuthenticator>) => U2fAuthenticator;
} {
return {
Totp: (p = {}) => ({
lastUsedAt: null,
enrollButton: 'Enroll',
description:
'An authenticator application that supports TOTP (like Google Authenticator or 1Password) can be used to conveniently secure your account. A new token is generated every 30 seconds.',
isEnrolled: true,
removeButton: 'Remove',
id: 'totp',
createdAt: '2018-01-30T17:24:36.554Z',
configureButton: 'Info',
name: 'Authenticator App',
allowMultiEnrollment: false,
disallowNewEnrollment: false,
authId: '15',
canValidateOtp: true,
isBackupInterface: false,
allowRotationInPlace: false,
authenticatorDevice: [],
devices: [],
rotationWarning: null,
status: 'active',
codes: ['123-456'],
qrcode: 'qr-code',
...p,
}),
Sms: (p = {}) => ({
createdAt: '2018-01-30T17:24:36.554Z',
lastUsedAt: null,
enrollButton: 'Enroll',
name: 'Text Message',
allowMultiEnrollment: false,
removeButton: 'Remove',
canValidateOtp: true,
isEnrolled: false,
configureButton: 'Info',
id: 'sms',
isBackupInterface: false,
disallowNewEnrollment: false,
allowRotationInPlace: false,
authenticatorDevice: [],
devices: [],
rotationWarning: null,
status: 'active',
codes: ['123-456'],
qrcode: 'qr-code',
description:
"This authenticator sends you text messages for verification. It's useful as a backup method or when you do not have a phone that supports an authenticator application.",
...p,
}),
U2f: (p = {}) => ({
lastUsedAt: null,
enrollButton: 'Enroll',
description:
"Authenticate with a U2F hardware device. This is a device like a Yubikey or something similar which supports FIDO's U2F specification. This also requires a browser which supports this system (like Google Chrome).",
isEnrolled: true,
removeButton: 'Remove',
id: 'u2f',
createdAt: '2018-01-30T20:56:45.932Z',
configureButton: 'Configure',
name: 'U2F (Universal 2nd Factor)',
allowMultiEnrollment: true,
disallowNewEnrollment: false,
authId: '23',
canValidateOtp: false,
isBackupInterface: false,
allowRotationInPlace: false,
devices: [],
rotationWarning: null,
status: 'active',
codes: [],
challenge: {
webAuthnAuthenticationData: 'webAuthnAuthenticationData',
authenticateRequests: {
version: 'U2F_V2',
appId: 'https://sentry.io',
keyHandle: 'keyHandle',
challenge: 'challenge',
},
registerRequests: {
version: 'U2F_V2',
appId: 'https://sentry.io',
challenge: 'challenge',
},
registeredKeys: [],
// for WebAuthn register
webAuthnRegisterData: 'webAuthnRegisterData',
},
...p,
}),
Recovery: (p = {}) => ({
id: 'recovery',
lastUsedAt: null,
enrollButton: 'Activate',
allowRotationInPlace: false,
devices: [],
disallowNewEnrollment: false,
rotationWarning: null,
status: 'active',
description:
'Recovery codes are the only way to access your account if you lose your device and cannot receive two-factor authentication codes.',
isEnrolled: true,
removeButton: null,
createdAt: '2018-01-30T17:24:36.570Z',
configureButton: 'View Codes',
name: 'Recovery Codes',
allowMultiEnrollment: false,
authId: '16',
canValidateOtp: true,
isBackupInterface: true,
codes: ['ABCD-1234', 'EFGH-5678'],
...p,
}),
};
}
export function AllAuthenticatorsFixture() {
return Object.values(AuthenticatorsFixture()).map(x => x());
}
export function UserEnrolledAuthenticatorFixture(
params: Partial<UserEnrolledAuthenticator>
): UserEnrolledAuthenticator {
return {
id: '1',
type: 'totp',
name: 'auth',
dateCreated: '2020-01-01T00:00:00.000Z',
dateUsed: '2020-01-01T00:00:00.000Z',
...params,
};
}