blob: 4c1af8b2b632423d1248cd8e9c6d8c57423ff05c (
plain) (
tree)
|
|
{ lib, ... }:
let
mkUser =
{
enable ? true,
first_name,
last_name,
username,
email,
initial_password ? null,
}:
{
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
enabled = enable;
inherit
username
email
first_name
last_name
;
email_verified = true;
required_actions = [
"Update password"
"Configure OTP"
];
initial_password = {
value = email;
temporary = true;
};
};
in
{
provider.keycloak = {
client_id = "terranix";
url = "https://id.fcuny.net";
realm = "master";
};
resource.secret_resource.keycloak_smtp_password.lifecycle.prevent_destroy = true;
resource.keycloak_realm."fcuny" = {
enabled = true;
realm = "fcuny.net";
display_name = "Keycloak for fcuny.net";
login_theme = "keycloak";
access_code_lifespan = "1h";
reset_password_allowed = true;
remember_me = true;
login_with_email_allowed = true;
smtp_server = {
from = "noreply@fcuny.net";
from_display_name = "fcuny.net identity services";
host = "smtp.fastmail.com";
port = 465;
ssl = true;
starttls = true;
auth = {
username = "franck@fcuny.net";
# nix run .#tf -- import secret_resource.keycloak_smtp_password SMPT_PASSWORD
# https://github.com/numtide/terraform-provider-secret?tab=readme-ov-file#usage
password = lib.tf.ref "resource.secret_resource.keycloak_smtp_password.value";
};
};
default_signature_algorithm = "RS256";
};
resource.keycloak_user = {
fcuny = mkUser {
username = "fcuny";
first_name = "Franck";
last_name = "Cuny";
email = "franck@fcuny.net";
};
};
data.keycloak_openid_client.realm_management_client = {
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
client_id = "realm-management";
};
data.keycloak_role.admin = {
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
client_id = lib.tf.ref "data.keycloak_openid_client.realm_management_client.id";
name = "realm-admin";
};
resource.keycloak_role = {
forgejo_admin = {
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
client_id = lib.tf.ref "keycloak_openid_client.forgejo.id";
name = "Forgejo Admin";
description = "Forgejo's site admin";
};
};
resource.keycloak_openid_user_client_role_protocol_mapper = {
forgejo_role_mapper = {
name = "forgejo_roles_mapper";
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
client_id = lib.tf.ref "keycloak_openid_client.forgejo.id";
claim_name = "forgejo_roles";
claim_value_type = "String";
add_to_id_token = true;
add_to_access_token = true;
multivalued = true;
client_id_for_role_mappings = lib.tf.ref "keycloak_openid_client.forgejo.client_id";
};
};
resource.keycloak_user_roles =
let
superadminRoles = {
exhaustive = false;
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
role_ids = [
(lib.tf.ref "data.keycloak_role.admin.id")
(lib.tf.ref "keycloak_role.forgejo_admin.id")
];
};
in
{
fcuny_roles = superadminRoles // {
user_id = lib.tf.ref "keycloak_user.fcuny.id";
};
};
resource.keycloak_openid_client = {
forgejo = {
realm_id = lib.tf.ref "keycloak_realm.fcuny.id";
client_id = "forgejo";
name = "Forgejo [fcuny.net]";
enabled = true;
access_type = "CONFIDENTIAL";
standard_flow_enabled = true;
oauth2_device_authorization_grant_enabled = true;
base_url = "https://code.fcuny.net";
description = "fcuny.net's Forgejo instance";
direct_access_grants_enabled = true;
exclude_session_state_from_auth_response = false;
service_accounts_enabled = false;
full_scope_allowed = false;
valid_redirect_uris = [
"https://code.fcuny.net/*"
];
web_origins = [
"https://code.fcuny.net"
];
};
};
}
|