diff --git a/apps/web/src/app/admin-console/organizations/create/organization-information.component.html b/apps/web/src/app/admin-console/organizations/create/organization-information.component.html index 6029cfd833..04324b7d19 100644 --- a/apps/web/src/app/admin-console/organizations/create/organization-information.component.html +++ b/apps/web/src/app/admin-console/organizations/create/organization-information.component.html @@ -12,7 +12,7 @@ - {{ "billingEmail" | i18n }} + {{ "email" | i18n }} diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.html b/apps/web/src/app/admin-console/organizations/settings/account.component.html index c7ac9910ac..e03c8fedcb 100644 --- a/apps/web/src/app/admin-console/organizations/settings/account.component.html +++ b/apps/web/src/app/admin-console/organizations/settings/account.component.html @@ -15,7 +15,7 @@ - {{ "billingEmail" | i18n }} + {{ "email" | i18n }} diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 97d065c689..7b07888eba 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -183,6 +183,10 @@ export class AppComponent implements OnDestroy, OnInit { break; } case "showToast": + if (typeof message.text === "string" && typeof crypto.subtle === "undefined") { + message.title = "This browser requires HTTPS to use the web vault"; + message.text = "Check the Vaultwarden wiki for details on how to enable it"; + } this.showToast(message); break; case "setFullWidth": diff --git a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts b/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts index 1687f366ff..6870ce8b27 100644 --- a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts +++ b/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts @@ -109,11 +109,11 @@ export class TwoFactorAuthenticatorComponent new window.QRious({ element: document.getElementById("qr"), value: - "otpauth://totp/Bitwarden:" + + "otpauth://totp/Vaultwarden:" + Utils.encodeRFC3986URIComponent(email) + "?secret=" + encodeURIComponent(this.key) + - "&issuer=Bitwarden", + "&issuer=Vaultwarden", size: 160, }); }, 100); diff --git a/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts b/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts index 7f13f5e08f..53a0f80e6e 100644 --- a/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts +++ b/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts @@ -44,7 +44,7 @@ export class OrgBillingHistoryViewComponent implements OnInit, OnDestroy { return; } this.loading = true; - this.billing = await this.organizationApiService.getBilling(this.organizationId); + this.billing = null; this.loading = false; } } diff --git a/apps/web/src/app/billing/organizations/organization-plans.component.html b/apps/web/src/app/billing/organizations/organization-plans.component.html index 6dd97b1eec..8e01ba7a95 100644 --- a/apps/web/src/app/billing/organizations/organization-plans.component.html +++ b/apps/web/src/app/billing/organizations/organization-plans.component.html @@ -28,7 +28,7 @@ (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate - *ngIf="!loading && !selfHosted && this.passwordManagerPlans && this.secretsManagerPlans" + *ngIf="!loading" class="tw-pt-6" > !!plan.PasswordManager); @@ -143,6 +144,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { this.formGroup.controls.businessOwned.setValue(true); } } + */ if (this.hasProvider) { this.formGroup.controls.businessOwned.setValue(true); @@ -196,6 +198,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } get selectableProducts() { + return null; let validPlans = this.passwordManagerPlans.filter((plan) => plan.type !== PlanType.Custom); if (this.formGroup.controls.businessOwned.value) { @@ -358,7 +361,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } get planOffersSecretsManager() { - return this.selectedSecretsManagerPlan != null; + return false; } changedProduct() { @@ -521,7 +524,9 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { request.name = this.formGroup.controls.name.value; request.billingEmail = this.formGroup.controls.billingEmail.value; request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString); + request.planType = PlanType.Free; + /* if (this.selectedPlan.type === PlanType.Free) { request.planType = PlanType.Free; } else { @@ -551,7 +556,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { // Secrets Manager this.buildSecretsManagerRequest(request); - + */ if (this.hasProvider) { const providerRequest = new ProviderOrganizationCreateRequest( this.formGroup.controls.clientOwnerEmail.value, diff --git a/apps/web/src/app/components/environment-selector/environment-selector.component.ts b/apps/web/src/app/components/environment-selector/environment-selector.component.ts index 3c1c5a1973..418471459f 100644 --- a/apps/web/src/app/components/environment-selector/environment-selector.component.ts +++ b/apps/web/src/app/components/environment-selector/environment-selector.component.ts @@ -31,7 +31,7 @@ export class EnvironmentSelectorComponent implements OnInit { const domain = Utils.getDomain(window.location.href); this.isEuServer = domain.includes(RegionDomain.EU); this.isUsServer = domain.includes(RegionDomain.US) || domain.includes(RegionDomain.USQA); - this.showRegionSelector = !this.platformUtilsService.isSelfHost(); + this.showRegionSelector = false; this.routeAndParams = `/#${this.router.url}`; } } diff --git a/apps/web/src/app/core/init.service.ts b/apps/web/src/app/core/init.service.ts index f171217d3c..4ff756e645 100644 --- a/apps/web/src/app/core/init.service.ts +++ b/apps/web/src/app/core/init.service.ts @@ -7,10 +7,7 @@ import { NotificationsService as NotificationsServiceAbstraction } from "@bitwar import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; -import { - EnvironmentService as EnvironmentServiceAbstraction, - Urls, -} from "@bitwarden/common/platform/abstractions/environment.service"; +import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/platform/abstractions/i18n.service"; import { StateService as StateServiceAbstraction } from "@bitwarden/common/platform/abstractions/state.service"; import { ConfigService } from "@bitwarden/common/platform/services/config/config.service"; @@ -38,11 +35,23 @@ export class InitService { ) {} init() { + function getBaseUrl() { + // If the base URL is `https://vaultwarden.example.com/base/path/`, + // `window.location.href` should have one of the following forms: + // + // - `https://vaultwarden.example.com/base/path/` + // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]` + // + // We want to get to just `https://vaultwarden.example.com/base/path`. + let baseUrl = window.location.href; + baseUrl = baseUrl.replace(/#.*/, ""); // Strip off `#` and everything after. + baseUrl = baseUrl.replace(/\/+$/, ""); // Trim any trailing `/` chars. + return baseUrl; + } return async () => { await this.stateService.init(); - const urls = process.env.URLS as Urls; - urls.base ??= this.win.location.origin; + const urls = { base: getBaseUrl() }; await this.environmentService.setUrls(urls); // Workaround to ignore stateService.activeAccount until process.env.URLS are set // TODO: Remove this when implementing ticket PM-2637 diff --git a/apps/web/src/app/core/router.service.ts b/apps/web/src/app/core/router.service.ts index 82399d4e49..56e72cdcdb 100644 --- a/apps/web/src/app/core/router.service.ts +++ b/apps/web/src/app/core/router.service.ts @@ -23,7 +23,7 @@ export class RouterService { .subscribe((event: NavigationEnd) => { this.currentUrl = event.url; - let title = i18nService.t("bitWebVault"); + let title = "Vaultwarden Web"; if (this.currentUrl.includes("/sm/")) { title = i18nService.t("bitSecretsManager"); diff --git a/apps/web/src/app/core/web-platform-utils.service.ts b/apps/web/src/app/core/web-platform-utils.service.ts index ec829d71fb..f3a362d0e7 100644 --- a/apps/web/src/app/core/web-platform-utils.service.ts +++ b/apps/web/src/app/core/web-platform-utils.service.ts @@ -133,15 +133,15 @@ export class WebPlatformUtilsService implements PlatformUtilsService { } isDev(): boolean { - return process.env.NODE_ENV === "development"; + return false; } isSelfHost(): boolean { - return WebPlatformUtilsService.isSelfHost(); + return false; } static isSelfHost(): boolean { - return process.env.ENV.toString() === "selfhosted"; + return false; } copyToClipboard(text: string, options?: any): void | boolean { diff --git a/apps/web/src/app/layouts/footer.component.html b/apps/web/src/app/layouts/footer.component.html index 8cacb4ceba..0504559697 100644 --- a/apps/web/src/app/layouts/footer.component.html +++ b/apps/web/src/app/layouts/footer.component.html @@ -1,7 +1,9 @@