Merge branch 'main' into auth/pm-8111/browser-refresh-login-component
This commit is contained in:
commit
00355670b6
|
@ -420,8 +420,12 @@ const routes: Routes = [
|
||||||
path: "hint",
|
path: "hint",
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: {
|
data: {
|
||||||
pageTitle: "requestPasswordHint",
|
pageTitle: {
|
||||||
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
key: "requestPasswordHint",
|
||||||
|
},
|
||||||
|
pageSubtitle: {
|
||||||
|
key: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
||||||
|
},
|
||||||
pageIcon: UserLockIcon,
|
pageIcon: UserLockIcon,
|
||||||
showBackButton: true,
|
showBackButton: true,
|
||||||
state: "hint",
|
state: "hint",
|
||||||
|
|
|
@ -3,6 +3,8 @@ import { Component } from "@angular/core";
|
||||||
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
||||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request";
|
import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request";
|
||||||
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||||
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||||
|
|
||||||
import { BasePolicy, BasePolicyComponent } from "./base-policy.component";
|
import { BasePolicy, BasePolicyComponent } from "./base-policy.component";
|
||||||
|
@ -23,11 +25,19 @@ export class RequireSsoPolicy extends BasePolicy {
|
||||||
templateUrl: "require-sso.component.html",
|
templateUrl: "require-sso.component.html",
|
||||||
})
|
})
|
||||||
export class RequireSsoPolicyComponent extends BasePolicyComponent {
|
export class RequireSsoPolicyComponent extends BasePolicyComponent {
|
||||||
constructor(private i18nService: I18nService) {
|
constructor(
|
||||||
|
private i18nService: I18nService,
|
||||||
|
private configService: ConfigService,
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {
|
async buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {
|
||||||
|
if (await this.configService.getFeatureFlag(FeatureFlag.Pm13322AddPolicyDefinitions)) {
|
||||||
|
// We are now relying on server-side validation only
|
||||||
|
return super.buildRequest(policiesEnabledMap);
|
||||||
|
}
|
||||||
|
|
||||||
const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;
|
const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;
|
||||||
if (this.enabled.value && !singleOrgEnabled) {
|
if (this.enabled.value && !singleOrgEnabled) {
|
||||||
throw new Error(this.i18nService.t("requireSsoPolicyReqError"));
|
throw new Error(this.i18nService.t("requireSsoPolicyReqError"));
|
||||||
|
|
|
@ -2,6 +2,8 @@ import { Component } from "@angular/core";
|
||||||
|
|
||||||
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
import { PolicyType } from "@bitwarden/common/admin-console/enums";
|
||||||
import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request";
|
import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request";
|
||||||
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||||
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||||
|
|
||||||
import { BasePolicy, BasePolicyComponent } from "./base-policy.component";
|
import { BasePolicy, BasePolicyComponent } from "./base-policy.component";
|
||||||
|
@ -18,11 +20,19 @@ export class SingleOrgPolicy extends BasePolicy {
|
||||||
templateUrl: "single-org.component.html",
|
templateUrl: "single-org.component.html",
|
||||||
})
|
})
|
||||||
export class SingleOrgPolicyComponent extends BasePolicyComponent {
|
export class SingleOrgPolicyComponent extends BasePolicyComponent {
|
||||||
constructor(private i18nService: I18nService) {
|
constructor(
|
||||||
|
private i18nService: I18nService,
|
||||||
|
private configService: ConfigService,
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {
|
async buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {
|
||||||
|
if (await this.configService.getFeatureFlag(FeatureFlag.Pm13322AddPolicyDefinitions)) {
|
||||||
|
// We are now relying on server-side validation only
|
||||||
|
return super.buildRequest(policiesEnabledMap);
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.enabled.value) {
|
if (!this.enabled.value) {
|
||||||
if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {
|
if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
|
|
@ -233,7 +233,9 @@ const routes: Routes = [
|
||||||
path: "hint",
|
path: "hint",
|
||||||
canActivate: [unauthGuardFn()],
|
canActivate: [unauthGuardFn()],
|
||||||
data: {
|
data: {
|
||||||
pageTitle: "passwordHint",
|
pageTitle: {
|
||||||
|
key: "passwordHint",
|
||||||
|
},
|
||||||
titleId: "passwordHint",
|
titleId: "passwordHint",
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
|
@ -252,8 +254,12 @@ const routes: Routes = [
|
||||||
path: "hint",
|
path: "hint",
|
||||||
canActivate: [unauthGuardFn()],
|
canActivate: [unauthGuardFn()],
|
||||||
data: {
|
data: {
|
||||||
pageTitle: "requestPasswordHint",
|
pageTitle: {
|
||||||
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
key: "requestPasswordHint",
|
||||||
|
},
|
||||||
|
pageSubtitle: {
|
||||||
|
key: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
||||||
|
},
|
||||||
pageIcon: UserLockIcon,
|
pageIcon: UserLockIcon,
|
||||||
state: "hint",
|
state: "hint",
|
||||||
},
|
},
|
||||||
|
|
|
@ -9389,6 +9389,21 @@
|
||||||
"editAccess": {
|
"editAccess": {
|
||||||
"message": "Edit access"
|
"message": "Edit access"
|
||||||
},
|
},
|
||||||
|
"textHelpText": {
|
||||||
|
"message": "Use text fields for data like security questions"
|
||||||
|
},
|
||||||
|
"hiddenHelpText": {
|
||||||
|
"message": "Use hidden fields for sensitive data like a password"
|
||||||
|
},
|
||||||
|
"checkBoxHelpText": {
|
||||||
|
"message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email"
|
||||||
|
},
|
||||||
|
"linkedHelpText": {
|
||||||
|
"message": "Use a linked field when you are experiencing autofill issues for a specific website."
|
||||||
|
},
|
||||||
|
"linkedLabelHelpText": {
|
||||||
|
"message": "Enter the the field's html id, name, aria-label, or placeholder."
|
||||||
|
},
|
||||||
"uppercaseDescription": {
|
"uppercaseDescription": {
|
||||||
"message": "Include uppercase characters",
|
"message": "Include uppercase characters",
|
||||||
"description": "Tooltip for the password generator uppercase character checkbox"
|
"description": "Tooltip for the password generator uppercase character checkbox"
|
||||||
|
|
|
@ -62,7 +62,9 @@ const routes: Routes = [
|
||||||
path: "accept-provider",
|
path: "accept-provider",
|
||||||
component: AcceptProviderComponent,
|
component: AcceptProviderComponent,
|
||||||
data: {
|
data: {
|
||||||
pageTitle: "joinProvider",
|
pageTitle: {
|
||||||
|
key: "joinProvider",
|
||||||
|
},
|
||||||
titleId: "acceptProvider",
|
titleId: "acceptProvider",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -35,6 +35,7 @@ export enum FeatureFlag {
|
||||||
PM11901_RefactorSelfHostingLicenseUploader = "PM-11901-refactor-self-hosting-license-uploader",
|
PM11901_RefactorSelfHostingLicenseUploader = "PM-11901-refactor-self-hosting-license-uploader",
|
||||||
Pm3478RefactorOrganizationUserApi = "pm-3478-refactor-organizationuser-api",
|
Pm3478RefactorOrganizationUserApi = "pm-3478-refactor-organizationuser-api",
|
||||||
AccessIntelligence = "pm-13227-access-intelligence",
|
AccessIntelligence = "pm-13227-access-intelligence",
|
||||||
|
Pm13322AddPolicyDefinitions = "pm-13322-add-policy-definitions",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AllowedFeatureFlagTypes = boolean | number | string;
|
export type AllowedFeatureFlagTypes = boolean | number | string;
|
||||||
|
@ -80,6 +81,7 @@ export const DefaultFeatureFlagValue = {
|
||||||
[FeatureFlag.PM11901_RefactorSelfHostingLicenseUploader]: FALSE,
|
[FeatureFlag.PM11901_RefactorSelfHostingLicenseUploader]: FALSE,
|
||||||
[FeatureFlag.Pm3478RefactorOrganizationUserApi]: FALSE,
|
[FeatureFlag.Pm3478RefactorOrganizationUserApi]: FALSE,
|
||||||
[FeatureFlag.AccessIntelligence]: FALSE,
|
[FeatureFlag.AccessIntelligence]: FALSE,
|
||||||
|
[FeatureFlag.Pm13322AddPolicyDefinitions]: FALSE,
|
||||||
} satisfies Record<FeatureFlag, AllowedFeatureFlagTypes>;
|
} satisfies Record<FeatureFlag, AllowedFeatureFlagTypes>;
|
||||||
|
|
||||||
export type DefaultFeatureFlagValueType = typeof DefaultFeatureFlagValue;
|
export type DefaultFeatureFlagValueType = typeof DefaultFeatureFlagValue;
|
||||||
|
|
|
@ -43,8 +43,13 @@
|
||||||
></button>
|
></button>
|
||||||
<bit-hint>{{ "sendPasswordDescV2" | i18n }}</bit-hint>
|
<bit-hint>{{ "sendPasswordDescV2" | i18n }}</bit-hint>
|
||||||
</bit-form-field>
|
</bit-form-field>
|
||||||
<bit-form-control *ngIf="!disableHideEmail">
|
<bit-form-control *ngIf="!disableHideEmail || originalSendView.hideEmail">
|
||||||
<input bitCheckbox type="checkbox" formControlName="hideEmail" />
|
<input
|
||||||
|
[disabled]="disableHideEmail && !sendOptionsForm.get('hideEmail').value"
|
||||||
|
bitCheckbox
|
||||||
|
type="checkbox"
|
||||||
|
formControlName="hideEmail"
|
||||||
|
/>
|
||||||
<bit-label>{{ "hideYourEmail" | i18n }}</bit-label>
|
<bit-label>{{ "hideYourEmail" | i18n }}</bit-label>
|
||||||
</bit-form-control>
|
</bit-form-control>
|
||||||
<bit-form-field disableMargin>
|
<bit-form-field disableMargin>
|
||||||
|
|
Loading…
Reference in New Issue