infrastructure/nixos/vouch.nix
2024-05-26 14:13:33 -07:00

58 lines
1.6 KiB
Nix

{
config,
pkgs,
lib,
...
}: let
inherit (lib.modules) mkIf mkMerge mkDefault;
cfg = config.services.vouch-proxy;
sopsFile = mkDefault ./secrets/vouch.yaml;
enableKeycloak = true;
hassVouch = false;
in {
services.vouch-proxy = {
enable = mkDefault true;
package = mkIf hassVouch (pkgs.vouch-proxy.overrideAttrs (old: {
postPatch =
''
sed -i handlers/login.go \
-e 's/badStrings *=.*$/badStrings = []string{}/'
''
+ old.postPatch or "";
doCheck = false;
}));
domain = mkDefault "login.${config.networking.domain}";
authUrl = mkIf enableKeycloak (
mkDefault "https://sso.${config.networking.domain}/realms/${config.networking.domain}"
);
settings = mkMerge [
{
vouch.listen = mkDefault "0.0.0.0";
vouch.cookie.secure = mkDefault false;
}
(mkIf enableKeycloak {
oauth = {
auth_url = mkDefault "${cfg.authUrl}/protocol/openid-connect/auth";
token_url = mkDefault "${cfg.authUrl}/protocol/openid-connect/token";
user_info_url = mkDefault "${cfg.authUrl}/protocol/openid-connect/userinfo";
};
})
];
enableSettingsSecrets = mkDefault true;
extraSettings = {
oauth.client_secret._secret = config.sops.secrets.vouch-client-secret.path;
vouch.jwt.secret._secret = config.sops.secrets.vouch-jwt.path;
};
};
sops.secrets = {
vouch-jwt = {
inherit sopsFile;
owner = cfg.user;
};
vouch-client-secret = {
inherit sopsFile;
owner = cfg.user;
};
};
}