From 2357957c2f0ada591046e6df76e1c78e1561eeed Mon Sep 17 00:00:00 2001
From: Gbubemi Smith
Date: Mon, 26 Sep 2022 23:26:10 +0100
Subject: [PATCH 01/20] [SG-168] Passwordless login web MVP (#3424)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* passwordless login page redesign
* passwordless login page redesign
* restyled login form to use tailwind
* restyled login form to use tailwind
* moved texts on login device template to locales
* made reactive form changes for clients
* added request model
* made more changes
* added implmentation to auth request api
* fixed refrencing issue
* renamed model property
* Added resend notification functionality
* Added new file
* login with device first draft
* login with device first draft
* login with device first draft
* login with device first draft
* connection to anonymous hub
* connection to anonymous hub
* refactored confirm login response
* removed comment
* cleaned up login
* changed uptyped form builder
* changed uptyped form builder
* [SG-168] Update login strategy with passwordless login credentials.
* [SG-168] Removed logs. Changed inputs for passwordless logic strategy. Removed tokenRequestPasswordless it is using the same as password.
* code cleanup
* code cleanup
* removed login with device from self hosted
* fixed PR comments
* added module for login
* fixed post request bug
* added feature flag
* added feature flag
* added feature flag
Co-authored-by: AndreĢ Bispo
(cherry picked from commit 22a878792e5fddd9bd0396edec82c8cfa47e2390)
---
.../src/popup/accounts/login.component.html | 16 +-
.../src/popup/accounts/login.component.ts | 10 +-
.../src/app/accounts/login.component.html | 14 +-
.../src/app/accounts/login.component.ts | 10 +-
apps/web/config/base.json | 4 +-
apps/web/config/cloud.json | 3 +-
apps/web/config/development.json | 3 +-
apps/web/config/qa.json | 3 +-
apps/web/config/selfhosted.json | 3 +-
.../web/src/app/accounts/login.component.html | 102 ----------
.../login/login-with-device.component.html | 44 +++++
.../login/login-with-device.component.ts | 175 ++++++++++++++++++
.../app/accounts/login/login.component.html | 121 ++++++++++++
.../accounts/{ => login}/login.component.ts | 52 ++++--
.../src/app/accounts/login/login.module.ts | 13 ++
apps/web/src/app/oss-routing.module.ts | 8 +-
apps/web/src/app/oss.module.ts | 3 +
.../src/app/shared/loose-components.module.ts | 3 -
apps/web/src/locales/en/messages.json | 29 ++-
apps/web/src/utils/flags.ts | 1 +
.../angular/src/components/login.component.ts | 110 ++++++-----
.../src/services/jslib-services.module.ts | 7 +
.../src/abstractions/anonymousHub.service.ts | 4 +
libs/common/src/abstractions/api.service.ts | 5 +
libs/common/src/abstractions/auth.service.ts | 13 +-
libs/common/src/enums/authRequestType.ts | 4 +
libs/common/src/enums/authenticationType.ts | 1 +
libs/common/src/enums/notificationType.ts | 3 +
.../misc/logInStrategies/logIn.strategy.ts | 7 +-
.../passwordlessLogin.strategy.ts | 86 +++++++++
.../src/models/domain/logInCredentials.ts | 15 ++
.../request/identityToken/tokenRequest.ts | 10 +
.../request/passwordlessCreateAuthRequest.ts | 12 ++
.../models/response/authRequestResponse.ts | 26 +++
.../models/response/notificationResponse.ts | 15 ++
.../src/services/anonymousHub.service.ts | 60 ++++++
libs/common/src/services/api.service.ts | 13 ++
libs/common/src/services/auth.service.ts | 141 +++++++++-----
38 files changed, 908 insertions(+), 241 deletions(-)
delete mode 100644 apps/web/src/app/accounts/login.component.html
create mode 100644 apps/web/src/app/accounts/login/login-with-device.component.html
create mode 100644 apps/web/src/app/accounts/login/login-with-device.component.ts
create mode 100644 apps/web/src/app/accounts/login/login.component.html
rename apps/web/src/app/accounts/{ => login}/login.component.ts (80%)
create mode 100644 apps/web/src/app/accounts/login/login.module.ts
create mode 100644 libs/common/src/abstractions/anonymousHub.service.ts
create mode 100644 libs/common/src/enums/authRequestType.ts
create mode 100644 libs/common/src/misc/logInStrategies/passwordlessLogin.strategy.ts
create mode 100644 libs/common/src/models/request/passwordlessCreateAuthRequest.ts
create mode 100644 libs/common/src/models/response/authRequestResponse.ts
create mode 100644 libs/common/src/services/anonymousHub.service.ts
diff --git a/apps/browser/src/popup/accounts/login.component.html b/apps/browser/src/popup/accounts/login.component.html
index 4c18805f452..1b32f63819a 100644
--- a/apps/browser/src/popup/accounts/login.component.html
+++ b/apps/browser/src/popup/accounts/login.component.html
@@ -1,4 +1,4 @@
-
diff --git a/apps/web/src/app/settings/change-password.component.html b/apps/web/src/app/settings/change-password.component.html
index 6f36236a7ae..e74881db025 100644
--- a/apps/web/src/app/settings/change-password.component.html
+++ b/apps/web/src/app/settings/change-password.component.html
@@ -100,7 +100,7 @@
-
+
+
diff --git a/apps/web/src/app/settings/emergency-access-add-edit.component.html b/apps/web/src/app/settings/emergency-access-add-edit.component.html
index 410489321a1..b438cee937c 100644
--- a/apps/web/src/app/settings/emergency-access-add-edit.component.html
+++ b/apps/web/src/app/settings/emergency-access-add-edit.component.html
@@ -100,9 +100,15 @@
- {{
- "submit" | i18n
- }}
+
diff --git a/apps/web/src/app/settings/premium.component.html b/apps/web/src/app/settings/premium.component.html
index 63995b457ac..13266fd9ca5 100644
--- a/apps/web/src/app/settings/premium.component.html
+++ b/apps/web/src/app/settings/premium.component.html
@@ -68,9 +68,9 @@
"licenseFileDesc" | i18n: "bitwarden_premium_license.json"
}}
-
+
+
{{ "paymentChargedAnnually" | i18n }}
-
+
+
diff --git a/apps/web/src/app/settings/two-factor-setup.component.html b/apps/web/src/app/settings/two-factor-setup.component.html
index 698e7fd9c07..b846fdb9816 100644
--- a/apps/web/src/app/settings/two-factor-setup.component.html
+++ b/apps/web/src/app/settings/two-factor-setup.component.html
@@ -77,9 +77,15 @@
{{ "deviceVerificationDesc" | i18n }}
-
+
+
diff --git a/apps/web/src/app/shared/shared.module.ts b/apps/web/src/app/shared/shared.module.ts
index 342948bb515..c0a076e545e 100644
--- a/apps/web/src/app/shared/shared.module.ts
+++ b/apps/web/src/app/shared/shared.module.ts
@@ -12,7 +12,6 @@ import {
ButtonModule,
CalloutModule,
FormFieldModule,
- SubmitButtonModule,
MenuModule,
IconModule,
} from "@bitwarden/components";
@@ -44,7 +43,6 @@ import "./locales";
ButtonModule,
MenuModule,
FormFieldModule,
- SubmitButtonModule,
IconModule,
],
exports: [
@@ -63,7 +61,6 @@ import "./locales";
ButtonModule,
MenuModule,
FormFieldModule,
- SubmitButtonModule,
IconModule,
],
providers: [DatePipe],
diff --git a/bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html b/bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html
index 54fe44e073c..3d27448753f 100644
--- a/bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html
+++ b/bitwarden_license/bit-web/src/app/organizations/manage/scim.component.html
@@ -81,7 +81,13 @@
{{ "scimApiKeyHelperText" | i18n }}
-
+
+
diff --git a/libs/components/src/button/button.component.html b/libs/components/src/button/button.component.html
new file mode 100644
index 00000000000..4875c159e92
--- /dev/null
+++ b/libs/components/src/button/button.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/libs/components/src/button/button.directive.spec.ts b/libs/components/src/button/button.component.spec.ts
similarity index 65%
rename from libs/components/src/button/button.directive.spec.ts
rename to libs/components/src/button/button.component.spec.ts
index a7c3024e480..48aa8928e90 100644
--- a/libs/components/src/button/button.directive.spec.ts
+++ b/libs/components/src/button/button.component.spec.ts
@@ -8,6 +8,7 @@ describe("Button", () => {
let fixture: ComponentFixture;
let testAppComponent: TestApp;
let buttonDebugElement: DebugElement;
+ let disabledButtonDebugElement: DebugElement;
let linkDebugElement: DebugElement;
beforeEach(waitForAsync(() => {
@@ -20,6 +21,7 @@ describe("Button", () => {
fixture = TestBed.createComponent(TestApp);
testAppComponent = fixture.debugElement.componentInstance;
buttonDebugElement = fixture.debugElement.query(By.css("button"));
+ disabledButtonDebugElement = fixture.debugElement.query(By.css("button#disabled"));
linkDebugElement = fixture.debugElement.query(By.css("a"));
}));
@@ -60,16 +62,67 @@ describe("Button", () => {
expect(buttonDebugElement.nativeElement.classList.contains("tw-block")).toBe(false);
expect(linkDebugElement.nativeElement.classList.contains("tw-block")).toBe(false);
});
+
+ it("should not be disabled when loading and disabled are false", () => {
+ testAppComponent.loading = false;
+ testAppComponent.disabled = false;
+ fixture.detectChanges();
+
+ expect(buttonDebugElement.attributes["loading"]).toBeFalsy();
+ expect(linkDebugElement.attributes["loading"]).toBeFalsy();
+ expect(buttonDebugElement.nativeElement.disabled).toBeFalsy();
+ });
+
+ it("should be disabled when disabled is true", () => {
+ testAppComponent.disabled = true;
+ fixture.detectChanges();
+
+ expect(buttonDebugElement.nativeElement.disabled).toBeTruthy();
+ // Anchor tags cannot be disabled.
+ });
+
+ it("should be disabled when attribute disabled is true", () => {
+ expect(disabledButtonDebugElement.nativeElement.disabled).toBeTruthy();
+ });
+
+ it("should be disabled when loading is true", () => {
+ testAppComponent.loading = true;
+ fixture.detectChanges();
+
+ expect(buttonDebugElement.nativeElement.disabled).toBeTruthy();
+ });
});
@Component({
selector: "test-app",
template: `
-
- Link
+
+
+ Link
+
+
+
`,
})
class TestApp {
buttonType: string;
block: boolean;
+ disabled: boolean;
+ loading: boolean;
}
diff --git a/libs/components/src/button/button.directive.ts b/libs/components/src/button/button.component.ts
similarity index 82%
rename from libs/components/src/button/button.directive.ts
rename to libs/components/src/button/button.component.ts
index 5c4b0039aef..eeba83b8156 100644
--- a/libs/components/src/button/button.directive.ts
+++ b/libs/components/src/button/button.component.ts
@@ -1,4 +1,4 @@
-import { Input, HostBinding, Directive } from "@angular/core";
+import { Input, HostBinding, Component } from "@angular/core";
export type ButtonTypes = "primary" | "secondary" | "danger";
@@ -38,10 +38,11 @@ const buttonStyles: Record = {
],
};
-@Directive({
+@Component({
selector: "button[bitButton], a[bitButton]",
+ templateUrl: "button.component.html",
})
-export class ButtonDirective {
+export class ButtonComponent {
@HostBinding("class") get classList() {
return [
"tw-font-semibold",
@@ -65,6 +66,14 @@ export class ButtonDirective {
.concat(buttonStyles[this.buttonType ?? "secondary"]);
}
+ @HostBinding("attr.disabled")
+ get disabledAttr() {
+ const disabled = this.disabled != null && this.disabled !== false;
+ return disabled || this.loading ? true : null;
+ }
+
@Input() buttonType: ButtonTypes = null;
@Input() block?: boolean;
+ @Input() loading = false;
+ @Input() disabled = false;
}
diff --git a/libs/components/src/button/button.module.ts b/libs/components/src/button/button.module.ts
index c9c3822abfa..448e7c9dcf6 100644
--- a/libs/components/src/button/button.module.ts
+++ b/libs/components/src/button/button.module.ts
@@ -1,11 +1,11 @@
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
-import { ButtonDirective } from "./button.directive";
+import { ButtonComponent } from "./button.component";
@NgModule({
imports: [CommonModule],
- exports: [ButtonDirective],
- declarations: [ButtonDirective],
+ exports: [ButtonComponent],
+ declarations: [ButtonComponent],
})
export class ButtonModule {}
diff --git a/libs/components/src/button/button.stories.ts b/libs/components/src/button/button.stories.ts
index f09b8701b1b..4b9b88d48b1 100644
--- a/libs/components/src/button/button.stories.ts
+++ b/libs/components/src/button/button.stories.ts
@@ -1,12 +1,14 @@
import { Meta, Story } from "@storybook/angular";
-import { ButtonDirective } from "./button.directive";
+import { ButtonComponent } from "./button.component";
export default {
title: "Component Library/Button",
- component: ButtonDirective,
+ component: ButtonComponent,
args: {
buttonType: "primary",
+ disabled: false,
+ loading: false,
},
parameters: {
design: {
@@ -16,11 +18,11 @@ export default {
},
} as Meta;
-const Template: Story = (args: ButtonDirective) => ({
+const Template: Story = (args: ButtonComponent) => ({
props: args,
template: `
-
- Link
+
+ Link
`,
});
@@ -39,21 +41,50 @@ Danger.args = {
buttonType: "danger",
};
-const DisabledTemplate: Story = (args) => ({
+const AllStylesTemplate: Story = (args) => ({
props: args,
template: `
-
-
-
+
+
+
`,
});
-export const Disabled = DisabledTemplate.bind({});
+export const Loading = AllStylesTemplate.bind({});
+Loading.args = {
+ disabled: false,
+ loading: true,
+};
+
+export const Disabled = AllStylesTemplate.bind({});
Disabled.args = {
- size: "small",
+ disabled: true,
+ loading: false,
+};
+
+const DisabledWithAttributeTemplate: Story = (args) => ({
+ props: args,
+ template: `
+
+
+
+
+
+
+
+
+
+
+ `,
+});
+
+export const DisabledWithAttribute = DisabledWithAttributeTemplate.bind({});
+DisabledWithAttribute.args = {
+ disabled: true,
+ loading: false,
};
-const BlockTemplate: Story = (args: ButtonDirective) => ({
+const BlockTemplate: Story = (args: ButtonComponent) => ({
props: args,
template: `
diff --git a/libs/components/src/button/index.ts b/libs/components/src/button/index.ts
index 1bdd62ddbcf..ff86120cb11 100644
--- a/libs/components/src/button/index.ts
+++ b/libs/components/src/button/index.ts
@@ -1,2 +1,2 @@
-export * from "./button.directive";
+export * from "./button.component";
export * from "./button.module";
diff --git a/libs/components/src/index.ts b/libs/components/src/index.ts
index 1f1ae6a8d2b..264c655d80f 100644
--- a/libs/components/src/index.ts
+++ b/libs/components/src/index.ts
@@ -7,7 +7,6 @@ export * from "./icon";
export * from "./icon-button";
export * from "./menu";
export * from "./dialog";
-export * from "./submit-button";
export * from "./link";
export * from "./tabs";
export * from "./toggle-group";
diff --git a/libs/components/src/submit-button/index.ts b/libs/components/src/submit-button/index.ts
deleted file mode 100644
index ae7d96d2c1a..00000000000
--- a/libs/components/src/submit-button/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./submit-button.module";
diff --git a/libs/components/src/submit-button/submit-button.component.html b/libs/components/src/submit-button/submit-button.component.html
deleted file mode 100644
index 9d9657ba7ee..00000000000
--- a/libs/components/src/submit-button/submit-button.component.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/libs/components/src/submit-button/submit-button.component.ts b/libs/components/src/submit-button/submit-button.component.ts
deleted file mode 100644
index 27408349da7..00000000000
--- a/libs/components/src/submit-button/submit-button.component.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Component, HostBinding, Input } from "@angular/core";
-
-import { ButtonTypes } from "../button";
-
-@Component({
- selector: "bit-submit-button",
- templateUrl: "./submit-button.component.html",
-})
-export class SubmitButtonComponent {
- @Input() buttonType: ButtonTypes = "primary";
- @Input() disabled = false;
- @Input() loading: boolean;
-
- @Input() block?: boolean;
-
- @HostBinding("class") get classList() {
- return this.block == null || this.block === false ? [] : ["tw-w-full", "tw-block"];
- }
-}
diff --git a/libs/components/src/submit-button/submit-button.module.ts b/libs/components/src/submit-button/submit-button.module.ts
deleted file mode 100644
index c7ab7567e64..00000000000
--- a/libs/components/src/submit-button/submit-button.module.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { CommonModule } from "@angular/common";
-import { NgModule } from "@angular/core";
-
-import { ButtonModule } from "../button";
-
-import { SubmitButtonComponent } from "./submit-button.component";
-
-@NgModule({
- imports: [CommonModule, ButtonModule],
- exports: [SubmitButtonComponent],
- declarations: [SubmitButtonComponent],
-})
-export class SubmitButtonModule {}
diff --git a/libs/components/src/submit-button/submit-button.stories.ts b/libs/components/src/submit-button/submit-button.stories.ts
deleted file mode 100644
index cf19b1c8e4b..00000000000
--- a/libs/components/src/submit-button/submit-button.stories.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { Meta, moduleMetadata, Story } from "@storybook/angular";
-
-import { SubmitButtonComponent } from "./submit-button.component";
-import { SubmitButtonModule } from "./submit-button.module";
-
-export default {
- title: "Component Library/Submit Button",
- component: SubmitButtonComponent,
- decorators: [
- moduleMetadata({
- imports: [SubmitButtonModule],
- }),
- ],
- args: {
- buttonType: "primary",
- loading: false,
- block: false,
- },
- parameters: {
- design: {
- type: "figma",
- url: "https://www.figma.com/file/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=1881%3A16733",
- },
- },
-} as Meta;
-
-const Template: Story = (args: SubmitButtonComponent) => ({
- props: args,
- template: `
- Submit
- `,
-});
-
-export const Primary = Template.bind({});
-Primary.args = {};
-
-export const Loading = Template.bind({});
-Loading.args = {
- loading: true,
-};
-
-export const Disabled = Template.bind({});
-Disabled.args = {
- disabled: true,
-};
From df5f1883b1ad5347f9bd9ce624da6d053b94ad6b Mon Sep 17 00:00:00 2001
From: Andreas Coroiu
Date: Thu, 29 Sep 2022 15:55:13 +0200
Subject: [PATCH 08/20] fix non-relative import from src breaking storybook
---
apps/web/src/app/accounts/login/login.component.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/apps/web/src/app/accounts/login/login.component.ts b/apps/web/src/app/accounts/login/login.component.ts
index 8664ae4a572..2568d5a3e74 100644
--- a/apps/web/src/app/accounts/login/login.component.ts
+++ b/apps/web/src/app/accounts/login/login.component.ts
@@ -22,8 +22,7 @@ import { Policy } from "@bitwarden/common/models/domain/policy";
import { ListResponse } from "@bitwarden/common/models/response/listResponse";
import { PolicyResponse } from "@bitwarden/common/models/response/policyResponse";
-import { flagEnabled } from "src/utils/flags";
-
+import { flagEnabled } from "../../../utils/flags";
import { RouterService, StateService } from "../../core";
@Component({
From 021ec89739a48e9e5ef70f4b604807a09d58e76d Mon Sep 17 00:00:00 2001
From: Addison Beck
Date: Thu, 29 Sep 2022 14:10:35 -0400
Subject: [PATCH 09/20] Rename anonymousHub route to anonymous-hub (#3650)
---
libs/common/src/services/anonymousHub.service.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libs/common/src/services/anonymousHub.service.ts b/libs/common/src/services/anonymousHub.service.ts
index 13b5898b18b..d0a069414a2 100644
--- a/libs/common/src/services/anonymousHub.service.ts
+++ b/libs/common/src/services/anonymousHub.service.ts
@@ -32,7 +32,7 @@ export class AnonymousHubService implements AnonymousHubServiceAbstraction {
this.url = this.environmentService.getNotificationsUrl();
this.anonHubConnection = new HubConnectionBuilder()
- .withUrl(this.url + "/anonymousHub?Token=" + token, {
+ .withUrl(this.url + "/anonymous-hub?Token=" + token, {
skipNegotiation: true,
transport: HttpTransportType.WebSockets,
})
From 7bdaa8ecca8fb417a9f2106638c852d0eb3dbb90 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 30 Sep 2022 08:00:00 -0700
Subject: [PATCH 10/20] Bumped desktop version to 2022.9.2 (#3541)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 24c6f5d313f275cc5f49b53906e606d38dff476c)
---
apps/desktop/package.json | 2 +-
apps/desktop/src/package-lock.json | 4 ++--
apps/desktop/src/package.json | 2 +-
package-lock.json | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index 61a3e05b58c..1e67787343c 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -1,7 +1,7 @@
{
"name": "@bitwarden/desktop",
"description": "A secure and free password manager for all of your devices.",
- "version": "2022.9.1",
+ "version": "2022.9.2",
"keywords": [
"bitwarden",
"password",
diff --git a/apps/desktop/src/package-lock.json b/apps/desktop/src/package-lock.json
index 69a5370b6e5..2e0090096bb 100644
--- a/apps/desktop/src/package-lock.json
+++ b/apps/desktop/src/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@bitwarden/desktop",
- "version": "2022.9.1",
+ "version": "2022.9.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@bitwarden/desktop",
- "version": "2022.9.1",
+ "version": "2022.9.2",
"license": "GPL-3.0",
"dependencies": {
"@bitwarden/desktop-native": "file:../desktop_native"
diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json
index 705c6dc9be6..0bf1bfd925c 100644
--- a/apps/desktop/src/package.json
+++ b/apps/desktop/src/package.json
@@ -2,7 +2,7 @@
"name": "@bitwarden/desktop",
"productName": "Bitwarden",
"description": "A secure and free password manager for all of your devices.",
- "version": "2022.9.1",
+ "version": "2022.9.2",
"author": "Bitwarden Inc. (https://bitwarden.com)",
"homepage": "https://bitwarden.com",
"license": "GPL-3.0",
diff --git a/package-lock.json b/package-lock.json
index a0f5a037f80..059f49ffcc3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -219,7 +219,7 @@
},
"apps/desktop": {
"name": "@bitwarden/desktop",
- "version": "2022.9.1",
+ "version": "2022.9.2",
"hasInstallScript": true,
"license": "GPL-3.0"
},
From 12dcf28146532f7a23da7b7a74e882f8d9b9c1cf Mon Sep 17 00:00:00 2001
From: Daniel James Smith
Date: Tue, 4 Oct 2022 20:43:51 +0200
Subject: [PATCH 11/20] [PS-1514] Do not subscribe to activeAccount-observable
and execute load asynchronously (#3608)
* Fix async subscribe
* Revert "[PS-1066] Browser and Desktop - SSO User does not see Update Master Password screen after Owner does a Admin Password Reset (#3207)"
This reverts commit 0eda4185911090313146842038f871c7911640a2.
(cherry picked from commit 43d586ff9900cb8bc2ee158ed19cd6823669cc64)
---
.../src/popup/accounts/lock.component.ts | 13 ++----------
.../src/app/accounts/lock.component.ts | 11 +---------
libs/angular/src/components/lock.component.ts | 21 ++++++++++++-------
3 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/apps/browser/src/popup/accounts/lock.component.ts b/apps/browser/src/popup/accounts/lock.component.ts
index c288a54a65b..775ecaa3ca0 100644
--- a/apps/browser/src/popup/accounts/lock.component.ts
+++ b/apps/browser/src/popup/accounts/lock.component.ts
@@ -12,7 +12,6 @@ import { LogService } from "@bitwarden/common/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
import { StateService } from "@bitwarden/common/abstractions/state.service";
-import { SyncService } from "@bitwarden/common/abstractions/sync/sync.service.abstraction";
import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service";
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service";
import { AuthenticationStatus } from "@bitwarden/common/enums/authenticationStatus";
@@ -28,8 +27,6 @@ export class LockComponent extends BaseLockComponent {
biometricError: string;
pendingBiometric = false;
- authenicatedUrl = "/tabs/current";
- unAuthenicatedUrl = "/update-temp-password";
constructor(
router: Router,
@@ -45,8 +42,7 @@ export class LockComponent extends BaseLockComponent {
logService: LogService,
keyConnectorService: KeyConnectorService,
ngZone: NgZone,
- private authService: AuthService,
- private syncService: SyncService
+ private authService: AuthService
) {
super(
router,
@@ -63,17 +59,12 @@ export class LockComponent extends BaseLockComponent {
keyConnectorService,
ngZone
);
-
+ this.successRoute = "/tabs/current";
this.isInitialLockScreen = (window as any).previousPopupUrl == null;
}
async ngOnInit() {
await super.ngOnInit();
- await this.syncService.fullSync(true);
-
- const forcePasswordReset = await this.stateService.getForcePasswordReset();
- this.successRoute = forcePasswordReset === true ? this.unAuthenicatedUrl : this.authenicatedUrl;
-
const disableAutoBiometricsPrompt =
(await this.stateService.getDisableAutoBiometricsPrompt()) ?? true;
diff --git a/apps/desktop/src/app/accounts/lock.component.ts b/apps/desktop/src/app/accounts/lock.component.ts
index ff136aa982e..5cb28802796 100644
--- a/apps/desktop/src/app/accounts/lock.component.ts
+++ b/apps/desktop/src/app/accounts/lock.component.ts
@@ -13,7 +13,6 @@ import { LogService } from "@bitwarden/common/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
import { StateService } from "@bitwarden/common/abstractions/state.service";
-import { SyncService } from "@bitwarden/common/abstractions/sync/sync.service.abstraction";
import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service";
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service";
@@ -25,8 +24,6 @@ const BroadcasterSubscriptionId = "LockComponent";
})
export class LockComponent extends BaseLockComponent {
private deferFocus: boolean = null;
- authenicatedUrl = "vault";
- unAuthenicatedUrl = "update-temp-password";
constructor(
router: Router,
@@ -43,8 +40,7 @@ export class LockComponent extends BaseLockComponent {
private broadcasterService: BroadcasterService,
ngZone: NgZone,
logService: LogService,
- keyConnectorService: KeyConnectorService,
- private syncService: SyncService
+ keyConnectorService: KeyConnectorService
) {
super(
router,
@@ -67,11 +63,6 @@ export class LockComponent extends BaseLockComponent {
await super.ngOnInit();
const autoPromptBiometric = !(await this.stateService.getNoAutoPromptBiometrics());
- await this.syncService.fullSync(true);
-
- const forcePasswordReset = await this.stateService.getForcePasswordReset();
- this.successRoute = forcePasswordReset === true ? this.unAuthenicatedUrl : this.authenicatedUrl;
-
// eslint-disable-next-line rxjs-angular/prefer-takeuntil
this.route.queryParams.subscribe((params) => {
if (this.supportsBiometric && params.promptBiometric && autoPromptBiometric) {
diff --git a/libs/angular/src/components/lock.component.ts b/libs/angular/src/components/lock.component.ts
index 0932fab7128..a488d874461 100644
--- a/libs/angular/src/components/lock.component.ts
+++ b/libs/angular/src/components/lock.component.ts
@@ -1,7 +1,7 @@
import { Directive, NgZone, OnDestroy, OnInit } from "@angular/core";
import { Router } from "@angular/router";
-import { Subscription } from "rxjs";
-import { take } from "rxjs/operators";
+import { Subject } from "rxjs";
+import { concatMap, take, takeUntil } from "rxjs/operators";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
@@ -41,7 +41,7 @@ export class LockComponent implements OnInit, OnDestroy {
private invalidPinAttempts = 0;
private pinSet: [boolean, boolean];
- private activeAccountSubscription: Subscription;
+ private destroy$ = new Subject();
constructor(
protected router: Router,
@@ -60,14 +60,19 @@ export class LockComponent implements OnInit, OnDestroy {
) {}
async ngOnInit() {
- // eslint-disable-next-line rxjs/no-async-subscribe
- this.activeAccountSubscription = this.stateService.activeAccount$.subscribe(async () => {
- await this.load();
- });
+ this.stateService.activeAccount$
+ .pipe(
+ concatMap(async () => {
+ await this.load();
+ }),
+ takeUntil(this.destroy$)
+ )
+ .subscribe();
}
ngOnDestroy() {
- this.activeAccountSubscription.unsubscribe();
+ this.destroy$.next();
+ this.destroy$.complete();
}
async submit() {
From 125c3237e5ad6f9cf95b6a5825c39bb44a95ff0a Mon Sep 17 00:00:00 2001
From: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Date: Wed, 5 Oct 2022 07:41:35 +1000
Subject: [PATCH 12/20] Add organization-options menu to single org (#3678)
(cherry picked from commit 7c3255d9fa73c0df714f0323e6e46a08fdfe3646)
---
.../organization-filter.component.html | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/apps/web/src/app/vault/vault-filter/organization-filter/organization-filter.component.html b/apps/web/src/app/vault/vault-filter/organization-filter/organization-filter.component.html
index 2977f63ed71..9d5d8b45a7c 100644
--- a/apps/web/src/app/vault/vault-filter/organization-filter/organization-filter.component.html
+++ b/apps/web/src/app/vault/vault-filter/organization-filter/organization-filter.component.html
@@ -97,6 +97,14 @@
{{ organizations[0].name }}
+
+
+
+
+
+
From 5fc9b0a8420049533133d986fa08e8a1a573e0a7 Mon Sep 17 00:00:00 2001
From: Todd Martin <106564991+trmartin4@users.noreply.github.com>
Date: Wed, 5 Oct 2022 09:12:13 -0400
Subject: [PATCH 13/20] Removed passwordless button (#3686)
---
apps/web/config/qa.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/web/config/qa.json b/apps/web/config/qa.json
index a0d1b0e88c3..d6b3f2c98ff 100644
--- a/apps/web/config/qa.json
+++ b/apps/web/config/qa.json
@@ -11,6 +11,6 @@
},
"flags": {
"showTrial": true,
- "showPasswordless": true
+ "showPasswordless": false
}
}
From 3638a6617ba05c40a7a4d779a7bfab286d252702 Mon Sep 17 00:00:00 2001
From: cd-bitwarden <106776772+cd-bitwarden@users.noreply.github.com>
Date: Thu, 6 Oct 2022 12:31:31 -0400
Subject: [PATCH 14/20] fixes (#3708)
---
libs/angular/src/components/export.component.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/libs/angular/src/components/export.component.ts b/libs/angular/src/components/export.component.ts
index 352ee1eed1a..eaa635fc5e5 100644
--- a/libs/angular/src/components/export.component.ts
+++ b/libs/angular/src/components/export.component.ts
@@ -117,6 +117,7 @@ export class ExportComponent implements OnInit, OnDestroy {
await this.userVerificationService.verifyUser(secret);
} catch (e) {
this.platformUtilsService.showToast("error", this.i18nService.t("errorOccurred"), e.message);
+ return;
}
this.doExport();
From cd5c6a810d872ad51d04ba48e9f1f49f209ef92b Mon Sep 17 00:00:00 2001
From: CarleyDiaz-Bitwarden
Date: Thu, 6 Oct 2022 18:49:26 -0400
Subject: [PATCH 15/20] encrypted export UI changes
---
.../tools/import-export/export.component.html | 107 +++++++-----------
apps/web/src/locales/en/messages.json | 2 +-
apps/web/src/locales/en_GB/messages.json | 2 +-
3 files changed, 43 insertions(+), 68 deletions(-)
diff --git a/apps/web/src/app/tools/import-export/export.component.html b/apps/web/src/app/tools/import-export/export.component.html
index 4e27fc70f75..ec758ac5b72 100644
--- a/apps/web/src/app/tools/import-export/export.component.html
+++ b/apps/web/src/app/tools/import-export/export.component.html
@@ -84,73 +84,48 @@
-
-
+
+
+
+
+ {{ "confirmFilePassword" | i18n }}
+
+
+
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index efced93ca43..de4bdc2bcb5 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -912,7 +912,7 @@
"message": "This file export will be password protected and require the file password to decrypt."
},
"exportPasswordDescription": {
- "message": "This password will be used to export and import this file"
+ "message": "This password will be used to export and import this file."
},
"confirmMasterPassword": {
"message": "Confirm Master Password"
diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json
index eac57249883..bd9f4616947 100644
--- a/apps/web/src/locales/en_GB/messages.json
+++ b/apps/web/src/locales/en_GB/messages.json
@@ -897,7 +897,7 @@
"message": "This file export will be password protected and require the file password to decrypt."
},
"exportPasswordDescription": {
- "message": "This password will be used to export and import this file"
+ "message": "This password will be used to export and import this file."
},
"confirmMasterPassword": {
"message": "Confirm Master Password"
From a09dbe5ff43a1a927120d9b0ec8d9ad0910ca188 Mon Sep 17 00:00:00 2001
From: CarleyDiaz-Bitwarden
Date: Fri, 7 Oct 2022 15:09:25 -0400
Subject: [PATCH 16/20] updating ids
---
apps/web/src/app/tools/import-export/export.component.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/web/src/app/tools/import-export/export.component.html b/apps/web/src/app/tools/import-export/export.component.html
index ec758ac5b72..c46e5c9fd5b 100644
--- a/apps/web/src/app/tools/import-export/export.component.html
+++ b/apps/web/src/app/tools/import-export/export.component.html
@@ -87,7 +87,7 @@
{{ "filePassword" | i18n }}
{{ "confirmFilePassword" | i18n }}
Date: Fri, 7 Oct 2022 16:00:55 -0400
Subject: [PATCH 17/20] Adding aria titles
---
apps/web/src/app/tools/import-export/export.component.html | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/apps/web/src/app/tools/import-export/export.component.html b/apps/web/src/app/tools/import-export/export.component.html
index c46e5c9fd5b..64000921e93 100644
--- a/apps/web/src/app/tools/import-export/export.component.html
+++ b/apps/web/src/app/tools/import-export/export.component.html
@@ -87,11 +87,12 @@
{{ "filePassword" | i18n }}