blob: 9ca2fab634e42918fd831c6b874bfb65d75a5dbd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
(define-module (email-key-rotation gandi)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-9 gnu)
#:use-module (ice-9 optargs)
#:export (<opensmtpd-configuration>
make-openstmpd-configuration
opensmtpd-configuration?
api-key set-api-key
domain set-domain
gandi-livedns-request)
#:declarative? #t)
(define-immutable-record-type <gandi-configuration>
(make-gandi-configuration api-key domain)
gandi-configuration?
(api-key api-key set-api-key)
(domain domain set-domain))
(define* (gandi-livedns-request configuration
path-under-domain
#:key
(headers '())
(body #f)
(http-request http-request))
(with-exception-handler
(lambda (exn)
(raise-exception
(make-exception
(make-exception-with-origin 'gandi-http-request)
(make-exception-with-irritants (list configuration
path-under-domain
headers
body))
(make-exception-with-message
"cannot request Gandi livedns.")
exn)))
(lambda ()
(unless (list? path-under-domain)
(raise-exception
(make-error)
(make-exception-with-irritants (list path-under-domain))
(make-exception-with-message
"the PATH-UNDER-DOMAIN argument must be a list of path items.")))
(let ((uri (build-uri
'https
#:host "api.gandi.net"
#:path
(string-append
"/"
(encode-and-join-uri-path
`("v5"
"livedns"
"domains"
,domain
,@path-under-domain)))))
(headers
`((Authorization
. ,(string-append "ApiKey " (api-key configuration)))
,@headers)))
(http-request uri #:headers headers #:body body)))))
|