Skip to content

Commit 0135226

Browse files
committed
Add PasswordPolicyCustomStrengthOptions internal typing
1 parent dc1eb5e commit 0135226

File tree

2 files changed

+64
-29
lines changed

2 files changed

+64
-29
lines changed

packages/auth/src/core/auth/password_policy_impl.ts

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import { GetPasswordPolicyResponse } from '../../api/password_policy/get_password_policy';
1919
import {
20+
PasswordPolicyCustomStrengthOptions,
2021
PasswordPolicyInternal,
2122
PasswordValidationStatusInternal
2223
} from '../../model/password_policy';
@@ -28,41 +29,38 @@ import { PasswordValidationStatus } from '../../model/public_types';
2829
* @internal
2930
*/
3031
export class PasswordPolicyImpl implements PasswordPolicyInternal {
31-
readonly customStrengthOptions: {
32-
readonly minPasswordLength?: number;
33-
readonly maxPasswordLength?: number;
34-
readonly containsLowercaseLetter?: boolean;
35-
readonly containsUppercaseLetter?: boolean;
36-
readonly containsNumericCharacter?: boolean;
37-
readonly containsNonAlphanumericCharacter?: boolean;
38-
};
32+
readonly customStrengthOptions: PasswordPolicyCustomStrengthOptions;
3933
readonly allowedNonAlphanumericCharacters?: string[];
4034
readonly schemaVersion: number;
4135

4236
constructor(response: GetPasswordPolicyResponse) {
4337
// Only include custom strength options defined in the response.
4438
const responseOptions = response.customStrengthOptions;
45-
this.customStrengthOptions = {
46-
...(responseOptions.minPasswordLength && {
47-
minPasswordLength: responseOptions.minPasswordLength
48-
}),
49-
...(responseOptions.maxPasswordLength && {
50-
maxPasswordLength: responseOptions.maxPasswordLength
51-
}),
52-
...(responseOptions.containsLowercaseCharacter && {
53-
containsLowercaseLetter: responseOptions.containsLowercaseCharacter
54-
}),
55-
...(responseOptions.containsUppercaseCharacter && {
56-
containsUppercaseLetter: responseOptions.containsUppercaseCharacter
57-
}),
58-
...(responseOptions.containsNumericCharacter && {
59-
containsNumericCharacter: responseOptions.containsNumericCharacter
60-
}),
61-
...(responseOptions.containsNonAlphanumericCharacter && {
62-
containsNonAlphanumericCharacter:
63-
responseOptions.containsNonAlphanumericCharacter
64-
})
65-
};
39+
this.customStrengthOptions = {};
40+
if (responseOptions.minPasswordLength) {
41+
this.customStrengthOptions.minPasswordLength =
42+
responseOptions.minPasswordLength;
43+
}
44+
if (responseOptions.maxPasswordLength) {
45+
this.customStrengthOptions.maxPasswordLength =
46+
responseOptions.maxPasswordLength;
47+
}
48+
if (responseOptions.containsLowercaseCharacter) {
49+
this.customStrengthOptions.containsLowercaseLetter =
50+
responseOptions.containsLowercaseCharacter;
51+
}
52+
if (responseOptions.containsUppercaseCharacter) {
53+
this.customStrengthOptions.containsUppercaseLetter =
54+
responseOptions.containsUppercaseCharacter;
55+
}
56+
if (responseOptions.containsNumericCharacter) {
57+
this.customStrengthOptions.containsNumericCharacter =
58+
responseOptions.containsNumericCharacter;
59+
}
60+
if (responseOptions.containsNonAlphanumericCharacter) {
61+
this.customStrengthOptions.containsNonAlphanumericCharacter =
62+
responseOptions.containsNonAlphanumericCharacter;
63+
}
6664

6765
if (response.allowedNonAlphanumericCharacters) {
6866
this.allowedNonAlphanumericCharacters =

packages/auth/src/model/password_policy.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ import { PasswordPolicy, PasswordValidationStatus } from './public_types';
2525
* @internal
2626
*/
2727
export interface PasswordPolicyInternal extends PasswordPolicy {
28+
/**
29+
* Requirements enforced by the password policy.
30+
*/
31+
readonly customStrengthOptions: PasswordPolicyCustomStrengthOptions;
2832
/**
2933
* Schema version of the password policy.
3034
*/
@@ -36,6 +40,39 @@ export interface PasswordPolicyInternal extends PasswordPolicy {
3640
validatePassword(password: string): PasswordValidationStatus;
3741
}
3842

43+
/**
44+
* Internal typing of the password policy custom strength options that is modifiable. This
45+
* allows us to construct the strength options before storing them in the policy.
46+
*
47+
* @internal
48+
*/
49+
export interface PasswordPolicyCustomStrengthOptions {
50+
/**
51+
* Minimum password length.
52+
*/
53+
minPasswordLength?: number;
54+
/**
55+
* Maximum password length.
56+
*/
57+
maxPasswordLength?: number;
58+
/**
59+
* Whether the password should contain a lowercase letter.
60+
*/
61+
containsLowercaseLetter?: boolean;
62+
/**
63+
* Whether the password should contain an uppercase letter.
64+
*/
65+
containsUppercaseLetter?: boolean;
66+
/**
67+
* Whether the password should contain a numeric character.
68+
*/
69+
containsNumericCharacter?: boolean;
70+
/**
71+
* Whether the password should contain a non-alphanumeric character.
72+
*/
73+
containsNonAlphanumericCharacter?: boolean;
74+
}
75+
3976
/**
4077
* Internal typing of password validation status that is modifiable. This allows us to
4178
* construct the validation status before returning it.

0 commit comments

Comments
 (0)