|
| 1 | +{ lib, secrets, colors, pkgs, ... }@args: |
| 2 | +lib.mkModule args "ioga.services.authelia" { |
| 3 | + options = with lib; { |
| 4 | + domain = mkOpt' types.str "ioga.dev"; |
| 5 | + instanceName = mkOpt' types.str "main"; |
| 6 | + }; |
| 7 | + config = { cfg }: { |
| 8 | + secrets.authelia = { |
| 9 | + user = "authelia-${cfg.instanceName}"; |
| 10 | + group = "authelia-${cfg.instanceName}"; |
| 11 | + }; |
| 12 | + services.authelia.instances.${cfg.instanceName} = { |
| 13 | + enable = true; |
| 14 | + secrets = { |
| 15 | + jwtSecretFile = "${secrets.authelia}/jwtSecretFile"; |
| 16 | + sessionSecretFile = "${secrets.authelia}/sessionSecretFile"; |
| 17 | + storageEncryptionKeyFile = |
| 18 | + "${secrets.authelia}/storageEncryptionKeyFile"; |
| 19 | + }; |
| 20 | + |
| 21 | + settings = { |
| 22 | + theme = "dark"; |
| 23 | + server.address = "tcp://0.0.0.0:9091"; |
| 24 | + |
| 25 | + authentication_backend.file.path = |
| 26 | + "/var/lib/authelia-${cfg.instanceName}/users.yml"; |
| 27 | + storage.local.path = "/var/lib/authelia-${cfg.instanceName}/db.sqlite3"; |
| 28 | + notifier.filesystem.filename = |
| 29 | + "/var/lib/authelia-${cfg.instanceName}/emails.txt"; |
| 30 | + |
| 31 | + access_control = { |
| 32 | + default_policy = "deny"; |
| 33 | + rules = [ |
| 34 | + { |
| 35 | + domain = "auth.${cfg.domain}"; |
| 36 | + policy = "bypass"; |
| 37 | + } |
| 38 | + { |
| 39 | + domain = "*.${cfg.domain}"; |
| 40 | + policy = "one_factor"; |
| 41 | + } |
| 42 | + ]; |
| 43 | + }; |
| 44 | + |
| 45 | + session.cookies = [{ |
| 46 | + inherit (cfg) domain; |
| 47 | + authelia_url = "https://auth.${cfg.domain}"; |
| 48 | + default_redirection_url = "https://${cfg.domain}"; |
| 49 | + }]; |
| 50 | + }; |
| 51 | + }; |
| 52 | + |
| 53 | + systemd.services."authelia-${cfg.instanceName}" = { |
| 54 | + serviceConfig.StateDirectory = "authelia-${cfg.instanceName}"; |
| 55 | + preStart = # bash |
| 56 | + '' |
| 57 | + USER_DB="/var/lib/authelia-${cfg.instanceName}/users.yml" |
| 58 | + PASS=$(cat ${secrets.authelia}/adminPassword) |
| 59 | + HASHED_PASSWORD=$(${pkgs.authelia}/bin/authelia crypto hash generate argon2 --password "$PASS" | ${pkgs.gawk}/bin/awk '/Digest:/ {print $2}') |
| 60 | + if [ ! -s "$USER_DB" ]; then |
| 61 | + echo "${'' |
| 62 | + users: |
| 63 | + admin: |
| 64 | + displayname: "Admin" |
| 65 | + password: "$HASHED_PASSWORD" |
| 66 | + email: "admin@${cfg.domain}" |
| 67 | + groups: [admins]''}" > "$USER_DB" |
| 68 | + chmod 600 "$USER_DB" |
| 69 | + chown authelia-${cfg.instanceName}:authelia-${cfg.instanceName} "$USER_DB" |
| 70 | + fi |
| 71 | + ''; |
| 72 | + }; |
| 73 | + }; |
| 74 | +} |
0 commit comments