mirror of
https://github.com/bitwarden/desktop.git
synced 2024-11-24 11:55:50 +01:00
Merge pull request #458 from Hinton/feature/hide-passwords
Add support for hidden password
This commit is contained in:
commit
5ea459a347
2
jslib
2
jslib
@ -1 +1 @@
|
|||||||
Subproject commit 212a2e3745e6e0e2b3057ed308c47daf6aeefbc8
|
Subproject commit 2b6657a293e7be107271ad080c64ccd3f005afb7
|
@ -28,9 +28,9 @@
|
|||||||
<label for="loginPassword">{{'password' | i18n}}</label>
|
<label for="loginPassword">{{'password' | i18n}}</label>
|
||||||
<input id="loginPassword" class="monospaced"
|
<input id="loginPassword" class="monospaced"
|
||||||
type="{{showPassword ? 'text' : 'password'}}" name="Login.Password"
|
type="{{showPassword ? 'text' : 'password'}}" name="Login.Password"
|
||||||
[(ngModel)]="cipher.login.password">
|
[(ngModel)]="cipher.login.password" [disabled]="!cipher.viewPassword">
|
||||||
</div>
|
</div>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons" *ngIf=cipher.viewPassword>
|
||||||
<button type="button" #checkPasswordBtn class="row-btn btn" appBlurClick
|
<button type="button" #checkPasswordBtn class="row-btn btn" appBlurClick
|
||||||
appA11yTitle="{{'checkPassword' | i18n}}" (click)="checkPassword()"
|
appA11yTitle="{{'checkPassword' | i18n}}" (click)="checkPassword()"
|
||||||
[appApiAction]="checkPasswordPromise" [disabled]="checkPasswordBtn.loading">
|
[appApiAction]="checkPasswordPromise" [disabled]="checkPasswordBtn.loading">
|
||||||
@ -52,8 +52,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="box-content-row" appBoxRow>
|
<div class="box-content-row" appBoxRow>
|
||||||
<label for="loginTotp">{{'authenticatorKeyTotp' | i18n}}</label>
|
<label for="loginTotp">{{'authenticatorKeyTotp' | i18n}}</label>
|
||||||
<input id="loginTotp" type="text" name="Login.Totp" class="monospaced"
|
<input id="loginTotp" type="{{cipher.viewPassword ? 'text' : 'password'}}" name="Login.Totp"
|
||||||
[(ngModel)]="cipher.login.totp">
|
class="monospaced" [(ngModel)]="cipher.login.totp" [disabled]="!cipher.viewPassword">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Card -->
|
<!-- Card -->
|
||||||
@ -281,12 +281,14 @@
|
|||||||
*ngIf="f.type === fieldType.Text" placeholder="{{'value' | i18n}}">
|
*ngIf="f.type === fieldType.Text" placeholder="{{'value' | i18n}}">
|
||||||
<input id="fieldValue{{i}}" type="{{f.showValue ? 'text' : 'password'}}"
|
<input id="fieldValue{{i}}" type="{{f.showValue ? 'text' : 'password'}}"
|
||||||
name="Field.Value{{i}}" [(ngModel)]="f.value" class="monospaced"
|
name="Field.Value{{i}}" [(ngModel)]="f.value" class="monospaced"
|
||||||
*ngIf="f.type === fieldType.Hidden" placeholder="{{'value' | i18n}}">
|
*ngIf="f.type === fieldType.Hidden" placeholder="{{'value' | i18n}}"
|
||||||
|
[disabled]="!cipher.viewPassword && !f.newField">
|
||||||
</div>
|
</div>
|
||||||
<input id="fieldValue{{i}}" name="Field.Value{{i}}" type="checkbox" [(ngModel)]="f.value"
|
<input id="fieldValue{{i}}" name="Field.Value{{i}}" type="checkbox" [(ngModel)]="f.value"
|
||||||
*ngIf="f.type === fieldType.Boolean" appTrueFalseValue trueValue="true"
|
*ngIf="f.type === fieldType.Boolean" appTrueFalseValue trueValue="true"
|
||||||
falseValue="false">
|
falseValue="false">
|
||||||
<div class="action-buttons" *ngIf="f.type === fieldType.Hidden">
|
<div class="action-buttons"
|
||||||
|
*ngIf="f.type === fieldType.Hidden && (cipher.viewPassword || f.newField)">
|
||||||
<a class="row-btn" href="#" appStopClick appBlurClick role="button"
|
<a class="row-btn" href="#" appStopClick appBlurClick role="button"
|
||||||
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)">
|
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)">
|
||||||
<i class="fa fa-lg" aria-hidden="true"
|
<i class="fa fa-lg" aria-hidden="true"
|
||||||
|
@ -166,7 +166,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
const pComponent = this.addEditComponent == null ? this.viewComponent : this.addEditComponent;
|
const pComponent = this.addEditComponent == null ? this.viewComponent : this.addEditComponent;
|
||||||
const pCipher = pComponent != null ? pComponent.cipher : null;
|
const pCipher = pComponent != null ? pComponent.cipher : null;
|
||||||
if (this.cipherId != null && pCipher != null && pCipher.id === this.cipherId &&
|
if (this.cipherId != null && pCipher != null && pCipher.id === this.cipherId &&
|
||||||
pCipher.login != null && pCipher.login.password != null) {
|
pCipher.login != null && pCipher.login.password != null && pCipher.viewPassword) {
|
||||||
this.copyValue(pCipher.login.password, 'password');
|
this.copyValue(pCipher.login.password, 'password');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -299,7 +299,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
click: () => this.copyValue(cipher.login.username, 'username'),
|
click: () => this.copyValue(cipher.login.username, 'username'),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (cipher.login.password != null) {
|
if (cipher.login.password != null && cipher.viewPassword) {
|
||||||
menu.append(new remote.MenuItem({
|
menu.append(new remote.MenuItem({
|
||||||
label: this.i18nService.t('copyPassword'),
|
label: this.i18nService.t('copyPassword'),
|
||||||
click: () => {
|
click: () => {
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
<div [hidden]="!showPassword" class="monospaced password-wrapper" appSelectCopy
|
<div [hidden]="!showPassword" class="monospaced password-wrapper" appSelectCopy
|
||||||
[innerHTML]="cipher.login.password | colorPassword"></div>
|
[innerHTML]="cipher.login.password | colorPassword"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons" *ngIf=cipher.viewPassword>
|
||||||
<button type="button" #checkPasswordBtn class="row-btn btn" appBlurClick
|
<button type="button" #checkPasswordBtn class="row-btn btn" appBlurClick
|
||||||
appA11yTitle="{{'checkPassword' | i18n}}" (click)="checkPassword()"
|
appA11yTitle="{{'checkPassword' | i18n}}" (click)="checkPassword()"
|
||||||
[appApiAction]="checkPasswordPromise" [disabled]="checkPasswordBtn.loading">
|
[appApiAction]="checkPasswordPromise" [disabled]="checkPasswordBtn.loading">
|
||||||
@ -221,12 +221,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons">
|
||||||
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'toggleVisibility' | i18n}}"
|
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'toggleVisibility' | i18n}}"
|
||||||
*ngIf="field.type === fieldType.Hidden" (click)="toggleFieldValue(field)" role="button">
|
*ngIf="field.type === fieldType.Hidden && cipher.viewPassword"
|
||||||
|
(click)="toggleFieldValue(field)" role="button">
|
||||||
<i class="fa fa-lg" aria-hidden="true"
|
<i class="fa fa-lg" aria-hidden="true"
|
||||||
[ngClass]="{'fa-eye': !field.showValue, 'fa-eye-slash': field.showValue}"></i>
|
[ngClass]="{'fa-eye': !field.showValue, 'fa-eye-slash': field.showValue}"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'copyValue' | i18n}}"
|
<a class="row-btn" href="#" appStopClick appA11yTitle="{{'copyValue' | i18n}}"
|
||||||
*ngIf="field.value && field.type !== fieldType.Boolean"
|
*ngIf="field.value && field.type !== fieldType.Boolean && !(field.type === fieldType.Hidden && !cipher.viewPassword)"
|
||||||
(click)="copy(field.value, 'value', field.type === fieldType.Hidden ? 'H_Field' : 'Field')"
|
(click)="copy(field.value, 'value', field.type === fieldType.Hidden ? 'H_Field' : 'Field')"
|
||||||
role="button">
|
role="button">
|
||||||
<i class="fa fa-lg fa-clipboard" aria-hidden="true"></i>
|
<i class="fa fa-lg fa-clipboard" aria-hidden="true"></i>
|
||||||
|
Loading…
Reference in New Issue
Block a user