(define-module (vkraus services dkim-out-proxy) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (guix gexp) #:use-module (guix modules) #:use-module (guix records) #:use-module (gnu packages mail) #:use-module (ice-9 match) #:use-module (ice-9 optargs)) (define-record-type* dkim-out-proxy-configuration make-dkim-out-proxy-configuration dkim-out-proxy-configuration? (dkimproxy dkim-out-proxy-configuration-dkimproxy (default dkimproxy)) (input-port dkim-out-proxy-configuration-input-port (default 11333)) (output-port dkim-out-proxy-configuration-output-port (default 10028)) (domain dkim-out-proxy-configuration-domain) (keyfile dkim-out-proxy-configuration-keyfile (default "/etc/dkim/privkey.pem"))) (export dkim-out-proxy-configuration make-dkim-out-proxy-configuration dkim-out-proxy-configuration? dkim-out-proxy-configuration-dkimproxy dkim-out-proxy-configuration-input-port dkim-out-proxy-configuration-output-port dkim-out-proxy-configuration-domain dkim-out-proxy-configuration-keyfile) (define dkim-out-proxy-shepherd-service (match-lambda (($ dkimproxy input-port output-port domain keyfile) (list (shepherd-service (provision '(dkim-out)) (documentation "Run the dkim out proxy") (requirement '(user-processes loopback syslogd)) (start #~(make-forkexec-constructor (list (string-append #$dkimproxy "/bin/dkimproxy.out") (format #f "--listen=localhost:~a" #$input-port) (format #f "--relay=localhost:~a" #$output-port) (format #f "--domain=~a" #$domain) (format #f "--keyfile=~a" #$keyfile) "--selector=dkim"))) (stop #~(make-kill-destructor))))))) (define-public dkim-out-proxy-service-type (service-type (name 'dkim-out-proxy) (description "Run a DKIM signing proxy.") (extensions (list (service-extension shepherd-root-service-type dkim-out-proxy-shepherd-service)))))