Merge branch 'master' into forwardemail

This commit is contained in:
Kyle Spearrin 2022-04-28 15:48:41 -04:00
commit e23b009bd1
8 changed files with 60 additions and 34 deletions

View File

@ -63,7 +63,7 @@ jobs:
echo "::set-output name=branch-name::$BRANCH_NAME" echo "::set-output name=branch-name::$BRANCH_NAME"
- name: Download all artifacts - name: Download all artifacts
uses: bitwarden/gh-actions/download-artifacts@23433be15ed6fd046ce12b6889c5184a8d9c8783 uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
with: with:
workflow: build.yml workflow: build.yml
workflow_conclusion: success workflow_conclusion: success
@ -142,7 +142,7 @@ jobs:
run: mkdir dist run: mkdir dist
- name: Download Snap artifact - name: Download Snap artifact
uses: bitwarden/gh-actions/download-artifacts@23433be15ed6fd046ce12b6889c5184a8d9c8783 uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
with: with:
workflow: build.yml workflow: build.yml
workflow_conclusion: success workflow_conclusion: success
@ -179,7 +179,7 @@ jobs:
run: New-Item -ItemType directory -Path ./dist run: New-Item -ItemType directory -Path ./dist
- name: Download choco artifact - name: Download choco artifact
uses: bitwarden/gh-actions/download-artifacts@23433be15ed6fd046ce12b6889c5184a8d9c8783 uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
with: with:
workflow: build.yml workflow: build.yml
workflow_conclusion: success workflow_conclusion: success

View File

@ -10,7 +10,7 @@ Here is how you can get involved:
- **Write code for a new feature:** Make a new post in the [Github Contributions category](https://community.bitwarden.com/c/github-contributions/) of the Community Forums. Include a description of your proposed contribution, screeshots, and links to any relevant feature requests. This helps get feedback from the community and Bitwarden team members before you start writing code - **Write code for a new feature:** Make a new post in the [Github Contributions category](https://community.bitwarden.com/c/github-contributions/) of the Community Forums. Include a description of your proposed contribution, screeshots, and links to any relevant feature requests. This helps get feedback from the community and Bitwarden team members before you start writing code
- **Report a bug or submit a bugfix:** Use Github issues and pull requests - **Report a bug or submit a bugfix:** Use Github issues and pull requests
- **Write documentation:** Submit a pull request to the [Bitwarden help repository](https://github.com/bitwarden/help) - **Write documentation:** Submit a pull request to the [Bitwarden help repository](https://github.com/bitwarden/help)
- **Help other users:** Go to the [User-to-User Support category](https://community.bitwarden.com/c/support/) on the Community Forums - **Help other users:** Go to the [Ask the Bitwarden Community category](https://community.bitwarden.com/c/support/) on the Community Forums
- **Translate:** See the localization (l10n) section below - **Translate:** See the localization (l10n) section below
## Contributor Agreement ## Contributor Agreement
@ -31,6 +31,6 @@ We use a translation tool called [Crowdin](https://crowdin.com) to help manage o
If you are interested in helping translate the Bitwarden desktop app into another language (or make a translation correction), please register an account at Crowdin and join our project here: https://crowdin.com/project/bitwarden-desktop If you are interested in helping translate the Bitwarden desktop app into another language (or make a translation correction), please register an account at Crowdin and join our project here: https://crowdin.com/project/bitwarden-desktop
If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/profile/kspearrin). If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/profile/dwbit).
You can read Crowdin's getting started guide for translators here: https://support.crowdin.com/crowdin-intro/ You can read Crowdin's getting started guide for translators here: https://support.crowdin.com/crowdin-intro/

2
jslib

@ -1 +1 @@
Subproject commit f3a4fde513dc16779e85597bd00027b160671db7 Subproject commit 6bcadc4f408db2c150753f53a07d6f8888b6e9ff

View File

@ -83,7 +83,7 @@ import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component"; import { AppComponent } from "./app.component";
import { PasswordRepromptComponent } from "./components/password-reprompt.component"; import { PasswordRepromptComponent } from "./components/password-reprompt.component";
import { SetPinComponent } from "./components/set-pin.component"; import { SetPinComponent } from "./components/set-pin.component";
import { VerifyMasterPasswordComponent } from "./components/verify-master-password.component"; import { UserVerificationComponent } from "./components/user-verification.component";
import { AccountSwitcherComponent } from "./layout/account-switcher.component"; import { AccountSwitcherComponent } from "./layout/account-switcher.component";
import { HeaderComponent } from "./layout/header.component"; import { HeaderComponent } from "./layout/header.component";
import { NavComponent } from "./layout/nav.component"; import { NavComponent } from "./layout/nav.component";
@ -212,9 +212,9 @@ registerLocaleData(localeZhTw, "zh-TW");
TwoFactorComponent, TwoFactorComponent,
TwoFactorOptionsComponent, TwoFactorOptionsComponent,
UpdateTempPasswordComponent, UpdateTempPasswordComponent,
UserVerificationComponent,
VaultComponent, VaultComponent,
VaultTimeoutInputComponent, VaultTimeoutInputComponent,
VerifyMasterPasswordComponent,
ViewComponent, ViewComponent,
ViewCustomFieldsComponent, ViewCustomFieldsComponent,
], ],

