nixos-config/hosts/plover/modules/services/portunus.nix

70 lines
2.1 KiB
Nix
Raw Normal View History

2023-01-12 13:22:55 +00:00
# The LDAP server of choice. Though, it really uses OpenLDAP as the backend so
# it's really more like a nice frontend for it so you don't have to experience
# the pain of managing an OpenLDAP server.
{ config, lib, pkgs, ... }:
let
ldapDomain = "ldap.${config.networking.fqdn}";
2023-07-05 03:38:58 +00:00
portunusUser = config.users.users."${config.services.portunus.user}".name;
2023-01-18 03:41:12 +00:00
in
{
2023-07-05 03:38:58 +00:00
sops.secrets = lib.getSecrets ../../secrets/secrets.yaml {
"ldap/users/foodogsquared/password".owner = portunusUser;
2023-07-05 03:38:58 +00:00
};
2023-01-12 13:22:55 +00:00
services.portunus = {
enable = true;
port = 8168;
domain = ldapDomain;
ldap = {
searchUserName = "admin";
suffix = "dc=foodogsquared,dc=one";
};
2023-01-18 03:41:12 +00:00
seedPath =
let
seedData = {
groups = [
{
name = "admin-team";
long_name = "Portunus Administrators";
members = [ "foodogsquared" ];
permissions = {
portunus.is_admin = true;
ldap.can_read = true;
};
}
];
users = [
{
login_name = "foodogsquared";
given_name = "Gabriel";
family_name = "Arazas";
2023-02-10 02:15:14 +00:00
email = "foodogsquared@foodogsquared.one";
2023-01-18 03:41:12 +00:00
ssh_public_keys =
let
readFiles = list: lib.lists.map (path: lib.readFile path) list;
in
readFiles [
../../../../users/home-manager/foo-dogsquared/files/ssh-key.pub
../../../../users/home-manager/foo-dogsquared/files/ssh-key-2.pub
];
password.from_command = [ "${pkgs.coreutils}/bin/cat" config.sops.secrets."ldap/users/foodogsquared/password".path ];
2023-01-18 03:41:12 +00:00
}
];
};
settingsFormat = pkgs.formats.json { };
in
settingsFormat.generate "portunus-seed" seedData;
2023-01-12 13:22:55 +00:00
};
# Getting this to be accessible in the reverse proxy of choice.
services.nginx.virtualHosts."${ldapDomain}" = {
locations."/" = {
proxyPass = "http://localhost:${toString config.services.portunus.port}";
};
};
}