auth: add only roundcube kanidm service account to idm_mail_servers
This commit is contained in:
@@ -23,7 +23,7 @@ let
|
|||||||
chmod 640 "${secretFP}"
|
chmod 640 "${secretFP}"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
mkKanidmExecStartPostScript = oauthClientID: linuxGroup:
|
mkKanidmExecStartPostScript = oauthClientID: linuxGroup: isMailserver:
|
||||||
let
|
let
|
||||||
kanidmServiceAccountName = "sp.${oauthClientID}.service-account";
|
kanidmServiceAccountName = "sp.${oauthClientID}.service-account";
|
||||||
kanidmServiceAccountTokenName = "${oauthClientID}-service-account-token";
|
kanidmServiceAccountTokenName = "${oauthClientID}-service-account-token";
|
||||||
@@ -32,7 +32,7 @@ let
|
|||||||
in
|
in
|
||||||
pkgs.writeShellScript
|
pkgs.writeShellScript
|
||||||
"${oauthClientID}-kanidm-ExecStartPost-script.sh"
|
"${oauthClientID}-kanidm-ExecStartPost-script.sh"
|
||||||
''
|
(''
|
||||||
export HOME=$RUNTIME_DIRECTORY/client_home
|
export HOME=$RUNTIME_DIRECTORY/client_home
|
||||||
readonly KANIDM="${pkgs.kanidm}/bin/kanidm"
|
readonly KANIDM="${pkgs.kanidm}/bin/kanidm"
|
||||||
|
|
||||||
@@ -54,9 +54,6 @@ let
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# add Kanidm service account to `idm_mail_servers` group
|
|
||||||
$KANIDM group add-members idm_mail_servers "${kanidmServiceAccountName}"
|
|
||||||
|
|
||||||
# create a new read-only token for kanidm
|
# create a new read-only token for kanidm
|
||||||
if ! KANIDM_SERVICE_ACCOUNT_TOKEN_JSON="$($KANIDM service-account api-token generate --name idm_admin "${kanidmServiceAccountName}" "${kanidmServiceAccountTokenName}" --output json)"
|
if ! KANIDM_SERVICE_ACCOUNT_TOKEN_JSON="$($KANIDM service-account api-token generate --name idm_admin "${kanidmServiceAccountName}" "${kanidmServiceAccountTokenName}" --output json)"
|
||||||
then
|
then
|
||||||
@@ -76,7 +73,12 @@ let
|
|||||||
echo "error: cannot write token to \"${kanidmServiceAccountTokenFP}\""
|
echo "error: cannot write token to \"${kanidmServiceAccountTokenFP}\""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
'';
|
|
||||||
|
''
|
||||||
|
+ lib.strings.optionalString isMailserver ''
|
||||||
|
# add Kanidm service account to `idm_mail_servers` group
|
||||||
|
$KANIDM group add-members idm_mail_servers "${kanidmServiceAccountName}"
|
||||||
|
'');
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.selfprivacy.auth = {
|
options.selfprivacy.auth = {
|
||||||
@@ -211,6 +213,13 @@ in
|
|||||||
'';
|
'';
|
||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
|
isMailserver = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether client is a mailserver.
|
||||||
|
'';
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -284,7 +293,8 @@ in
|
|||||||
serviceConfig =
|
serviceConfig =
|
||||||
lib.mkMerge (lib.forEach
|
lib.mkMerge (lib.forEach
|
||||||
clientsAttrsList
|
clientsAttrsList
|
||||||
({ clientID, isTokenNeeded, linuxGroupOfClient, ... }: {
|
({ clientID, isTokenNeeded, linuxGroupOfClient, isMailserver, ... }:
|
||||||
|
{
|
||||||
ExecStartPre = [
|
ExecStartPre = [
|
||||||
# "-" prefix means to ignore exit code of prefixed script
|
# "-" prefix means to ignore exit code of prefixed script
|
||||||
("-" + mkKanidmExecStartPreScript clientID linuxGroupOfClient)
|
("-" + mkKanidmExecStartPreScript clientID linuxGroupOfClient)
|
||||||
@@ -292,7 +302,10 @@ in
|
|||||||
ExecStartPost = lib.mkIf isTokenNeeded
|
ExecStartPost = lib.mkIf isTokenNeeded
|
||||||
(lib.mkAfter [
|
(lib.mkAfter [
|
||||||
("-" +
|
("-" +
|
||||||
mkKanidmExecStartPostScript clientID linuxGroupOfClient)
|
mkKanidmExecStartPostScript
|
||||||
|
clientID
|
||||||
|
linuxGroupOfClient
|
||||||
|
isMailserver)
|
||||||
]);
|
]);
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
@@ -123,6 +123,7 @@ in
|
|||||||
displayName = "Roundcube";
|
displayName = "Roundcube";
|
||||||
subdomain = cfg.subdomain;
|
subdomain = cfg.subdomain;
|
||||||
isTokenNeeded = false;
|
isTokenNeeded = false;
|
||||||
|
isMailserver = true;
|
||||||
originUrl = "https://${cfg.subdomain}.${domain}/index.php/login/oauth";
|
originUrl = "https://${cfg.subdomain}.${domain}/index.php/login/oauth";
|
||||||
originLanding = "https://${cfg.subdomain}.${domain}/";
|
originLanding = "https://${cfg.subdomain}.${domain}/";
|
||||||
useShortPreferredUsername = false;
|
useShortPreferredUsername = false;
|
||||||
|
Reference in New Issue
Block a user