1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-17 16:53:34 +00:00

password generator

This commit is contained in:
Kyle Spearrin
2018-01-29 16:13:37 -05:00
parent 5914240838
commit ce84e8e428
11 changed files with 276 additions and 54 deletions

View File

@@ -1,5 +1,8 @@
import * as template from './password-generator.component.html';
import { Angulartics2 } from 'angulartics2';
import { ToasterService } from 'angular2-toaster';
import {
Component,
EventEmitter,
@@ -8,24 +11,76 @@ import {
Output,
} from '@angular/core';
import { CipherType } from 'jslib/enums/cipherType';
import { CollectionService } from 'jslib/abstractions/collection.service';
import { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';
import { UtilsService } from 'jslib/abstractions/utils.service';
@Component({
selector: 'password-generator',
template: template,
})
export class PasswordGeneratorComponent implements OnInit {
@Input() in: string;
@Output() out = new EventEmitter<string>();
@Input() showSelect: boolean = false;
constructor() {
// ctor
}
options: any = {};
password: string = '-';
constructor(private passwordGenerationService: PasswordGenerationService, private analytics: Angulartics2,
private utilsService: UtilsService) { }
async ngOnInit() {
console.log(this.in);
setTimeout(() => { this.out.emit('world'); }, 2000);
this.options = await this.passwordGenerationService.getOptions();
this.password = this.passwordGenerationService.generatePassword(this.options);
this.analytics.eventTrack.next({ action: 'Generated Password' });
await this.passwordGenerationService.addHistory(this.password);
const slider = document.querySelector('#length');
if (slider) {
// Save password once the slider stop moving.
slider.addEventListener('change', async (e) => {
e.preventDefault();
this.saveOptions(false);
await this.passwordGenerationService.addHistory(this.password);
this.analytics.eventTrack.next({ action: 'Regenerated Password' });
});
// Regenerate while slider moving
slider.addEventListener('input', (e) => {
e.preventDefault();
this.password = this.passwordGenerationService.generatePassword(this.options);
});
}
}
async saveOptions(regenerate: boolean = true) {
if (!this.options.uppercase && !this.options.lowercase && !this.options.number && !this.options.special) {
this.options.lowercase = true;
const lowercase = document.querySelector('#lowercase') as HTMLInputElement;
if (lowercase) {
lowercase.checked = true;
}
}
if (!this.options.minNumber) {
this.options.minNumber = 0;
}
if (!this.options.minSpecial) {
this.options.minSpecial = 0;
}
await this.passwordGenerationService.saveOptions(this.options);
if (regenerate) {
this.password = this.passwordGenerationService.generatePassword(this.options);
await this.passwordGenerationService.addHistory(this.password);
this.analytics.eventTrack.next({ action: 'Regenerated Password' });
}
}
regenerate() {
this.password = this.passwordGenerationService.generatePassword(this.options);
this.analytics.eventTrack.next({ action: 'Regenerated Password' });
}
copy() {
this.analytics.eventTrack.next({ action: 'Copied Generated Password' });
this.utilsService.copyToClipboard(this.password, window.document);
}
}