vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / dmarc.nix
blob3674fab1e4f83bc344f687f5bc589ea0ef01c648
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.dmarc;
5   inherit (lib) mkOption types optionalString;
7   json = builtins.toJSON {
8     inherit (cfg) folders port;
9     listen_addr = cfg.listenAddress;
10     storage_path = "$STATE_DIRECTORY";
11     imap = (builtins.removeAttrs cfg.imap [ "passwordFile" ]) // { password = "$IMAP_PASSWORD"; use_ssl = true; };
12     poll_interval_seconds = cfg.pollIntervalSeconds;
13     deduplication_max_seconds = cfg.deduplicationMaxSeconds;
14     logging = {
15       version = 1;
16       disable_existing_loggers = false;
17     };
18   };
19 in {
20   port = 9797;
21   extraOpts = {
22     imap = {
23       host = mkOption {
24         type = types.str;
25         default = "localhost";
26         description = ''
27           Hostname of IMAP server to connect to.
28         '';
29       };
30       port = mkOption {
31         type = types.port;
32         default = 993;
33         description = ''
34           Port of the IMAP server to connect to.
35         '';
36       };
37       username = mkOption {
38         type = types.str;
39         example = "postmaster@example.org";
40         description = ''
41           Login username for the IMAP connection.
42         '';
43       };
44       passwordFile = mkOption {
45         type = types.str;
46         example = "/run/secrets/dovecot_pw";
47         description = ''
48           File containing the login password for the IMAP connection.
49         '';
50       };
51     };
52     folders = {
53       inbox = mkOption {
54         type = types.str;
55         default = "INBOX";
56         description = ''
57           IMAP mailbox that is checked for incoming DMARC aggregate reports
58         '';
59       };
60       done = mkOption {
61         type = types.str;
62         default = "Archive";
63         description = ''
64           IMAP mailbox that successfully processed reports are moved to.
65         '';
66       };
67       error = mkOption {
68         type = types.str;
69         default = "Invalid";
70         description = ''
71           IMAP mailbox that emails are moved to that could not be processed.
72         '';
73       };
74     };
75     pollIntervalSeconds = mkOption {
76       type = types.ints.unsigned;
77       default = 60;
78       description = ''
79         How often to poll the IMAP server in seconds.
80       '';
81     };
82     deduplicationMaxSeconds = mkOption {
83       type = types.ints.unsigned;
84       default = 604800;
85       defaultText = "7 days (in seconds)";
86       description = ''
87         How long individual report IDs will be remembered to avoid
88         counting double delivered reports twice.
89       '';
90     };
91     debug = mkOption {
92       type = types.bool;
93       default = false;
94       description = ''
95         Whether to declare enable `--debug`.
96       '';
97     };
98   };
99   serviceOpts = {
100     path = with pkgs; [ envsubst coreutils ];
101     serviceConfig = {
102       StateDirectory = "prometheus-dmarc-exporter";
103       WorkingDirectory = "/var/lib/prometheus-dmarc-exporter";
104       ExecStart = "${pkgs.writeShellScript "setup-cfg" ''
105         export IMAP_PASSWORD="$(<${cfg.imap.passwordFile})"
106         envsubst \
107           -i ${pkgs.writeText "dmarc-exporter.json.template" json} \
108           -o ''${STATE_DIRECTORY}/dmarc-exporter.json
110         exec ${pkgs.dmarc-metrics-exporter}/bin/dmarc-metrics-exporter \
111           --configuration /var/lib/prometheus-dmarc-exporter/dmarc-exporter.json \
112           ${optionalString cfg.debug "--debug"}
113       ''}";
114     };
115   };