From d026aadea9646953a8317361adabda48017d6085 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Tue, 21 May 2024 22:58:40 +0200 Subject: [PATCH 01/23] use only gpl code remove all references to non-free bitwarden_license code --- apps/web/package.json | 3 --- apps/web/tailwind.config.js | 1 - apps/web/tsconfig.json | 1 - clients.code-workspace | 12 ------------ jest.config.js | 3 --- libs/components/tailwind.config.js | 1 - tailwind.config.js | 1 - tsconfig.json | 7 ++----- 8 files changed, 2 insertions(+), 27 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 73ecd8c3cb7..bf75ca68ff4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -3,11 +3,8 @@ "version": "2025.1.1", "scripts": { "build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", - "build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-web/webpack.config.js", "build:oss:watch": "webpack serve", - "build:bit:watch": "webpack serve -c ../../bitwarden_license/bit-web/webpack.config.js", "build:bit:dev": "cross-env ENV=development npm run build:bit", - "build:bit:dev:analyze": "cross-env LOGGING=false webpack -c ../../bitwarden_license/bit-web/webpack.config.js --profile --json > stats.json && npx webpack-bundle-analyzer stats.json build/", "build:bit:dev:watch": "cross-env ENV=development NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:bit:watch", "build:bit:qa": "cross-env NODE_ENV=production ENV=qa npm run build:bit", "build:bit:euprd": "cross-env NODE_ENV=production ENV=euprd npm run build:bit", diff --git a/apps/web/tailwind.config.js b/apps/web/tailwind.config.js index 2c0108ca3e2..85d3689ea3e 100644 --- a/apps/web/tailwind.config.js +++ b/apps/web/tailwind.config.js @@ -8,7 +8,6 @@ config.content = [ "../../libs/key-management/src/**/*.{html,ts}", "../../libs/vault/src/**/*.{html,ts}", "../../libs/angular/src/**/*.{html,ts}", - "../../bitwarden_license/bit-web/src/**/*.{html,ts}", ]; module.exports = config; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 678db7c4af5..9c89db617a7 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -10,7 +10,6 @@ "@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/billing": ["../../libs/billing/src"], - "@bitwarden/bit-common/*": ["../../bitwarden_license/bit-common/src/*"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], "@bitwarden/generator-components": ["../../libs/tools/generator/components/src"], diff --git a/clients.code-workspace b/clients.code-workspace index f7d86d2a242..75389727d2d 100644 --- a/clients.code-workspace +++ b/clients.code-workspace @@ -8,18 +8,10 @@ "name": "web vault", "path": "apps/web", }, - { - "name": "web vault (bit)", - "path": "bitwarden_license/bit-web", - }, { "name": "cli", "path": "apps/cli", }, - { - "name": "cli (bit)", - "path": "bitwarden_license/bit-cli", - }, { "name": "desktop", "path": "apps/desktop", @@ -32,10 +24,6 @@ "name": "libs", "path": "libs", }, - { - "name": "common (bit)", - "path": "bitwarden_license/bit-common", - }, ], "settings": { "eslint.options": { diff --git a/jest.config.js b/jest.config.js index 3ed082bcbc3..3c385865d8b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -20,9 +20,6 @@ module.exports = { "/apps/cli/jest.config.js", "/apps/desktop/jest.config.js", "/apps/web/jest.config.js", - "/bitwarden_license/bit-web/jest.config.js", - "/bitwarden_license/bit-cli/jest.config.js", - "/bitwarden_license/bit-common/jest.config.js", "/libs/admin-console/jest.config.js", "/libs/angular/jest.config.js", diff --git a/libs/components/tailwind.config.js b/libs/components/tailwind.config.js index 7a53c82ec58..9d0a337bd28 100644 --- a/libs/components/tailwind.config.js +++ b/libs/components/tailwind.config.js @@ -6,7 +6,6 @@ config.content = [ "libs/auth/src/**/*.{html,ts,mdx}", "apps/web/src/**/*.{html,ts,mdx}", "apps/browser/src/**/*.{html,ts,mdx}", - "bitwarden_license/bit-web/src/**/*.{html,ts,mdx}", ".storybook/preview.tsx", ]; config.safelist = [ diff --git a/tailwind.config.js b/tailwind.config.js index 637c28a54ea..7afcea4e655 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -10,7 +10,6 @@ config.content = [ "./libs/tools/send/send-ui/src/*.{html,ts,mdx}", "./libs/vault/src/**/*.{html,ts,mdx}", "./apps/web/src/**/*.{html,ts,mdx}", - "./bitwarden_license/bit-web/src/**/*.{html,ts,mdx}", "./.storybook/preview.js", ]; config.safelist = [ diff --git a/tsconfig.json b/tsconfig.json index 91b4ee7dd6b..691a47c1d32 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -39,8 +39,7 @@ "@bitwarden/tools-card": ["./libs/tools/card/src"], "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/web-vault/*": ["./apps/web/src/*"], - "@bitwarden/vault": ["./libs/vault/src"], - "@bitwarden/bit-common/*": ["./bitwarden_license/bit-common/src/*"] + "@bitwarden/vault": ["./libs/vault/src"] }, "plugins": [ { @@ -57,9 +56,7 @@ "apps/browser/src/**/*", "libs/*/src/**/*", "libs/tools/send/**/src/**/*", - "libs/tools/card/src/**/*", - "bitwarden_license/bit-web/src/**/*", - "bitwarden_license/bit-common/src/**/*" + "libs/tools/card/src/**/*" ], "exclude": [ "apps/web/src/**/*.spec.ts", From 4aa5de7e24c49d54eb0411fe6f3d224c5d54528b Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Tue, 17 Dec 2024 18:29:41 +0100 Subject: [PATCH 02/23] rebrand Bitwarden as Vaultwarden --- apps/web/src/app/app.component.html | 2 +- .../two-factor-setup-authenticator.component.ts | 4 ++-- apps/web/src/app/core/router.service.ts | 2 +- .../web/src/app/layouts/frontend-layout.component.html | 8 +++++++- .../src/app/layouts/header/web-header.component.html | 7 ++++++- apps/web/src/index.html | 4 ++-- apps/web/src/manifest.json | 6 +++--- .../src/angular/anon-layout/anon-layout.component.html | 10 ++++++++-- 8 files changed, 30 insertions(+), 13 deletions(-) diff --git a/apps/web/src/app/app.component.html b/apps/web/src/app/app.component.html index a39c045e0e3..9d72e609b40 100644 --- a/apps/web/src/app/app.component.html +++ b/apps/web/src/app/app.component.html @@ -3,7 +3,7 @@ when the body has the layout_frontend class. Having this match the index allows for a duplicative yet seamless loading state here for process reloading. -->
- Bitwarden + Vaultwarden
{ 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/layouts/frontend-layout.component.html b/apps/web/src/app/layouts/frontend-layout.component.html index 72f0f1f1da3..e1659f80418 100644 --- a/apps/web/src/app/layouts/frontend-layout.component.html +++ b/apps/web/src/app/layouts/frontend-layout.component.html @@ -1,6 +1,12 @@
- © {{ year }} Bitwarden Inc.
+ Vaultwarden Web
{{ "versionNumber" | i18n: version }} +

+
+ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of the + Bitwarden® server).
+ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc. +
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 7cba19b29ad..024b14daadc 100644 --- a/apps/web/src/app/layouts/header/web-header.component.html +++ b/apps/web/src/app/layouts/header/web-header.component.html @@ -61,7 +61,12 @@ {{ "accountSettings" | i18n }} - + {{ "getHelp" | i18n }} diff --git a/apps/web/src/index.html b/apps/web/src/index.html index 0b8ea864914..a08908c7725 100644 --- a/apps/web/src/index.html +++ b/apps/web/src/index.html @@ -5,7 +5,7 @@ - Bitwarden Web vault + Vaultwarden Web @@ -17,7 +17,7 @@
- Bitwarden + Vaultwarden
-
© {{ year }} Bitwarden Inc.
-
{{ version }}
+
Vaultwarden Web
+
Version {{ version }}
+
+
+ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of + the Bitwarden® server).
+ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc. +
From b6199fb445deafe53da585b0fb343ed6e7d254c0 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 10 Jan 2024 12:27:22 +0100 Subject: [PATCH 03/23] rebrand icons and images --- .../admin-console/icons/admin-console-logo.ts | 8 +- .../src/app/layouts/password-manager-logo.ts | 8 +- apps/web/src/favicon.ico | Bin 34494 -> 1150 bytes apps/web/src/images/icon-dark.png | Bin 0 -> 734 bytes apps/web/src/images/icon-white.png | Bin 0 -> 734 bytes apps/web/src/images/icon-white.svg | 5 + .../images/icons/android-chrome-192x192.png | Bin 2847 -> 3488 bytes .../images/icons/android-chrome-512x512.png | Bin 9653 -> 10884 bytes .../web/src/images/icons/apple-touch-icon.png | Bin 1343 -> 3250 bytes apps/web/src/images/icons/favicon-16x16.png | Bin 296 -> 372 bytes apps/web/src/images/icons/favicon-32x32.png | Bin 434 -> 886 bytes apps/web/src/images/icons/mstile-150x150.png | Bin 1983 -> 3352 bytes .../src/images/icons/safari-pinned-tab.svg | 122 +++++++++++++----- apps/web/src/images/logo-dark@2x.png | Bin 5869 -> 5473 bytes apps/web/src/images/logo-white.svg | 13 +- apps/web/src/images/logo-white@2x.png | Bin 6891 -> 4187 bytes apps/web/src/images/logo.svg | 12 +- .../src/angular/icons/bitwarden-logo.icon.ts | 12 +- .../angular/icons/bitwarden-shield.icon.ts | 8 +- 19 files changed, 134 insertions(+), 54 deletions(-) create mode 100644 apps/web/src/images/icon-dark.png create mode 100644 apps/web/src/images/icon-white.png create mode 100644 apps/web/src/images/icon-white.svg diff --git a/apps/web/src/app/admin-console/icons/admin-console-logo.ts b/apps/web/src/app/admin-console/icons/admin-console-logo.ts index 32b2b7a13a5..1f1e6827bf6 100644 --- a/apps/web/src/app/admin-console/icons/admin-console-logo.ts +++ b/apps/web/src/app/admin-console/icons/admin-console-logo.ts @@ -1,5 +1,11 @@ import { svgIcon } from "@bitwarden/components"; export const AdminConsoleLogo = svgIcon` - + + + + + + + `; diff --git a/apps/web/src/app/layouts/password-manager-logo.ts b/apps/web/src/app/layouts/password-manager-logo.ts index d93e2d5bb30..e15394f785b 100644 --- a/apps/web/src/app/layouts/password-manager-logo.ts +++ b/apps/web/src/app/layouts/password-manager-logo.ts @@ -1,5 +1,11 @@ import { svgIcon } from "@bitwarden/components"; export const PasswordManagerLogo = svgIcon` - + + + + + + + `; diff --git a/apps/web/src/favicon.ico b/apps/web/src/favicon.ico index 841840dfe16e76960ab521dc6ace6953f807f84b..8b64b26fad09b7e695f38f09aaacf565bdc54f35 100644 GIT binary patch literal 1150 zcma)6J8NQL5dA_-Izuo%5Cm#u&dqLK68K zmzyz?+cp435D?r8ehaW%E-{%*FdPmQ^cnlGiQK;nz6hxG3z~xEd_G67*Te1YEzZx+ zkxV8P^ciE09C8Ie1$@Uh!Ta0W8y+4WkjZ4=cDv#6c(A*>tDw&qbL5aqjey@VS}YbC z4+eusBoes1yu{7T4fgl<74#WnjvT&&8Zp+p>i7GIMx*fi{ixMyXf~V3=kt(WDd;oC z9697tLtCv@TAS19)H`FHP6uAE7e1d)L7y=i`>^Ix`||Rly$Xdw+8=W2^*SsT3$CuN zaD9EPK4UcYkX-hZTF!`drPFD=zP@5Mo2hTLTG48?&~CSJaB!e8=ExzJn)Q6?pPZba z+wJ1{`56v}1L1HOqtOWC@mO<=F-H!$Ydyc=;^IP|tJNw>rIOC9TrO*GSYxG9(HfW| zhgxc=W&ZB&4#&sGC>D!|L?W=+Y`ZgyZ0yf3(SH>z z*83Ze$Ki6hbWhg%&z)h6xvl-Z7wsoOL-4+NehP&Gve~SH{?_^7?*9<*?C}hK7VtYp fg4O!`4h91d8|Rk|8w+^mR9o5E{zv%#XKMcd=|jxP literal 34494 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 diff --git a/apps/web/src/images/icon-dark.png b/apps/web/src/images/icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..960424ba791985827a89e9329fe00fbfbf53e8fe GIT binary patch literal 734 zcmV<40wMj0P)kdg0007|Nkl+wC?-RqPx_5AKQPGsSv;xAE7^b&c6_ zw3E=%!by%c9~|Ogiy6|@(&*{aHDoalJA^s&e+ODnOBm4zp{px|#xFw4f)4b5vtCyrUy@JWFwV1u@eYhA9p!y{}@0ve01^Ln70d zLJDCUl7;e3&qdD77>!tnWV`glVxXk_Dn*~R(DShmbcMDS#p_baWu_FyJ|sI=ZRq6P z&LsP#bIVLDlpXwJ1FPH3lK$rlA-Aj$OWMuq*6~Bxc@_nwrxETeU$(W&gZBxI`qM$P zDrsHoyUtY7mrZJ5Q%rS@_4S0tMp@EkD5`&NF7~vJZOfPGLEGtg+Qs?T31%dVb<{TO z)0}S4XNLVX0>wI_V)+0nA927h3?CsC3*oBm9io=NtlCJeT&LozTq&;J0jT5R0s=p@ QN&o-=07*qoM6N<$g1&TO761SM literal 0 HcmV?d00001 diff --git a/apps/web/src/images/icon-white.png b/apps/web/src/images/icon-white.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc9d42e7462d9cacaf30ef5e55bca4b42d89b97 GIT binary patch literal 734 zcmV<40wMj0P)kdg0007|Nklr`Q4j^F8Aq_qpFcp0NOchPnB00jEd+KCxZ%Z)YtnJ2&s! z`vgF8%23}|vbhAP&C1B?R?qJ@s{zU8R?4vu942N6zBg$ECl^XcfatIcnWhWc0CpXA zeP;lFfR1T7?+Sk*+0Qqibk8sWw<*E*4g`NG9MM1?2mC6Sr2@a3Iyg#x1eIF^zX2X^ zKuc+v?gT&xyk}9ODzE%Z=vKlQ_S^-V2*^!lY<02q(m}D@P@gj zcwVy5@xf_o(D9AK1=owd$@I_EsJx#4yr@L&)BNW+5EWT~V>5V;1pc>T^Sz9JL2`EH9G?XU`oQHG zT+V+WIk)*fGYecHbFKtM2sw!E?2oyZWRnFSs8D&apW*Ht#9kU%)DJrf5UpVqHQ=a0 zeW91eULnB_8J?yEqRU(;f|h9+-wFI-sa(q7&3+B~l!!j}i5jJ%AN4li@!U*0;DAio z9Z;(PyJzem&{jAio2&zVvx&9sWm%Ja1E4n{ENd@o+rTfmoktibQNlyHFH2?a!H1A! zro%=WX|;{rWVT>SkR-6BV741t&- z0E>Jng6J!YMjq=UEta+}Mm~S(h*p`%YFoT_h*|=(Y9qCBor<{907*qoM6N<$f?p3wcmMzZ literal 0 HcmV?d00001 diff --git a/apps/web/src/images/icon-white.svg b/apps/web/src/images/icon-white.svg new file mode 100644 index 00000000000..f782c4ccc47 --- /dev/null +++ b/apps/web/src/images/icon-white.svg @@ -0,0 +1,5 @@ + + Vaultwarden Icon - White + + + diff --git a/apps/web/src/images/icons/android-chrome-192x192.png b/apps/web/src/images/icons/android-chrome-192x192.png index 43976a5832ef0073b9fa0d7c92d23bfcf6a1b018..f903989dbb6198b20df8b7b94f5d04b414678b71 100644 GIT binary patch literal 3488 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 diff --git a/apps/web/src/images/icons/apple-touch-icon.png b/apps/web/src/images/icons/apple-touch-icon.png index ea07eca818103e4d51f8f6e86c0b7f77c6c88bff..085ec29a212a9713070cf3b443f12a1d94dad0b8 100644 GIT binary patch literal 3250 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 delta 1335 zcmb7^>o=4M0EZ`v);hbnWGF+qOhu(F+m=;sQ;LwwG@;Q9iYQYkt(smTW@LpzxvXhK zE0<9U&1$=dl{Vf_pfjaVd?^$Mlt8ENK(V)>m|`fpXcAvIi6KuMBMZYw z!q8k{NRBW#M;MeX49pe;WD5MQ3w#0o!E1aJk&n8{_qoFNzQXfN=k2@9b5G;BUE=P& z$la65-Fbfe2g3M{uOy9cKgZd2mgAhraZ2DIBR09HPx9>ZsT1ZL=Tml1Y!W6Vz z(xc!*zP18?l=R+R`S*gF?#j@oTF$G=Vnp5caEJhOlbZcEdsPqjdI9uYD53u|r90}r zu>$2rbsj(wf{{+;)t>QW6udhbL9t;Ra3wME~=;TePTt!pO%cVAbb(wvyu!V zfUOWmKMh|5_;wUnY`PxF7?v90(c=zVVj9bc?G#J{KAdyviA5|Yu8Tf|JYI_M<4w<$ z+L8qvKhZJi8ABe8@A^f*>%RM2OccDu;b7g;;#SL eMm+U4`=r%X?+pms=ftn)2s?Zr5Y_CB%lrquuG(q< diff --git a/apps/web/src/images/icons/favicon-16x16.png b/apps/web/src/images/icons/favicon-16x16.png index e42bf10e800a59dbe49de3149524c41853d9deb1..022e8e1bb2208e5d9682c60b94ee08f838519f49 100644 GIT binary patch delta 356 zcmV-q0h|7)0`vlq8Gi%-006c6H|hWY0Xs=VK~#9!RnY^?*L@TP@cWv1$gbJTwr0eC zv)40(F>B6tv)PdC8O_SJ_37l=<-w2Ns?yzdcf9AJTZxAVx@)H%pXGzRan)usOiIki zb~OwR>shvY|015DTIyzOqFc71VP3$la{FyS4`sS*_9d=qD1SY|zU5wdf7M_u{cfZu z;Hl9;EyG?#u~{cg25ROsIIDS3Q`pU@$7ULDsRhbHuvl3TW_*;#>b6n(x$L5r`g-7@ z{@E^u=@;d;7)Bc7mFLF!+fm2U#|6C#J5mgfHS~5B>yd5PV&FN}8p0000W{KmKam%r}2^mXz6k8^f?=wA1(cFF6Kd9QM2yo~IA=H2+jtMQ3T?PIO1 z`)V2YlvD2k4QIMNLkegedr6RAaJ}e?)$2BX`&m16(sH0!uBVG*NX4zSC+-S48;H0* zy!${U@UP?2t75XMZp>f)p?(LyXiHT5&E4y(Y#q-nU8sAzF^W$j(TgWdQC?Iq UZeCQJBG6_APgg&ebxsLQ0QobHAOHXW diff --git a/apps/web/src/images/icons/favicon-32x32.png b/apps/web/src/images/icons/favicon-32x32.png index 7dc2e8f9ac6e2f2f30339472e8da11f6a8b118d7..15b499e8c0b98e39bd821adeeb4e792e04224c47 100644 GIT binary patch delta 874 zcmV-w1C{);1NH`x8Gi%-007x@vVQ;o13gJZK~#9!l$BGoHAfVL_nGtCwryJ%v2EM7 zZR0twv2EM7otbO%ORb)sS#!CPs+Zoit1U~wXpZ4|LR#ns%0|4%@r<=B2-u2OX(WR> z{s2A~;SWVw$oU4_5?Bm!9K=7_PTnQrN!IZUTZ_-A^dyng?0?`S9O0W_EB?l#L3#z7 zC}uN^q4XAqVr(XEQYNAy+r;+q++QKZ2dw8PMq-Y6E)?@V8p+YDmm`BW8E+h$H2N2> zaz6u{Ibb|nGn>oB*=(&SaQXl_UX|0MiBpW{@OYV#jBv&wT+UZC@;Xbz*J)IAg_}ws z$4EI-yk>;)+TDI|PutYACyUK5>0lZ6r8~$|OWUVs}!&) z$Mv=xJIc9I%2U(<27j{NCHG=JH&Vmq&ODG8N$@Iz zvY6vpBsf1-lz}F>Hn|R;PNwh$Ta(AQh8UkR#@Uzo8&<+f7mrcKK~5vj)_l=<0}bqo ziG6vTcz=BTP%O2f(+1KhoJN8>{E<2ifRkN0km@04I)!u*#cio4#`jEh%3S{7Zx*`p zRH-rQB)mUN^e&_SZa(f AD*ylh delta 419 zcmeyywuyOyWIZzj1B1(wu46!Ia)3{Wt9a}kT)&^u z|2%*9``NqSPv8E&^X%8vM?Wt;_;LF7_Y*h2AG`kT@YQeI&wkl@=F8FpA7}6UFk}1s zsaxMq+WdaP#&_N8-gT{gTfg*8eev8^@%_((+n@S0J+ZHRWL@@9DfOOw@?E*4yOMEt zB;r7>*?m$^3+O)1k|4ie2F1XoE1tjo@L7P(oD(Q`)YHW=q~g}w%g2S990Xi1$_aj* zS?uP*$))l4f4urajWmu;g)i@Z2|0VyPDv=LKl^oN(<3Y9yqpV)LZ9kGIqF}1y1r|P zdU|u#Y>^jJ+&Vt{jLiP?Tfdq*eqofgY41-A`_BUO5`(9!pUXO@ GgeCwn`rTXr diff --git a/apps/web/src/images/icons/mstile-150x150.png b/apps/web/src/images/icons/mstile-150x150.png index 90bdd338c4730797dd24373df49ca9b7112265d5..3af51d5dc7ed538bf58f0bb241de621013f3af2d 100644 GIT binary patch delta 3314 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 literal 1983 zcmb`Hc{H2p9>){y*gDmgwuscAXf0((F%j*w)~cmNQdL8X3R=sx6*cOjL})UoXla$E zw`rMD%iNBZ3NutPBx;K_ToMV_QW3I{<-Vq8=FC6$k9*GjobUU4zQ5n|d(L^@_kGTT zz3A<>R~4cP0)h6rpL6yFfxv1zkMb^{av@IT0SKfJa?um%BA3fmj4rDjMJnrgDnc9- zwZ2hM+7JHXOYkmbkiu@D*#XyvxcA<^p#7Wt4m(VTZEhzV+isWFsTVa237G)AUgWTD z1VbluO#9kS3dfQG0c|#Sf3eB=1(w|f#FN>-0tSeHzRvhynNG1trg3e(9d1$lkD{ zUiEukMa$ZQpFiOnR&fohh4m|UYnHQKET>d2rBwerymTR~gd0-C4gP`q9gY)-;{+6P z{IMKV{=6S%-ZyXFCvV>SF55eY?Ul{;%x1e~vRpD)PU)=EsdI>1v+(3un}k`5m>Kiv z8MB)+rZ;AeN6i>VOdCZ^8=|L=hEE%WPwRy-bwioZ5T?#GCgkdrR`AYGjA@LD0gh2b zlCQTPF#Z8pK@mU+KzRoh)jj(F4jee3rL6;S1VI0&@iFrg78X`k);k~oJOM6VM56q| z(dhf7go;=7ZSUJVItND>vn)1uVUf2k6iHciW ztOT3%h=D~~I`#^>n}!`-oZnEuns{?!ZisPI38CEQhGQ`{;D9lSh(7P`qLw5_1r6AA zl;2b=&&BW`i|+(i`Ol}VQrv?eltkEyDz2kcvneB2=3eSojw)jwMmWLR%<+n%-t6>1g~s(y76(Ss`N zLKTv-f+`G0%_h`IxXTH-+9Ugx3UlJgdr^&Ks4u z5)5(b?onm^p5tJwvk}f&ogyeVX^nPBC@s!`vh|eUvQY?g(&V8Nar@!#IpwTcLeb}` z9s8voCJzcph@?E#|6h#uD0D=HBRal8nkazksP_%*zunwf0G-t6jelyrfo?qn7Z{hZ zA`Uf;7C>XL^P(%cKLr%CoE_m?wlzf>m)Oen9)>+a)9XPW3!qKMvY_&|*N%exBk&0g z3a=6}9P5t1mN5mtZC6vYRc!=kpP7QUBXiX9Pr%>Zoa^J|K#)T*UTRS|%bwS9wP))> zFW?jZ$zzMc3L(gJIuSZ}*bPtq7U?w6MS^you;MD)*64pytouzrh+xHOS$hld9XGl) zUnFguUywTQZN3`aJ3uxogOW3<^TtQwg4E#Tv<>*3f$7-OmV)^rSn@O4051>+ z&kG@Poru2U`;<<8?lX5?StG%qg=s+@dFy#fcjkfiIE}>0L6YdNjWD zS>hwrA!sR*qMz{ceD1bqZjHTRi23JZLKeotiQOl`{_06g9o=nnmpf~f}QeJ`)_=#lO)2lvN^~{lx*49@#hqNA0 zu{t=Kl|_!BMjtI6vz=%IlW;hH3%;UXe}&gX4RfWlyXR`V@8jsRQ{2`46T8s+p2F#@ zSUUUEqTMNsTwCaRunLyxHyHoqcv3`Y^P0&%&uDwR+#*Hs@~83zEcjB-+uQW9etvr@ z&W)2MPwbT#_4dTJrHM<#Kc_{ujmJwKTt&c+r36ry!l{Q+>rw+^>3vHUUVJ1Te4k{L rA(GBwtVv$$lr_X(ZifGEJ1)x=P#u~4^xvq9J6-NB-p=)o*RuZu77y1N diff --git a/apps/web/src/images/icons/safari-pinned-tab.svg b/apps/web/src/images/icons/safari-pinned-tab.svg index 29063dd6de8..a5948076ccd 100644 --- a/apps/web/src/images/icons/safari-pinned-tab.svg +++ b/apps/web/src/images/icons/safari-pinned-tab.svg @@ -1,34 +1,92 @@ - - - - - - - - - - - - + + + + diff --git a/apps/web/src/images/logo-dark@2x.png b/apps/web/src/images/logo-dark@2x.png index e6519fb0fe02573d01e2e9f72cacf1d29e03076c..5b1efb464059d5ef3b146cda0092dc3268eca3dc 100644 GIT binary patch literal 5473 zcmV-n6`tyeP)Jg|L~#-*3GR{P_uO;Nr3!0B9Tb}I9Sf)nN-j-t9LGt4{V8K1 z&4`(WAj}}9kQHpA3){?b9H$sT_>5ct_Msd>*h*IbnzI-|xE{wzn&V_Mn_}{*P>=P< z|L0w5lfkD*H1mM^d>s8#2^myq!;{=e1jlilKnEcROF0OD5s1nXzD7Lxlx2v@p#U7m zDg>c3fgHziMnwyxjH&eG8zf}jqYJmGKOI9L$8nq+krd=|3>?RCIP$ok2K`;{Y%i37zk$1wbQyLqewy)tKWrhw&^$96?=R zJYvaGW^y|1IE_*S;Umss6yGBV8##hP&gWr%M=Ti%G+-z<@GSkQW*o}6E zaU5sicDjMs&uR1=Ql6mm8rIi767n-V2d;1&S2$IhzEE>3k0HjK zLb668#>_Tf2XlqvxWcL0{)8mtGWJG{d5UDch#1p>TadVv)6o@<;|iy0%48qTq=?5@ zhs5P&(unW_V#pR6l8ijIB8I#LWb-)^m*07aD;Yt5(yCxR_3da>rb=8dJh#?OUvj8!qoK}R@mhym+pqCIsexQC8ESz^;;kd%7&JH)$ z!4}$5;X=fiiwWy*h%qNop^wj3Fc7L-;dDe?;kd%7-ew@te9qswfwi97xj++25knRb z*5`;J>!?kI=c9LXC}NUl;pl}>1qf=<}-+vtdwdoyAckDW=N4CT!M?J11ezNJuD2lj?In3cMrZb#9NyDxNZT~;< zpFhGtu3#oF@(d4hCHvziLSHW8Mv9rs6Wq_G3?QADu1OY7J4SLd4>6Y)nL`mL(U2gu zqu)V3UfKMKzw&RMW-bqLHy5%OSyY-cko)6awEraLo9I=f9Ke5B!uLc767ktxr-Tdu zI%rqD?uxr<-mP@Qs|i=~3lf;;XoJ6{+T#acR;VxRs8r!(FkUZ6W1avYmr^9ev0gnk zgX~{REqE9V-wmE0{_imEbgEtM6s&)L^6f9oNAtJLG-D*3&bva9RU(cmpwHKN1aLec*=ugUF;TMBxl&EfSFT$qgtR zA)j<^MgmgC(KtzK&DV%eR`CzAiOKYNQvOOhHW`#4hJ1%YU1nIGc=O3aA)T*~B(jlK zyFlR-AeAVbz4f1#rUq*ePoBijfu1ERiLQrY)be|U&{rY!(X|91*)RgvM0*}3+K;qN4`tAgVCJCNnFe$Y(!K( zphiI93}UM1tACYSn9OBN;vT+DsKQP-Nz3B{vw+~{>-Pp|XT_dh*&TR>&9$%70q72UvV<{hTE9Y?{2Xicw z_|ACn+juuE9C$>1Y$Rs)M*sao>L)i8Gc~?JFLXC>JQkG^gE!~xjN zMpSMh9g`tyl+ji=X}s%s#u(vYHmX65Oa=t)GSQW z)ltGo^;^6To%fno2@#UjQH`RMlNaK`z_+x*t~=$Pk-~KRj14Xv&pu9nSU&GFsLvNz zIA4>4pO&6o70$*06`S|&lVGhM~>JZ*&Bq1;E zwuJ-VT4#0NsBTW^eV^YO-L2LaWw5LLw~h#*Eu1@$XfDO>@9L4yTMOqx>>7Hm zhHY1_a4trS8D@Es>N#b*7EX60A&Yk7!Wm*2TkDfB`(}X}fk@QCTE1bN=ywFH70#5T zjzYgB*sFTs1Rn!hzslv-!s$ei&FX6IcH~Z}psCM%)Mqhy#b^F+9Z2~pRfJq}X-!+h z-LDq!#)VT?y}$oKI`OVhM=dP?nCknIQETBSqH>NxqPZ%daP}tH{p!(o5$rlk;WYMK zya>_;QOWf!ob{v;WV!muJKH>Hd^0xl0(R~TE~l9Ql^--#3OJSNJj+Kc(N=m@ox*`v z{g#oa;nWYcBc4lrCnp@ZoeO6JnFLb<`-~^pIhMj16nf+ZY9cBHzJ;>@jpfyw&XU#PsSH!gkROsWj1zM^yD= z^8sP}=2;36Y=EV3CLoo{-oAzNuq&J$yR=~)5o{jvS&Q2muTF?DH)4|$u(Y8~;7Y30 z7fz3zTsUd0P@gv&h4&5XtPVq>IUR*@>Z4;ZYsww=stH{yQlYRU`e z->z`BAM@hPwn1m}#$1NiB*d70*z99nyxEAQ$PO=@eRp!SO(l$Diw| zsb1czEz<+wJj&u`(cHmM+7Kb$@DvsfY)tA1r=z8Crg+xL_f8^pT;c3!+6G*q4=V3O zjOk2FU&NSyq6@x|zLuK4^PKOe3Guq6xNt`9^ulRIdE!W!T2A>B5xmq|dWL8tAa|kb z=@}7Q!&tJ=rM_^MB{hcA%ThR(BI=kfIj(Sa0=30xT$Yj^elD+Z3(4ycV>)7^Hp|qv z81*^&DFR4Q;S9p;x}8=y`V`I0)B+%ftv-_&8mh?%cWT3`$Dvc}tXV;K{EbX$;e4yD zTC(|*rErGp|IQW8E=_Hs?#-dtL|Ejr31x*epHsE>AoL}7eG~P$h9b#Aw|6BA=V;94 z?)<{>Y>;(u!o1)8N%UI6wEGv-sb{YB3fytnT$s|rc|ECH0i9|om4Tl7(Wkk>*-dCy zV*Z2ORfsV?)Jxu!u}Pg!mD4C-A;wLZoD!;VmS~Tf;8VwIcYfh`mJ3b;;6BUB@QdOu zmuIq0)wk}l(A(i(mD0kwQ9b@%f?a7ToE*;xRA*N>yNemxOR5nzds=TBbA8fl#6j)3 z;=71$8Iq8TF!^_=!ucxXdaaR2N(<+0?Qy3Ptfm@feFZ=*+Pnu{hq#|lU+ehUEkU~` zD=($AaE5!Y1JOMk@(yFQ*_hJ8>72xU zKXTb@Eu6`oS9I1*t9gxAO3;*#C(b*-cN52*_oOaY^5BhR8#gtHwL|xUR&*Uz@&!7#P_ffk% zKZMB*p^iUW@LS3Y=bxTEhI`J;jq5hThNj zzD+ZT8IKsUh+DagiQL8a0W*z*3sX<(3+GrQIEKQB@QWHM|1{vbQW_;{6s*kr-mlf} zCR$^*2cIJ;FPuiK^$b|&VV1!|NMPZ#^{nq(LN|gmbcM4sWwH-vQp980^_W*l!`~T5 z5;+2YHMF}g{?0>O$q4$BMojBUSHxmW9@;5|lgp+`6%IV0Dz@V1uz}i`sjFD3q=c53 zG*N{lylwofheXHD{z!4*z(hplQ@W#T%HxQ=aI_OnVGZNR#;gIud5zay;p`gpRYQNp zUk)3QkXcS9{%+S6g0{CFi`lc56DSQ)I0YfU{tXnRuyEjkN*2z^NL(JnkG|gREBwrk zJ6b%09AcVt8gHo=aW|HxxNtIgEA9fpJshGcv_400le(ZkieCc?Cz9~o_=y`COh@Vi zIW(gOCozpTqR)#rc8$VuPByGlIskum9tlxY}kbrFBFyNUGg#+gyAu^nF zeotZHG-qX{3a1feLEE}2wG%cGxdA^d_&uTQ7c-x)Sb?Z)M39TkQ=w02_hAiU$tnf`FeT-M1Npp# zSaTC;z%7A=0}(D^qbr=_~)M`p1Fv1A?h(|=be9OpG8WX2J5HxeR~ zwHYG8DaKEP!zhlcx>CO67W&|IE^}0F!zP2FJQ%mOs*JC=iGiTxF~^gc=#FAeLdIc} z$w|zlB;i=%ZDw#78JKnFPL)Hk%lABX0zo1i%pLq1_cQo{+vovGlj!$#3c5n|T~8u; zIgDZ+8{&>spJEu9#Pp2*?NbTXjL|&L3hmhUeQxAP-|8KxzJpN&yGuQ~(ws#|$jl~Y z5E3GtwE4Zkd7B{3>B9l^rad)Dg$DFs9|lrL9d?|C6tXY<=t3SlUwsPLkKS~kE<0Wx zo!OV}v>=Ubw+CGq`2XKcCmONKaSAz`ksQy#oKKmy$Y31#?9E3BTWzIjQ|-zPGjmW% zqU(Wr(v(TsV>fXshjKh;a5k-|CLG6E=(CS)3rZ0-kVZ^V5+`5{q7(A#0-)c6>V2vm z$8mDCBb*@#Cthuc>5N!YN@HU7LJ-~}=3FE$YsjFQaU5r;@7*|CutnRa?Nh{(=e4=X ztElI5gd_B$nsFTGI>WlEG2}CVkJLKtCd6EZSTc;5mMlL78RMQC*-0$MJ;k{D{r`p#FxLR5Om_9LBR0aRhaNF#&6&W^)$r zAwGGAF+9d9#F8U{1`Oo}o~1w4nBzEuk?ov50N^-|b274>GY9}2$8pX^wsQspfa5sM z1!}(VG3?6*Bn4SPFNUjoVVwj3j^j9;S;$KqOoiu=6y!bt(m0B@`HJQkIF94oh@>Ew z<2a5JXq4K#U@Bet8VQ+qDdaZwr(02qO&EKazW1)F#8Ts%jokpO4iJb{SM?!;{=egrqr+;}jzZpOFi|K9tAZ z(W*I%5rpe;9LL#a`%}h3nh`TA;pTOPtY8yeNCC%joL1BUr3v4$fV!aM(iF#WcA)nS!l|vy4DzYNu>Jtwz zLB-?+6>(ia5yW$40YMQ(79*k{Ms6@M5HkDTl2@-@GSgkvJrk!h_0?Z_(^WN<>HfN^ z`d8HeE$B=C-#E1)I{4`xp@#M}6dB~RoN_``uz?^aVK77@o!%soKs?AHLUE8vNyjY# z-i}!Q5w4>l$YW=iwzb7zsL$0@65>00k}!ngCN0D*r&yN1fmq{Xc7(dO&<%qDWSVlI z_WYPn!Vn*_IhwlQjv!I0=CfjuDP)vM8du&MNg0=#a!u zMmPz95snc~ROrB8n90jL!vqH4Lyr-JjBpYHBOD`~IAFfVzrVo<#|XzW7i=a~p8oy@ zBOD_f5B;cl9v7xTolYJ*H;r(#gtMA(v}Gta^8i7fBgp;yjlrbx+wqAJPQs93gwvRX zv!dSprGQVv9(kA*+)g^Wq%oFY*ffQn*c0GZi|@amphbF&PBcc6XjqyMEdn&WaGH=o z7TL6>84XDW9mpn|OaewYwTXX$pfkl(+wRaegA8;iwJ7ap(y(R_YYDkX*AR}DB;k%0 zxZyZDqeCl(F^;)>NSRnqR?QApF^@axkB{h+MIME$VHbx95#kU#Sj$4rMTb;|Fp*ML zQBFl|IeXZ^0v_UgQe!BbW(;L2Z}BZPghcwDiaI!{op(b9w5OA5j*#E5sVQGUs+aMl@;BeaC=jH$ z6izQ*Rjjv?X*5HR93hSr5Okr08s+v@^EBy+Dx7U?oE*$-Vl)i9Qi_h-I z2_HzMPeY$)MeZ9cezT2^TKgZ4L!F}9T*V+5tRT7JSd-1$+TXlb8eBUUPJnS#Y1O-t zKIm{wz1x+ad-zqmy=9z|n8LXUAEgdkI6Fqd8EuurwQ!yhpZyzsvZz5mUG*swx%&}` zAH%d{Crg;gO^jy9|I@|fQ%G68!PW7a!jb3ka_bC%zM+(<+|76%=4qC&kuS-|n%pqI zcm*Fbmnn=Vp8}@wGM`Xc=a|pv$WabC6iz1ZhIxuv!W6FOYW~D^Jiz>VL;U@m=SVoe z2Oy0%!#v3Nh+_Uu0b|H#GLN%>vU*4DV_+f*=Q8qKwDH!M2q!A({Fl zaV9g^AsxH9Rylhe3Fo*vgSf5SM_20OV=%?kAkRvj>p(bpKucEE*$ytBUib({CvK}V z8@G$Di6@-rsc_N8!}Rr>aGFbbbVxA5gqRdbikgo*sk64gd*e% zyFJ^abGIE%7|jvnv*R&ZVNEi5>=HRXB@Ot&fpFULU#aFj`mq+dPtr$QI1dwG ziB!fs1ws3{id|BkRRj`EIBwHwns`h&@Q$=Wh8|t(mA@W6UJ*I3w!92);!$$(Yuw+r zXm8tEBn40USS*G=SK*AlR3Q(?PDPFOES4@?DAN{BbJj>TFQ+~BBr^|raGa(ooOw)^ z25x7f%CX4X?%raAqnmE@oN(@xy4}t;Os$Zne!HWNpWPzgF+`W%($wVwE#d5zE~E;E z;*4bE9U0fq7Igv?Ng`gSEu7g>&Cd`(4Igu*e6#d~BjS@ntRxd1T1hiHKaygEqnEam z5@q4!Me*BRZu9b*o{qMJf0JBM!Z_3!AaZ?9^qC;d`*hS0PBod7*XFwrr`(I&U&ug@ z0B?&~pM9FbxlF2g4n7@8N{eP{I8{eD(l42gE@#NM#KacPx4h01%;ZUyD$nlZMOio< zSWkT<=lodMmiGCW8(O|9E(18 zOEsRNEu679<8-Mvnx2TlSxa}q(T4XGa-ZQb;ang^h$N$k2*&#YfO|w4V^AZND$y@X zAr|zL?z}#2;hct3QrIn>Nq(I2iMDV$P$>mcI-!~LbgocSI9o}=Dc^`vMkJnaJ|&$< zq$((9hR1}HDxIc7QR5_$V=4eAi@!fWjq^l~rNjuSN1ClEoL6v;d>M|yITvXQ=V5X5 z*EGQy6Q$^*W?I4-gL7sfBHj~CI2ClkievcMri9HN6AsdY*y*S-P2?B=fS;XWy0IfF zJgWP8V|}D`P{TBZGZ5!2lI8&YI46m6E#V|fQ7zZul#Wsu;7ASO9HAY~xl)w#TA~SO z8g~5Ewv4VG6V7d#GX*}rtv&t+F<5y?S|FmrXVRjESn-Ic<614@tj9U&QvA&%-0_^2 za7IaelT-vQ*2e`kgtH9i$UWvYi6xvGvalmyyYT)hj|r!nR7MBv87Pi^O1eksoOEr}_dPN-30Q%)<738$G9 zNqsWbJT1jcgkQ{AMLJgWkS~t76HXB497{-~lW@;WNjR!~#usqQI%#d7ns7cc!f|rJ zR^eBVR|L#G!D;;+%5`iIj#!%%2~wiei|- zThbJRnsDYD;W)Wqx1-7xHto&voN)3)Deq!MuElikeNr@q+CU*U4ux}hRN_f?M0whK zo$@{em*AEK(*I3OI8PbjIJscIK$Wv>+WSY(2`5|H^Q}3NnS&TmSuE(RB#lTkVP8}h zH3Z0J5P#r$@|j2hGYRrMMZCuAEMo<0*z8C+qj1hxX*;QCkfSJ^6xTtEGDX_L2{s1d zv<*|v*>Uo!-`;jR&v;Ha@Kt1$2$Ip>C)=jIw|G!EGekN6AQB^N;%6p_ z&r1{n%kDylBrc>_2v4M_3uj1F)&$KX8g#ckH-(sDl8O|CQ_vWMGc-&&ojoF)d=Cmo z{J+^mBwn=X1@)0O3{SQVo$rS#ttp^(rsL}z<9NrY#kjgne$SaVTBGUGXD`wqt+*uZL5@CGFm668T9@?Jv=N7|!PIVZPxb8QP`O41=~TH3Ma5J?B0f}c=mtf zooQ?pRTze!ZWl|z0wRUhAPF=ODfojD_8?(X0Rag?4MhZ53Y4^H6oM5B(xQLJ zn5&@WT1gE*QLJFL+7?03)#T3^bA`vt#Y9#Jbtv$Ti03iU* z!ni)I&`%LKZN$CG0YVL&PFyn#oR*IL5hfV`j_Sj;TwK3py;(}vItL8?4^A{PoYl+*{h8Q@L9Ur1J&RcOF8CsR<^1;%0 zWh1FXpvk+A7za)USH-rwe{EI_#vOoC|b|ahC3_e%C-?z-j05+pF-e{@5R*JextKXH-210E|-)a1dA20Y-HR3Ch}#J29-wl zsz0xfI-uUEK?Hu@fj51YFyKrOdur|Ru3_4xQ`U)9dQLI`2YPZT?!f8B$*AL|f^pzT zH}iYE#9S7!k!r;;^C3{+Y*jdiGn6x(M|qritl>*)HOp^IvS#Xw>>^c;j#eP6>}Ff> z>Pxj6m5f7Q(r05HI1#GjlES%58#tYWU+(SX01k|$A+Er=pW3LS7K2gX_&@%pb-=)R z+Q-?QL``kDCUThaJy!c2fNVB0OsiAFMi0A2^89NO2po7;ge~^Nn}&EQ4!2s2csMzL z15d;aIO)6+W6YbRgbp|hAYkAW7yu6J7j zz{#X4Sm4NfcxyFVO)7elZGl&7cWUS&);MRBkdw|#YOPmw5Rjih;AC+?-1#H)Mom4$ z3U&%GK^r)!HpjwtI-sWlM$xjd0SE5kq6grlFq!i){<48$0L%ktJ}}EOZnlzQ2skh% zVBpAxFm=M9@)77Sk{VPsAL;BbrA5rwyNKUJHqm_mL}*ADaG(vxkk9pc@`wg#1`b5{(3bMDf!?GjAiFPR*U$Pad5sM?P)Lm?a5}QvrQOF!NC8$nqrT&NYj3XDRX7pq_+o+SCLJ|B}nLyw`9^cun|0{|q zBpr}yLLcVXDl*Kru23I1kmlfyIn62_qmb4}HKzl8naE;x+ZGTdjSo1`o*$Hf)0{Gw ze5_M+2jjr8M}!a zbd|9z2?Y*h@|NSr?Zp4>-AhPRQ5eAS|0qm8lI%66h^uG{DyURcf{;imTGP=)N+=`{x#To==A5~AWR&lB zwgbaG%=zy9&fM>Oyr!1`FBxErX@ZMuO2IH{1ROo3jGGquPV$|}2&=I?9s>@fa$o7a z-4lF^@R>eb#M%ziZ!ej%Wjdm~h$ksS-Gog62b?r(2b^IP8E5WUZ|l}Fr;(vcJ7C?= z+E;5MEo4gP)kyyGu-6`AF{zEGg(eWZ|I+?EBoOej$C)7(3ItqwQo4rc>@?}c{wV53GcEkkT8r%3e@GHBRFZ<}BKWIF_&HqxUq?ey2%XffttUy-|o%Dws0gBP* zpqNg^BRtpK;}|aVZN^6rb!1^h26a59$x^D4&+Rb9CGYXF#bkai5TF7To2cassl>`Q z>Uql_lN;_JS8x+b5|?SfMf8%{Pgle`$d9y9so9KYElsqt73-W_;u+USMo}W?nTjgh zbdXN`N@6=Fsi&QXJi(8bYD!o}JW0UKVQOf_PdDB8@zI2bL*&Qx-0E_3gj#%b5}=E_ zG*ZoOGFeDc$mIYYuHvPc>s;h0c`RieW8ONd}Ifrljs zA%xAGR53cIcJ - - - \ No newline at end of file + + Vaultwarden + + + + + diff --git a/apps/web/src/images/logo-white@2x.png b/apps/web/src/images/logo-white@2x.png index 099a4e4de2554b4a7b0a7a32625b13c9403b08e0..29423571b9668b35e7d1726194d460bb2b3f9397 100644 GIT binary patch literal 4187 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 literal 6891 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 diff --git a/apps/web/src/images/logo.svg b/apps/web/src/images/logo.svg index 6ea279a40a2..1a5096931bb 100644 --- a/apps/web/src/images/logo.svg +++ b/apps/web/src/images/logo.svg @@ -1,7 +1,7 @@ - - Bitwarden - - + + Vaultwarden + + + + diff --git a/libs/auth/src/angular/icons/bitwarden-logo.icon.ts b/libs/auth/src/angular/icons/bitwarden-logo.icon.ts index 2a1ae48526b..9fde19eae0a 100644 --- a/libs/auth/src/angular/icons/bitwarden-logo.icon.ts +++ b/libs/auth/src/angular/icons/bitwarden-logo.icon.ts @@ -1,9 +1,11 @@ import { svgIcon } from "@bitwarden/components"; export const BitwardenLogo = svgIcon` - - Bitwarden - - - + + Vaultwarden + + + + + `; diff --git a/libs/auth/src/angular/icons/bitwarden-shield.icon.ts b/libs/auth/src/angular/icons/bitwarden-shield.icon.ts index 86e3a0bb1b2..4ccf188e948 100644 --- a/libs/auth/src/angular/icons/bitwarden-shield.icon.ts +++ b/libs/auth/src/angular/icons/bitwarden-shield.icon.ts @@ -1,7 +1,9 @@ import { svgIcon } from "@bitwarden/components"; export const BitwardenShield = svgIcon` - - - + + Vaultwarden + + + `; From 79f64b85642644b8c5c7b0931d5abc2b766b3f4a Mon Sep 17 00:00:00 2001 From: BlackDex Date: Wed, 11 Sep 2024 14:01:57 +0200 Subject: [PATCH 04/23] Add dynamic CSS support To make the dynamic CSS work other changes are done to add a custom stylesheet link tag. --- apps/web/src/index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/web/src/index.html b/apps/web/src/index.html index a08908c7725..5d98411f465 100644 --- a/apps/web/src/index.html +++ b/apps/web/src/index.html @@ -12,6 +12,8 @@ + + From 2d5187a6d397bb7b8c63f0777eba47109dc104be Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 7 Feb 2024 08:01:01 +0100 Subject: [PATCH 05/23] remove promotion on send --- .../tools/send/send-access-explainer.component.html | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/apps/web/src/app/tools/send/send-access-explainer.component.html b/apps/web/src/app/tools/send/send-access-explainer.component.html index e8090cb850c..284b9165143 100644 --- a/apps/web/src/app/tools/send/send-access-explainer.component.html +++ b/apps/web/src/app/tools/send/send-access-explainer.component.html @@ -1,18 +1,5 @@ From a41a8bf71395d3231404886275db8692e0b64e37 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Wed, 24 Jan 2024 07:35:42 +0100 Subject: [PATCH 06/23] change Billing Email -> Email --- .../create/organization-information.component.html | 2 +- .../admin-console/organizations/settings/account.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 e0a80060810..789efd92645 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 @@

{{ "generalInformation" | i18n }}

- {{ "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 b3fac56c0bb..796a1a817a8 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 @@ -16,7 +16,7 @@ - {{ "billingEmail" | i18n }} + {{ "email" | i18n }}
From afffac0db11ce62c709bcaa9c2027ea4d982654b Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 18 Sep 2024 13:54:08 +0200 Subject: [PATCH 07/23] fix logo size and on logout --- apps/web/src/scss/tailwind.css | 2 +- .../src/angular/anon-layout/anon-layout-wrapper.component.ts | 4 +++- libs/auth/src/angular/anon-layout/anon-layout.component.html | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/web/src/scss/tailwind.css b/apps/web/src/scss/tailwind.css index 1ac7b154011..0c388f67871 100644 --- a/apps/web/src/scss/tailwind.css +++ b/apps/web/src/scss/tailwind.css @@ -52,7 +52,7 @@ img.new-logo-themed { @apply tw-block; - width: 128px; + width: 175px; } .theme_light img.new-logo-themed { content: url("../images/logo.svg"); diff --git a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts index 04dc3b6dfd2..2791b0bc172 100644 --- a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts +++ b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts @@ -8,6 +8,8 @@ import { AnonLayoutComponent } from "@bitwarden/auth/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Icon, Translation } from "@bitwarden/components"; +import { BitwardenShield } from "../icons"; + import { AnonLayoutWrapperDataService } from "./anon-layout-wrapper-data.service"; export interface AnonLayoutWrapperData { @@ -160,7 +162,7 @@ export class AnonLayoutWrapperComponent implements OnInit, OnDestroy { private resetPageData() { this.pageTitle = null; this.pageSubtitle = null; - this.pageIcon = null; + this.pageIcon = BitwardenShield; this.showReadonlyHostname = null; this.maxWidth = null; this.titleAreaMaxWidth = null; diff --git a/libs/auth/src/angular/anon-layout/anon-layout.component.html b/libs/auth/src/angular/anon-layout/anon-layout.component.html index 672f0870348..6ad354505d4 100644 --- a/libs/auth/src/angular/anon-layout/anon-layout.component.html +++ b/libs/auth/src/angular/anon-layout/anon-layout.component.html @@ -8,7 +8,7 @@ From 10ba7deb77ab6980acc630699d44d69d7c553b11 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Sat, 9 Mar 2024 07:31:41 +0100 Subject: [PATCH 08/23] change light mode color scheme --- libs/components/src/tw-theme.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/components/src/tw-theme.css b/libs/components/src/tw-theme.css index 0a5a66337ac..af5f0fb57af 100644 --- a/libs/components/src/tw-theme.css +++ b/libs/components/src/tw-theme.css @@ -7,13 +7,13 @@ --color-background: 255 255 255; --color-background-alt: 243 246 249; --color-background-alt2: 23 92 219; - --color-background-alt3: 26 65 172; - --color-background-alt4: 2 15 102; + --color-background-alt3: 33 37 41; /* bg of menu panel */ + --color-background-alt4: 16 18 21; /* bg of active menu item */ --color-primary-100: 219 229 246; - --color-primary-300: 121 161 233; - --color-primary-600: 23 93 220; - --color-primary-700: 26 65 172; + --color-primary-300: 108 117 125; /* hover of menu items */ + --color-primary-600: 18 82 163; /* color of links and buttons */ + --color-primary-700: 13 60 119; /* hover of links and buttons */ --color-secondary-100: 230 233 239; --color-secondary-300: 168 179 200; @@ -49,7 +49,7 @@ --color-text-alt2: 255 255 255; --color-text-code: 192 17 118; - --color-marketing-logo: 23 93 220; + --color-marketing-logo: 15 15 15; /* The Vaultwarden Logo */ --tw-ring-offset-color: #ffffff; } From f67d6d2f4605ca4211b0b7593e8398b4f8f8ed0d Mon Sep 17 00:00:00 2001 From: BlackDex Date: Wed, 24 Jan 2024 07:38:33 +0100 Subject: [PATCH 09/23] add warning when no HTTPS --- apps/web/src/app/app.component.ts | 4 ++++ libs/angular/src/auth/components/register.component.ts | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index ee9f87bc2cd..90ded635899 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -210,6 +210,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.toastService._showToast(message); break; case "convertAccountToKeyConnector": diff --git a/libs/angular/src/auth/components/register.component.ts b/libs/angular/src/auth/components/register.component.ts index 279294f4c06..1fca6d97e91 100644 --- a/libs/angular/src/auth/components/register.component.ts +++ b/libs/angular/src/auth/components/register.component.ts @@ -112,6 +112,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; From 51ecad4d57437218bcd7de9ec5aa5585063693eb Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Thu, 4 Apr 2024 03:12:52 +0200 Subject: [PATCH 10/23] fix base url Strip query params when resolving subpath Co-authored-by: Timshel --- apps/web/src/app/platform/web-environment.service.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/platform/web-environment.service.ts b/apps/web/src/app/platform/web-environment.service.ts index 1df842d6b31..d61637c92e2 100644 --- a/apps/web/src/app/platform/web-environment.service.ts +++ b/apps/web/src/app/platform/web-environment.service.ts @@ -38,7 +38,17 @@ export class WebEnvironmentService extends DefaultEnvironmentService { super(stateProvider, accountService, additionalRegionConfigs); // The web vault always uses the current location as the base url - envUrls.base ??= this.win.location.origin; + // 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=...]` + // - `https://vaultwarden.example.com/base/path/?queryParam=...` + // + // We want to get to just `https://vaultwarden.example.com/base/path`. + let baseUrl = this.win.location.href; + baseUrl = baseUrl.replace(/(\/+|\/*#.*|\/*\?.*)$/, ""); // Strip off trailing `/`, `#`, `?` and everything after. + envUrls.base ??= baseUrl; // Find the region const currentHostname = new URL(this.win.location.href).hostname; From 2830360d727a9a7a2dbd33548c372304891f6cfc Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Tue, 6 Feb 2024 00:37:24 +0100 Subject: [PATCH 11/23] remove environment-selector --- apps/web/src/app/layouts/frontend-layout.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/web/src/app/layouts/frontend-layout.component.html b/apps/web/src/app/layouts/frontend-layout.component.html index e1659f80418..cea0867131e 100644 --- a/apps/web/src/app/layouts/frontend-layout.component.html +++ b/apps/web/src/app/layouts/frontend-layout.component.html @@ -1,6 +1,5 @@
- Vaultwarden Web
{{ "versionNumber" | i18n: version }}

From e9680eec0dba41461f3d6137bbe76d76668e5db2 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Mon, 5 Feb 2024 22:37:56 +0100 Subject: [PATCH 12/23] treat Vaultwarden as self hosted --- apps/web/src/app/core/web-platform-utils.service.ts | 3 +++ 1 file changed, 3 insertions(+) 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 3df2a7d895b..f73d8116900 100644 --- a/apps/web/src/app/core/web-platform-utils.service.ts +++ b/apps/web/src/app/core/web-platform-utils.service.ts @@ -135,14 +135,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"; } From a1b767337d878798de29acd6b1f964648deb6c94 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Mon, 5 Feb 2024 22:19:01 +0100 Subject: [PATCH 13/23] freely allow org creation disable license upload for selfhosted and just select the free plan --- .../organization-plans.component.html | 9 ++------ .../organization-plans.component.ts | 23 ++++++++++++------- 2 files changed, 17 insertions(+), 15 deletions(-) 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 d37f95e3aa2..b85be23af49 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 @@ >
{{ "loading" | i18n }} - +

{{ "uploadLicenseFileOrg" | i18n }}

@@ -40,12 +40,7 @@ (onLicenseFileUploaded)="onLicenseFileUploaded($event)" /> - + !!plan.PasswordManager); @@ -232,6 +231,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { this.plan = providerDefaultPlan.type; this.productTier = providerDefaultPlan.productTier; } + end of asking /api/plans in Vaultwarden */ if (!this.createOrganization) { this.upgradeFlowPrefillForm(); @@ -316,6 +316,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, @@ -347,6 +348,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } get selectablePlans() { + return null; // no plans to select in Vaultwarden const selectedProductTierType = this.formGroup.controls.productTier.value; const result = this.passwordManagerPlans?.filter( @@ -477,6 +479,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } get planOffersSecretsManager() { + return false; // no support for secrets manager in Vaultwarden return this.selectedSecretsManagerPlan != null; } @@ -485,6 +488,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } changedProduct() { + return; // no choice of products in Vaultwarden const selectedPlan = this.selectablePlans[0]; this.setPlanType(selectedPlan.type); @@ -624,9 +628,8 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { const collectionCt = collection.encryptedString; const orgKeys = await this.keyService.makeKeyPair(orgKey[1]); - orgId = this.selfHosted - ? await this.createSelfHosted(key, collectionCt, orgKeys) - : await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]); + // always use createCloudHosted() to disable license file upload + orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]); this.toastService.showToast({ variant: "success", @@ -787,7 +790,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 { @@ -819,6 +824,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( @@ -898,6 +904,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { } private upgradeFlowPrefillForm() { + return; // Vaultwarden only supports free plan if (this.acceptingSponsorship) { this.formGroup.controls.productTier.setValue(ProductTierType.Families); this.changedProduct(); From ef05d024939d7f56765e4e8c7a6a4ed68caedc22 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Mon, 5 Feb 2024 22:54:07 +0100 Subject: [PATCH 14/23] allow renaming of organizations --- .../admin-console/organizations/settings/account.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0cf8c24d468..74411379b4f 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 @@ -86,7 +86,7 @@ export class AccountComponent implements OnInit, OnDestroy { ) {} async ngOnInit() { - this.selfHosted = this.platformUtilsService.isSelfHost(); + this.selfHosted = false; // set to false so we can rename organizations this.route.params .pipe( From 8ce4a6eb41d98135f64769ddd884bd08608a1618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Wed, 3 Apr 2019 15:44:07 +0200 Subject: [PATCH 15/23] hide subscription plans --- .../organization-billing-history-view.component.ts | 2 ++ apps/web/src/app/layouts/user-layout.component.ts | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) 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 d533badabf8..6512ecbd130 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 @@ -54,6 +54,7 @@ export class OrgBillingHistoryViewComponent implements OnInit, OnDestroy { this.loading = true; + /* disable billing history const openInvoicesPromise = this.organizationBillingApiService.getBillingInvoices( this.organizationId, "open", @@ -87,6 +88,7 @@ export class OrgBillingHistoryViewComponent implements OnInit, OnDestroy { openInvoices.length <= pageSize || paidInvoices.length <= pageSize || transactions.length <= pageSize; + */ this.loading = false; } diff --git a/apps/web/src/app/layouts/user-layout.component.ts b/apps/web/src/app/layouts/user-layout.component.ts index f0ac3ef9b48..f6e7f5a492d 100644 --- a/apps/web/src/app/layouts/user-layout.component.ts +++ b/apps/web/src/app/layouts/user-layout.component.ts @@ -3,7 +3,7 @@ import { CommonModule } from "@angular/common"; import { Component, OnInit } from "@angular/core"; import { RouterModule } from "@angular/router"; -import { Observable, switchMap } from "rxjs"; +import { Observable, of } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -41,15 +41,14 @@ export class UserLayoutComponent implements OnInit { private billingAccountProfileStateService: BillingAccountProfileStateService, private accountService: AccountService, ) { - this.showSubscription$ = this.accountService.activeAccount$.pipe( - switchMap((account) => - this.billingAccountProfileStateService.canViewSubscription$(account.id), - ), - ); + this.showSubscription$ = of(false); // always hide subscriptions in Vaultwarden } async ngOnInit() { document.body.classList.remove("layout_frontend"); await this.syncService.fullSync(false); + + this.hasFamilySponsorshipAvailable$ = of(false); // disable family Sponsorships in Vaultwarden + this.showSponsoredFamilies$ = of(false); // disable family Sponsorships in Vaultwarden } } From 659add6b466a305f6669d542532d6975bbd1d7aa Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Tue, 6 Feb 2024 00:55:31 +0100 Subject: [PATCH 16/23] disable billing tab --- .../organizations/layouts/organization-layout.component.ts | 1 + 1 file changed, 1 insertion(+) 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 0b024817edc..520f60fa32d 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 @@ -139,6 +139,7 @@ export class OrganizationLayoutComponent implements OnInit { } canShowBillingTab(organization: Organization): boolean { + return false; // disable billing tab in Vaultwarden return canAccessBillingTab(organization); } From da768e0d583924e42fb2116c18c20eef77c64155 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Fri, 3 May 2024 18:37:39 +0200 Subject: [PATCH 17/23] disable billing metadata --- .../organizations/members/members.component.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/web/src/app/admin-console/organizations/members/members.component.ts b/apps/web/src/app/admin-console/organizations/members/members.component.ts index 703f187b223..21ecccee6e1 100644 --- a/apps/web/src/app/admin-console/organizations/members/members.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/members.component.ts @@ -193,11 +193,7 @@ export class MembersComponent extends BaseMembersComponent .find((p) => p.organizationId === this.organization.id); this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled; - const billingMetadata = await this.billingApiService.getOrganizationBillingMetadata( - this.organization.id, - ); - - this.orgIsOnSecretsManagerStandalone = billingMetadata.isOnSecretsManagerStandalone; + this.orgIsOnSecretsManagerStandalone = false; // don't get billing metadata await this.load(); From b6c57e890566f03e2e51ae9bcfa4f9c7ec1c1849 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 6 Mar 2024 01:48:07 +0100 Subject: [PATCH 18/23] disable ads for other products --- .../product-switcher/product-switcher-content.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 204737eee2e..9bee4f6e03b 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 @@ -30,7 +30,7 @@
{{ "moreFromBitwarden" | i18n }} From 028477ff3acda88f55d22b62d0543e8657a37c46 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Tue, 4 Jun 2024 00:38:08 +0200 Subject: [PATCH 19/23] disable more products from sidebar --- .../navigation-switcher/navigation-switcher.component.html | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html b/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html index 08195d95bf9..f51a216a14f 100644 --- a/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html +++ b/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html @@ -10,10 +10,7 @@ > -
+
{{ "moreFromBitwarden" | i18n }} From cc3539754da91f988ae278fc80205bb84597ac0d Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Mon, 5 Feb 2024 21:51:25 +0100 Subject: [PATCH 20/23] disable flexible collections Co-authored-by: BlackDex --- .../admin-console/organizations/settings/account.component.ts | 1 + 1 file changed, 1 insertion(+) 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 74411379b4f..6bf239a37e5 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 @@ -179,6 +179,7 @@ export class AccountComponent implements OnInit, OnDestroy { }; submitCollectionManagement = async () => { + return; // flexible collections are not supported by Vaultwarden const request = new OrganizationCollectionManagementUpdateRequest(); request.limitCollectionCreation = this.collectionManagementFormGroup.value.limitCollectionCreation; From bc918fbb8b9c11d2df8f2b6b1b0233ddde5668eb Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 6 Mar 2024 04:38:06 +0100 Subject: [PATCH 21/23] remove webauthn support from settings --- apps/web/src/app/auth/settings/change-password.component.html | 2 -- 1 file changed, 2 deletions(-) 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 91144fdfc1f..d3dc4410c9f 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 }}

{{ "changeMasterPassword" | i18n }} - - From 05af691ea32945de388be7dc7e332474ac7a6e57 Mon Sep 17 00:00:00 2001 From: BlackDex Date: Mon, 25 Nov 2024 20:37:28 +0100 Subject: [PATCH 22/23] Add some other modifications like removing stripe, braintree and paypal keys. --- apps/web/config/base.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/web/config/base.json b/apps/web/config/base.json index e64ef6ebeb2..b41ca4219d7 100644 --- a/apps/web/config/base.json +++ b/apps/web/config/base.json @@ -1,11 +1,5 @@ { "urls": {}, - "stripeKey": "pk_test_KPoCfZXu7mznb9uSCPZ2JpTD", - "braintreeKey": "sandbox_r72q8jq6_9pnxkwm75f87sdc2", - "paypal": { - "businessId": "AD3LAUZSNVPJY", - "buttonAction": "https://www.sandbox.paypal.com/cgi-bin/webscr" - }, "dev": { "port": 8080, "allowedHosts": "auto" From 9e834a52128e4322feaa81023d8e79ab6ea306c2 Mon Sep 17 00:00:00 2001 From: Stefan Melmuk Date: Wed, 24 Apr 2024 00:03:48 +0200 Subject: [PATCH 23/23] don't autocomplete send password --- apps/web/src/app/tools/send/add-edit.component.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/tools/send/add-edit.component.html b/apps/web/src/app/tools/send/add-edit.component.html index 7eade18a7c6..b8f865faa75 100644 --- a/apps/web/src/app/tools/send/add-edit.component.html +++ b/apps/web/src/app/tools/send/add-edit.component.html @@ -230,7 +230,12 @@

{{ "password" | i18n }} {{ "newPassword" | i18n }} - + {{ "sendPasswordDesc" | i18n }}