summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorGuillaume Girol <symphorien@users.noreply.github.com>2023-04-16 19:23:00 +0000
committerGitHub <noreply@github.com>2023-04-16 19:23:00 +0000
commit40bbc9ae53d891477fce3529ad29c82ac51e49e5 (patch)
treebe57c8f45ac0a4f5342dc8bed2ab884710f6dd89 /nixos
parent816ad3d34582bd671999cf3178896fe501aea8fc (diff)
parent3cc8b4477e175bb700022c147a59bd40e0de8161 (diff)
Merge pull request #225285 from symphorien/ihm-remove
python3.pkgs.ihatemoney: remove
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/rename.nix1
-rw-r--r--nixos/modules/services/web-apps/ihatemoney/default.nix153
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/ihatemoney/default.nix71
-rw-r--r--nixos/tests/ihatemoney/rates.json39
-rw-r--r--nixos/tests/ihatemoney/server.crt28
-rw-r--r--nixos/tests/ihatemoney/server.key52
8 files changed, 1 insertions, 345 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index e0e50295abb0..51e3f3ad3e31 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -1166,7 +1166,6 @@
./services/web-apps/hledger-web.nix
./services/web-apps/icingaweb2/icingaweb2.nix
./services/web-apps/icingaweb2/module-monitoring.nix
- ./services/web-apps/ihatemoney
./services/web-apps/invidious.nix
./services/web-apps/invoiceplane.nix
./services/web-apps/isso.nix
diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix
index 158c7934195b..097d8e86c211 100644
--- a/nixos/modules/rename.nix
+++ b/nixos/modules/rename.nix
@@ -58,6 +58,7 @@ with lib;
(mkRemovedOptionModule [ "services" "fourStoreEndpoint" ] "The fourStoreEndpoint module has been removed")
(mkRemovedOptionModule [ "services" "fprot" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "frab" ] "The frab module has been removed")
+ (mkRemovedOptionModule [ "services" "ihatemoney" ] "The ihatemoney module has been removed for lack of downstream maintainer")
(mkRemovedOptionModule [ "services" "kippo" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "mailpile" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "marathon" ] "The corresponding package was removed from nixpkgs.")
diff --git a/nixos/modules/services/web-apps/ihatemoney/default.nix b/nixos/modules/services/web-apps/ihatemoney/default.nix
deleted file mode 100644
index a61aa445f82c..000000000000
--- a/nixos/modules/services/web-apps/ihatemoney/default.nix
+++ /dev/null
@@ -1,153 +0,0 @@
-{ config, pkgs, lib, ... }:
-with lib;
-let
- cfg = config.services.ihatemoney;
- user = "ihatemoney";
- group = "ihatemoney";
- db = "ihatemoney";
- python3 = config.services.uwsgi.package.python3;
- pkg = python3.pkgs.ihatemoney;
- toBool = x: if x then "True" else "False";
- configFile = pkgs.writeText "ihatemoney.cfg" ''
- from secrets import token_hex
- # load a persistent secret key
- SECRET_KEY_FILE = "/var/lib/ihatemoney/secret_key"
- SECRET_KEY = ""
- try:
- with open(SECRET_KEY_FILE) as f:
- SECRET_KEY = f.read()
- except FileNotFoundError:
- pass
- if not SECRET_KEY:
- print("ihatemoney: generating a new secret key")
- SECRET_KEY = token_hex(50)
- with open(SECRET_KEY_FILE, "w") as f:
- f.write(SECRET_KEY)
- del token_hex
- del SECRET_KEY_FILE
-
- # "normal" configuration
- DEBUG = False
- SQLALCHEMY_DATABASE_URI = '${
- if cfg.backend == "sqlite"
- then "sqlite:////var/lib/ihatemoney/ihatemoney.sqlite"
- else "postgresql:///${db}"}'
- SQLALCHEMY_TRACK_MODIFICATIONS = False
- MAIL_DEFAULT_SENDER = (r"${cfg.defaultSender.name}", r"${cfg.defaultSender.email}")
- ACTIVATE_DEMO_PROJECT = ${toBool cfg.enableDemoProject}
- ADMIN_PASSWORD = r"${toString cfg.adminHashedPassword /*toString null == ""*/}"
- ALLOW_PUBLIC_PROJECT_CREATION = ${toBool cfg.enablePublicProjectCreation}
- ACTIVATE_ADMIN_DASHBOARD = ${toBool cfg.enableAdminDashboard}
- SESSION_COOKIE_SECURE = ${toBool cfg.secureCookie}
- ENABLE_CAPTCHA = ${toBool cfg.enableCaptcha}
- LEGAL_LINK = r"${toString cfg.legalLink}"
-
- ${cfg.extraConfig}
- '';
-in
- {
- options.services.ihatemoney = {
- enable = mkEnableOption (lib.mdDoc "ihatemoney webapp. Note that this will set uwsgi to emperor mode");
- backend = mkOption {
- type = types.enum [ "sqlite" "postgresql" ];
- default = "sqlite";
- description = lib.mdDoc ''
- The database engine to use for ihatemoney.
- If `postgresql` is selected, then a database called
- `${db}` will be created. If you disable this option,
- it will however not be removed.
- '';
- };
- adminHashedPassword = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = lib.mdDoc "The hashed password of the administrator. To obtain it, run `ihatemoney generate_password_hash`";
- };
- uwsgiConfig = mkOption {
- type = types.attrs;
- example = {
- http = ":8000";
- };
- description = lib.mdDoc "Additional configuration of the UWSGI vassal running ihatemoney. It should notably specify on which interfaces and ports the vassal should listen.";
- };
- defaultSender = {
- name = mkOption {
- type = types.str;
- default = "Budget manager";
- description = lib.mdDoc "The display name of the sender of ihatemoney emails";
- };
- email = mkOption {
- type = types.str;
- default = "ihatemoney@${config.networking.hostName}";
- defaultText = literalExpression ''"ihatemoney@''${config.networking.hostName}"'';
- description = lib.mdDoc "The email of the sender of ihatemoney emails";
- };
- };
- secureCookie = mkOption {
- type = types.bool;
- default = true;
- description = lib.mdDoc "Use secure cookies. Disable this when ihatemoney is served via http instead of https";
- };
- enableDemoProject = mkEnableOption (lib.mdDoc "access to the demo project in ihatemoney");
- enablePublicProjectCreation = mkEnableOption (lib.mdDoc "permission to create projects in ihatemoney by anyone");
- enableAdminDashboard = mkEnableOption (lib.mdDoc "ihatemoney admin dashboard");
- enableCaptcha = mkEnableOption (lib.mdDoc "a simplistic captcha for some forms");
- legalLink = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = lib.mdDoc "The URL to a page explaining legal statements about your service, eg. GDPR-related information.";
- };
- extraConfig = mkOption {
- type = types.str;
- default = "";
- description = lib.mdDoc "Extra configuration appended to ihatemoney's configuration file. It is a python file, so pay attention to indentation.";
- };
- };
- config = mkIf cfg.enable {
- services.postgresql = mkIf (cfg.backend == "postgresql") {
- enable = true;
- ensureDatabases = [ db ];
- ensureUsers = [ {
- name = user;
- ensurePermissions = {
- "DATABASE ${db}" = "ALL PRIVILEGES";
- };
- } ];
- };
- systemd.services.postgresql = mkIf (cfg.backend == "postgresql") {
- wantedBy = [ "uwsgi.service" ];
- before = [ "uwsgi.service" ];
- };
- systemd.tmpfiles.rules = [
- "d /var/lib/ihatemoney 770 ${user} ${group}"
- ];
- users = {
- users.${user} = {
- isSystemUser = true;
- inherit group;
- };
- groups.${group} = {};
- };
- services.uwsgi = {
- enable = true;
- plugins = [ "python3" ];
- instance = {
- type = "emperor";
- vassals.ihatemoney = {
- type = "normal";
- strict = true;
- immediate-uid = user;
- immediate-gid = group;
- # apparently flask uses threads: https://github.com/spiral-project/ihatemoney/commit/c7815e48781b6d3a457eaff1808d179402558f8c
- enable-threads = true;
- module = "wsgi:application";
- chdir = "${pkg}/${pkg.pythonModule.sitePackages}/ihatemoney";
- env = [ "IHATEMONEY_SETTINGS_FILE_PATH=${configFile}" ];
- pythonPackages = self: [ self.ihatemoney ];
- } // cfg.uwsgiConfig;
- };
- };
- };
- }
-
-
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 201dc3d72b50..061e41f7ed75 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -310,7 +310,6 @@ in {
i3wm = handleTest ./i3wm.nix {};
icingaweb2 = handleTest ./icingaweb2.nix {};
iftop = handleTest ./iftop.nix {};
- ihatemoney = handleTest ./ihatemoney {};
incron = handleTest ./incron.nix {};
influxdb = handleTest ./influxdb.nix {};
initrd-network-openvpn = handleTest ./initrd-network-openvpn {};
diff --git a/nixos/tests/ihatemoney/default.nix b/nixos/tests/ihatemoney/default.nix
deleted file mode 100644
index d172bf79b8c6..000000000000
--- a/nixos/tests/ihatemoney/default.nix
+++ /dev/null
@@ -1,71 +0,0 @@
-{ system ? builtins.currentSystem,
- config ? {},
- pkgs ? import ../../.. { inherit system config; }
-}:
-
-let
- inherit (import ../../lib/testing-python.nix { inherit system pkgs; }) makeTest;
- f = backend: makeTest {
- name = "ihatemoney-${backend}";
- nodes.machine = { nodes, lib, ... }: {
- services.ihatemoney = {
- enable = true;
- enablePublicProjectCreation = true;
- secureCookie = false;
- inherit backend;
- uwsgiConfig = {
- http = ":8000";
- };
- };
- boot.tmp.cleanOnBoot = true;
- # for exchange rates
- security.pki.certificateFiles = [ ./server.crt ];
- networking.extraHosts = "127.0.0.1 api.exchangerate.host";
- services.nginx = {
- enable = true;
- virtualHosts."api.exchangerate.host" = {
- addSSL = true;
- # openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 1000000 -nodes -subj '/CN=api.exchangerate.host'
- sslCertificate = ./server.crt;
- sslCertificateKey = ./server.key;
- locations."/".return = "200 '${builtins.readFile ./rates.json}'";
- };
- };
- # ihatemoney needs a local smtp server otherwise project creation just crashes
- services.postfix.enable = true;
- };
- testScript = ''
- machine.wait_for_open_port(8000)
- machine.wait_for_unit("uwsgi.service")
- machine.wait_until_succeeds("curl --fail https://api.exchangerate.host")
- machine.wait_until_succeeds("curl --fail http://localhost:8000")
-
- result = machine.succeed(
- "curl --fail -X POST http://localhost:8000/api/projects -d 'name=yay&id=yay&password=yay&contact_email=yay@example.com&default_currency=XXX'"
- )
- assert '"yay"' in result, repr(result)
- owner, timestamp = machine.succeed(
- "stat --printf %U:%G___%Y /var/lib/ihatemoney/secret_key"
- ).split("___")
- assert "ihatemoney:ihatemoney" == owner
-
- with subtest("Restart machine and service"):
- machine.shutdown()
- machine.start()
- machine.wait_for_open_port(8000)
- machine.wait_for_unit("uwsgi.service")
-
- with subtest("check that the database is really persistent"):
- machine.succeed("curl --fail --basic -u yay:yay http://localhost:8000/api/projects/yay")
-
- with subtest("check that the secret key is really persistent"):
- timestamp2 = machine.succeed("stat --printf %Y /var/lib/ihatemoney/secret_key")
- assert timestamp == timestamp2
-
- assert "ihatemoney" in machine.succeed("curl --fail http://localhost:8000")
- '';
- };
-in {
- ihatemoney-sqlite = f "sqlite";
- ihatemoney-postgresql = f "postgresql";
-}
diff --git a/nixos/tests/ihatemoney/rates.json b/nixos/tests/ihatemoney/rates.json
deleted file mode 100644
index ebdd2651b040..000000000000
--- a/nixos/tests/ihatemoney/rates.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "rates": {
- "CAD": 1.3420055134,
- "HKD": 7.7513783598,
- "ISK": 135.9407305307,
- "PHP": 49.3762922123,
- "DKK": 6.4126464507,
- "HUF": 298.9145416954,
- "CZK": 22.6292212267,
- "GBP": 0.7838128877,
- "RON": 4.1630771881,
- "SEK": 8.8464851826,
- "IDR": 14629.5658166782,
- "INR": 74.8328738801,
- "BRL": 5.2357856651,
- "RUB": 71.8416609235,
- "HRK": 6.4757064094,
- "JPY": 106.2715368711,
- "THB": 31.7203652653,
- "CHF": 0.9243625086,
- "EUR": 0.8614748449,
- "MYR": 4.2644727774,
- "BGN": 1.6848725017,
- "TRY": 6.8483804273,
- "CNY": 7.0169710544,
- "NOK": 9.213731909,
- "NZD": 1.5080978635,
- "ZAR": 16.7427636113,
- "USD": 1,
- "MXN": 22.4676085458,
- "SGD": 1.3855099931,
- "AUD": 1.4107512061,
- "ILS": 3.4150585803,
- "KRW": 1203.3339076499,
- "PLN": 3.794452102
- },
- "base": "USD",
- "date": "2020-07-24"
-}
diff --git a/nixos/tests/ihatemoney/server.crt b/nixos/tests/ihatemoney/server.crt
deleted file mode 100644
index 10e568b14b14..000000000000
--- a/nixos/tests/ihatemoney/server.crt
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvjCCAqYCCQDkTQrENPCZjjANBgkqhkiG9w0BAQsFADAgMR4wHAYDVQQDDBVh
-cGkuZXhjaGFuZ2VyYXRlLmhvc3QwIBcNMjEwNzE0MTI1MzQ0WhgPNDc1OTA2MTEx
-MjUzNDRaMCAxHjAcBgNVBAMMFWFwaS5leGNoYW5nZXJhdGUuaG9zdDCCAiIwDQYJ
-KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5zpwUYa/ySqvJ/PUnXYsl1ww5SNGJh
-NujCRxC0Gw+5t5O7USSHRdz7Eb2PNFMa7JR+lliLAWdjHfqPXJWmP10X5ebvyxeQ
-TJkR1HpDSY6TQQlJvwr/JNGryyoQYjXvnyeyVu4TS3U0TTI631OonDAj+HbFIs9L
-gr/HfHzFmxRVLwaJ7hebanihc5RzoWTxgswiOwYQu5AivXQqcvUIxELeT7CxWwiw
-be/SlalDgoezB/poqaa215FUuN2av+nTn+swH3WOi9kwePLgVKn9BnDMwyh8et13
-yt27RWCSOcZagRSYsSbBaEJbClZvnuYvDqooJEy0GVbGBZpClKRKe92yd0PTf3ZJ
-GupyNoCFQlGugY//WLrsPv/Q4WwP+qZ6t97sV0CdM+epKVde/LfPKn+tFMv86qIg
-Q/uGHdDwUI8XH2EysAavhdlssSrovmpl4hyo9UkzTWfJgAbmOZY3Vba41wsq12FT
-usDsswGLBD10MdXWltR/Hdk8OnosLmeJxfZODAv31KSfd+4b6Ntr9BYQvAQSO+1/
-Mf7gEQtNhO003VKIyV5cpH4kVQieEcvoEKgq32NVBSKVf6UIPWIefu19kvrttaUu
-Q2QW2Qm4Ph/4cWpxl0jcrN5rjmgaBtIMmKYjRIS0ThDWzfVkJdmJuATzExJAplLN
-nYPBG3gOtQQpAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAJzt/aN7wl88WrvBasVi
-fSJmJjRaW2rYyBUMptQNkm9ElHN2eQQxJgLi8+9ArQxuGKhHx+D1wMGF8w2yOp0j
-4atfbXDcT+cTQY55qdEeYgU8KhESHHGszGsUpv7hzU2cACZiXG0YbOmORFYcn49Z
-yPyN98kW8BViLzNF9v+I/NJPuaaCeWKjXCqY2GCzddiuotrlLtz0CODXZJ506I1F
-38vQgZb10yAe6+R4y0BK7sUlmfr9BBqVcDQ/z74Kph1aB32zwP8KrNitwG1Tyk6W
-rxD1dStEQyX8uDPAspe2JrToMWsOMje9F5lotmuzyvwRJYfAav300EtIggBqpiHR
-o0P/1xxBzmaCHxEUJegdoYg8Q27llqsjR2T78uv/BlxpX9Dv5kNex5EZThKqyz4a
-Fn1VqiA3D9IsvxH4ud+8eDaP24u1yYObSTDIBsw9xDvoV8fV+NWoNNhcAL5GwC0P
-Goh7/brZSHUprxGpwRB524E//8XmCsRd/+ShtXbi4gEODMH4xLdkD7fZIJC4eG1H
-GOVc1MwjiYvbQlPs6MOcQ0iKQneSlaEJmyyO5Ro5OKiKj89Az/mLYX3R17AIsu0T
-Q5pGcmhKVRyu0zXvkGfK352TLwoe+4vbmakDq21Pkkcy8V9M4wP+vpCfQkg1REQ1
-+mr1Vg+SFya3mlCxpFTy3j8E
------END CERTIFICATE-----
diff --git a/nixos/tests/ihatemoney/server.key b/nixos/tests/ihatemoney/server.key
deleted file mode 100644
index 72a43577d64d..000000000000
--- a/nixos/tests/ihatemoney/server.key
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-NaEkKVO0D0jFtk37s/YqJpCsXg/B7yc=
------END PRIVATE KEY-----