View File

@ -2,16 +2,16 @@ import { animate, style, transition, trigger } from "@angular/animations";
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { NG_VALUE_ACCESSOR } from "@angular/forms";
import { VerifyMasterPasswordComponent as BaseComponent } from "jslib-angular/components/verify-master-password.component"; import { UserVerificationComponent as BaseComponent } from "jslib-angular/components/user-verification.component";
@Component({ @Component({
selector: "app-verify-master-password", selector: "app-user-verification",
templateUrl: "verify-master-password.component.html", templateUrl: "user-verification.component.html",
providers: [ providers: [
{ {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,
multi: true, multi: true,
useExisting: VerifyMasterPasswordComponent, useExisting: UserVerificationComponent,
}, },
], ],
animations: [ animations: [
@ -20,4 +20,4 @@ import { VerifyMasterPasswordComponent as BaseComponent } from "jslib-angular/co
]), ]),
], ],
}) })
export class VerifyMasterPasswordComponent extends BaseComponent {} export class UserVerificationComponent extends BaseComponent {}

View File

@ -21,8 +21,8 @@
<option *ngFor="let f of formatOptions" [value]="f.value">{{ f.name }}</option> <option *ngFor="let f of formatOptions" [value]="f.value">{{ f.name }}</option>
</select> </select>
</div> </div>
<app-verify-master-password ngDefaultControl formControlName="secret" name="secret"> <app-user-verification ngDefaultControl formControlName="secret" name="secret">
</app-verify-master-password> </app-user-verification>
</div> </div>
<div class="box-footer"> <div class="box-footer">
<p>{{ "confirmIdentity" | i18n }}</p> <p>{{ "confirmIdentity" | i18n }}</p>

View File

