mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 16:23:44 +00:00
[Policy] Personal Ownership banner (#764)
* Updated banner position and message * updated capitalization
This commit is contained in:
@@ -9,6 +9,9 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" *ngIf="cipher">
|
<div class="modal-body" *ngIf="cipher">
|
||||||
|
<app-callout type="info" *ngIf="allowOwnershipAssignment() && !allowPersonal">
|
||||||
|
{{'personalOwnershipPolicyInEffect' | i18n}}
|
||||||
|
</app-callout>
|
||||||
<div class="row" *ngIf="!editMode && !viewOnly">
|
<div class="row" *ngIf="!editMode && !viewOnly">
|
||||||
<div class="col-6 form-group">
|
<div class="col-6 form-group">
|
||||||
<label for="type">{{'whatTypeOfItem' | i18n}}</label>
|
<label for="type">{{'whatTypeOfItem' | i18n}}</label>
|
||||||
@@ -21,8 +24,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 form-group">
|
<div class="col-6 form-group">
|
||||||
<label for="name">{{'name' | i18n}}</label>
|
<label for="name">{{'name' | i18n}}</label>
|
||||||
<input id="name" class="form-control" type="text" name="Name" [(ngModel)]="cipher.name"
|
<input id="name" class="form-control" type="text" name="Name" [(ngModel)]="cipher.name" required
|
||||||
required [disabled]="cipher.isDeleted || viewOnly">
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 form-group" *ngIf="!organization">
|
<div class="col-6 form-group" *ngIf="!organization">
|
||||||
<label for="folder">{{'folder' | i18n}}</label>
|
<label for="folder">{{'folder' | i18n}}</label>
|
||||||
@@ -39,7 +42,8 @@
|
|||||||
<label for="loginUsername">{{'username' | i18n}}</label>
|
<label for="loginUsername">{{'username' | i18n}}</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input id="loginUsername" class="form-control" type="text" name="Login.Username"
|
<input id="loginUsername" class="form-control" type="text" name="Login.Username"
|
||||||
[(ngModel)]="cipher.login.username" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.login.username" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
<div class="input-group-append" *ngIf="!cipher.isDeleted">
|
<div class="input-group-append" *ngIf="!cipher.isDeleted">
|
||||||
<button type="button" class="btn btn-outline-secondary"
|
<button type="button" class="btn btn-outline-secondary"
|
||||||
appA11yTitle="{{'copyUsername' | i18n}}"
|
appA11yTitle="{{'copyUsername' | i18n}}"
|
||||||
@@ -93,8 +97,9 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 form-group">
|
<div class="col-6 form-group">
|
||||||
<label for="loginTotp">{{'authenticatorKeyTotp' | i18n}}</label>
|
<label for="loginTotp">{{'authenticatorKeyTotp' | i18n}}</label>
|
||||||
<input id="loginTotp" type="{{cipher.viewPassword ? 'text' : 'password'}}" name="Login.Totp" class="form-control text-monospace"
|
<input id="loginTotp" type="{{cipher.viewPassword ? 'text' : 'password'}}" name="Login.Totp"
|
||||||
[(ngModel)]="cipher.login.totp" appInputVerbatim [disabled]="cipher.isDeleted || !cipher.viewPassword || viewOnly">
|
class="form-control text-monospace" [(ngModel)]="cipher.login.totp" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || !cipher.viewPassword || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 form-group totp d-flex align-items-end" [ngClass]="{'low': totpLow}">
|
<div class="col-6 form-group totp d-flex align-items-end" [ngClass]="{'low': totpLow}">
|
||||||
<div *ngIf="!cipher.login.totp || !totpCode">
|
<div *ngIf="!cipher.login.totp || !totpCode">
|
||||||
@@ -137,7 +142,8 @@
|
|||||||
<label for="loginUri{{i}}">{{'uriPosition' | i18n : (i + 1)}}</label>
|
<label for="loginUri{{i}}">{{'uriPosition' | i18n : (i + 1)}}</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input class="form-control" id="loginUri{{i}}" type="text"
|
<input class="form-control" id="loginUri{{i}}" type="text"
|
||||||
name="Login.Uris[{{i}}].Uri" [(ngModel)]="u.uri" [disabled]="cipher.isDeleted || viewOnly"
|
name="Login.Uris[{{i}}].Uri" [(ngModel)]="u.uri"
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly"
|
||||||
placeholder="{{'ex' | i18n}} https://google.com" appInputVerbatim>
|
placeholder="{{'ex' | i18n}} https://google.com" appInputVerbatim>
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<button type="button" class="btn btn-outline-secondary"
|
<button type="button" class="btn btn-outline-secondary"
|
||||||
@@ -164,9 +170,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<select class="form-control overflow-hidden" id="loginUriMatch{{i}}" name="Login.Uris[{{i}}].Match"
|
<select class="form-control overflow-hidden" id="loginUriMatch{{i}}"
|
||||||
[(ngModel)]="u.match" (change)="loginUriMatchChanged(u)"
|
name="Login.Uris[{{i}}].Match" [(ngModel)]="u.match"
|
||||||
[disabled]="cipher.isDeleted || viewOnly">
|
(change)="loginUriMatchChanged(u)" [disabled]="cipher.isDeleted || viewOnly">
|
||||||
<option *ngFor="let o of uriMatchOptions" [ngValue]="o.value">{{o.name}}
|
<option *ngFor="let o of uriMatchOptions" [ngValue]="o.value">{{o.name}}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -178,7 +184,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<a href="#" appStopClick (click)="addUri()" class="d-inline-block mb-3" *ngIf="!cipher.isDeleted && !viewOnly">
|
<a href="#" appStopClick (click)="addUri()" class="d-inline-block mb-3"
|
||||||
|
*ngIf="!cipher.isDeleted && !viewOnly">
|
||||||
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> {{'newUri' | i18n}}
|
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> {{'newUri' | i18n}}
|
||||||
</a>
|
</a>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
@@ -204,7 +211,8 @@
|
|||||||
<label for="cardNumber">{{'number' | i18n}}</label>
|
<label for="cardNumber">{{'number' | i18n}}</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input id="cardNumber" class="form-control" type="text" name="Card.Number"
|
<input id="cardNumber" class="form-control" type="text" name="Card.Number"
|
||||||
[(ngModel)]="cipher.card.number" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.card.number" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<button type="button" class="btn btn-outline-secondary"
|
<button type="button" class="btn btn-outline-secondary"
|
||||||
appA11yTitle="{{'copyNumber' | i18n}}"
|
appA11yTitle="{{'copyNumber' | i18n}}"
|
||||||
@@ -285,7 +293,8 @@
|
|||||||
<div class="col-4 form-group">
|
<div class="col-4 form-group">
|
||||||
<label for="idUsername">{{'username' | i18n}}</label>
|
<label for="idUsername">{{'username' | i18n}}</label>
|
||||||
<input id="idUsername" class="form-control" type="text" name="Identity.Username"
|
<input id="idUsername" class="form-control" type="text" name="Identity.Username"
|
||||||
[(ngModel)]="cipher.identity.username" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.identity.username" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 form-group">
|
<div class="col-4 form-group">
|
||||||
<label for="idCompany">{{'company' | i18n}}</label>
|
<label for="idCompany">{{'company' | i18n}}</label>
|
||||||
@@ -297,24 +306,28 @@
|
|||||||
<div class="col-4 form-group">
|
<div class="col-4 form-group">
|
||||||
<label for="idSsn">{{'ssn' | i18n}}</label>
|
<label for="idSsn">{{'ssn' | i18n}}</label>
|
||||||
<input id="idSsn" class="form-control" type="text" name="Identity.SSN"
|
<input id="idSsn" class="form-control" type="text" name="Identity.SSN"
|
||||||
[(ngModel)]="cipher.identity.ssn" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.identity.ssn" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 form-group">
|
<div class="col-4 form-group">
|
||||||
<label for="idPassportNumber">{{'passportNumber' | i18n}}</label>
|
<label for="idPassportNumber">{{'passportNumber' | i18n}}</label>
|
||||||
<input id="idPassportNumber" class="form-control" type="text" name="Identity.PassportNumber"
|
<input id="idPassportNumber" class="form-control" type="text" name="Identity.PassportNumber"
|
||||||
[(ngModel)]="cipher.identity.passportNumber" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.identity.passportNumber" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 form-group">
|
<div class="col-4 form-group">
|
||||||
<label for="idLicenseNumber">{{'licenseNumber' | i18n}}</label>
|
<label for="idLicenseNumber">{{'licenseNumber' | i18n}}</label>
|
||||||
<input id="idLicenseNumber" class="form-control" type="text" name="Identity.LicenseNumber"
|
<input id="idLicenseNumber" class="form-control" type="text" name="Identity.LicenseNumber"
|
||||||
[(ngModel)]="cipher.identity.licenseNumber" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.identity.licenseNumber" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 form-group">
|
<div class="col-6 form-group">
|
||||||
<label for="idEmail">{{'email' | i18n}}</label>
|
<label for="idEmail">{{'email' | i18n}}</label>
|
||||||
<input id="idEmail" class="form-control" type="text" name="Identity.Email"
|
<input id="idEmail" class="form-control" type="text" name="Identity.Email"
|
||||||
[(ngModel)]="cipher.identity.email" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="cipher.identity.email" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 form-group">
|
<div class="col-6 form-group">
|
||||||
<label for="idPhone">{{'phone' | i18n}}</label>
|
<label for="idPhone">{{'phone' | i18n}}</label>
|
||||||
@@ -368,8 +381,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="notes">{{'notes' | i18n}}</label>
|
<label for="notes">{{'notes' | i18n}}</label>
|
||||||
<textarea id="notes" name="Notes" rows="6" [(ngModel)]="cipher.notes" [disabled]="cipher.isDeleted || viewOnly"
|
<textarea id="notes" name="Notes" rows="6" [(ngModel)]="cipher.notes"
|
||||||
class="form-control"></textarea>
|
[disabled]="cipher.isDeleted || viewOnly" class="form-control"></textarea>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="mt-4">{{'customFields' | i18n}}</h3>
|
<h3 class="mt-4">{{'customFields' | i18n}}</h3>
|
||||||
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="cipher.hasFields">
|
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="cipher.hasFields">
|
||||||
@@ -390,7 +403,8 @@
|
|||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<div class="input-group" *ngIf="f.type === fieldType.Text">
|
<div class="input-group" *ngIf="f.type === fieldType.Text">
|
||||||
<input id="fieldValue{{i}}" class="form-control" type="text" name="Field.Value{{i}}"
|
<input id="fieldValue{{i}}" class="form-control" type="text" name="Field.Value{{i}}"
|
||||||
[(ngModel)]="f.value" appInputVerbatim [disabled]="cipher.isDeleted || viewOnly">
|
[(ngModel)]="f.value" appInputVerbatim
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<button type="button" class="btn btn-outline-secondary"
|
<button type="button" class="btn btn-outline-secondary"
|
||||||
appA11yTitle="{{'copyValue' | i18n}}"
|
appA11yTitle="{{'copyValue' | i18n}}"
|
||||||
@@ -402,8 +416,8 @@
|
|||||||
<div class="input-group" *ngIf="f.type === fieldType.Hidden">
|
<div class="input-group" *ngIf="f.type === fieldType.Hidden">
|
||||||
<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"
|
name="Field.Value{{i}}" [(ngModel)]="f.value"
|
||||||
class="form-control text-monospace" appInputVerbatim
|
class="form-control text-monospace" appInputVerbatim autocomplete="new-password"
|
||||||
autocomplete="new-password" [disabled]="cipher.isDeleted || viewOnly || (!cipher.viewPassword && !f.newField)">
|
[disabled]="cipher.isDeleted || viewOnly || (!cipher.viewPassword && !f.newField)">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<button type="button" class="btn btn-outline-secondary"
|
<button type="button" class="btn btn-outline-secondary"
|
||||||
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)"
|
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="toggleFieldValue(f)"
|
||||||
@@ -437,7 +451,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="#" appStopClick (click)="addField()" class="d-inline-block mb-2" *ngIf="!cipher.isDeleted && !viewOnly">
|
<a href="#" appStopClick (click)="addField()" class="d-inline-block mb-2"
|
||||||
|
*ngIf="!cipher.isDeleted && !viewOnly">
|
||||||
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> {{'newCustomField' | i18n}}
|
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> {{'newCustomField' | i18n}}
|
||||||
</a>
|
</a>
|
||||||
<div class="row" *ngIf="!cipher.isDeleted && !viewOnly">
|
<div class="row" *ngIf="!cipher.isDeleted && !viewOnly">
|
||||||
@@ -469,7 +484,8 @@
|
|||||||
<ng-container *ngIf="collections && collections.length">
|
<ng-container *ngIf="collections && collections.length">
|
||||||
<div class="form-check" *ngFor="let c of collections; let i = index">
|
<div class="form-check" *ngFor="let c of collections; let i = index">
|
||||||
<input class="form-check-input" type="checkbox" [(ngModel)]="c.checked"
|
<input class="form-check-input" type="checkbox" [(ngModel)]="c.checked"
|
||||||
id="collection-{{i}}" name="Collection[{{i}}].Checked" [disabled]="cipher.isDeleted || viewOnly">
|
id="collection-{{i}}" name="Collection[{{i}}].Checked"
|
||||||
|
[disabled]="cipher.isDeleted || viewOnly">
|
||||||
<label class="form-check-label" for="collection-{{i}}">{{c.name}}</label>
|
<label class="form-check-label" for="collection-{{i}}">{{c.name}}</label>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
@@ -508,15 +524,14 @@
|
|||||||
{{(viewOnly ? 'close' : 'cancel') | i18n}}
|
{{(viewOnly ? 'close' : 'cancel') | i18n}}
|
||||||
</button>
|
</button>
|
||||||
<div class="ml-auto" *ngIf="cipher && !viewOnly">
|
<div class="ml-auto" *ngIf="cipher && !viewOnly">
|
||||||
<button *ngIf="!organization && !cipher.isDeleted" type="button" (click)="toggleFavorite()" class="btn btn-link"
|
<button *ngIf="!organization && !cipher.isDeleted" type="button" (click)="toggleFavorite()"
|
||||||
appA11yTitle="{{(cipher.favorite ? 'unfavorite' : 'favorite') | i18n}}">
|
class="btn btn-link" appA11yTitle="{{(cipher.favorite ? 'unfavorite' : 'favorite') | i18n}}">
|
||||||
<i class="fa fa-lg" [ngClass]="{'fa-star': cipher.favorite, 'fa-star-o': !cipher.favorite}"
|
<i class="fa fa-lg" [ngClass]="{'fa-star': cipher.favorite, 'fa-star-o': !cipher.favorite}"
|
||||||
aria-hidden="true"></i>
|
aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<button #deleteBtn type="button" (click)="delete()" class="btn btn-outline-danger"
|
<button #deleteBtn type="button" (click)="delete()" class="btn btn-outline-danger"
|
||||||
appA11yTitle="{{(cipher.isDeleted ? 'permanentlyDelete' : 'delete') | i18n}}"
|
appA11yTitle="{{(cipher.isDeleted ? 'permanentlyDelete' : 'delete') | i18n}}"
|
||||||
*ngIf="editMode && !cloneMode" [disabled]="deleteBtn.loading"
|
*ngIf="editMode && !cloneMode" [disabled]="deleteBtn.loading" [appApiAction]="deletePromise">
|
||||||
[appApiAction]="deletePromise">
|
|
||||||
<i class="fa fa-trash-o fa-lg fa-fw" [hidden]="deleteBtn.loading" aria-hidden="true"></i>
|
<i class="fa fa-trash-o fa-lg fa-fw" [hidden]="deleteBtn.loading" aria-hidden="true"></i>
|
||||||
<i class="fa fa-spinner fa-spin fa-lg fa-fw" [hidden]="!deleteBtn.loading"
|
<i class="fa fa-spinner fa-spin fa-lg fa-fw" [hidden]="!deleteBtn.loading"
|
||||||
title="{{'loading' | i18n}}" aria-hidden="true"></i>
|
title="{{'loading' | i18n}}" aria-hidden="true"></i>
|
||||||
|
|||||||
@@ -3560,6 +3560,9 @@
|
|||||||
"disableRequireSsoError": {
|
"disableRequireSsoError": {
|
||||||
"message": "You must manually disable the Single Sign-On Authentication policy before this policy can be disabled."
|
"message": "You must manually disable the Single Sign-On Authentication policy before this policy can be disabled."
|
||||||
},
|
},
|
||||||
|
"personalOwnershipPolicyInEffect": {
|
||||||
|
"message": "An organization policy is affecting your ownership options."
|
||||||
|
},
|
||||||
"custom": {
|
"custom": {
|
||||||
"message": "Custom"
|
"message": "Custom"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user