mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-02 08:40:08 +01:00
enforce policies when options already known (#83)
This commit is contained in:
parent
da9b9b438c
commit
44b86f5dd0
@ -5,6 +5,7 @@ export abstract class PasswordGenerationService {
|
|||||||
generatePassword: (options: any) => Promise<string>;
|
generatePassword: (options: any) => Promise<string>;
|
||||||
generatePassphrase: (options: any) => Promise<string>;
|
generatePassphrase: (options: any) => Promise<string>;
|
||||||
getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;
|
getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;
|
||||||
|
enforcePasswordGeneratorPoliciesOnOptions: (options: any) => Promise<[any, PasswordGeneratorPolicyOptions]>;
|
||||||
getPasswordGeneratorPolicyOptions: () => Promise<PasswordGeneratorPolicyOptions>;
|
getPasswordGeneratorPolicyOptions: () => Promise<PasswordGeneratorPolicyOptions>;
|
||||||
saveOptions: (options: any) => Promise<any>;
|
saveOptions: (options: any) => Promise<any>;
|
||||||
getHistory: () => Promise<GeneratedPasswordHistory[]>;
|
getHistory: () => Promise<GeneratedPasswordHistory[]>;
|
||||||
|
@ -222,47 +222,50 @@ export class PasswordGenerationService implements PasswordGenerationServiceAbstr
|
|||||||
this.optionsCache = Object.assign({}, DefaultOptions, options);
|
this.optionsCache = Object.assign({}, DefaultOptions, options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(this.optionsCache);
|
||||||
|
this.optionsCache = enforcedOptions[0];
|
||||||
|
return [this.optionsCache, enforcedOptions[1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
async enforcePasswordGeneratorPoliciesOnOptions(options: any): Promise<[any, PasswordGeneratorPolicyOptions]> {
|
||||||
let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();
|
let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();
|
||||||
|
|
||||||
if (enforcedPolicyOptions != null) {
|
if (enforcedPolicyOptions != null) {
|
||||||
if (this.optionsCache.length < enforcedPolicyOptions.minLength) {
|
if (options.length < enforcedPolicyOptions.minLength) {
|
||||||
this.optionsCache.length = enforcedPolicyOptions.minLength;
|
options.length = enforcedPolicyOptions.minLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enforcedPolicyOptions.useUppercase) {
|
if (enforcedPolicyOptions.useUppercase) {
|
||||||
this.optionsCache.uppercase = true;
|
options.uppercase = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enforcedPolicyOptions.useLowercase) {
|
if (enforcedPolicyOptions.useLowercase) {
|
||||||
this.optionsCache.lowercase = true;
|
options.lowercase = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enforcedPolicyOptions.useNumbers) {
|
if (enforcedPolicyOptions.useNumbers) {
|
||||||
this.optionsCache.number = true;
|
options.number = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.optionsCache.minNumber < enforcedPolicyOptions.numberCount) {
|
if (options.minNumber < enforcedPolicyOptions.numberCount) {
|
||||||
this.optionsCache.minNumber = enforcedPolicyOptions.numberCount;
|
options.minNumber = enforcedPolicyOptions.numberCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enforcedPolicyOptions.useSpecial) {
|
if (enforcedPolicyOptions.useSpecial) {
|
||||||
this.optionsCache.special = true;
|
options.special = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.optionsCache.minSpecial < enforcedPolicyOptions.specialCount) {
|
if (options.minSpecial < enforcedPolicyOptions.specialCount) {
|
||||||
this.optionsCache.minSpecial = enforcedPolicyOptions.specialCount;
|
options.minSpecial = enforcedPolicyOptions.specialCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must normalize these fields because the receiving call expects all options to pass the current rules
|
// Must normalize these fields because the receiving call expects all options to pass the current rules
|
||||||
if (this.optionsCache.minSpecial + this.optionsCache.minNumber > this.optionsCache.length) {
|
if (options.minSpecial + options.minNumber > options.length) {
|
||||||
this.optionsCache.minSpecial = this.optionsCache.length - this.optionsCache.minNumber;
|
options.minSpecial = options.length - options.minNumber;
|
||||||
}
|
}
|
||||||
} else { // UI layer expects an instantiated object to prevent more explicit null checks
|
} else { // UI layer expects an instantiated object to prevent more explicit null checks
|
||||||
enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();
|
enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();
|
||||||
}
|
}
|
||||||
|
return [options, enforcedPolicyOptions];
|
||||||
return [this.optionsCache, enforcedPolicyOptions];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getPasswordGeneratorPolicyOptions(): Promise<PasswordGeneratorPolicyOptions> {
|
async getPasswordGeneratorPolicyOptions(): Promise<PasswordGeneratorPolicyOptions> {
|
||||||
|
Loading…
Reference in New Issue
Block a user