diff --git a/.env.template b/.env.template index 07d7dbc0..df5d49d6 100644 --- a/.env.template +++ b/.env.template @@ -94,7 +94,7 @@ ## Enables push notifications (requires key and id from https://bitwarden.com/host) ## If you choose "European Union" Data Region, uncomment PUSH_RELAY_URI and PUSH_IDENTITY_URI then replace .com by .eu ## Details about mobile client push notification: -## - https://github.com/dani-garcia/vaultwarden/wiki/Enabling-Mobile-Client-push-notification +## - https://github.com/vaultwarden/vaultwarden/wiki/Enabling-Mobile-Client-push-notification # PUSH_ENABLED=false # PUSH_INSTALLATION_ID=CHANGEME # PUSH_INSTALLATION_KEY=CHANGEME @@ -164,8 +164,8 @@ ## For U2F to work, the server must use HTTPS, you can use Let's Encrypt for free certs ## To use HTTPS, the recommended way is to put Vaultwarden behind a reverse proxy ## Details: -## - https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS -## - https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples +## - https://github.com/vaultwarden/vaultwarden/wiki/Enabling-HTTPS +## - https://github.com/vaultwarden/vaultwarden/wiki/Proxy-examples ## For development # DOMAIN=http://localhost ## For public server @@ -368,7 +368,7 @@ ## Token for the admin interface, preferably an Argon2 PCH string ## Vaultwarden has a built-in generator by calling `vaultwarden hash` -## For details see: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token +## For details see: https://github.com/vaultwarden/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token ## If not set, the admin panel is disabled ## New Argon2 PHC string ## Note that for some environments, like docker-compose you need to escape all the dollar signs `$` with an extra dollar sign like `$$` diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 128c5f58..806ed77a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,8 +11,8 @@ assignees: '' NOTE: Please update to the latest version of vaultwarden before reporting an issue! This saves you and us a lot of time and troubleshooting. See: - * https://github.com/dani-garcia/vaultwarden/issues/1180 - * https://github.com/dani-garcia/vaultwarden/wiki/Updating-the-vaultwarden-image + * https://github.com/vaultwarden/vaultwarden/issues/1180 + * https://github.com/vaultwarden/vaultwarden/wiki/Updating-the-vaultwarden-image # ### --> diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 51a76d39..a4cc2f43 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -4,5 +4,5 @@ contact_links: url: https://vaultwarden.discourse.group/ about: Use this forum to request features or get help with usage/configuration. - name: GitHub Discussions for vaultwarden - url: https://github.com/dani-garcia/vaultwarden/discussions + url: https://github.com/vaultwarden/vaultwarden/discussions about: An alternative to the Discourse forum, if this is easier for you. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index baf48763..a03fd664 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: # We will skip this check if we are creating a tag, because that has the same hash as a previous run already. skip_check: runs-on: ubuntu-22.04 - if: ${{ github.repository == 'dani-garcia/vaultwarden' }} + if: ${{ github.repository == 'vaultwarden/vaultwarden' }} outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 120 needs: skip_check - if: ${{ needs.skip_check.outputs.should_skip != 'true' && github.repository == 'dani-garcia/vaultwarden' }} + if: ${{ needs.skip_check.outputs.should_skip != 'true' && github.repository == 'vaultwarden/vaultwarden' }} # Start a local docker registry to extract the final Alpine static build binaries services: registry: diff --git a/Cargo.toml b/Cargo.toml index 5e42b974..a935dc2b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" rust-version = "1.76.0" resolver = "2" -repository = "https://github.com/dani-garcia/vaultwarden" +repository = "https://github.com/vaultwarden/vaultwarden" readme = "README.md" license = "AGPL-3.0-only" publish = false diff --git a/README.md b/README.md index c352df22..6cf78bf3 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ ### Alternative implementation of the Bitwarden server API written in Rust and compatible with [upstream Bitwarden clients](https://bitwarden.com/download/)*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal. -📢 Note: This project was known as Bitwarden_RS and has been renamed to separate itself from the official Bitwarden server in the hopes of avoiding confusion and trademark/branding issues. Please see [#1642](https://github.com/dani-garcia/vaultwarden/discussions/1642) for more explanation. +📢 Note: This project was known as Bitwarden_RS and has been renamed to separate itself from the official Bitwarden server in the hopes of avoiding confusion and trademark/branding issues. Please see [#1642](https://github.com/vaultwarden/vaultwarden/discussions/1642) for more explanation. --- -[![Build](https://github.com/dani-garcia/vaultwarden/actions/workflows/build.yml/badge.svg)](https://github.com/dani-garcia/vaultwarden/actions/workflows/build.yml) -[![ghcr.io](https://img.shields.io/badge/ghcr.io-download-blue)](https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden) +[![Build](https://github.com/vaultwarden/vaultwarden/actions/workflows/build.yml/badge.svg)](https://github.com/vaultwarden/vaultwarden/actions/workflows/build.yml) +[![ghcr.io](https://img.shields.io/badge/ghcr.io-download-blue)](https://github.com/vaultwarden/vaultwarden/pkgs/container/vaultwarden) [![Docker Pulls](https://img.shields.io/docker/pulls/vaultwarden/server.svg)](https://hub.docker.com/r/vaultwarden/server) [![Quay.io](https://img.shields.io/badge/Quay.io-download-blue)](https://quay.io/repository/vaultwarden/server) -[![Dependency Status](https://deps.rs/repo/github/dani-garcia/vaultwarden/status.svg)](https://deps.rs/repo/github/dani-garcia/vaultwarden) -[![GitHub Release](https://img.shields.io/github/release/dani-garcia/vaultwarden.svg)](https://github.com/dani-garcia/vaultwarden/releases/latest) -[![AGPL-3.0 Licensed](https://img.shields.io/github/license/dani-garcia/vaultwarden.svg)](https://github.com/dani-garcia/vaultwarden/blob/main/LICENSE.txt) +[![Dependency Status](https://deps.rs/repo/github/vaultwarden/vaultwarden/status.svg)](https://deps.rs/repo/github/vaultwarden/vaultwarden) +[![GitHub Release](https://img.shields.io/github/release/vaultwarden/vaultwarden.svg)](https://github.com/vaultwarden/vaultwarden/releases/latest) +[![AGPL-3.0 Licensed](https://img.shields.io/github/license/vaultwarden/vaultwarden.svg)](https://github.com/vaultwarden/vaultwarden/blob/main/LICENSE.txt) [![Matrix Chat](https://img.shields.io/matrix/vaultwarden:matrix.org.svg?logo=matrix)](https://matrix.to/#/#vaultwarden:matrix.org) -Image is based on [Rust implementation of Bitwarden API](https://github.com/dani-garcia/vaultwarden). +Image is based on [Rust implementation of Bitwarden API](https://github.com/vaultwarden/vaultwarden). **This project is not associated with the [Bitwarden](https://bitwarden.com/) project nor Bitwarden, Inc.** @@ -44,17 +44,17 @@ This will preserve any persistent data under /vw-data/, you can adapt the path t **IMPORTANT**: Most modern web browsers disallow the use of Web Crypto APIs in insecure contexts. In this case, you might get an error like `Cannot read property 'importKey'`. To solve this problem, you need to access the web vault via HTTPS or localhost. -This can be configured in [vaultwarden directly](https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS) or using a third-party reverse proxy ([some examples](https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples)). +This can be configured in [vaultwarden directly](https://github.com/vaultwarden/vaultwarden/wiki/Enabling-HTTPS) or using a third-party reverse proxy ([some examples](https://github.com/vaultwarden/vaultwarden/wiki/Proxy-examples)). If you have an available domain name, you can get HTTPS certificates with [Let's Encrypt](https://letsencrypt.org/), or you can generate self-signed certificates with utilities like [mkcert](https://github.com/FiloSottile/mkcert). Some proxies automatically do this step, like Caddy (see examples linked above). ## Usage -See the [vaultwarden wiki](https://github.com/dani-garcia/vaultwarden/wiki) for more information on how to configure and run the vaultwarden server. +See the [vaultwarden wiki](https://github.com/vaultwarden/vaultwarden/wiki) for more information on how to configure and run the vaultwarden server. ## Get in touch -To ask a question, offer suggestions or new features or to get help configuring or installing the software, please use [GitHub Discussions](https://github.com/dani-garcia/vaultwarden/discussions) or [the forum](https://vaultwarden.discourse.group/). +To ask a question, offer suggestions or new features or to get help configuring or installing the software, please use [GitHub Discussions](https://github.com/vaultwarden/vaultwarden/discussions) or [the forum](https://vaultwarden.discourse.group/). -If you spot any bugs or crashes with vaultwarden itself, please [create an issue](https://github.com/dani-garcia/vaultwarden/issues/). Make sure you are on the latest version and there aren't any similar issues open, though! +If you spot any bugs or crashes with vaultwarden itself, please [create an issue](https://github.com/vaultwarden/vaultwarden/issues/). Make sure you are on the latest version and there aren't any similar issues open, though! If you prefer to chat, we're usually hanging around at [#vaultwarden:matrix.org](https://matrix.to/#/#vaultwarden:matrix.org) room on Matrix. Feel free to join us! diff --git a/SECURITY.md b/SECURITY.md index 95d87b78..fd438c06 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -14,13 +14,13 @@ notify us. We welcome working with you to resolve the issue promptly. Thanks in # In-scope -- Security issues in any current release of Vaultwarden. Source code is available at https://github.com/dani-garcia/vaultwarden. This includes the current `latest` release and `main / testing` release. +- Security issues in any current release of Vaultwarden. Source code is available at https://github.com/vaultwarden/vaultwarden. This includes the current `latest` release and `main / testing` release. # Exclusions The following bug classes are out-of scope: -- Bugs that are already reported on Vaultwarden's issue tracker (https://github.com/dani-garcia/vaultwarden/issues) +- Bugs that are already reported on Vaultwarden's issue tracker (https://github.com/vaultwarden/vaultwarden/issues) - Bugs that are not part of Vaultwarden, like on the the web-vault or mobile and desktop clients. These issues need to be reported in the respective project issue tracker at https://github.com/bitwarden to which we are not associated - Issues in an upstream software dependency (ex: Rust, or External Libraries) which are already reported to the upstream maintainer - Attacks requiring physical access to a user's device diff --git a/docker/README.md b/docker/README.md index 2e78f534..0ada1293 100644 --- a/docker/README.md +++ b/docker/README.md @@ -184,5 +184,5 @@ podman run --rm -it \ | SOURCE_COMMIT | null | The commit hash of the current commit for this build | | SOURCE_VERSION | null | The current exact tag of this commit, else the last tag and the first 8 chars of the source commit | | BASE_TAGS | testing | Tags to be used. Can be a comma separated value like "latest,1.29.2" | -| CONTAINER_REGISTRIES | vaultwarden/server | Comma separated value of container registries. Like `ghcr.io/dani-garcia/vaultwarden,docker.io/vaultwarden/server` | +| CONTAINER_REGISTRIES | vaultwarden/server | Comma separated value of container registries. Like `ghcr.io/vaultwarden/vaultwarden,docker.io/vaultwarden/server` | | VW_VERSION | null | To override the `SOURCE_VERSION` value. This is also used by the `build.rs` code for example | diff --git a/docker/docker-bake.hcl b/docker/docker-bake.hcl index 38e7ef97..e843ede3 100644 --- a/docker/docker-bake.hcl +++ b/docker/docker-bake.hcl @@ -43,7 +43,7 @@ variable "BASE_TAGS" { // Which container registries should be used for the tagging // This can be a comma separated value -// Use a full URI like `ghcr.io/dani-garcia/vaultwarden,docker.io/vaultwarden/server` +// Use a full URI like `ghcr.io/vaultwarden/vaultwarden,docker.io/vaultwarden/server` variable "CONTAINER_REGISTRIES" { default = "vaultwarden/server" } @@ -62,8 +62,8 @@ function "labels" { result = { "org.opencontainers.image.description" = "Unofficial Bitwarden compatible server written in Rust - ${SOURCE_VERSION}" "org.opencontainers.image.licenses" = "AGPL-3.0-only" - "org.opencontainers.image.documentation" = "https://github.com/dani-garcia/vaultwarden/wiki" - "org.opencontainers.image.url" = "https://github.com/dani-garcia/vaultwarden" + "org.opencontainers.image.documentation" = "https://github.com/vaultwarden/vaultwarden/wiki" + "org.opencontainers.image.url" = "https://github.com/vaultwarden/vaultwarden" "org.opencontainers.image.created" = "${formatdate("YYYY-MM-DD'T'hh:mm:ssZZZZZ", timestamp())}" "org.opencontainers.image.source" = "${SOURCE_REPOSITORY_URL}" "org.opencontainers.image.revision" = "${SOURCE_COMMIT}" diff --git a/docker/podman-bake.sh b/docker/podman-bake.sh index 9c97825e..3021e682 100755 --- a/docker/podman-bake.sh +++ b/docker/podman-bake.sh @@ -22,8 +22,8 @@ esac LABEL_ARGS=( --label org.opencontainers.image.description="Unofficial Bitwarden compatible server written in Rust" --label org.opencontainers.image.licenses="AGPL-3.0-only" - --label org.opencontainers.image.documentation="https://github.com/dani-garcia/vaultwarden/wiki" - --label org.opencontainers.image.url="https://github.com/dani-garcia/vaultwarden" + --label org.opencontainers.image.documentation="https://github.com/vaultwarden/vaultwarden/wiki" + --label org.opencontainers.image.url="https://github.com/vaultwarden/vaultwarden" --label org.opencontainers.image.created="$(date --utc --iso-8601=seconds)" ) if [[ -n "${SOURCE_REPOSITORY_URL}" ]]; then diff --git a/src/api/admin.rs b/src/api/admin.rs index b3dc588c..a4a6b838 100644 --- a/src/api/admin.rs +++ b/src/api/admin.rs @@ -602,7 +602,7 @@ async fn get_json_api(url: &str) -> Result { async fn has_http_access() -> bool { let http_access = get_reqwest_client(); - match http_access.head("https://github.com/dani-garcia/vaultwarden").send().await { + match http_access.head("https://github.com/vaultwarden/vaultwarden").send().await { Ok(r) => r.status().is_success(), _ => false, } @@ -616,13 +616,13 @@ async fn get_release_info(has_http_access: bool, running_within_container: bool) // If the HTTP Check failed, do not even attempt to check for new versions since we were not able to connect with github.com anyway. if has_http_access { ( - match get_json_api::("https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest") + match get_json_api::("https://api.github.com/repos/vaultwarden/vaultwarden/releases/latest") .await { Ok(r) => r.tag_name, _ => "-".to_string(), }, - match get_json_api::("https://api.github.com/repos/dani-garcia/vaultwarden/commits/main").await { + match get_json_api::("https://api.github.com/repos/vaultwarden/vaultwarden/commits/main").await { Ok(mut c) => { c.sha.truncate(8); c.sha @@ -635,7 +635,7 @@ async fn get_release_info(has_http_access: bool, running_within_container: bool) "-".to_string() } else { match get_json_api::( - "https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest", + "https://api.github.com/repos/vaultwarden/bw_web_builds/releases/latest", ) .await { diff --git a/src/api/core/mod.rs b/src/api/core/mod.rs index 1d31b27c..cc642539 100644 --- a/src/api/core/mod.rs +++ b/src/api/core/mod.rs @@ -205,7 +205,7 @@ fn config() -> Json { "gitHash": option_env!("GIT_REV"), "server": { "name": "Vaultwarden", - "url": "https://github.com/dani-garcia/vaultwarden", + "url": "https://github.com/vaultwarden/vaultwarden", "version": crate::VERSION }, "environment": { diff --git a/src/api/identity.rs b/src/api/identity.rs index ad51d664..b769847e 100644 --- a/src/api/identity.rs +++ b/src/api/identity.rs @@ -109,7 +109,7 @@ async fn _refresh_login(data: ConnectData, conn: &mut DbConn) -> JsonResult { // --- // Disabled this variable, it was used to generate the JWT // Because this might get used in the future, and is add by the Bitwarden Server, lets keep it, but then commented out - // See: https://github.com/dani-garcia/vaultwarden/issues/4156 + // See: https://github.com/vaultwarden/vaultwarden/issues/4156 // --- // let orgs = UserOrganization::find_confirmed_by_user(&user.uuid, conn).await; let (access_token, expires_in) = device.refresh_tokens(&user, scope_vec); @@ -276,7 +276,7 @@ async fn _password_login( // --- // Disabled this variable, it was used to generate the JWT // Because this might get used in the future, and is add by the Bitwarden Server, lets keep it, but then commented out - // See: https://github.com/dani-garcia/vaultwarden/issues/4156 + // See: https://github.com/vaultwarden/vaultwarden/issues/4156 // --- // let orgs = UserOrganization::find_confirmed_by_user(&user.uuid, conn).await; let (access_token, expires_in) = device.refresh_tokens(&user, scope_vec); @@ -400,7 +400,7 @@ async fn _user_api_key_login( // --- // Disabled this variable, it was used to generate the JWT // Because this might get used in the future, and is add by the Bitwarden Server, lets keep it, but then commented out - // See: https://github.com/dani-garcia/vaultwarden/issues/4156 + // See: https://github.com/vaultwarden/vaultwarden/issues/4156 // --- // let orgs = UserOrganization::find_confirmed_by_user(&user.uuid, conn).await; let (access_token, expires_in) = device.refresh_tokens(&user, scope_vec); diff --git a/src/auth.rs b/src/auth.rs index f05eba65..cc3adaaa 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -147,7 +147,7 @@ pub struct LoginJwtClaims { // Disabled these keys to be added to the JWT since they could cause the JWT to get too large // Also These key/value pairs are not used anywhere by either Vaultwarden or Bitwarden Clients // Because these might get used in the future, and they are added by the Bitwarden Server, lets keep it, but then commented out - // See: https://github.com/dani-garcia/vaultwarden/issues/4156 + // See: https://github.com/vaultwarden/vaultwarden/issues/4156 // --- // pub orgowner: Vec, // pub orgadmin: Vec, diff --git a/src/config.rs b/src/config.rs index 489a229d..4ae463f0 100644 --- a/src/config.rs +++ b/src/config.rs @@ -978,7 +978,7 @@ fn validate_config(cfg: &ConfigItems) -> Result<(), Error> { println!( "[NOTICE] You are using a plain text `ADMIN_TOKEN` which is insecure.\n\ Please generate a secure Argon2 PHC string by using `vaultwarden hash` or `argon2`.\n\ - See: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token\n" + See: https://github.com/vaultwarden/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token\n" ); } _ => {} diff --git a/src/db/models/device.rs b/src/db/models/device.rs index 60c63589..e383b0e6 100644 --- a/src/db/models/device.rs +++ b/src/db/models/device.rs @@ -99,7 +99,7 @@ impl Device { // Disabled these keys to be added to the JWT since they could cause the JWT to get too large // Also These key/value pairs are not used anywhere by either Vaultwarden or Bitwarden Clients // Because these might get used in the future, and they are added by the Bitwarden Server, lets keep it, but then commented out - // See: https://github.com/dani-garcia/vaultwarden/issues/4156 + // See: https://github.com/vaultwarden/vaultwarden/issues/4156 // --- // orgowner, // orgadmin, diff --git a/src/main.rs b/src/main.rs index c7726a87..1ac94924 100644 --- a/src/main.rs +++ b/src/main.rs @@ -202,10 +202,10 @@ fn launch_info() { | This is an *unofficial* Bitwarden implementation, DO NOT use the |\n\ | official channels to report bugs/features, regardless of client. |\n\ | Send usage/configuration questions or feature requests to: |\n\ - | https://github.com/dani-garcia/vaultwarden/discussions or |\n\ + | https://github.com/vaultwarden/vaultwarden/discussions or |\n\ | https://vaultwarden.discourse.group/ |\n\ | Report suspected bugs/issues in the software itself at: |\n\ - | https://github.com/dani-garcia/vaultwarden/issues/new |\n\ + | https://github.com/vaultwarden/vaultwarden/issues/new |\n\ \\--------------------------------------------------------------------/\n" ); } @@ -460,7 +460,7 @@ fn check_web_vault() { "Web vault is not found at '{}'. To install it, please follow the steps in: ", CONFIG.web_vault_folder() ); - error!("https://github.com/dani-garcia/vaultwarden/wiki/Building-binary#install-the-web-vault"); + error!("https://github.com/vaultwarden/vaultwarden/wiki/Building-binary#install-the-web-vault"); error!("You can also set the environment variable 'WEB_VAULT_ENABLED=false' to disable it"); exit(1); } diff --git a/src/static/templates/404.hbs b/src/static/templates/404.hbs index 064dc5a1..ad12ff7c 100644 --- a/src/static/templates/404.hbs +++ b/src/static/templates/404.hbs @@ -30,7 +30,7 @@

Sorry, but the page you were looking for could not be found.

Return to the web vault?

-

You can return to the web-vault, or contact us.

+

You can return to the web-vault, or contact us.

diff --git a/src/static/templates/admin/diagnostics.hbs b/src/static/templates/admin/diagnostics.hbs index 099a6740..7ca1fe8b 100644 --- a/src/static/templates/admin/diagnostics.hbs +++ b/src/static/templates/admin/diagnostics.hbs @@ -178,7 +178,7 @@
If you need support please check the following links first before you create a new issue: Vaultwarden Forum - | Github Discussions + | Github Discussions
diff --git a/src/static/templates/admin/settings.hbs b/src/static/templates/admin/settings.hbs index fb066cb4..3b9d4768 100644 --- a/src/static/templates/admin/settings.hbs +++ b/src/static/templates/admin/settings.hbs @@ -3,7 +3,7 @@ You are using a plain text `ADMIN_TOKEN` which is insecure.
Please generate a secure Argon2 PHC string by using `vaultwarden hash` or `argon2`.
- See: Enabling admin page - Secure the `ADMIN_TOKEN` + See: Enabling admin page - Secure the `ADMIN_TOKEN`
@@ -128,7 +128,7 @@ This does not include any configuration or file attachment data that may also be needed to fully restore a vaultwarden instance. For details on how to perform complete backups, refer to the wiki page on - backups. + backups.
diff --git a/src/static/templates/email/email_footer.hbs b/src/static/templates/email/email_footer.hbs index 7bf30682..88241213 100644 --- a/src/static/templates/email/email_footer.hbs +++ b/src/static/templates/email/email_footer.hbs @@ -10,7 +10,7 @@ - +
GitHubGitHub
diff --git a/src/static/templates/email/email_footer_text.hbs b/src/static/templates/email/email_footer_text.hbs index c741b954..ae9fbece 100644 --- a/src/static/templates/email/email_footer_text.hbs +++ b/src/static/templates/email/email_footer_text.hbs @@ -1,3 +1,3 @@ === -Github: https://github.com/dani-garcia/vaultwarden +Github: https://github.com/vaultwarden/vaultwarden