Merge branch 'master' into forwardemail
This commit is contained in:
commit
e23b009bd1
|
@ -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
|
||||||
|
|
|
@ -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
2
jslib
|
@ -1 +1 @@
|
||||||
Subproject commit f3a4fde513dc16779e85597bd00027b160671db7
|
Subproject commit 6bcadc4f408db2c150753f53a07d6f8888b6e9ff
|
|
@ -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,
|
||||||
],
|
],
|
||||||
|
|
|
@ -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 {}
|
|
@ -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>
|
||||||
|
|
|
@ -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()"
|
||||||
|
|
Loading…
Reference in New Issue