@ -69,8 +69,14 @@
</div> </div>
<div class="box"> <div class="box">
<div class="box-content condensed"> <div class="box-content condensed">
<div class="box-content-row box-content-row-radio"> <div
<label class="radio-header">{{ "whatWouldYouLikeToGenerate" | i18n }}</label> class="box-content-row box-content-row-radio"
role="radiogroup"
aria-labelledby="typeHeading"
>
<label id="typeHeading" class="radio-header">{{
"whatWouldYouLikeToGenerate" | i18n
}}</label>
<div <div
class="radio-group text-default" class="radio-group text-default"
appBoxRow appBoxRow
@ -81,12 +87,12 @@
type="radio" type="radio"
class="radio" class="radio"
[(ngModel)]="type" [(ngModel)]="type"
name="Type_{{ o.value }}" name="Type"
id="type_{{ o.value }}" id="type_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="typeChanged()" (change)="typeChanged()"
[checked]="type === o.value" [checked]="type === o.value"
[disabled]="comingFromAddEdit" [disabled]="comingFromAddEdit && type !== o.value"
/> />
<label class="unstyled" for="type_{{ o.value }}"> <label class="unstyled" for="type_{{ o.value }}">
{{ o.name }} {{ o.name }}
@ -110,8 +116,14 @@
</button> </button>
</div> </div>
<div class="box-content condensed" [hidden]="!showOptions"> <div class="box-content condensed" [hidden]="!showOptions">
<div class="box-content-row box-content-row-radio"> <div
<label class="radio-header">{{ "passwordType" | i18n }}</label> class="box-content-row box-content-row-radio"
role="radiogroup"
aria-labelledby="passwordTypeHeading"
>
<label id="passwordTypeHeading" class="radio-header">{{
"passwordType" | i18n
}}</label>
<div <div
class="radio-group text-default" class="radio-group text-default"
appBoxRow appBoxRow
@ -122,7 +134,7 @@
type="radio" type="radio"
class="radio" class="radio"
[(ngModel)]="passwordOptions.type" [(ngModel)]="passwordOptions.type"
name="PasswordType_{{ o.value }}" name="PasswordType"
id="passwordType_{{ o.value }}" id="passwordType_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="savePasswordOptions()" (change)="savePasswordOptions()"
@ -300,8 +312,12 @@
</button> </button>
</div> </div>
<div class="box-content condensed" [hidden]="!showOptions"> <div class="box-content condensed" [hidden]="!showOptions">
<div class="box-content-row box-content-row-radio"> <div
<label class="radio-header"> class="box-content-row box-content-row-radio"
role="radiogroup"
aria-labelledby="usernameTypeHeading"
>
<label id="usernameTypeHeading" class="radio-header">
{{ "usernameType" | i18n }} {{ "usernameType" | i18n }}
<a <a
href="#" href="#"
@ -323,7 +339,7 @@
type="radio" type="radio"
class="radio" class="radio"
[(ngModel)]="usernameOptions.type" [(ngModel)]="usernameOptions.type"
name="UsernameType_{{ o.value }}" name="UsernameType"
id="usernameType_{{ o.value }}" id="usernameType_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="saveUsernameOptions()" (change)="saveUsernameOptions()"
@ -339,13 +355,13 @@
</div> </div>
<div class="box" *ngIf="usernameOptions.type === 'forwarded'" [hidden]="!showOptions"> <div class="box" *ngIf="usernameOptions.type === 'forwarded'" [hidden]="!showOptions">
<div class="box-content condensed"> <div class="box-content condensed">
<div class="box-content-row"> <div class="box-content-row" role="radiogroup" aria-labelledby="forwardTypeHeading">
<label class="radio-header">{{ "service" | i18n }}</label> <label id="forwardTypeHeading" class="radio-header">{{ "service" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of forwardOptions"> <div class="radio-group text-default" appBoxRow *ngFor="let o of forwardOptions">
<input <input
type="radio" type="radio"
[(ngModel)]="usernameOptions.forwardedService" [(ngModel)]="usernameOptions.forwardedService"
name="ForwardType_{{ o.value }}" name="ForwardType"
id="forwardtype_{{ o.value }}" id="forwardtype_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="saveUsernameOptions()" (change)="saveUsernameOptions()"
@ -426,13 +442,18 @@
(blur)="saveUsernameOptions()" (blur)="saveUsernameOptions()"
/> />
</div> </div>
<div class="box-content-row" *ngIf="subaddressOptions.length > 1"> <div
<label class="radio-header">{{ "type" | i18n }}</label> class="box-content-row"
role="radiogroup"
aria-labelledby="subaddressTypeHeading"
*ngIf="subaddressOptions.length > 1"
>
<label id="subaddressTypeHeading" class="radio-header">{{ "type" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of subaddressOptions"> <div class="radio-group text-default" appBoxRow *ngFor="let o of subaddressOptions">
<input <input
type="radio" type="radio"
[(ngModel)]="usernameOptions.subaddressType" [(ngModel)]="usernameOptions.subaddressType"
name="SubaddressType_{{ o.value }}" name="SubaddressType"
id="subaddresstype_{{ o.value }}" id="subaddresstype_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="saveUsernameOptions()" (change)="saveUsernameOptions()"
@ -468,13 +489,18 @@
(blur)="saveUsernameOptions()" (blur)="saveUsernameOptions()"
/> />
</div> </div>
<div class="box-content-row" *ngIf="catchallOptions.length > 1"> <div
<label class="radio-header">{{ "type" | i18n }}</label> class="box-content-row"
role="radiogroup"
aria-labelledby="catchallTypeHeading"
*ngIf="catchallOptions.length > 1"
>
<label id="catchallTypeHeading" class="radio-header">{{ "type" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of catchallOptions"> <div class="radio-group text-default" appBoxRow *ngFor="let o of catchallOptions">
<input <input
type="radio" type="radio"
[(ngModel)]="usernameOptions.catchallType" [(ngModel)]="usernameOptions.catchallType"
name="CatchallType_{{ o.value }}" name="CatchallType"
id="catchalltype_{{ o.value }}" id="catchalltype_{{ o.value }}"
[value]="o.value" [value]="o.value"
(change)="saveUsernameOptions()" (change)="saveUsernameOptions()"