Merge pull request #314525 from onny/stalwart-openfirewall

nixos/stalwart-mail: add openFirewall option
This commit is contained in:
Jonas Heinrich 2024-07-02 10:00:46 +02:00 committed by GitHub
commit c0b4d43442
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,12 +9,28 @@ let
dataDir = "/var/lib/stalwart-mail"; dataDir = "/var/lib/stalwart-mail";
useLegacyStorage = versionOlder config.system.stateVersion "24.11"; useLegacyStorage = versionOlder config.system.stateVersion "24.11";
parsePorts = listeners: let
parseAddresses = listeners: lib.flatten(lib.mapAttrsToList (name: value: value.bind) listeners);
splitAddress = addr: strings.splitString ":" addr;
extractPort = addr: strings.toInt(builtins.foldl' (a: b: b) "" (splitAddress addr));
in
builtins.map(address: extractPort address) (parseAddresses listeners);
in { in {
options.services.stalwart-mail = { options.services.stalwart-mail = {
enable = mkEnableOption "the Stalwart all-in-one email server"; enable = mkEnableOption "the Stalwart all-in-one email server";
package = mkPackageOption pkgs "stalwart-mail" { }; package = mkPackageOption pkgs "stalwart-mail" { };
openFirewall = mkOption {
type = types.bool;
default = false;
description = ''
Whether to open TCP firewall ports, which are specified in
{option}`services.stalwart-mail.settings.listener` on all interfaces.
'';
};
settings = mkOption { settings = mkOption {
inherit (configFormat) type; inherit (configFormat) type;
default = { }; default = { };
@ -138,6 +154,11 @@ in {
# Make admin commands available in the shell # Make admin commands available in the shell
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];
networking.firewall = mkIf (cfg.openFirewall
&& (builtins.hasAttr "listener" cfg.settings.server)) {
allowedTCPPorts = parsePorts cfg.settings.server.listener;
};
}; };
meta = { meta = {