nix machine / user configurations

fix(wolumonde): fix perses oidc auth

ptr.pet 1a95edd2 3da5bf24

verified
Changed files
+28 -97
hosts
wolumonde
modules
secrets
+28 -74
hosts/wolumonde/modules/perses.nix/default.nix
···
{
pkgs,
-
terra,
config,
...
}:
···
user = "perses";
provisionFolder = "provisioning";
+
provisioningFolder = "${config.users.users.${user}.home}/${provisionFolder}";
persesConfig = {
database.file = {
-
folder = "/perses";
+
folder = config.users.users.${user}.home;
extension = "json";
};
-
provisioning.folders = [ "/perses/${provisionFolder}" ];
+
provisioning.folders = [ provisioningFolder ];
security = {
enable_auth = true;
authentication = {
-
providers.oidc = [
-
{
-
slug_id = "pocketid";
-
name = "Pocket ID";
-
client_id = "aa583db6-e03c-4490-853a-7f2b3e089fbe";
-
issuer = config.services.pocket-id.settings.APP_URL;
-
scopes = [ "openid profile email" ];
-
}
-
];
-
disable_sign_up = true;
+
providers = {
+
enable_native = false;
+
oidc = [
+
{
+
slug_id = "pocketid";
+
name = "Pocket ID";
+
client_id = "aa583db6-e03c-4490-853a-7f2b3e089fbe";
+
issuer = config.services.pocket-id.settings.APP_URL;
+
scopes = [ "openid profile email" ];
+
}
+
];
+
};
+
disable_sign_up = false;
};
cookie = {
same_site = "strict";
···
};
persesConfigYaml = pkgs.writers.writeYAML "config.yaml" persesConfig;
-
persesImage = pkgs.dockerTools.pullImage {
-
imageName = "docker.io/persesdev/perses";
-
imageDigest = "sha256:7d4647ce31841f67c2361bd10ea344de1edd7fbf65711c75805a5aacdc7735d0";
-
sha256 = "sha256-oOQYJzGEEEkjfqlVkEGLOH3e4iywd8QnptY9UxPd1iw=";
-
};
-
persesHealthcheckImage = pkgs.dockerTools.streamLayeredImage {
-
name = "perses";
-
tag = "latest";
-
fromImage = persesImage;
-
contents = [ pkgs.curl ];
-
config.Entrypoint = [ "/bin/perses" ];
-
config.Cmd = [
-
"--config=${persesConfigYaml}"
-
"--log.level=info"
-
"--web.listen-address=:${toString port}"
-
# "--log.method-trace"
-
];
-
config.Healthcheck = {
-
Test = [
-
"/bin/curl"
-
"http://localhost:${toString port}/api/v1/health"
-
];
-
Retries = 3;
-
};
-
};
-
-
# persesEnv = config.virtualisation.oci-containers.containers.perses.environment;
secrets = config.age.secrets;
in
{
-
environment.systemPackages = [ terra.percli ];
+
environment.systemPackages = [ pkgs.perses ];
users.users.${user} = {
isNormalUser = true;
group = user;
home = "/var/lib/${user}";
createHome = true;
-
linger = true;
-
autoSubUidGidRange = true;
uid = 1001;
};
users.groups.${user} = {
···
owner = user;
group = user;
};
-
age.secrets.persesAdminUser = {
-
file = ../../../../secrets/persesAdminUser.age;
-
owner = user;
-
group = user;
-
};
-
systemd.services.perses.preStart =
-
let
-
provisioningFolder = "${config.users.users.${user}.home}/${provisionFolder}";
-
in
-
''
-
rm -rf ${provisioningFolder} && mkdir -p ${provisioningFolder}
-
cp -f ${secrets.persesAdminUser.path} ${provisioningFolder}/1-admin-user.json
-
cp -f ${./provision}/* ${provisioningFolder}
-
'';
-
-
virtualisation.oci-containers.containers.perses = {
-
serviceName = "perses";
-
image = "perses:latest";
-
imageStream = persesHealthcheckImage;
-
autoStart = true;
-
# workdir = config.users.users.${user}.home;
-
podman = {
-
inherit user;
-
sdnotify = "healthy";
+
systemd.services.perses = {
+
description = "perses";
+
after = ["network.target"];
+
serviceConfig = {
+
ExecStart = "${pkgs.perses}/bin/perses --config=${persesConfigYaml} --web.listen-address=:${toString port} --log.level=info";
+
EnvironmentFile = secrets.persesSecret.path;
+
WorkingDirectory = config.users.users.${user}.home;
};
-
environmentFiles = [ secrets.persesSecret.path ];
-
volumes = [
-
"/var/lib/perses:${persesConfig.database.file.folder}"
-
];
-
extraOptions = [
-
"--network=host"
-
];
};
+
systemd.services.perses.preStart = ''
+
rm -rf ${provisioningFolder} && mkdir -p ${provisioningFolder}
+
cp -f ${./provision}/* ${provisioningFolder}
+
'';
services.nginx.virtualHosts.${domain} = {
useACMEHost = "gaze.systems"; # TODO: write a module to define vhosts for subdomains
-11
hosts/wolumonde/modules/perses.nix/provision/5-funny.yaml
···
-
{
-
"kind": "User",
-
"metadata": {
-
"name": "cat"
-
},
-
"spec": {
-
"nativeProvider": {
-
"password": "ziplocballs"
-
}
-
}
-
}
-8
hosts/wolumonde/modules/perses.nix/provision/7-funny-bind-role.yaml
···
-
- kind: GlobalRoleBinding
-
metadata:
-
name: cat
-
spec:
-
role: guest
-
subjects:
-
- kind: User
-
name: cat
secrets/persesAdminUser.age

This is a binary file and will not be displayed.

-4
secrets/secrets.nix
···
yusdacra
wolumonde
];
-
"persesAdminUser.age".publicKeys = [
-
yusdacra
-
wolumonde
-
];
"ratholeCreds.age".publicKeys = [
yusdacra
wolumonde