mirror of
https://github.com/dani-garcia/bw_web_builds.git
synced 2025-03-14 03:48:26 +03:00
Merge pull request #157 from stefan0xC/update-to-v2024.3.x
update web-vault to v2024.3.0 (new vertical layout)
This commit is contained in:
commit
ac7f24e355
7 changed files with 1478 additions and 3 deletions
|
@ -26,8 +26,8 @@ USER node
|
|||
# Can be a tag, release, but prefer a commit hash because it's not changeable
|
||||
# https://github.com/bitwarden/clients/commit/${VAULT_VERSION}
|
||||
#
|
||||
# Using https://github.com/bitwarden/clients/releases/tag/web-v2024.1.2
|
||||
ARG VAULT_VERSION=a1a5c4b3d3c5787e9517ac30b9b6f344f18fe5e6
|
||||
# Using https://github.com/bitwarden/clients/releases/tag/web-v2024.3.0
|
||||
ARG VAULT_VERSION=dbf0f1e328e73bbdea9f120c020770c9e117ad6d
|
||||
|
||||
WORKDIR /vault
|
||||
RUN git -c init.defaultBranch=main init && \
|
||||
|
|
720
patches/v2024.2.4.patch
Normal file
720
patches/v2024.2.4.patch
Normal file
|
@ -0,0 +1,720 @@
|
|||
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 @@
|
||||
<input bitInput type="text" formControlName="name" />
|
||||
</bit-form-field>
|
||||
<bit-form-field class="tw-w-1/2">
|
||||
- <bit-label>{{ "billingEmail" | i18n }}</bit-label>
|
||||
+ <bit-label>{{ "email" | i18n }}</bit-label>
|
||||
<input bitInput type="email" formControlName="billingEmail" />
|
||||
</bit-form-field>
|
||||
<bit-form-field class="tw-w-1/2" *ngIf="isProvider">
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
index 7e50a09087..27ea8f09c9 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
@@ -105,6 +105,7 @@ export class OrganizationLayoutComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
canShowBillingTab(organization: Organization): boolean {
|
||||
+ return false; // disable billing tab in Vaultwarden
|
||||
return canAccessBillingTab(organization);
|
||||
}
|
||||
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
index 7abee6b0d0..2e3b789b23 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
@@ -68,13 +68,6 @@ const routes: Routes = [
|
||||
(m) => m.OrganizationReportingModule,
|
||||
),
|
||||
},
|
||||
- {
|
||||
- path: "billing",
|
||||
- loadChildren: () =>
|
||||
- import("../../billing/organizations/organization-billing.module").then(
|
||||
- (m) => m.OrganizationBillingModule,
|
||||
- ),
|
||||
- },
|
||||
],
|
||||
},
|
||||
];
|
||||
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 7035b976ca..44b24584ae 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
|
||||
@@ -17,7 +17,7 @@
|
||||
<input bitInput id="orgName" type="text" formControlName="orgName" />
|
||||
</bit-form-field>
|
||||
<bit-form-field>
|
||||
- <bit-label>{{ "billingEmail" | i18n }}</bit-label>
|
||||
+ <bit-label>{{ "email" | i18n }}</bit-label>
|
||||
<input bitInput id="billingEmail" formControlName="billingEmail" type="email" />
|
||||
</bit-form-field>
|
||||
<bit-form-field>
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.ts b/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
index 8527aa1b17..971d78d8d5 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
@@ -99,7 +99,7 @@ export class AccountComponent {
|
||||
) {}
|
||||
|
||||
async ngOnInit() {
|
||||
- this.selfHosted = this.platformUtilsService.isSelfHost();
|
||||
+ this.selfHosted = false; // set to false so we can rename organizations
|
||||
|
||||
this.route.params
|
||||
.pipe(
|
||||
@@ -204,6 +204,7 @@ export class AccountComponent {
|
||||
}
|
||||
|
||||
submitCollectionManagement = async () => {
|
||||
+ return; // flexible collections are not supported by Vaultwarden
|
||||
// Early exit if self-hosted
|
||||
if (this.selfHosted) {
|
||||
return;
|
||||
diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts
|
||||
index f9479a92ce..9a6c489c38 100644
|
||||
--- a/apps/web/src/app/app.component.ts
|
||||
+++ b/apps/web/src/app/app.component.ts
|
||||
@@ -205,6 +205,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 "convertAccountToKeyConnector":
|
||||
diff --git a/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html b/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
index 4690a4e63a..9d297671d2 100644
|
||||
--- a/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
+++ b/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="mt-5 d-flex justify-content-center" *ngIf="loading">
|
||||
<div>
|
||||
- <img class="mb-4 logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="mb-4 logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="text-center">
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-2x text-muted"
|
||||
diff --git a/apps/web/src/app/auth/login/login.component.html b/apps/web/src/app/auth/login/login.component.html
|
||||
index 5c68058a3c..d0bac687b0 100644
|
||||
--- a/apps/web/src/app/auth/login/login.component.html
|
||||
+++ b/apps/web/src/app/auth/login/login.component.html
|
||||
@@ -9,7 +9,7 @@
|
||||
class="tw-mx-auto tw-mt-5 tw-flex tw-max-w-lg tw-flex-col tw-items-center tw-justify-center tw-p-8"
|
||||
>
|
||||
<div>
|
||||
- <img class="logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="tw-mx-4 tw-mb-4 tw-mt-3 tw-text-center tw-text-xl">
|
||||
{{ "loginOrCreateNewAccount" | i18n }}
|
||||
</p>
|
||||
@@ -51,7 +51,7 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
- <div class="tw-mb-3 tw-flex tw-flex-col tw-items-center tw-justify-center">
|
||||
+ <div class="tw-mb-3 tw-flex tw-flex-col tw-items-center tw-justify-center vw-hide">
|
||||
<p class="tw-mb-3">{{ "or" | i18n }}</p>
|
||||
|
||||
<a
|
||||
diff --git a/apps/web/src/app/auth/settings/change-password.component.html b/apps/web/src/app/auth/settings/change-password.component.html
|
||||
index 7c3c22b3d7..9a6900104d 100644
|
||||
--- a/apps/web/src/app/auth/settings/change-password.component.html
|
||||
+++ b/apps/web/src/app/auth/settings/change-password.component.html
|
||||
@@ -125,5 +125,3 @@
|
||||
{{ "changeMasterPassword" | i18n }}
|
||||
</button>
|
||||
</form>
|
||||
-
|
||||
-<app-webauthn-login-settings></app-webauthn-login-settings>
|
||||
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 849e003440..de32156aad 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 78872aa6a9..eed953b91a 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 a77d42a359..7de4e33fe2 100644
|
||||
--- a/apps/web/src/app/billing/organizations/organization-plans.component.html
|
||||
+++ b/apps/web/src/app/billing/organizations/organization-plans.component.html
|
||||
@@ -6,7 +6,7 @@
|
||||
></i>
|
||||
<span class="sr-only">{{ "loading" | i18n }}</span>
|
||||
</ng-container>
|
||||
-<ng-container *ngIf="createOrganization && selfHosted">
|
||||
+<ng-container *ngIf="createOrganization && false">
|
||||
<p>{{ "uploadLicenseFileOrg" | i18n }}</p>
|
||||
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate>
|
||||
<div class="form-group">
|
||||
@@ -28,7 +28,7 @@
|
||||
(ngSubmit)="submit()"
|
||||
[appApiAction]="formPromise"
|
||||
ngNativeValidate
|
||||
- *ngIf="!loading && !selfHosted && this.passwordManagerPlans && this.secretsManagerPlans"
|
||||
+ *ngIf="!loading"
|
||||
class="tw-pt-6"
|
||||
>
|
||||
<app-org-info
|
||||
diff --git a/apps/web/src/app/billing/organizations/organization-plans.component.ts b/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
index 44d78ecce2..4fe484cfbe 100644
|
||||
--- a/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
+++ b/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
@@ -151,10 +151,11 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
async ngOnInit() {
|
||||
if (this.organizationId) {
|
||||
this.organization = this.organizationService.get(this.organizationId);
|
||||
- this.billing = await this.organizationApiService.getBilling(this.organizationId);
|
||||
- this.sub = await this.organizationApiService.getSubscription(this.organizationId);
|
||||
+ this.billing = null; // no billing in Vaultwarden
|
||||
+ this.sub = null; // no subscriptions in Vaultwarden;
|
||||
}
|
||||
|
||||
+ /* no need to ask /api/plans because Vaultwarden only supports the free plan
|
||||
if (!this.selfHosted) {
|
||||
const plans = await this.apiService.getPlans();
|
||||
this.passwordManagerPlans = plans.data.filter((plan) => !!plan.PasswordManager);
|
||||
@@ -186,6 +187,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
this.plan = providerDefaultPlan.type;
|
||||
this.product = providerDefaultPlan.product;
|
||||
}
|
||||
+ end of asking /api/plans in Vaultwarden */
|
||||
|
||||
if (!this.createOrganization) {
|
||||
this.upgradeFlowPrefillForm();
|
||||
@@ -257,6 +259,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get selectableProducts() {
|
||||
+ return null; // there are no products to select in Vaultwarden
|
||||
if (this.acceptingSponsorship) {
|
||||
const familyPlan = this.passwordManagerPlans.find(
|
||||
(plan) => plan.type === PlanType.FamiliesAnnually,
|
||||
@@ -287,6 +290,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get selectablePlans() {
|
||||
+ return null; // no plans to select in Vaultwarden
|
||||
const selectedProductType = this.formGroup.controls.product.value;
|
||||
const result =
|
||||
this.passwordManagerPlans?.filter(
|
||||
@@ -427,10 +431,12 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get planOffersSecretsManager() {
|
||||
+ return false; // no support for secrets manager in Vaultwarden
|
||||
return this.selectedSecretsManagerPlan != null;
|
||||
}
|
||||
|
||||
changedProduct() {
|
||||
+ return; // no choice of products in Vaultwarden
|
||||
const selectedPlan = this.selectablePlans[0];
|
||||
|
||||
this.setPlanType(selectedPlan.type);
|
||||
@@ -543,7 +549,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
const orgKeys = await this.cryptoService.makeKeyPair(orgKey[1]);
|
||||
|
||||
if (this.selfHosted) {
|
||||
- orgId = await this.createSelfHosted(key, collectionCt, orgKeys);
|
||||
+ orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]);
|
||||
} else {
|
||||
orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]);
|
||||
}
|
||||
@@ -643,7 +649,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; // always select the free plan in Vaultwarden
|
||||
|
||||
+ /* there is no plan to select in Vaultwarden
|
||||
if (this.selectedPlan.type === PlanType.Free) {
|
||||
request.planType = PlanType.Free;
|
||||
} else {
|
||||
@@ -673,6 +681,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
|
||||
// Secrets Manager
|
||||
this.buildSecretsManagerRequest(request);
|
||||
+ end plan selection and no support for secret manager in Vaultwarden */
|
||||
|
||||
if (this.hasProvider) {
|
||||
const providerRequest = new ProviderOrganizationCreateRequest(
|
||||
@@ -754,6 +763,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
private upgradeFlowPrefillForm() {
|
||||
+ return; // Vaultwarden only supports free plan
|
||||
if (this.acceptingSponsorship) {
|
||||
this.formGroup.controls.product.setValue(ProductType.Families);
|
||||
this.changedProduct();
|
||||
diff --git a/apps/web/src/app/core/init.service.ts b/apps/web/src/app/core/init.service.ts
|
||||
index 899a168479..5bb71b05f6 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 5a0d903ba7..d6fedadd38 100644
|
||||
--- a/apps/web/src/app/core/router.service.ts
|
||||
+++ b/apps/web/src/app/core/router.service.ts
|
||||
@@ -26,7 +26,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 02c7c29e34..9fd100024a 100644
|
||||
--- a/apps/web/src/app/core/web-platform-utils.service.ts
|
||||
+++ b/apps/web/src/app/core/web-platform-utils.service.ts
|
||||
@@ -133,14 +133,17 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
|
||||
}
|
||||
|
||||
isDev(): boolean {
|
||||
+ return false; // treat Vaultwarden as production ready
|
||||
return process.env.NODE_ENV === "development";
|
||||
}
|
||||
|
||||
isSelfHost(): boolean {
|
||||
+ return true; // treat Vaultwarden as self hosted
|
||||
return WebPlatformUtilsService.isSelfHost();
|
||||
}
|
||||
|
||||
static isSelfHost(): boolean {
|
||||
+ return true; // treat Vaultwarden as self hosted
|
||||
return process.env.ENV.toString() === "selfhosted";
|
||||
}
|
||||
|
||||
diff --git a/apps/web/src/app/layouts/frontend-layout.component.html b/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
index 72f0f1f1da..cea0867131 100644
|
||||
--- a/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
+++ b/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
@@ -1,6 +1,11 @@
|
||||
<router-outlet></router-outlet>
|
||||
<div class="container my-5 text-muted text-center">
|
||||
- <environment-selector></environment-selector>
|
||||
- © {{ year }} Bitwarden Inc. <br />
|
||||
+ Vaultwarden Web<br />
|
||||
{{ "versionNumber" | i18n: version }}
|
||||
+ <br /><br />
|
||||
+ <div class="small">
|
||||
+ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of the
|
||||
+ Bitwarden® server).<br />
|
||||
+ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc.
|
||||
+ </div>
|
||||
</div>
|
||||
diff --git a/apps/web/src/app/layouts/header/web-header.component.html b/apps/web/src/app/layouts/header/web-header.component.html
|
||||
index 514e5deebd..20165e5061 100644
|
||||
--- a/apps/web/src/app/layouts/header/web-header.component.html
|
||||
+++ b/apps/web/src/app/layouts/header/web-header.component.html
|
||||
@@ -76,7 +76,12 @@
|
||||
<i class="bwi bwi-fw bwi-user" aria-hidden="true"></i>
|
||||
{{ "accountSettings" | i18n }}
|
||||
</a>
|
||||
- <a bitMenuItem href="https://bitwarden.com/help/" target="_blank" rel="noreferrer">
|
||||
+ <a
|
||||
+ bitMenuItem
|
||||
+ href="https://github.com/dani-garcia/vaultwarden"
|
||||
+ target="_blank"
|
||||
+ rel="noreferrer"
|
||||
+ >
|
||||
<i class="bwi bwi-fw bwi-question-circle" aria-hidden="true"></i>
|
||||
{{ "getHelp" | i18n }}
|
||||
</a>
|
||||
diff --git a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
index 9068f9c071..e051dccc85 100644
|
||||
--- a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
+++ b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
<!-- Other options -->
|
||||
<section
|
||||
- *ngIf="products.other.length > 0"
|
||||
+ *ngIf="false"
|
||||
class="tw-mt-4 tw-flex tw-w-full tw-flex-col tw-gap-2 tw-border-0 tw-border-t tw-border-solid tw-border-t-text-muted tw-p-2 tw-pb-0"
|
||||
>
|
||||
<span class="tw-mb-1 tw-text-xs tw-text-muted">{{ "moreFromBitwarden" | i18n }}</span>
|
||||
diff --git a/apps/web/src/app/layouts/user-layout.component.html b/apps/web/src/app/layouts/user-layout.component.html
|
||||
index 3593390113..ac78bcb651 100644
|
||||
--- a/apps/web/src/app/layouts/user-layout.component.html
|
||||
+++ b/apps/web/src/app/layouts/user-layout.component.html
|
||||
@@ -33,9 +33,5 @@
|
||||
></bit-nav-item>
|
||||
</bit-nav-group>
|
||||
</nav>
|
||||
- <app-payment-method-banners
|
||||
- *ngIf="false"
|
||||
- class="-tw-m-6 tw-flex tw-flex-col tw-pb-6"
|
||||
- ></app-payment-method-banners>
|
||||
<router-outlet></router-outlet>
|
||||
</bit-layout>
|
||||
diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts
|
||||
index e5c2f353c0..845d8b86ab 100644
|
||||
--- a/apps/web/src/app/oss-routing.module.ts
|
||||
+++ b/apps/web/src/app/oss-routing.module.ts
|
||||
@@ -222,13 +222,6 @@ const routes: Routes = [
|
||||
component: DomainRulesComponent,
|
||||
data: { titleId: "domainRules" },
|
||||
},
|
||||
- {
|
||||
- path: "subscription",
|
||||
- loadChildren: () =>
|
||||
- import("./billing/individual/individual-billing.module").then(
|
||||
- (m) => m.IndividualBillingModule,
|
||||
- ),
|
||||
- },
|
||||
{
|
||||
path: "emergency-access",
|
||||
children: [
|
||||
diff --git a/apps/web/src/app/settings/settings.component.ts b/apps/web/src/app/settings/settings.component.ts
|
||||
index c2fd1c77fa..9e116d7f2c 100644
|
||||
--- a/apps/web/src/app/settings/settings.component.ts
|
||||
+++ b/apps/web/src/app/settings/settings.component.ts
|
||||
@@ -53,14 +53,7 @@ export class SettingsComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
async load() {
|
||||
- this.premium = await this.stateService.getHasPremiumPersonally();
|
||||
- this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();
|
||||
- const hasPremiumFromOrg = await this.stateService.getHasPremiumFromOrganization();
|
||||
- let billing = null;
|
||||
- if (!this.selfHosted) {
|
||||
- billing = await this.apiService.getUserBillingHistory();
|
||||
- }
|
||||
- this.hideSubscription =
|
||||
- !this.premium && hasPremiumFromOrg && (this.selfHosted || billing?.hasNoHistory);
|
||||
+ this.hasFamilySponsorshipAvailable = false; // disable family Sponsorships in Vaultwarden
|
||||
+ this.hideSubscription = true; // always hide subscriptions in Vaultwarden
|
||||
}
|
||||
}
|
||||
diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts
|
||||
index 770a862eab..863efc8769 100644
|
||||
--- a/apps/web/src/app/shared/loose-components.module.ts
|
||||
+++ b/apps/web/src/app/shared/loose-components.module.ts
|
||||
@@ -59,7 +59,6 @@ import { UpdateTempPasswordComponent } from "../auth/update-temp-password.compon
|
||||
import { VerifyEmailTokenComponent } from "../auth/verify-email-token.component";
|
||||
import { VerifyRecoverDeleteComponent } from "../auth/verify-recover-delete.component";
|
||||
import { DynamicAvatarComponent } from "../components/dynamic-avatar.component";
|
||||
-import { PaymentMethodBannersComponent } from "../components/payment-method-banners/payment-method-banners.component";
|
||||
import { SelectableAvatarComponent } from "../components/selectable-avatar.component";
|
||||
import { FrontendLayoutComponent } from "../layouts/frontend-layout.component";
|
||||
import { HeaderModule } from "../layouts/header/header.module";
|
||||
@@ -106,7 +105,6 @@ import { SharedModule } from "./shared.module";
|
||||
PipesModule,
|
||||
PasswordCalloutComponent,
|
||||
DangerZoneComponent,
|
||||
- PaymentMethodBannersComponent,
|
||||
LayoutComponent,
|
||||
NavigationModule,
|
||||
HeaderModule,
|
||||
diff --git a/apps/web/src/app/tools/send/access.component.html b/apps/web/src/app/tools/send/access.component.html
|
||||
index 6fef7d361d..1deb1164ff 100644
|
||||
--- a/apps/web/src/app/tools/send/access.component.html
|
||||
+++ b/apps/web/src/app/tools/send/access.component.html
|
||||
@@ -2,7 +2,7 @@
|
||||
<div
|
||||
class="tw-mx-auto tw-mt-5 tw-flex tw-max-w-xl tw-flex-col tw-items-center tw-justify-center tw-p-8"
|
||||
>
|
||||
- <img class="logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="logo logo-themed" alt="Vaultwarden" />
|
||||
<div class="tw-mt-5 tw-w-full">
|
||||
<h2 bitTypography="h2" class="tw-mb-4 tw-text-center">View Send</h2>
|
||||
</div>
|
||||
@@ -66,19 +66,6 @@
|
||||
<div class="tw-mt-5 tw-w-10/12 tw-text-center tw-text-muted">
|
||||
<p bitTypography="body2" class="tw-mb-0">
|
||||
{{ "sendAccessTaglineProductDesc" | i18n }}
|
||||
- {{ "sendAccessTaglineLearnMore" | i18n }}
|
||||
- <a
|
||||
- bitLink
|
||||
- href="https://www.bitwarden.com/products/send?source=web-vault"
|
||||
- target="_blank"
|
||||
- rel="noreferrer"
|
||||
- >Bitwarden Send</a
|
||||
- >
|
||||
- {{ "sendAccessTaglineOr" | i18n }}
|
||||
- <a bitLink routerLink="/register" target="_blank" rel="noreferrer">{{
|
||||
- "sendAccessTaglineSignUp" | i18n
|
||||
- }}</a>
|
||||
- {{ "sendAccessTaglineTryToday" | i18n }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
diff --git a/apps/web/src/index.html b/apps/web/src/index.html
|
||||
index c3a2c03ed9..1a326771a6 100644
|
||||
--- a/apps/web/src/index.html
|
||||
+++ b/apps/web/src/index.html
|
||||
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=1010" />
|
||||
<meta name="theme-color" content="#175DDC" />
|
||||
|
||||
- <title page-title>Bitwarden Web Vault</title>
|
||||
+ <title page-title>Vaultwarden Web</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png" />
|
||||
@@ -17,7 +17,7 @@
|
||||
<app-root>
|
||||
<div class="mt-5 d-flex justify-content-center">
|
||||
<div>
|
||||
- <img class="mb-4 logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="mb-4 logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="text-center">
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-2x text-muted"
|
||||
diff --git a/apps/web/src/manifest.json b/apps/web/src/manifest.json
|
||||
index 92a1204c60..d9ff4771a3 100644
|
||||
--- a/apps/web/src/manifest.json
|
||||
+++ b/apps/web/src/manifest.json
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
- "name": "Bitwarden Vault",
|
||||
+ "name": "Vaultwarden Web",
|
||||
"icons": [
|
||||
{
|
||||
"src": "images/icons/android-chrome-192x192.png",
|
||||
@@ -12,6 +12,6 @@
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
- "theme_color": "#175DDC",
|
||||
- "background_color": "#175DDC"
|
||||
+ "theme_color": "#FFFFFF",
|
||||
+ "background_color": "#FFFFFF"
|
||||
}
|
||||
diff --git a/apps/web/src/scss/styles.scss b/apps/web/src/scss/styles.scss
|
||||
index 98b3512ba5..8691768352 100644
|
||||
--- a/apps/web/src/scss/styles.scss
|
||||
+++ b/apps/web/src/scss/styles.scss
|
||||
@@ -56,3 +56,80 @@
|
||||
@import "./tables";
|
||||
@import "./toasts";
|
||||
@import "./vault-filters";
|
||||
+
|
||||
+/**** START Vaultwarden CHANGES ****/
|
||||
+/* This combines all selectors extending it into one */
|
||||
+%vw-hide {
|
||||
+ display: none !important;
|
||||
+}
|
||||
+
|
||||
+/* This allows searching for the combined style in the browsers dev-tools (look into the head tag) */
|
||||
+.vw-hide,
|
||||
+head {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the Subscription Page tab */
|
||||
+bit-nav-item[route="settings/subscription"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide any link pointing to Free Bitwarden Families */
|
||||
+a[href$="/settings/sponsored-families"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the `Enterprise Single Sign-On` button on the login page */
|
||||
+a[routerlink="/sso"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Two-Factor menu in Organization settings */
|
||||
+bit-nav-item[route="settings/two-factor"],
|
||||
+a[href$="/settings/two-factor"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Business Owned checkbox */
|
||||
+app-org-info > form:nth-child(1) > div:nth-child(3) {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the `This account is owned by a business` checkbox and label */
|
||||
+#ownedBusiness,
|
||||
+label[for^="ownedBusiness"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the radio button and label for the `Custom` org user type */
|
||||
+#userTypeCustom,
|
||||
+label[for^="userTypeCustom"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Business Name */
|
||||
+app-org-account form div bit-form-field.tw-block:nth-child(3) {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide organization plans */
|
||||
+app-organization-plans > form > h2.mt-5 {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Device Verification form at the Two Step Login screen */
|
||||
+app-security > app-two-factor-setup > form {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Replace the Bitwarden Shield at the top left with a Vaultwarden icon */
|
||||
+.bwi-shield:before {
|
||||
+ content: "" !important;
|
||||
+ width: 32px !important;
|
||||
+ height: 40px !important;
|
||||
+ display: block !important;
|
||||
+ background-image: url(../images/icon-white.png) !important;
|
||||
+ background-repeat: no-repeat;
|
||||
+ background-position-y: bottom;
|
||||
+}
|
||||
+/**** END Vaultwarden CHANGES ****/
|
||||
diff --git a/apps/web/src/scss/variables.scss b/apps/web/src/scss/variables.scss
|
||||
index 9d3d8d6ad4..5bc773c0d8 100644
|
||||
--- a/apps/web/src/scss/variables.scss
|
||||
+++ b/apps/web/src/scss/variables.scss
|
||||
@@ -3,7 +3,7 @@ $dark-icon-themes: "theme_dark";
|
||||
$primary: #175ddc;
|
||||
$primary-accent: #1252a3;
|
||||
$secondary: #ced4da;
|
||||
-$secondary-alt: #1a3b66;
|
||||
+$secondary-alt: #212529;
|
||||
$success: #017e45;
|
||||
$info: #555555;
|
||||
$warning: #8b6609;
|
||||
diff --git a/apps/web/webpack.config.js b/apps/web/webpack.config.js
|
||||
index 6ac384cb82..0492e09476 100644
|
||||
--- a/apps/web/webpack.config.js
|
||||
+++ b/apps/web/webpack.config.js
|
||||
@@ -141,8 +141,6 @@ const plugins = [
|
||||
{ from: "./src/favicon.ico" },
|
||||
{ from: "./src/browserconfig.xml" },
|
||||
{ from: "./src/app-id.json" },
|
||||
- { from: "./src/404.html" },
|
||||
- { from: "./src/404", to: "404" },
|
||||
{ from: "./src/images", to: "images" },
|
||||
{ from: "./src/locales", to: "locales" },
|
||||
{ from: "../../node_modules/qrious/dist/qrious.min.js", to: "scripts" },
|
||||
diff --git a/libs/angular/src/auth/components/register.component.ts b/libs/angular/src/auth/components/register.component.ts
|
||||
index 3cffebe71b..c1229b5c2c 100644
|
||||
--- a/libs/angular/src/auth/components/register.component.ts
|
||||
+++ b/libs/angular/src/auth/components/register.component.ts
|
||||
@@ -106,6 +106,14 @@ export class RegisterComponent extends CaptchaProtectedComponent implements OnIn
|
||||
}
|
||||
|
||||
async submit(showToast = true) {
|
||||
+ if (typeof crypto.subtle === "undefined") {
|
||||
+ this.platformUtilsService.showToast(
|
||||
+ "error",
|
||||
+ "This browser requires HTTPS to use the web vault",
|
||||
+ "Check the Vaultwarden wiki for details on how to enable it",
|
||||
+ );
|
||||
+ return;
|
||||
+ }
|
||||
let email = this.formGroup.value.email;
|
||||
email = email.trim().toLowerCase();
|
||||
let name = this.formGroup.value.name;
|
||||
diff --git a/libs/angular/src/auth/components/two-factor-options.component.ts b/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
index 4293eb9966..7a8e861e8d 100644
|
||||
--- a/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
+++ b/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
@@ -30,7 +30,9 @@ export class TwoFactorOptionsComponent implements OnInit {
|
||||
}
|
||||
|
||||
recover() {
|
||||
- this.platformUtilsService.launchUri("https://vault.bitwarden.com/#/recover-2fa");
|
||||
+ this.platformUtilsService.launchUri(
|
||||
+ "https://bitwarden.com/help/two-step-recovery-code/#use-your-recovery-code",
|
||||
+ );
|
||||
this.onRecoverSelected.emit();
|
||||
}
|
||||
}
|
||||
diff --git a/libs/components/src/tw-theme.css b/libs/components/src/tw-theme.css
|
||||
index 75a8fa6380..733dbe9413 100644
|
||||
--- a/libs/components/src/tw-theme.css
|
||||
+++ b/libs/components/src/tw-theme.css
|
||||
@@ -6,12 +6,12 @@
|
||||
--color-background: 255 255 255;
|
||||
--color-background-alt: 251 251 251;
|
||||
--color-background-alt2: 23 92 219;
|
||||
- --color-background-alt3: 18 82 163;
|
||||
- --color-background-alt4: 13 60 119;
|
||||
+ --color-background-alt3: 33 37 41; /* bg of menu panel */
|
||||
+ --color-background-alt4: 16 18 21; /* bg of active menu item */
|
||||
|
||||
- --color-primary-300: 103 149 232;
|
||||
- --color-primary-500: 23 93 220;
|
||||
- --color-primary-700: 18 82 163;
|
||||
+ --color-primary-300: 108 117 125; /* hover of menu items */
|
||||
+ --color-primary-500: 18 82 163; /* color of links and buttons */
|
||||
+ --color-primary-700: 13 60 119; /* hover of links and buttons */
|
||||
|
||||
--color-secondary-100: 240 240 240;
|
||||
--color-secondary-300: 206 212 220;
|
719
patches/v2024.3.0.patch
Normal file
719
patches/v2024.3.0.patch
Normal file
|
@ -0,0 +1,719 @@
|
|||
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 @@
|
||||
<input bitInput type="text" formControlName="name" />
|
||||
</bit-form-field>
|
||||
<bit-form-field class="tw-w-1/2">
|
||||
- <bit-label>{{ "billingEmail" | i18n }}</bit-label>
|
||||
+ <bit-label>{{ "email" | i18n }}</bit-label>
|
||||
<input bitInput type="email" formControlName="billingEmail" />
|
||||
</bit-form-field>
|
||||
<bit-form-field class="tw-w-1/2" *ngIf="isProvider">
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
index 90010160aa..4d0a2717af 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts
|
||||
@@ -113,6 +113,7 @@ export class OrganizationLayoutComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
canShowBillingTab(organization: Organization): boolean {
|
||||
+ return false; // disable billing tab in Vaultwarden
|
||||
return canAccessBillingTab(organization);
|
||||
}
|
||||
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
index 7abee6b0d0..2e3b789b23 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts
|
||||
@@ -68,13 +68,6 @@ const routes: Routes = [
|
||||
(m) => m.OrganizationReportingModule,
|
||||
),
|
||||
},
|
||||
- {
|
||||
- path: "billing",
|
||||
- loadChildren: () =>
|
||||
- import("../../billing/organizations/organization-billing.module").then(
|
||||
- (m) => m.OrganizationBillingModule,
|
||||
- ),
|
||||
- },
|
||||
],
|
||||
},
|
||||
];
|
||||
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 7035b976ca..44b24584ae 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
|
||||
@@ -17,7 +17,7 @@
|
||||
<input bitInput id="orgName" type="text" formControlName="orgName" />
|
||||
</bit-form-field>
|
||||
<bit-form-field>
|
||||
- <bit-label>{{ "billingEmail" | i18n }}</bit-label>
|
||||
+ <bit-label>{{ "email" | i18n }}</bit-label>
|
||||
<input bitInput id="billingEmail" formControlName="billingEmail" type="email" />
|
||||
</bit-form-field>
|
||||
<bit-form-field>
|
||||
diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.ts b/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
index 8527aa1b17..971d78d8d5 100644
|
||||
--- a/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
+++ b/apps/web/src/app/admin-console/organizations/settings/account.component.ts
|
||||
@@ -99,7 +99,7 @@ export class AccountComponent {
|
||||
) {}
|
||||
|
||||
async ngOnInit() {
|
||||
- this.selfHosted = this.platformUtilsService.isSelfHost();
|
||||
+ this.selfHosted = false; // set to false so we can rename organizations
|
||||
|
||||
this.route.params
|
||||
.pipe(
|
||||
@@ -204,6 +204,7 @@ export class AccountComponent {
|
||||
}
|
||||
|
||||
submitCollectionManagement = async () => {
|
||||
+ return; // flexible collections are not supported by Vaultwarden
|
||||
// Early exit if self-hosted
|
||||
if (this.selfHosted) {
|
||||
return;
|
||||
diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts
|
||||
index 73721de789..1b1726ff1f 100644
|
||||
--- a/apps/web/src/app/app.component.ts
|
||||
+++ b/apps/web/src/app/app.component.ts
|
||||
@@ -213,6 +213,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 "convertAccountToKeyConnector":
|
||||
diff --git a/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html b/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
index 4690a4e63a..9d297671d2 100644
|
||||
--- a/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
+++ b/apps/web/src/app/auth/emergency-access/accept/accept-emergency.component.html
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="mt-5 d-flex justify-content-center" *ngIf="loading">
|
||||
<div>
|
||||
- <img class="mb-4 logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="mb-4 logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="text-center">
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-2x text-muted"
|
||||
diff --git a/apps/web/src/app/auth/login/login.component.html b/apps/web/src/app/auth/login/login.component.html
|
||||
index 5c68058a3c..d0bac687b0 100644
|
||||
--- a/apps/web/src/app/auth/login/login.component.html
|
||||
+++ b/apps/web/src/app/auth/login/login.component.html
|
||||
@@ -9,7 +9,7 @@
|
||||
class="tw-mx-auto tw-mt-5 tw-flex tw-max-w-lg tw-flex-col tw-items-center tw-justify-center tw-p-8"
|
||||
>
|
||||
<div>
|
||||
- <img class="logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="tw-mx-4 tw-mb-4 tw-mt-3 tw-text-center tw-text-xl">
|
||||
{{ "loginOrCreateNewAccount" | i18n }}
|
||||
</p>
|
||||
@@ -51,7 +51,7 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
- <div class="tw-mb-3 tw-flex tw-flex-col tw-items-center tw-justify-center">
|
||||
+ <div class="tw-mb-3 tw-flex tw-flex-col tw-items-center tw-justify-center vw-hide">
|
||||
<p class="tw-mb-3">{{ "or" | i18n }}</p>
|
||||
|
||||
<a
|
||||
diff --git a/apps/web/src/app/auth/settings/change-password.component.html b/apps/web/src/app/auth/settings/change-password.component.html
|
||||
index 7c3c22b3d7..9a6900104d 100644
|
||||
--- a/apps/web/src/app/auth/settings/change-password.component.html
|
||||
+++ b/apps/web/src/app/auth/settings/change-password.component.html
|
||||
@@ -125,5 +125,3 @@
|
||||
{{ "changeMasterPassword" | i18n }}
|
||||
</button>
|
||||
</form>
|
||||
-
|
||||
-<app-webauthn-login-settings></app-webauthn-login-settings>
|
||||
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 849e003440..de32156aad 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 78872aa6a9..eed953b91a 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 a77d42a359..7de4e33fe2 100644
|
||||
--- a/apps/web/src/app/billing/organizations/organization-plans.component.html
|
||||
+++ b/apps/web/src/app/billing/organizations/organization-plans.component.html
|
||||
@@ -6,7 +6,7 @@
|
||||
></i>
|
||||
<span class="sr-only">{{ "loading" | i18n }}</span>
|
||||
</ng-container>
|
||||
-<ng-container *ngIf="createOrganization && selfHosted">
|
||||
+<ng-container *ngIf="createOrganization && false">
|
||||
<p>{{ "uploadLicenseFileOrg" | i18n }}</p>
|
||||
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate>
|
||||
<div class="form-group">
|
||||
@@ -28,7 +28,7 @@
|
||||
(ngSubmit)="submit()"
|
||||
[appApiAction]="formPromise"
|
||||
ngNativeValidate
|
||||
- *ngIf="!loading && !selfHosted && this.passwordManagerPlans && this.secretsManagerPlans"
|
||||
+ *ngIf="!loading"
|
||||
class="tw-pt-6"
|
||||
>
|
||||
<app-org-info
|
||||
diff --git a/apps/web/src/app/billing/organizations/organization-plans.component.ts b/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
index b7070be1cf..cab9dd603f 100644
|
||||
--- a/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
+++ b/apps/web/src/app/billing/organizations/organization-plans.component.ts
|
||||
@@ -151,10 +151,11 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
async ngOnInit() {
|
||||
if (this.organizationId) {
|
||||
this.organization = this.organizationService.get(this.organizationId);
|
||||
- this.billing = await this.organizationApiService.getBilling(this.organizationId);
|
||||
- this.sub = await this.organizationApiService.getSubscription(this.organizationId);
|
||||
+ this.billing = null; // no billing in Vaultwarden
|
||||
+ this.sub = null; // no subscriptions in Vaultwarden;
|
||||
}
|
||||
|
||||
+ /* no need to ask /api/plans because Vaultwarden only supports the free plan
|
||||
if (!this.selfHosted) {
|
||||
const plans = await this.apiService.getPlans();
|
||||
this.passwordManagerPlans = plans.data.filter((plan) => !!plan.PasswordManager);
|
||||
@@ -186,6 +187,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
this.plan = providerDefaultPlan.type;
|
||||
this.product = providerDefaultPlan.product;
|
||||
}
|
||||
+ end of asking /api/plans in Vaultwarden */
|
||||
|
||||
if (!this.createOrganization) {
|
||||
this.upgradeFlowPrefillForm();
|
||||
@@ -257,6 +259,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get selectableProducts() {
|
||||
+ return null; // there are no products to select in Vaultwarden
|
||||
if (this.acceptingSponsorship) {
|
||||
const familyPlan = this.passwordManagerPlans.find(
|
||||
(plan) => plan.type === PlanType.FamiliesAnnually,
|
||||
@@ -287,6 +290,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get selectablePlans() {
|
||||
+ return null; // no plans to select in Vaultwarden
|
||||
const selectedProductType = this.formGroup.controls.product.value;
|
||||
const result =
|
||||
this.passwordManagerPlans?.filter(
|
||||
@@ -427,10 +431,12 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
get planOffersSecretsManager() {
|
||||
+ return false; // no support for secrets manager in Vaultwarden
|
||||
return this.selectedSecretsManagerPlan != null;
|
||||
}
|
||||
|
||||
changedProduct() {
|
||||
+ return; // no choice of products in Vaultwarden
|
||||
const selectedPlan = this.selectablePlans[0];
|
||||
|
||||
this.setPlanType(selectedPlan.type);
|
||||
@@ -543,7 +549,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
const orgKeys = await this.cryptoService.makeKeyPair(orgKey[1]);
|
||||
|
||||
if (this.selfHosted) {
|
||||
- orgId = await this.createSelfHosted(key, collectionCt, orgKeys);
|
||||
+ orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]);
|
||||
} else {
|
||||
orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]);
|
||||
}
|
||||
@@ -644,7 +650,9 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
request.billingEmail = this.formGroup.controls.billingEmail.value;
|
||||
request.initiationPath = "New organization creation in-product";
|
||||
request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);
|
||||
+ request.planType = PlanType.Free; // always select the free plan in Vaultwarden
|
||||
|
||||
+ /* there is no plan to select in Vaultwarden
|
||||
if (this.selectedPlan.type === PlanType.Free) {
|
||||
request.planType = PlanType.Free;
|
||||
} else {
|
||||
@@ -674,6 +682,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
|
||||
// Secrets Manager
|
||||
this.buildSecretsManagerRequest(request);
|
||||
+ end plan selection and no support for secret manager in Vaultwarden */
|
||||
|
||||
if (this.hasProvider) {
|
||||
const providerRequest = new ProviderOrganizationCreateRequest(
|
||||
@@ -755,6 +764,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
private upgradeFlowPrefillForm() {
|
||||
+ return; // Vaultwarden only supports free plan
|
||||
if (this.acceptingSponsorship) {
|
||||
this.formGroup.controls.product.setValue(ProductType.Families);
|
||||
this.changedProduct();
|
||||
diff --git a/apps/web/src/app/core/init.service.ts b/apps/web/src/app/core/init.service.ts
|
||||
index 2a47971147..b245534220 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";
|
||||
@@ -36,11 +33,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 5a0d903ba7..d6fedadd38 100644
|
||||
--- a/apps/web/src/app/core/router.service.ts
|
||||
+++ b/apps/web/src/app/core/router.service.ts
|
||||
@@ -26,7 +26,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 02c7c29e34..9fd100024a 100644
|
||||
--- a/apps/web/src/app/core/web-platform-utils.service.ts
|
||||
+++ b/apps/web/src/app/core/web-platform-utils.service.ts
|
||||
@@ -133,14 +133,17 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
|
||||
}
|
||||
|
||||
isDev(): boolean {
|
||||
+ return false; // treat Vaultwarden as production ready
|
||||
return process.env.NODE_ENV === "development";
|
||||
}
|
||||
|
||||
isSelfHost(): boolean {
|
||||
+ return true; // treat Vaultwarden as self hosted
|
||||
return WebPlatformUtilsService.isSelfHost();
|
||||
}
|
||||
|
||||
static isSelfHost(): boolean {
|
||||
+ return true; // treat Vaultwarden as self hosted
|
||||
return process.env.ENV.toString() === "selfhosted";
|
||||
}
|
||||
|
||||
diff --git a/apps/web/src/app/layouts/frontend-layout.component.html b/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
index 72f0f1f1da..cea0867131 100644
|
||||
--- a/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
+++ b/apps/web/src/app/layouts/frontend-layout.component.html
|
||||
@@ -1,6 +1,11 @@
|
||||
<router-outlet></router-outlet>
|
||||
<div class="container my-5 text-muted text-center">
|
||||
- <environment-selector></environment-selector>
|
||||
- © {{ year }} Bitwarden Inc. <br />
|
||||
+ Vaultwarden Web<br />
|
||||
{{ "versionNumber" | i18n: version }}
|
||||
+ <br /><br />
|
||||
+ <div class="small">
|
||||
+ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of the
|
||||
+ Bitwarden® server).<br />
|
||||
+ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc.
|
||||
+ </div>
|
||||
</div>
|
||||
diff --git a/apps/web/src/app/layouts/header/web-header.component.html b/apps/web/src/app/layouts/header/web-header.component.html
|
||||
index 514e5deebd..20165e5061 100644
|
||||
--- a/apps/web/src/app/layouts/header/web-header.component.html
|
||||
+++ b/apps/web/src/app/layouts/header/web-header.component.html
|
||||
@@ -76,7 +76,12 @@
|
||||
<i class="bwi bwi-fw bwi-user" aria-hidden="true"></i>
|
||||
{{ "accountSettings" | i18n }}
|
||||
</a>
|
||||
- <a bitMenuItem href="https://bitwarden.com/help/" target="_blank" rel="noreferrer">
|
||||
+ <a
|
||||
+ bitMenuItem
|
||||
+ href="https://github.com/dani-garcia/vaultwarden"
|
||||
+ target="_blank"
|
||||
+ rel="noreferrer"
|
||||
+ >
|
||||
<i class="bwi bwi-fw bwi-question-circle" aria-hidden="true"></i>
|
||||
{{ "getHelp" | i18n }}
|
||||
</a>
|
||||
diff --git a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
index 9068f9c071..e051dccc85 100644
|
||||
--- a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
+++ b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
<!-- Other options -->
|
||||
<section
|
||||
- *ngIf="products.other.length > 0"
|
||||
+ *ngIf="false"
|
||||
class="tw-mt-4 tw-flex tw-w-full tw-flex-col tw-gap-2 tw-border-0 tw-border-t tw-border-solid tw-border-t-text-muted tw-p-2 tw-pb-0"
|
||||
>
|
||||
<span class="tw-mb-1 tw-text-xs tw-text-muted">{{ "moreFromBitwarden" | i18n }}</span>
|
||||
diff --git a/apps/web/src/app/layouts/user-layout.component.html b/apps/web/src/app/layouts/user-layout.component.html
|
||||
index 397e95d485..ac78bcb651 100644
|
||||
--- a/apps/web/src/app/layouts/user-layout.component.html
|
||||
+++ b/apps/web/src/app/layouts/user-layout.component.html
|
||||
@@ -33,8 +33,5 @@
|
||||
></bit-nav-item>
|
||||
</bit-nav-group>
|
||||
</nav>
|
||||
- <app-payment-method-warnings
|
||||
- *ngIf="showPaymentMethodWarningBanners$ | async"
|
||||
- ></app-payment-method-warnings>
|
||||
<router-outlet></router-outlet>
|
||||
</bit-layout>
|
||||
diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts
|
||||
index e5c2f353c0..845d8b86ab 100644
|
||||
--- a/apps/web/src/app/oss-routing.module.ts
|
||||
+++ b/apps/web/src/app/oss-routing.module.ts
|
||||
@@ -222,13 +222,6 @@ const routes: Routes = [
|
||||
component: DomainRulesComponent,
|
||||
data: { titleId: "domainRules" },
|
||||
},
|
||||
- {
|
||||
- path: "subscription",
|
||||
- loadChildren: () =>
|
||||
- import("./billing/individual/individual-billing.module").then(
|
||||
- (m) => m.IndividualBillingModule,
|
||||
- ),
|
||||
- },
|
||||
{
|
||||
path: "emergency-access",
|
||||
children: [
|
||||
diff --git a/apps/web/src/app/settings/settings.component.ts b/apps/web/src/app/settings/settings.component.ts
|
||||
index c2fd1c77fa..9e116d7f2c 100644
|
||||
--- a/apps/web/src/app/settings/settings.component.ts
|
||||
+++ b/apps/web/src/app/settings/settings.component.ts
|
||||
@@ -53,14 +53,7 @@ export class SettingsComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
async load() {
|
||||
- this.premium = await this.stateService.getHasPremiumPersonally();
|
||||
- this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();
|
||||
- const hasPremiumFromOrg = await this.stateService.getHasPremiumFromOrganization();
|
||||
- let billing = null;
|
||||
- if (!this.selfHosted) {
|
||||
- billing = await this.apiService.getUserBillingHistory();
|
||||
- }
|
||||
- this.hideSubscription =
|
||||
- !this.premium && hasPremiumFromOrg && (this.selfHosted || billing?.hasNoHistory);
|
||||
+ this.hasFamilySponsorshipAvailable = false; // disable family Sponsorships in Vaultwarden
|
||||
+ this.hideSubscription = true; // always hide subscriptions in Vaultwarden
|
||||
}
|
||||
}
|
||||
diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts
|
||||
index 586f207962..863efc8769 100644
|
||||
--- a/apps/web/src/app/shared/loose-components.module.ts
|
||||
+++ b/apps/web/src/app/shared/loose-components.module.ts
|
||||
@@ -58,7 +58,6 @@ import { UpdatePasswordComponent } from "../auth/update-password.component";
|
||||
import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component";
|
||||
import { VerifyEmailTokenComponent } from "../auth/verify-email-token.component";
|
||||
import { VerifyRecoverDeleteComponent } from "../auth/verify-recover-delete.component";
|
||||
-import { PaymentMethodWarningsModule } from "../billing/shared";
|
||||
import { DynamicAvatarComponent } from "../components/dynamic-avatar.component";
|
||||
import { SelectableAvatarComponent } from "../components/selectable-avatar.component";
|
||||
import { FrontendLayoutComponent } from "../layouts/frontend-layout.component";
|
||||
@@ -111,7 +110,6 @@ import { SharedModule } from "./shared.module";
|
||||
HeaderModule,
|
||||
OrganizationLayoutComponent,
|
||||
UserLayoutComponent,
|
||||
- PaymentMethodWarningsModule,
|
||||
],
|
||||
declarations: [
|
||||
AcceptFamilySponsorshipComponent,
|
||||
diff --git a/apps/web/src/app/tools/send/access.component.html b/apps/web/src/app/tools/send/access.component.html
|
||||
index 6fef7d361d..1deb1164ff 100644
|
||||
--- a/apps/web/src/app/tools/send/access.component.html
|
||||
+++ b/apps/web/src/app/tools/send/access.component.html
|
||||
@@ -2,7 +2,7 @@
|
||||
<div
|
||||
class="tw-mx-auto tw-mt-5 tw-flex tw-max-w-xl tw-flex-col tw-items-center tw-justify-center tw-p-8"
|
||||
>
|
||||
- <img class="logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="logo logo-themed" alt="Vaultwarden" />
|
||||
<div class="tw-mt-5 tw-w-full">
|
||||
<h2 bitTypography="h2" class="tw-mb-4 tw-text-center">View Send</h2>
|
||||
</div>
|
||||
@@ -66,19 +66,6 @@
|
||||
<div class="tw-mt-5 tw-w-10/12 tw-text-center tw-text-muted">
|
||||
<p bitTypography="body2" class="tw-mb-0">
|
||||
{{ "sendAccessTaglineProductDesc" | i18n }}
|
||||
- {{ "sendAccessTaglineLearnMore" | i18n }}
|
||||
- <a
|
||||
- bitLink
|
||||
- href="https://www.bitwarden.com/products/send?source=web-vault"
|
||||
- target="_blank"
|
||||
- rel="noreferrer"
|
||||
- >Bitwarden Send</a
|
||||
- >
|
||||
- {{ "sendAccessTaglineOr" | i18n }}
|
||||
- <a bitLink routerLink="/register" target="_blank" rel="noreferrer">{{
|
||||
- "sendAccessTaglineSignUp" | i18n
|
||||
- }}</a>
|
||||
- {{ "sendAccessTaglineTryToday" | i18n }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
diff --git a/apps/web/src/index.html b/apps/web/src/index.html
|
||||
index c3a2c03ed9..1a326771a6 100644
|
||||
--- a/apps/web/src/index.html
|
||||
+++ b/apps/web/src/index.html
|
||||
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=1010" />
|
||||
<meta name="theme-color" content="#175DDC" />
|
||||
|
||||
- <title page-title>Bitwarden Web Vault</title>
|
||||
+ <title page-title>Vaultwarden Web</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png" />
|
||||
@@ -17,7 +17,7 @@
|
||||
<app-root>
|
||||
<div class="mt-5 d-flex justify-content-center">
|
||||
<div>
|
||||
- <img class="mb-4 logo logo-themed" alt="Bitwarden" />
|
||||
+ <img class="mb-4 logo logo-themed" alt="Vaultwarden" />
|
||||
<p class="text-center">
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-2x text-muted"
|
||||
diff --git a/apps/web/src/manifest.json b/apps/web/src/manifest.json
|
||||
index 92a1204c60..d9ff4771a3 100644
|
||||
--- a/apps/web/src/manifest.json
|
||||
+++ b/apps/web/src/manifest.json
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
- "name": "Bitwarden Vault",
|
||||
+ "name": "Vaultwarden Web",
|
||||
"icons": [
|
||||
{
|
||||
"src": "images/icons/android-chrome-192x192.png",
|
||||
@@ -12,6 +12,6 @@
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
- "theme_color": "#175DDC",
|
||||
- "background_color": "#175DDC"
|
||||
+ "theme_color": "#FFFFFF",
|
||||
+ "background_color": "#FFFFFF"
|
||||
}
|
||||
diff --git a/apps/web/src/scss/styles.scss b/apps/web/src/scss/styles.scss
|
||||
index 98b3512ba5..8691768352 100644
|
||||
--- a/apps/web/src/scss/styles.scss
|
||||
+++ b/apps/web/src/scss/styles.scss
|
||||
@@ -56,3 +56,80 @@
|
||||
@import "./tables";
|
||||
@import "./toasts";
|
||||
@import "./vault-filters";
|
||||
+
|
||||
+/**** START Vaultwarden CHANGES ****/
|
||||
+/* This combines all selectors extending it into one */
|
||||
+%vw-hide {
|
||||
+ display: none !important;
|
||||
+}
|
||||
+
|
||||
+/* This allows searching for the combined style in the browsers dev-tools (look into the head tag) */
|
||||
+.vw-hide,
|
||||
+head {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the Subscription Page tab */
|
||||
+bit-nav-item[route="settings/subscription"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide any link pointing to Free Bitwarden Families */
|
||||
+a[href$="/settings/sponsored-families"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the `Enterprise Single Sign-On` button on the login page */
|
||||
+a[routerlink="/sso"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Two-Factor menu in Organization settings */
|
||||
+bit-nav-item[route="settings/two-factor"],
|
||||
+a[href$="/settings/two-factor"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Business Owned checkbox */
|
||||
+app-org-info > form:nth-child(1) > div:nth-child(3) {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the `This account is owned by a business` checkbox and label */
|
||||
+#ownedBusiness,
|
||||
+label[for^="ownedBusiness"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide the radio button and label for the `Custom` org user type */
|
||||
+#userTypeCustom,
|
||||
+label[for^="userTypeCustom"] {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Business Name */
|
||||
+app-org-account form div bit-form-field.tw-block:nth-child(3) {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide organization plans */
|
||||
+app-organization-plans > form > h2.mt-5 {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Hide Device Verification form at the Two Step Login screen */
|
||||
+app-security > app-two-factor-setup > form {
|
||||
+ @extend %vw-hide;
|
||||
+}
|
||||
+
|
||||
+/* Replace the Bitwarden Shield at the top left with a Vaultwarden icon */
|
||||
+.bwi-shield:before {
|
||||
+ content: "" !important;
|
||||
+ width: 32px !important;
|
||||
+ height: 40px !important;
|
||||
+ display: block !important;
|
||||
+ background-image: url(../images/icon-white.png) !important;
|
||||
+ background-repeat: no-repeat;
|
||||
+ background-position-y: bottom;
|
||||
+}
|
||||
+/**** END Vaultwarden CHANGES ****/
|
||||
diff --git a/apps/web/src/scss/variables.scss b/apps/web/src/scss/variables.scss
|
||||
index 9d3d8d6ad4..5bc773c0d8 100644
|
||||
--- a/apps/web/src/scss/variables.scss
|
||||
+++ b/apps/web/src/scss/variables.scss
|
||||
@@ -3,7 +3,7 @@ $dark-icon-themes: "theme_dark";
|
||||
$primary: #175ddc;
|
||||
$primary-accent: #1252a3;
|
||||
$secondary: #ced4da;
|
||||
-$secondary-alt: #1a3b66;
|
||||
+$secondary-alt: #212529;
|
||||
$success: #017e45;
|
||||
$info: #555555;
|
||||
$warning: #8b6609;
|
||||
diff --git a/apps/web/webpack.config.js b/apps/web/webpack.config.js
|
||||
index 6ac384cb82..0492e09476 100644
|
||||
--- a/apps/web/webpack.config.js
|
||||
+++ b/apps/web/webpack.config.js
|
||||
@@ -141,8 +141,6 @@ const plugins = [
|
||||
{ from: "./src/favicon.ico" },
|
||||
{ from: "./src/browserconfig.xml" },
|
||||
{ from: "./src/app-id.json" },
|
||||
- { from: "./src/404.html" },
|
||||
- { from: "./src/404", to: "404" },
|
||||
{ from: "./src/images", to: "images" },
|
||||
{ from: "./src/locales", to: "locales" },
|
||||
{ from: "../../node_modules/qrious/dist/qrious.min.js", to: "scripts" },
|
||||
diff --git a/libs/angular/src/auth/components/register.component.ts b/libs/angular/src/auth/components/register.component.ts
|
||||
index 3cffebe71b..c1229b5c2c 100644
|
||||
--- a/libs/angular/src/auth/components/register.component.ts
|
||||
+++ b/libs/angular/src/auth/components/register.component.ts
|
||||
@@ -106,6 +106,14 @@ export class RegisterComponent extends CaptchaProtectedComponent implements OnIn
|
||||
}
|
||||
|
||||
async submit(showToast = true) {
|
||||
+ if (typeof crypto.subtle === "undefined") {
|
||||
+ this.platformUtilsService.showToast(
|
||||
+ "error",
|
||||
+ "This browser requires HTTPS to use the web vault",
|
||||
+ "Check the Vaultwarden wiki for details on how to enable it",
|
||||
+ );
|
||||
+ return;
|
||||
+ }
|
||||
let email = this.formGroup.value.email;
|
||||
email = email.trim().toLowerCase();
|
||||
let name = this.formGroup.value.name;
|
||||
diff --git a/libs/angular/src/auth/components/two-factor-options.component.ts b/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
index 4293eb9966..7a8e861e8d 100644
|
||||
--- a/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
+++ b/libs/angular/src/auth/components/two-factor-options.component.ts
|
||||
@@ -30,7 +30,9 @@ export class TwoFactorOptionsComponent implements OnInit {
|
||||
}
|
||||
|
||||
recover() {
|
||||
- this.platformUtilsService.launchUri("https://vault.bitwarden.com/#/recover-2fa");
|
||||
+ this.platformUtilsService.launchUri(
|
||||
+ "https://bitwarden.com/help/two-step-recovery-code/#use-your-recovery-code",
|
||||
+ );
|
||||
this.onRecoverSelected.emit();
|
||||
}
|
||||
}
|
||||
diff --git a/libs/components/src/tw-theme.css b/libs/components/src/tw-theme.css
|
||||
index 75a8fa6380..733dbe9413 100644
|
||||
--- a/libs/components/src/tw-theme.css
|
||||
+++ b/libs/components/src/tw-theme.css
|
||||
@@ -6,12 +6,12 @@
|
||||
--color-background: 255 255 255;
|
||||
--color-background-alt: 251 251 251;
|
||||
--color-background-alt2: 23 92 219;
|
||||
- --color-background-alt3: 18 82 163;
|
||||
- --color-background-alt4: 13 60 119;
|
||||
+ --color-background-alt3: 33 37 41; /* bg of menu panel */
|
||||
+ --color-background-alt4: 16 18 21; /* bg of active menu item */
|
||||
|
||||
- --color-primary-300: 103 149 232;
|
||||
- --color-primary-500: 23 93 220;
|
||||
- --color-primary-700: 18 82 163;
|
||||
+ --color-primary-300: 108 117 125; /* hover of menu items */
|
||||
+ --color-primary-500: 18 82 163; /* color of links and buttons */
|
||||
+ --color-primary-700: 13 60 119; /* hover of links and buttons */
|
||||
|
||||
--color-secondary-100: 240 240 240;
|
||||
--color-secondary-300: 206 212 220;
|
7
resources/vaultwarden-admin-console-logo.svg
Normal file
7
resources/vaultwarden-admin-console-logo.svg
Normal file
|
@ -0,0 +1,7 @@
|
|||
<svg version="1.1" viewBox="0 0 800 200" xmlns="http://www.w3.org/2000/svg">
|
||||
<path class="tw-fill-text-alt2" d="m457.16 129.39-11.407-36.49q-1.0783-3.3482-4.0292-15.209h-.454q-2.27 9.9313-3.9725 15.322l-11.747 36.377h-10.896l-16.968-62.197h9.8744q6.0158 23.438 9.137 35.696 3.178 12.258 3.632 16.514h.454q.62424-3.2347 1.9863-8.342 1.4188-5.1642 2.4402-8.1717l11.407-35.696h10.215l11.123 35.696q3.178 9.7611 4.313 16.401h.454q.227-2.043 1.1918-6.2993 1.0215-4.2562 11.861-45.797h9.7611l-17.195 62.197zm77.858 0-1.8727-8.8528h-.454q-4.6535 5.8455-9.3072 7.9451-4.5968 2.043-11.52 2.043-9.2503 0-14.528-4.767-5.221-4.767-5.221-13.563 0-18.841 30.134-19.749l10.555-.3405v-3.859q0-7.3209-3.178-10.783-3.1212-3.5185-10.045-3.5185-7.7748 0-17.592 4.767l-2.8943-7.207q4.5968-2.497 10.045-3.9158 5.5048-1.4187 11.009-1.4187 11.123 0 16.457 4.9373 5.3912 4.9373 5.3912 15.833v42.449zm-21.281-6.6399q8.7964 0 13.79-4.8238 5.0508-4.8238 5.0508-13.506v-5.6183l-9.4205.39725q-11.237.39725-16.231 3.5185-4.9372 3.0645-4.9372 9.5908 0 5.1075 3.0645 7.7748 3.1212 2.6672 8.6825 2.6672zm76.045-56.693q4.1428 0 7.4343.68101l-1.3053 8.7395q-3.859-.85122-6.8101-.85122-7.5476 0-12.939 6.1291-5.3345 6.1291-5.3345 15.266v33.369h-9.4205v-62.197h7.7748l1.0783 11.52h.454q3.4617-6.0721 8.3425-9.3636 4.8805-3.2915 10.726-3.2915zm59.077 54.991h-.51081q-6.526 9.4775-19.522 9.4775-12.201 0-19.011-8.342-6.7532-8.342-6.7532-23.721t6.8102-23.892q6.8101-8.5122 18.954-8.5122 12.655 0 19.408 9.1933h.73779l-.39725-4.4832-.22704-4.3697v-25.311h9.4205v88.301h-7.6615zm-18.841 1.589q9.6478 0 13.96-5.221 4.3697-5.2777 4.3697-16.968v-1.9863q0-13.223-4.4264-18.841-4.3698-5.675-14.017-5.675-8.2856 0-12.712 6.4696-4.3698 6.4127-4.3698 18.16 0 11.918 4.3698 17.99 4.3697 6.0721 12.825 6.0721zm74 7.8881q-13.79 0-21.792-8.3989-7.9451-8.3989-7.9451-23.324 0-15.039 7.3773-23.892 7.4343-8.8528 19.919-8.8528 11.69 0 18.501 7.7179 6.8101 7.6615 6.8101 20.26v5.9588h-42.846q.28376 10.953 5.5048 16.628 5.2777 5.675 14.812 5.675 10.045 0 19.863-4.1995v8.3989q-4.994 2.1565-9.4775 3.0645-4.4265.96478-10.726.96478zm-2.5537-56.58q-7.4912 0-11.975 4.8805-4.4265 4.8805-5.221 13.506h32.518q0-8.9097-3.9725-13.62-3.9725-4.767-11.35-4.767zm84.047 55.445v-40.236q0-7.6045-3.4617-11.35-3.4618-3.7455-10.839-3.7455-9.7611 0-14.301 5.2777t-4.54 17.422v32.631h-9.4205v-62.197h7.6615l1.5322 8.5122h.45403q2.8942-4.5968 8.1153-7.0937 5.221-2.5537 11.634-2.5537 11.237 0 16.912 5.448 5.675 5.3912 5.675 17.309v40.576z"/>
|
||||
<path class="tw-fill-text-alt2" d="m213.24 129.39-3.3482-8.6261h-.454q-4.3697 5.5048-9.023 7.6615-4.5968 2.0998-12.031 2.0998-9.137 0-14.415-5.221-5.221-5.221-5.221-14.869 0-10.102 7.0368-14.869 7.0937-4.8238 21.338-5.3345l11.009-.3405v-2.7808q0-9.6478-9.8744-9.6478-7.6045 0-17.876 4.5968l-5.7318-11.69q10.953-5.7318 24.289-5.7318 12.769 0 19.579 5.5615 6.8102 5.5615 6.8102 16.912v42.279zm-5.1075-29.397-6.6962.227q-7.5476.227-11.237 2.724-3.6888 2.497-3.6888 7.6045 0 7.321 8.3989 7.321 6.0158 0 9.5908-3.4617 3.632-3.4617 3.632-9.1933zm79.962 29.397-2.3268-8.1153h-.908q-2.7808 4.4265-7.8881 6.8665-5.1075 2.3835-11.634 2.3835-11.18 0-16.855-5.9588-5.675-6.0158-5.675-17.252v-41.371h17.309v37.058q0 6.8665 2.4402 10.328 2.4402 3.405 7.7748 3.405 7.264 0 10.499-4.8238 3.2348-4.8805 3.2348-16.117v-29.85h17.309v63.447zm48.748 0h-17.309v-88.301h17.309zm44.889-12.655q4.54 0 10.896-1.9863v12.882q-6.4696 2.8943-15.89 2.8943-10.385 0-15.152-5.221-4.7103-5.2777-4.7103-15.776v-30.588h-8.2856v-7.321l9.5338-5.7885 4.994-13.393h11.066v13.506h17.763v12.996h-17.763v30.588q0 3.6887 2.043 5.448 2.0998 1.7592 5.5047 1.7592z"/>
|
||||
<path class="tw-fill-text-alt2" d="m51.982 33.947-15.322.002 41.131 115.17h14.518l41.131-115.17h-15.162l-25.971 73.872c-1.7205 4.7315-3.1706 9.1927-4.3535 13.387-1.1829 4.086-2.1516 8.0119-2.9043 11.775-.75272-3.7636-1.7195-7.7417-2.9023-11.936-1.1829-4.1938-2.635-8.7098-4.3555-13.549l-25.809-73.552z"/>
|
||||
<path class="tw-fill-text-alt2" d="m84.264 5.0749a2.3288 2.3288 0 00-1.2122.99654l-4.145 6.9077c-.72599.06029-1.4502.12529-2.1701.20657l-5.406-5.9599a2.3288 2.3288 0 00-3.9203.77975l-2.7161 7.5796c-.7008.20184-1.4008.40458-2.0929.62653l-6.4616-4.7875a2.3288 2.3288 0 00-3.691 1.53l-1.1884 7.9871c-.63834.33084-1.2749.66363-1.9023 1.0124l-7.297-3.4482a2.3288 2.3288 0 00-3.3222 2.2201l.39272 8.0937c-.55229.44111-1.0997.8874-1.639 1.3438l-7.8588-1.9647a2.3288 2.3288 0 00-2.825 2.825l1.9647 7.8588c-.45646.53923-.90273 1.0867-1.3439 1.639l-8.0937-.39271a2.3288 2.3288 0 00-2.2201 3.3222l3.4482 7.297c-.3488.62737-.68158 1.2639-1.0124 1.9023l-7.9871 1.1884a2.3288 2.3288 0 00-1.53 3.6911l4.7875 6.4616c-.22196.69217-.4247 1.3921-.62653 2.093l-7.5796 2.7161a2.3288 2.3288 0 00-.77976 3.9203l5.9599 5.4061c-.08128.71995-.14628 1.4442-.20657 2.1701l-6.9077 4.1451a2.3288 2.3288 0 000 3.9952l6.9077 4.1439c.06028.72636.12524 1.451.20657 2.1713l-5.9599 5.4061a2.3288 2.3288 0 00.77976 3.9192l7.5796 2.7161c.20188.70099.4045 1.4017.62653 2.0941l-4.7875 6.4605a2.3288 2.3288 0 001.53 3.6922l7.9871 1.1884c.33079.63822.6637 1.275 1.0124 1.9023l-3.4482 7.297a2.3288 2.3288 0 002.2201 3.3222l8.0937-.39272c.44117.55235.88734 1.0997 1.3439 1.639l-1.9647 7.8588a2.3288 2.3288 0 002.825 2.825l7.8588-1.9647c.53923.45647 1.0867.90273 1.639 1.3438l-.39272 8.0926a2.3288 2.3288 0 003.3222 2.2201l7.297-3.447c.62736.34881 1.2639.68158 1.9023 1.0124l1.1884 7.987a2.3288 2.3288 0 003.691 1.5289l6.4616-4.7864c.69217.22197 1.3921.4247 2.0929.62654l2.7161 7.5796a2.3288 2.3288 0 003.9203.7786l5.4049-5.9588c.72031.0813 1.4449.14624 2.1713.20656l4.145 6.9077a2.3288 2.3288 0 003.9952 0l4.1439-6.9077c.72674-.0603 1.4517-.12518 2.1724-.20656l5.4049 5.9588a2.3288 2.3288 0 003.9192-.7786l2.7161-7.5796c.70103-.20189 1.4017-.4045 2.0941-.62654l6.4605 4.7864a2.3288 2.3288 0 003.6922-1.5289l1.1884-7.987c.63823-.33079 1.275-.6637 1.9023-1.0124l7.297 3.447a2.3288 2.3288 0 003.3222-2.2201l-.39271-8.0926c.55234-.44117 1.0997-.88734 1.639-1.3438l7.8588 1.9647a2.3288 2.3288 0 002.825-2.825l-1.9647-7.8588c.4565-.53928.90269-1.0866 1.3438-1.639l8.0926.39272a2.3288 2.3288 0 002.2201-3.3222l-3.447-7.297c.34872-.62723.68163-1.264 1.0124-1.9023l7.987-1.1884a2.3288 2.3288 0 001.5289-3.6922l-4.7863-6.4605c.22202-.69235.42462-1.3931.62652-2.0941l7.5796-2.7161a2.3288 2.3288 0 00.77862-3.9192l-5.9588-5.4049c.0814-.72069.14623-1.4457.20658-2.1724l6.9077-4.1439a2.3288 2.3288 0 000-3.9952l-6.9077-4.1451c-.0603-.72635-.12524-1.451-.20658-2.1713l5.9588-5.4049a2.3288 2.3288 0 00-.77862-3.9203l-7.5796-2.7161c-.20184-.70082-.40457-1.4008-.62652-2.093l4.7863-6.4616a2.3288 2.3288 0 00-1.5289-3.6911l-7.987-1.1884c-.33084-.63836-.66362-1.2749-1.0124-1.9023l3.447-7.297a2.3288 2.3288 0 00-2.2201-3.3222l-8.0926.39271c-.44112-.55229-.8874-1.0997-1.3438-1.639l1.9647-7.8588a2.3288 2.3288 0 00-2.825-2.825l-7.8588 1.9647c-.53927-.4565-1.0866-.9027-1.639-1.3438l.39271-8.0937a2.3288 2.3288 0 00-3.3222-2.2201l-7.297 3.4482c-.62726-.34873-1.264-.68165-1.9023-1.0124l-1.1884-7.9871a2.3288 2.3288 0 00-3.6922-1.53l-6.4605 4.7875c-.69236-.22201-1.3931-.42463-2.0941-.62653l-2.7161-7.5796a2.3288 2.3288 0 00-3.9192-.77975l-5.406 5.9599c-.72032-.08133-1.4449-.14626-2.1713-.20657l-4.1439-6.9077a2.3288 2.3288 0 00-2.783-.99654zm.78543 14.613a4.657 4.657 0 014.6569 4.6569 4.657 4.657 0 01-4.6569 4.6569 4.657 4.657 0 01-4.6569-4.6569 4.657 4.657 0 014.6569-4.6569zm-10.998 8.0064 7.7056 7.7056a4.6575 4.6575 0 006.5853 0l7.7056-7.7056c17.959 3.3214 33.023 14.65 41.468 30.141l-4.943 9.6998a4.6575 4.6575 0 002.0351 6.263l9.7123 4.9486c.32157 2.5182.49487 5.0839.49487 7.692 0 15.934-6.1974 30.369-16.306 41.066l-10.796-1.7093a4.6575 4.6575 0 00-5.3277 3.8704l-1.7116 10.804c-7.7603 3.6739-16.443 5.734-25.624 5.734-9.1812 0-17.864-2.0608-25.625-5.7352l-1.7116-10.803a4.6575 4.6575 0 00-5.3277-3.8715l-10.795 1.7105c-10.108-10.697-16.306-25.132-16.306-41.066 0-2.608.1733-5.1738.49487-7.692l9.7111-4.9486a4.6575 4.6575 0 002.0351-6.263l-4.9418-9.6986c8.4449-15.492 23.508-26.821 41.468-30.142zm-47.923 34.902a4.657 4.657 0 011.3064.22587 4.657 4.657 0 012.9896 5.868 4.657 4.657 0 01-5.868 2.9907 4.657 4.657 0 01-2.9907-5.8691 4.657 4.657 0 014.5627-3.2155zm117.84 0a4.657 4.657 0 014.5616 3.2155 4.657 4.657 0 01-2.9896 5.8691 4.657 4.657 0 01-5.868-2.9907 4.657 4.657 0 012.9896-5.868 4.657 4.657 0 011.3064-.22587zm-95.153 69.428a4.657 4.657 0 012.4709.88189 4.657 4.657 0 011.0306 6.5047 4.657 4.657 0 01-6.5047 1.0306 4.657 4.657 0 01-1.0306-6.5047 4.657 4.657 0 014.0338-1.9125zm72.463 0a4.657 4.657 0 014.0338 1.9125 4.657 4.657 0 01-1.0306 6.5047 4.657 4.657 0 01-6.5047-1.0306 4.657 4.657 0 011.0306-6.5047 4.657 4.657 0 012.4709-.88189z"/>
|
||||
<path class="tw-fill-text-alt2" d="m406.1 185.44-4.8026-12.342h-15.803l-4.7468 12.342h-5.0817l15.58-40.04h4.5232l15.524 40.04zm-10.778-28.871q-.16753-.44674-.55844-1.6194-.3909-1.1727-.7818-2.4012-.33505-1.2844-.55843-1.9545-.39091 1.7312-.89345 3.4064-.50261 1.6194-.83768 2.5687l-4.5233 12.062h12.62zm31.384 29.429q-5.5844 0-8.9346-3.8532-3.3506-3.9091-3.3506-11.615t3.3506-11.615q3.4064-3.9649 8.9905-3.9649 3.4623 0 5.6402 1.2844 2.2338 1.2844 3.6298 3.1271h.33506q-.0559-.72595-.22337-2.122-.11169-1.4518-.11169-2.2895v-11.951h4.9142v42.441h-3.9649l-.72593-4.0207h-.22339q-1.3403 1.8987-3.574 3.2389-2.2338 1.3402-5.7519 1.3402zm.7818-4.0765q4.7468 0 6.6452-2.5687 1.9545-2.6246 1.9545-7.8738v-.89347q0-5.5844-1.8428-8.544-1.8428-3.0155-6.8127-3.0155-3.9649 0-5.975 3.1831-1.9545 3.1272-1.9545 8.4322 0 5.3609 1.9545 8.3206 2.0103 2.9597 6.0309 2.9597zm55.788-26.972q5.0817 0 7.5946 2.6246 2.5129 2.5687 2.5129 8.3764v19.489h-4.8584v-19.266q0-7.092-6.0867-7.092-4.3558 0-6.2542 2.5129-1.8428 2.5129-1.8428 7.3154v16.529h-4.8584v-19.266q0-7.092-6.1426-7.092-4.5232 0-6.2542 2.7922-1.7312 2.7922-1.7312 8.0414v15.524h-4.9142v-29.933h3.9649l.72595 4.0766h.27922q1.3961-2.3454 3.7416-3.4623 2.4012-1.1727 5.0817-1.1727 7.0362 0 9.1582 5.0258h.27921q1.5078-2.5687 4.0766-3.7974 2.6246-1.2286 5.5284-1.2286zm21.891-10.666q1.1169 0 1.9545.78178.89355.72598.89355 2.3454 0 1.5636-.89355 2.3454-.83765.78179-1.9545.78179-1.2286 0-2.0662-.78179-.83766-.7818-.83766-2.3454 0-1.6194.83766-2.3454.83763-.78178 2.0662-.78178zm2.4012 11.225v29.933h-4.9141v-29.933zm23.901-.55843q5.3609 0 8.0972 2.6246 2.7363 2.5687 2.7363 8.3765v19.489h-4.8584v-19.154q0-7.2037-6.701-7.2037-4.97 0-6.8686 2.7922-1.8987 2.7922-1.8987 8.0414v15.524h-4.9142v-29.933h3.9649l.72596 4.0766h.27921q1.4519-2.3454 4.0207-3.4623 2.5687-1.1727 5.4167-1.1727zm52.381-5.5285q-6.4218 0-10.108 4.3-3.6857 4.3-3.6857 11.783 0 7.4271 3.4064 11.783 3.4623 4.3 10.331 4.3 2.6246 0 4.97-.44675 2.3454-.44675 4.5792-1.1169v4.3558q-2.2337.83766-4.635 1.2286-2.3454.3909-5.6402.3909-6.0867 0-10.163-2.5129-4.0768-2.5129-6.1426-7.1479-2.0103-4.635-2.0103-10.889 0-6.0309 2.1778-10.61 2.2337-4.6351 6.5335-7.2037 4.3-2.6246 10.443-2.6246 6.3101 0 11.001 2.3454l-2.0103 4.2441q-1.8428-.83766-4.1325-1.5078-2.2337-.67011-4.9141-.67011zm43.558 20.997q0 7.4271-3.7974 11.503-3.7416 4.0765-10.163 4.0765-3.9649 0-7.092-1.787-3.0713-1.8428-4.8584-5.3051-1.787-3.5181-1.787-8.4881 0-7.4271 3.7416-11.448 3.7416-4.0207 10.163-4.0207 4.0765 0 7.1479 1.8428 3.1271 1.787 4.8584 5.2492 1.787 3.4064 1.787 8.3764zm-22.617 0q0 5.3051 2.0662 8.4322 2.122 3.0714 6.701 3.0714 4.5233 0 6.6452-3.0714 2.122-3.1271 2.122-8.4322t-2.122-8.3206q-2.122-3.0155-6.701-3.0155-4.5792 0-6.6452 3.0155-2.0662 3.0155-2.0662 8.3206zm44.786-15.468q5.361 0 8.0973 2.6246 2.7363 2.5687 2.7363 8.3765v19.489h-4.8584v-19.154q0-7.2037-6.701-7.2037-4.97 0-6.8685 2.7922-1.8987 2.7922-1.8987 8.0414v15.524h-4.9142v-29.933h3.9649l.72597 4.0765h.2792q1.4519-2.3454 4.0207-3.4623 2.5687-1.1727 5.4168-1.1727zm39.593 22.225q0 4.3558-3.2389 6.5894-3.2389 2.2338-8.7119 2.2338-3.1271 0-5.4168-.5026-2.2338-.50258-3.9649-1.396v-4.4675q1.787.89346 4.3 1.6753 2.5687.72594 5.1934.72594 3.7416 0 5.4168-1.1727 1.6752-1.2286 1.6752-3.2389 0-1.1169-.61424-2.0103-.61426-.89347-2.2337-1.787-1.5636-.89346-4.5233-2.0103-2.9039-1.1169-4.97-2.2337-2.0662-1.1169-3.1831-2.6805-1.1169-1.5636-1.1169-4.0208 0-3.7974 3.0714-5.8635 3.1272-2.0662 8.153-2.0662 2.7363 0 5.0818.55842 2.4012.50259 4.4675 1.4519l-1.6752 3.9091q-1.8987-.78179-3.9649-1.3403-2.0662-.55842-4.2441-.55842-3.0155 0-4.6351 1.0052-1.5636.94937-1.5636 2.6246 0 1.2286.72596 2.122.72595.83764 2.4012 1.6753 1.7311.78179 4.5792 1.8987 2.848 1.061 4.8584 2.1779 2.0104 1.1169 3.0713 2.7363 1.0611 1.5636 1.0611 3.9649zm33.283-6.7569q0 7.4271-3.7974 11.503-3.7416 4.0766-10.163 4.0766-3.9649 0-7.092-1.787-3.0714-1.8428-4.8583-5.3051-1.787-3.5181-1.787-8.4881 0-7.4271 3.7416-11.448 3.7416-4.0207 10.163-4.0207 4.0766 0 7.1479 1.8428 3.1271 1.787 4.8584 5.2492 1.787 3.4064 1.787 8.3764zm-22.617 0q0 5.3051 2.0662 8.4322 2.122 3.0714 6.701 3.0714 4.5233 0 6.6452-3.0714 2.122-3.1271 2.122-8.4322 0-5.3051-2.122-8.3206-2.122-3.0155-6.701-3.0155t-6.6452 3.0155q-2.0662 3.0155-2.0662 8.3206zm35.293 15.022h-4.9142v-42.441h4.9142zm21.053-30.491q3.8532 0 6.5894 1.6753 2.7922 1.6754 4.2441 4.7468 1.5078 3.0155 1.5078 7.092v2.9597h-20.494q.11169 5.0818 2.5687 7.7621 2.5129 2.6246 6.9803 2.6246 2.848 0 5.0259-.50258 2.2337-.55844 4.5792-1.5636v4.3q-2.2895 1.0052-4.5233 1.4519-2.2337.5026-5.3051.5026-4.2441 0-7.5388-1.7312-3.2389-1.7312-5.0817-5.1376-1.787-3.4623-1.787-8.4322 0-4.9142 1.6194-8.4322 1.6754-3.5181 4.635-5.4168 3.0155-1.8986 6.9803-1.8986zm-.0559 4.0207q-3.5181 0-5.5844 2.2895-2.0103 2.2337-2.4012 6.2543h15.245q-.0559-3.7974-1.787-6.1426-1.7311-2.4012-5.4726-2.4012z" stroke-width=".93783"/>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
7
resources/vaultwarden-password-manager-logo.svg
Normal file
7
resources/vaultwarden-password-manager-logo.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 16 KiB |
|
@ -1,6 +1,18 @@
|
|||
#!/usr/bin/env bash
|
||||
set -o pipefail -o errexit
|
||||
|
||||
function replace_embedded_svg_icon() {
|
||||
if [ ! -f $1 ]; then echo "$1 does not exist"; exit -1; fi
|
||||
if [ ! -f $2 ]; then echo "$2 does not exist"; exit -1; fi
|
||||
|
||||
echo "'$1' -> '$2'"
|
||||
|
||||
first='`$'
|
||||
last='^`'
|
||||
sed -i "/$first/,/$last/{ /$first/{p; r $1
|
||||
}; /$last/p; d }" $2
|
||||
}
|
||||
|
||||
# If a patch was not provided, try to choose one
|
||||
if [[ -z ${PATCH_NAME} ]]; then
|
||||
# If a patch with the same name as the ref exists, use it
|
||||
|
@ -29,6 +41,14 @@ fi
|
|||
echo "Patching images"
|
||||
cp -vfR ../resources/src/* ./apps/web/src/
|
||||
|
||||
echo "Patching logos"
|
||||
replace_embedded_svg_icon \
|
||||
../resources/vaultwarden-admin-console-logo.svg \
|
||||
./apps/web/src/app/admin-console/icons/admin-console-logo.ts
|
||||
replace_embedded_svg_icon \
|
||||
../resources/vaultwarden-password-manager-logo.svg \
|
||||
./apps/web/src/app/layouts/password-manager-logo.ts
|
||||
|
||||
echo "Using patch: ${PATCH_NAME}"
|
||||
git apply "../patches/${PATCH_NAME}" --reject
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ fi
|
|||
PATCH_FILENAME="${VAULT_VERSION}.patch"
|
||||
|
||||
if [ "$(git status --porcelain | wc -l)" -ge 1 ]; then
|
||||
git --no-pager diff --no-color --minimal -- . \
|
||||
git --no-pager diff --no-color --minimal --abbrev=10 -- . \
|
||||
':!package-lock.json' \
|
||||
':!apps/web/src/favicon.ico' \
|
||||
':!apps/web/src/images/logo-dark@2x.png' \
|
||||
|
@ -36,6 +36,8 @@ if [ "$(git status --porcelain | wc -l)" -ge 1 ]; then
|
|||
':!apps/web/src/images/icons/favicon-32x32.png' \
|
||||
':!apps/web/src/images/icons/mstile-150x150.png' \
|
||||
':!apps/web/src/images/icons/safari-pinned-tab.svg' \
|
||||
':!apps/web/src/app/admin-console/icons/admin-console-logo.ts' \
|
||||
':!apps/web/src/app/layouts/password-manager-logo.ts' \
|
||||
> "../patches/${PATCH_FILENAME}"
|
||||
echo "Patch has been created here: patches/${PATCH_FILENAME}"
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue