From 0497d5b99f7d6b7282ab77c30f1f791a47b41566 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Tue, 13 Dec 2022 18:17:04 +0100 Subject: [PATCH 1/3] vaultwarden: Add update script to keep web vault in sync - Adds an update script to fetch the compatible web vault version - Removes `vaultwarden-vault` from top-level to prevent independent updates through e.g. r-ryantm. Istead the vault is now accessible at `vaultwarden.webvault`. - The name webvault was chosen because it is the title of the projects README and it makes it clearer, that this is the web UI. --- .../services/security/vaultwarden/default.nix | 4 ++-- pkgs/tools/security/vaultwarden/default.nix | 12 ++++++++-- pkgs/tools/security/vaultwarden/update.nix | 22 +++++++++++++++++++ .../vaultwarden/{vault.nix => webvault.nix} | 2 +- pkgs/top-level/aliases.nix | 1 + pkgs/top-level/all-packages.nix | 2 -- 6 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 pkgs/tools/security/vaultwarden/update.nix rename pkgs/tools/security/vaultwarden/{vault.nix => webvault.nix} (95%) diff --git a/nixos/modules/services/security/vaultwarden/default.nix b/nixos/modules/services/security/vaultwarden/default.nix index 3ef0bfb090ac..aaa3f5507f77 100644 --- a/nixos/modules/services/security/vaultwarden/default.nix +++ b/nixos/modules/services/security/vaultwarden/default.nix @@ -162,8 +162,8 @@ in { webVaultPackage = mkOption { type = package; - default = pkgs.vaultwarden-vault; - defaultText = literalExpression "pkgs.vaultwarden-vault"; + default = pkgs.vaultwarden.webvault; + defaultText = literalExpression "pkgs.vaultwarden.webvault"; description = lib.mdDoc "Web vault package to use."; }; }; diff --git a/pkgs/tools/security/vaultwarden/default.nix b/pkgs/tools/security/vaultwarden/default.nix index d4d5626d32e0..c3240a32e53c 100644 --- a/pkgs/tools/security/vaultwarden/default.nix +++ b/pkgs/tools/security/vaultwarden/default.nix @@ -1,8 +1,12 @@ -{ lib, stdenv, rustPlatform, fetchFromGitHub, fetchurl, nixosTests +{ lib, stdenv, callPackage, rustPlatform, fetchFromGitHub, fetchurl, nixosTests , pkg-config, openssl , libiconv, Security, CoreServices , dbBackend ? "sqlite", libmysqlclient, postgresql }: +let + webvault = callPackage ./webvault.nix {}; +in + rustPlatform.buildRustPackage rec { pname = "vaultwarden"; version = "1.26.0"; @@ -34,7 +38,11 @@ rustPlatform.buildRustPackage rec { buildFeatures = dbBackend; - passthru.tests = nixosTests.vaultwarden; + passthru = { + inherit webvault; + tests = nixosTests.vaultwarden; + updateScript = callPackage ./update.nix {}; + }; meta = with lib; { description = "Unofficial Bitwarden compatible server written in Rust"; diff --git a/pkgs/tools/security/vaultwarden/update.nix b/pkgs/tools/security/vaultwarden/update.nix new file mode 100644 index 000000000000..0fc4b45a1296 --- /dev/null +++ b/pkgs/tools/security/vaultwarden/update.nix @@ -0,0 +1,22 @@ +{ writeShellScript +, lib +, nix-update +, curl +, git +, gnugrep +, gnused +, jq +}: + +writeShellScript "update-vaultwarden" '' + PATH=${lib.makeBinPath [ curl git gnugrep gnused jq nix-update ]} + + set -euxo pipefail + + VAULTWARDEN_VERSION=$(curl --silent https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | jq -r '.tag_name') + nix-update "vaultwarden" --version "$VAULTWARDEN_VERSION" + + URL="https://raw.githubusercontent.com/dani-garcia/vaultwarden/''${VAULTWARDEN_VERSION}/docker/Dockerfile.j2" + WEBVAULT_VERSION=$(curl --silent "$URL" | grep "set vault_version" | sed -E "s/.*\"([^\"]+)\".*/\\1/") + nix-update "vaultwarden.webvault" --version "$WEBVAULT_VERSION" +'' diff --git a/pkgs/tools/security/vaultwarden/vault.nix b/pkgs/tools/security/vaultwarden/webvault.nix similarity index 95% rename from pkgs/tools/security/vaultwarden/vault.nix rename to pkgs/tools/security/vaultwarden/webvault.nix index 0a80c1079532..f52a93ac0461 100644 --- a/pkgs/tools/security/vaultwarden/vault.nix +++ b/pkgs/tools/security/vaultwarden/webvault.nix @@ -1,7 +1,7 @@ { lib, stdenv, fetchurl, nixosTests }: stdenv.mkDerivation rec { - pname = "vaultwarden-vault"; + pname = "vaultwarden-webvault"; version = "2022.11.1"; src = fetchurl { diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 7586a6e68c3f..563f95233f6e 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -1558,6 +1558,7 @@ mapAliases ({ varnish63 = throw "varnish63 was removed from nixpkgs, because it is unmaintained upstream. Please switch to a different release"; # Added 2021-07-26 varnish65 = throw "varnish65 was removed from nixpkgs, because it is unmaintained upstream. Please switch to a different release"; # Added 2021-09-15 varnish70 = throw "varnish70 was removed from nixpkgs, because it was superseded upstream. Please switch to a different release"; # Added 2022-03-17 + vaultwarden-vault = vaultwarden.webvault; # Added 2022-12-13 varnish71 = throw "varnish71 was removed from nixpkgs, because it was superseded upstream. Please switch to a different release"; # Added 2022-11-08 vdirsyncerStable = vdirsyncer; # Added 2020-11-08, see https://github.com/NixOS/nixpkgs/issues/103026#issuecomment-723428168 venus = throw "venus has been removed from nixpkgs, as it's unmaintained"; # Added 2021-02-05 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e35f80aa819c..a8408c41ff5d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -37528,8 +37528,6 @@ with pkgs; vaultwarden-mysql = vaultwarden.override { dbBackend = "mysql"; }; vaultwarden-postgresql = vaultwarden.override { dbBackend = "postgresql"; }; - vaultwarden-vault = callPackage ../tools/security/vaultwarden/vault.nix { }; - vazir-fonts = callPackage ../data/fonts/vazir-fonts { }; vhs = callPackage ../applications/misc/vhs { }; From 5ad720fef434cf51576b622840728c842227bda7 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Wed, 14 Dec 2022 14:31:04 +0100 Subject: [PATCH 2/3] vaultwarden.webvault: 2022.11.1 -> 2022.10.0 Downgrade to fix compatibility with vaultwarden 1.26.0. --- pkgs/tools/security/vaultwarden/webvault.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/security/vaultwarden/webvault.nix b/pkgs/tools/security/vaultwarden/webvault.nix index f52a93ac0461..b2ac61fc8575 100644 --- a/pkgs/tools/security/vaultwarden/webvault.nix +++ b/pkgs/tools/security/vaultwarden/webvault.nix @@ -2,11 +2,11 @@ stdenv.mkDerivation rec { pname = "vaultwarden-webvault"; - version = "2022.11.1"; + version = "2022.10.0"; src = fetchurl { url = "https://github.com/dani-garcia/bw_web_builds/releases/download/v${version}/bw_web_v${version}.tar.gz"; - sha256 = "sha256-nd32Q0uTsnrdVPDe1Yglvkg2QcwgLR+x0dFvKSD8o8I="; + hash = "sha256-Sf1YnOikjZmloTQvdrFH/UAevQqKQEkNNrCRUhvNZfA="; }; buildCommand = '' From d37dca5f1474ee08df0e0f17ee2d6d5d39196ee9 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Wed, 14 Dec 2022 14:56:34 +0100 Subject: [PATCH 3/3] nixos/tests/vaultwarden: Update selenium tests for 2022.10.0 A few form element ids were changed around and a button was renamed. --- nixos/tests/vaultwarden.nix | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/nixos/tests/vaultwarden.nix b/nixos/tests/vaultwarden.nix index 408019666da3..87bea6633483 100644 --- a/nixos/tests/vaultwarden.nix +++ b/nixos/tests/vaultwarden.nix @@ -87,6 +87,9 @@ let testRunner = pkgs.writers.writePython3Bin "test-runner" { libraries = [ pkgs.python3Packages.selenium ]; + flakeIgnore = [ + "E501" + ]; } '' from selenium.webdriver.common.by import By @@ -106,25 +109,25 @@ let wait.until(EC.title_contains("Create Account")) - driver.find_element(By.CSS_SELECTOR, 'input#email').send_keys( - '${userEmail}' + driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_email').send_keys( + '${userEmail}' ) - driver.find_element(By.CSS_SELECTOR, 'input#name').send_keys( - 'A Cat' + driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_name').send_keys( + 'A Cat' ) - driver.find_element(By.CSS_SELECTOR, 'input#masterPassword').send_keys( - '${userPassword}' + driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_master-password').send_keys( + '${userPassword}' ) - driver.find_element(By.CSS_SELECTOR, 'input#masterPasswordRetype').send_keys( - '${userPassword}' + driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_confirm-master-password').send_keys( + '${userPassword}' ) - driver.find_element(By.XPATH, "//button[contains(., 'Submit')]").click() + driver.find_element(By.XPATH, "//button[contains(., 'Create Account')]").click() wait.until_not(EC.title_contains("Create Account")) - driver.find_element(By.CSS_SELECTOR, 'input#masterPassword').send_keys( - '${userPassword}' + driver.find_element(By.CSS_SELECTOR, 'input#login_input_master-password').send_keys( + '${userPassword}' ) driver.find_element(By.XPATH, "//button[contains(., 'Log In')]").click() @@ -133,10 +136,10 @@ let driver.find_element(By.XPATH, "//button[contains(., 'Add Item')]").click() driver.find_element(By.CSS_SELECTOR, 'input#name').send_keys( - 'secrets' + 'secrets' ) driver.find_element(By.CSS_SELECTOR, 'input#loginPassword').send_keys( - '${storedPassword}' + '${storedPassword}' ) driver.find_element(By.XPATH, "//button[contains(., 'Save')]").click()