From a31de7bf862fe2858e17b587cac5821c460253d6 Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Mon, 16 Mar 2020 22:17:01 +0100 Subject: [PATCH 1/4] maintainers: add kloenk --- maintainers/maintainer-list.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index f84b8bc2ec19..fe187aab9c30 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -4047,6 +4047,16 @@ github = "klntsky"; githubId = 18447310; }; + kloenk = { + email = "me@kloenk.de"; + name = "Finn Behrens"; + github = "kloenk"; + githubId = 12898828; + keys = [{ + longkeyid = "ed25519/0xB92445CFC9546F9D"; + fingerprint = "6881 5A95 D715 D429 659B 48A4 B924 45CF C954 6F9D"; + }]; + }; kmcopper = { email = "kmcopper@danwin1210.me"; name = "Kyle Copperfield"; From 829ebc53901c1c1e06eb4612888b34abd5479084 Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Mon, 16 Mar 2020 23:01:23 +0100 Subject: [PATCH 2/4] engelsystem: init at version 3.1.0 --- pkgs/servers/web-apps/engelsystem/default.nix | 50 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 52 insertions(+) create mode 100644 pkgs/servers/web-apps/engelsystem/default.nix diff --git a/pkgs/servers/web-apps/engelsystem/default.nix b/pkgs/servers/web-apps/engelsystem/default.nix new file mode 100644 index 000000000000..b7dca2cdd7bb --- /dev/null +++ b/pkgs/servers/web-apps/engelsystem/default.nix @@ -0,0 +1,50 @@ +{ stdenv, fetchzip, php, writeText }: + +let + phpExt = php.withExtensions + ({ enabled, all }: with all; [ json filter mysqlnd mysqli pdo pdo_mysql ]); +in stdenv.mkDerivation rec { + pname = "engelsystem"; + version = "3.1.0"; + + src = fetchzip { + url = + "https://github.com/engelsystem/engelsystem/releases/download/v3.1.0/engelsystem-v3.1.0.zip"; + sha256 = "01wra7li7n5kn1l6xkrmw4vlvvyqh089zs43qzn98hj0mw8gw7ai"; + # This is needed, because the zip contains a directory with world write access, which is not allowed in nix + extraPostFetch = "chmod -R a-w $out"; + }; + + buildInputs = [ phpExt ]; + + installPhase = '' + runHook preInstall + + # prepare + rm -r ./storage/ + rm -r ./docker/ + + ln -sf /etc/engelsystem/config.php ./config/config.php + ln -sf /var/lib/engelsystem/storage/ ./storage + + mkdir -p $out/share/engelsystem + mkdir -p $out/bin + cp -r . $out/share/engelsystem + + echo $(command -v php) + # The patchShebangAuto function always used the php without extensions, so path the shebang manually + sed -i -e "1 s|.*|#\!${phpExt}/bin/php|" "$out/share/engelsystem/bin/migrate" + ln -s "$out/share/engelsystem/bin/migrate" "$out/bin/migrate" + + runHook postInstall + ''; + + meta = with stdenv.lib; { + description = + "Coordinate your helpers in teams, assign them to work shifts or let them decide for themselves when and where they want to help with what"; + license = licenses.gpl2; + homepage = "https://engelsystem.de"; + maintainers = with maintainers; [ kloenk ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 07f051050c1c..f0642286c463 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15548,6 +15548,8 @@ in dspam = callPackage ../servers/mail/dspam { }; + engelsystem = callPackage ../servers/web-apps/engelsystem { }; + etcd = callPackage ../servers/etcd { }; etcd_3_4 = callPackage ../servers/etcd/3.4.nix { }; From fc4d6f4215b53ef1681ea5b0ffbcd126cb6a660c Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Wed, 8 Apr 2020 09:49:56 +0200 Subject: [PATCH 3/4] nixos/engelsystem: init --- nixos/modules/module-list.nix | 1 + .../modules/services/web-apps/engelsystem.nix | 186 ++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 nixos/modules/services/web-apps/engelsystem.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 771009221fa3..52b9219da4a3 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -828,6 +828,7 @@ ./services/web-apps/cryptpad.nix ./services/web-apps/documize.nix ./services/web-apps/dokuwiki.nix + ./services/web-apps/engelsystem.nix ./services/web-apps/frab.nix ./services/web-apps/gerrit.nix ./services/web-apps/gotify-server.nix diff --git a/nixos/modules/services/web-apps/engelsystem.nix b/nixos/modules/services/web-apps/engelsystem.nix new file mode 100644 index 000000000000..899582a20304 --- /dev/null +++ b/nixos/modules/services/web-apps/engelsystem.nix @@ -0,0 +1,186 @@ +{ config, lib, pkgs, utils, ... }: + +let + inherit (lib) mkDefault mkEnableOption mkIf mkOption types literalExample; + cfg = config.services.engelsystem; +in { + options = { + services.engelsystem = { + enable = mkOption { + default = false; + example = true; + description = '' + Whether to enable engelsystem, an online tool for coordinating helpers + and shifts on large events. + ''; + type = lib.types.bool; + }; + + domain = mkOption { + type = types.str; + example = "engelsystem.example.com"; + description = "Domain to serve on."; + }; + + package = mkOption { + type = types.package; + example = literalExample "pkgs.engelsystem"; + description = "Engelsystem package used for the service."; + default = pkgs.engelsystem; + }; + + createDatabase = mkOption { + type = types.bool; + default = true; + description = '' + Whether to create a local database automatically. + This will override every database setting in . + ''; + }; + }; + + services.engelsystem.config = mkOption { + type = types.attrs; + default = { + database = { + host = "localhost"; + database = "engelsystem"; + username = "engelsystem"; + }; + }; + example = { + maintenance = false; + database = { + host = "database.example.com"; + database = "engelsystem"; + username = "engelsystem"; + password._secret = "/var/keys/engelsystem/database"; + }; + email = { + driver = "smtp"; + host = "smtp.example.com"; + port = 587; + from.address = "engelsystem@example.com"; + from.name = "example engelsystem"; + encryption = "tls"; + username = "engelsystem@example.com"; + password._secret = "/var/keys/engelsystem/mail"; + }; + autoarrive = true; + min_password_length = 6; + default_locale = "de_DE"; + }; + description = '' + Options to be added to config.php, as a nix attribute set. Options containing secret data + should be set to an attribute set containing the attribute _secret - a string pointing to a + file containing the value the option should be set to. See the example to get a better + picture of this: in the resulting config.php file, the email.password key will be set to + the contents of the /var/keys/engelsystem/mail file. + + See https://engelsystem.de/doc/admin/configuration/ for available options. + + Note that the admin user login credentials cannot be set here - they always default to + admin:asdfasdf. Log in and change them immediately. + ''; + }; + }; + + config = mkIf cfg.enable { + # create database + services.mysql = mkIf cfg.createDatabase { + enable = true; + package = mkDefault pkgs.mysql; + ensureUsers = [{ + name = "engelsystem"; + ensurePermissions = { "engelsystem.*" = "ALL PRIVILEGES"; }; + }]; + ensureDatabases = [ "engelsystem" ]; + }; + + environment.etc."engelsystem/config.php".source = + pkgs.writeText "config.php" '' + Date: Sun, 24 May 2020 14:20:58 +0200 Subject: [PATCH 4/4] nixos/engelsystem: Add test --- nixos/tests/all-tests.nix | 1 + nixos/tests/engelsystem.nix | 41 +++++++++++++++++++ pkgs/servers/web-apps/engelsystem/default.nix | 4 +- 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 nixos/tests/engelsystem.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 0acded892c7a..2a5a81377d6b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -86,6 +86,7 @@ in ecryptfs = handleTest ./ecryptfs.nix {}; ejabberd = handleTest ./xmpp/ejabberd.nix {}; elk = handleTestOn ["x86_64-linux"] ./elk.nix {}; + engelsystem = handleTest ./engelsystem.nix {}; enlightenment = handleTest ./enlightenment.nix {}; env = handleTest ./env.nix {}; etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {}; diff --git a/nixos/tests/engelsystem.nix b/nixos/tests/engelsystem.nix new file mode 100644 index 000000000000..39c10718093f --- /dev/null +++ b/nixos/tests/engelsystem.nix @@ -0,0 +1,41 @@ +import ./make-test-python.nix ( + { pkgs, lib, ... }: + { + name = "engelsystem"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ talyz ]; + }; + + nodes.engelsystem = + { ... }: + { + services.engelsystem = { + enable = true; + domain = "engelsystem"; + createDatabase = true; + }; + networking.firewall.allowedTCPPorts = [ 80 443 ]; + environment.systemPackages = with pkgs; [ + xmlstarlet + libxml2 + ]; + }; + + testScript = '' + engelsystem.start() + engelsystem.wait_for_unit("phpfpm-engelsystem.service") + engelsystem.wait_until_succeeds("curl engelsystem/login -sS -f") + engelsystem.succeed( + "curl engelsystem/login -sS -f -c cookie | xmllint -html -xmlout - >login" + ) + engelsystem.succeed( + "xml sel -T -t -m \"html/head/meta[@name='csrf-token']\" -v @content login >token" + ) + engelsystem.succeed( + "curl engelsystem/login -sS -f -b cookie -F 'login=admin' -F 'password=asdfasdf' -F '_token=news" + ) + engelsystem.succeed( + "test 'News - Engelsystem' = \"$(xml sel -T -t -c html/head/title news)\"" + ) + ''; + }) diff --git a/pkgs/servers/web-apps/engelsystem/default.nix b/pkgs/servers/web-apps/engelsystem/default.nix index b7dca2cdd7bb..8ef6a9afa0e8 100644 --- a/pkgs/servers/web-apps/engelsystem/default.nix +++ b/pkgs/servers/web-apps/engelsystem/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchzip, php, writeText }: +{ stdenv, fetchzip, php, writeText, nixosTests }: let phpExt = php.withExtensions @@ -39,6 +39,8 @@ in stdenv.mkDerivation rec { runHook postInstall ''; + passthru.tests = nixosTests.engelsystem; + meta = with stdenv.lib; { description = "Coordinate your helpers in teams, assign them to work shifts or let them decide for themselves when and where they want to help with what";