2 changed files with 91 additions and 1 deletions
@ -0,0 +1,90 @@ |
|||||||
|
import { |
||||||
|
ActivatedRoute, |
||||||
|
Router, |
||||||
|
} from '@angular/router'; |
||||||
|
|
||||||
|
import { ApiService } from '../../abstractions/api.service'; |
||||||
|
import { CipherService } from '../../abstractions/cipher.service'; |
||||||
|
import { CryptoService } from '../../abstractions/crypto.service'; |
||||||
|
import { FolderService } from '../../abstractions/folder.service'; |
||||||
|
import { I18nService } from '../../abstractions/i18n.service'; |
||||||
|
import { MessagingService } from '../../abstractions/messaging.service'; |
||||||
|
import { PasswordGenerationService } from '../../abstractions/passwordGeneration.service'; |
||||||
|
import { PlatformUtilsService } from '../../abstractions/platformUtils.service'; |
||||||
|
import { PolicyService } from '../../abstractions/policy.service'; |
||||||
|
import { SyncService } from '../../abstractions/sync.service'; |
||||||
|
import { UserService } from '../../abstractions/user.service'; |
||||||
|
|
||||||
|
import { CipherString } from '../../models/domain/cipherString'; |
||||||
|
import { SymmetricCryptoKey } from '../../models/domain/symmetricCryptoKey'; |
||||||
|
|
||||||
|
import { KeysRequest } from '../../models/request/keysRequest'; |
||||||
|
import { SetPasswordRequest } from '../../models/request/setPasswordRequest'; |
||||||
|
|
||||||
|
import { ChangePasswordComponent as BaseChangePasswordComponent } from './change-password.component'; |
||||||
|
|
||||||
|
import { KdfType } from '../../enums/kdfType'; |
||||||
|
|
||||||
|
export class SetPasswordComponent extends BaseChangePasswordComponent { |
||||||
|
showPassword: boolean = false; |
||||||
|
hint: string = ''; |
||||||
|
|
||||||
|
onSuccessfulChangePassword: () => Promise<any>; |
||||||
|
successRoute = 'vault'; |
||||||
|
|
||||||
|
constructor(apiService: ApiService, i18nService: I18nService, |
||||||
|
cryptoService: CryptoService, messagingService: MessagingService, |
||||||
|
userService: UserService, passwordGenerationService: PasswordGenerationService, |
||||||
|
platformUtilsService: PlatformUtilsService, folderService: FolderService, |
||||||
|
cipherService: CipherService, syncService: SyncService, |
||||||
|
policyService: PolicyService, router: Router, private route: ActivatedRoute) { |
||||||
|
super(apiService, i18nService, cryptoService, messagingService, userService, passwordGenerationService, |
||||||
|
platformUtilsService, folderService, cipherService, syncService, policyService, router); |
||||||
|
} |
||||||
|
|
||||||
|
async setupSubmitActions() { |
||||||
|
this.kdf = KdfType.PBKDF2_SHA256; |
||||||
|
const useLowerKdf = this.platformUtilsService.isEdge() || this.platformUtilsService.isIE(); |
||||||
|
this.kdfIterations = useLowerKdf ? 10000 : 100000; |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey, |
||||||
|
encKey: [SymmetricCryptoKey, CipherString]) { |
||||||
|
const request = new SetPasswordRequest(); |
||||||
|
request.masterPasswordHash = masterPasswordHash; |
||||||
|
request.key = encKey[1].encryptedString; |
||||||
|
request.masterPasswordHint = this.hint; |
||||||
|
request.kdf = this.kdf; |
||||||
|
request.kdfIterations = this.kdfIterations; |
||||||
|
|
||||||
|
const keys = await this.cryptoService.makeKeyPair(encKey[0]); |
||||||
|
request.keys = new KeysRequest(keys[0], keys[1].encryptedString); |
||||||
|
|
||||||
|
try { |
||||||
|
this.formPromise = this.apiService.setPassword(request); |
||||||
|
await this.formPromise; |
||||||
|
|
||||||
|
await this.userService.setInformation(await this.userService.getUserId(), await this.userService.getEmail(), |
||||||
|
this.kdf, this.kdfIterations); |
||||||
|
await this.cryptoService.setKey(key); |
||||||
|
await this.cryptoService.setKeyHash(masterPasswordHash); |
||||||
|
await this.cryptoService.setEncKey(encKey[1].encryptedString); |
||||||
|
await this.cryptoService.setEncPrivateKey(keys[1].encryptedString); |
||||||
|
|
||||||
|
if (this.onSuccessfulChangePassword != null) { |
||||||
|
this.onSuccessfulChangePassword(); |
||||||
|
} else { |
||||||
|
this.router.navigate([this.successRoute]); |
||||||
|
} |
||||||
|
} catch { |
||||||
|
this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred')); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
togglePassword(confirmField: boolean) { |
||||||
|
this.platformUtilsService.eventTrack('Toggled Master Password on Set Password'); |
||||||
|
this.showPassword = !this.showPassword; |
||||||
|
document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus(); |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue