···
467
+
# Rules are sequential and do not apply to OIDC
469
-
domain = "*.wiro.world";
470
+
domain = "headscale.wiro.world";
471
+
policy = "two_factor";
475
+
domain = "news.wiro.world";
478
+
subject = [ [ "group:miniflux" "oauth2:client:miniflux" ] ];
481
+
domain = "*.wiro.world";
482
+
policy = "two_factor";
identity_providers.oidc = {
490
+
authorization_policies =
492
+
mkStrictPolicy = policy: subject:
493
+
{ default_policy = "deny"; rules = [{ inherit policy subject; }]; };
496
+
headscale = mkStrictPolicy "two_factor" [ "group:headscale" ];
497
+
grafana = mkStrictPolicy "one_factor" [ "group:grafana" ];
498
+
miniflux = mkStrictPolicy "one_factor" [ "group:miniflux" ];
client_name = "Headscale";
client_secret = "$pbkdf2-sha256$310000$XY680D9gkSoWhD0UtYHNFg$ptWB3exOYCga6uq1N.oimuV3ILjK3F8lBWBpsBpibos";
483
-
redirect_uris = [ "https://headscale.wiro.world/oidc/callback" ];
486
-
client_name = "Grafana Console";
487
-
client_id = "grafana";
488
-
client_secret = "$pbkdf2-sha256$310000$UkwrqxTZodGMs9.Ca2cXAA$HCWFgQbFHGXZpuz.I3HHdkTZLUevRVGlhKEFaOlPmKs";
506
+
redirect_uris = [ "https://${headscale-hostname}/oidc/callback" ];
490
-
redirect_uris = [ "https://console.wiro.world/login/generic_oauth" ];
508
+
authorization_policy = "headscale";
client_name = "Tailscale";
client_secret = "$pbkdf2-sha256$310000$PcUaup9aWKI9ZLeCF6.avw$FpsTxkDaxcoQlBi8aIacegXpjEDiCI6nXcaHyZ2Sxyc";
514
+
redirect_uris = [ "https://login.tailscale.com/a/oauth_response" ];
497
-
redirect_uris = [ "https://login.tailscale.com/a/oauth_response" ];
516
+
authorization_policy = "headscale";
519
+
client_name = "Grafana Console";
520
+
client_id = "grafana";
521
+
client_secret = "$pbkdf2-sha256$310000$UkwrqxTZodGMs9.Ca2cXAA$HCWFgQbFHGXZpuz.I3HHdkTZLUevRVGlhKEFaOlPmKs";
522
+
redirect_uris = [ "https://${grafana-hostname}/login/generic_oauth" ];
524
+
authorization_policy = "grafana";
client_name = "Miniflux";
client_secret = "$pbkdf2-sha256$310000$uPqbWfCOBXDY6nV1vsx3uA$HOWG2hL.c/bs9Dwaee3b9DxjH7KFO.SaZMbasXV9Vdw";
530
+
redirect_uris = [ "https://${miniflux-hostname}/oauth2/oidc/callback" ];
504
-
redirect_uris = [ "https://${miniflux-hostname}/oauth2/oidc/callback" ];
532
+
authorization_policy = "miniflux";
···
createDatabaseLocally = true;
579
-
adminCredentialsFile = config.age.secrets.miniflux-oidc-secret.path;
BASE_URL = "https://${miniflux-hostname}/";
LISTEN_ADDR = "127.0.0.1:${toString miniflux-port}";
# TODO: scrape metrics endpoint with prometheus
···
OAUTH2_OIDC_DISCOVERY_ENDPOINT = "https://auth.wiro.world";
OAUTH2_USER_CREATION = 1;
623
+
RUN_MIGRATIONS = 1;
# NetNewsWire is a very good iOS oss client that integrates well
# https://b.j4.lc/2025/05/05/setting-up-netnewswire-with-miniflux/