summaryrefslogtreecommitdiff
path: root/guix/vkraus/services/disfluid.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/vkraus/services/disfluid.scm')
-rw-r--r--guix/vkraus/services/disfluid.scm578
1 files changed, 276 insertions, 302 deletions
diff --git a/guix/vkraus/services/disfluid.scm b/guix/vkraus/services/disfluid.scm
index bf7078c..fdc9443 100644
--- a/guix/vkraus/services/disfluid.scm
+++ b/guix/vkraus/services/disfluid.scm
@@ -37,8 +37,7 @@
(complete-corresponding-source
disfluid-issuer-configuration-complete-corresponding-source)
(issuer disfluid-issuer-configuration-issuer)
- (key-file disfluid-issuer-configuration-key-file
- (default "/var/lib/disfluid/issuer/key.jwk"))
+ (key-file disfluid-issuer-configuration-key-file)
(subject disfluid-issuer-configuration-subject)
(encrypted-password-file disfluid-issuer-configuration-encrypted-password-file)
(jwks-uri disfluid-issuer-configuration-jwks-uri)
@@ -107,8 +106,7 @@
(complete-corresponding-source
disfluid-server-configuration-complete-corresponding-source)
(server-name disfluid-server-configuration-server-name)
- (key-file disfluid-server-configuration-key-file
- (default "/var/lib/disfluid/server/key.jwk"))
+ (key-file disfluid-server-configuration-key-file)
(subject disfluid-server-configuration-subject)
(encrypted-password-file disfluid-server-configuration-encrypted-password-file)
(jwks-uri disfluid-server-configuration-jwks-uri)
@@ -183,242 +181,234 @@
disfluid-server-configuration-port
disfluid-server-configuration-extra-options)
-(define disfluid-issuer-shepherd-service
+(define configuration->shepherd-service
(match-lambda
- (($ <disfluid-issuer-configuration>
- disfluid ccs issuer key-file subject encrypted-password-file jwks-uri
- authorization-endpoint-uri token-endpoint-uri port
- extra-options)
- (with-imported-modules
- (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- (list (shepherd-service
- (provision '(disfluid-issuer))
- (documentation "Run the Solid identity provider.")
- (requirement '(user-processes))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start
- #~(begin
- (let* ((user (getpwnam "disfluid"))
- (prepare-directory
- (lambda (dir)
- (mkdir-p dir)
- (chown dir (passwd:uid user) (passwd:gid user))
- (chmod dir #o700))))
- (prepare-directory "/var/log/disfluid")
- (prepare-directory "/var/lib/disfluid")
- (prepare-directory "/var/cache/disfluid"))
- (make-forkexec-constructor
- (list
- (string-append #$disfluid "/bin/disfluid")
- "identity-provider"
- "--complete-corresponding-source" #$ccs
- "--server-name" #$issuer
- "--key-file" #$key-file
- "--subject" #$subject
- "--encrypted-password-from-file" #$encrypted-password-file
- "--jwks-uri" #$jwks-uri
- "--authorization-endpoint-uri" #$authorization-endpoint-uri
- "--token-endpoint-uri" #$token-endpoint-uri
- "--port" (with-output-to-string (lambda () (display #$port)))
- "--log-file" "issuer.log"
- "--error-file" "issuer.err"
- #$@extra-options)
- #:user "disfluid"
- #:group "disfluid"
- #:directory "/var/log/disfluid"
- #:environment-variables
- `("XDG_DATA_HOME=/var/lib"
- "XDG_CACHE_HOME=/var/cache"
- "LANG=C"))))
- (stop #~(make-kill-destructor))))))))
-
-(define disfluid-reverse-proxy-shepherd-service
- (match-lambda
- (($ <disfluid-reverse-proxy-configuration>
- disfluid ccs port inbound-uri outbound-uri header
- extra-options)
- (with-imported-modules
- (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- (list (shepherd-service
- (provision '(disfluid-reverse-proxy))
- (documentation "Run a proxy to authenticate with Solid.")
- (requirement '(user-processes))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start
- #~(begin
- (let* ((user (getpwnam "disfluid"))
- (prepare-directory
- (lambda (dir)
- (mkdir-p dir)
- (chown dir (passwd:uid user) (passwd:gid user))
- (chmod dir #o700))))
- (prepare-directory "/var/log/disfluid")
- (prepare-directory "/var/lib/disfluid")
- (prepare-directory "/var/cache/disfluid"))
- (make-forkexec-constructor
- (list
- (string-append #$disfluid "/bin/disfluid")
- "reverse-proxy"
- "--complete-corresponding-source" #$ccs
- "--port" (with-output-to-string (lambda () (display #$port)))
- "--server-name" #$inbound-uri
- "--backend-uri" #$outbound-uri
- "--header" #$header
- "--log-file" "reverse-proxy.log"
- "--error-file" "reverse-proxy.err"
- #$@extra-options)
- #:user "disfluid"
- #:group "disfluid"
- #:directory "/var/log/disfluid"
- #:environment-variables
- `("XDG_DATA_HOME=/var/lib"
- "XDG_CACHE_HOME=/var/cache"
- "LANG=C"))))
- (stop #~(make-kill-destructor))))))))
-
-(define disfluid-hello-shepherd-service
- (match-lambda
- (($ <disfluid-hello-configuration>
- disfluid ccs port extra-options)
- (with-imported-modules
- (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- (list (shepherd-service
- (provision '(disfluid-hello))
- (documentation "Run a demonstration Solid server.")
- (requirement '(user-processes))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start
- #~(begin
- (let* ((user (getpwnam "disfluid"))
- (prepare-directory
- (lambda (dir)
- (mkdir-p dir)
- (chown dir (passwd:uid user) (passwd:gid user))
- (chmod dir #o700))))
- (prepare-directory "/var/log/disfluid")
- (prepare-directory "/var/lib/disfluid")
- (prepare-directory "/var/cache/disfluid"))
- (make-forkexec-constructor
- (list
- (string-append #$disfluid "/bin/disfluid-hello")
- "--complete-corresponding-source" #$ccs
- "--port" (with-output-to-string (lambda () (display #$port)))
- "--log-file" "hello.log"
- "--error-file" "hello.err"
- #$@extra-options)
- #:user "disfluid"
- #:group "disfluid"
- #:directory "/var/log/disfluid"
- #:environment-variables
- `("XDG_DATA_HOME=/var/lib"
- "XDG_CACHE_HOME=/var/cache"
- "LANG=C"))))
- (stop #~(make-kill-destructor))))))))
-
-(define disfluid-client-service-shepherd-service
- (match-lambda
- (($ <disfluid-client-service-configuration>
- disfluid ccs client-id redirect-uri client-name client-uri port
- extra-options)
- (with-imported-modules
- (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- (list (shepherd-service
- (provision '(disfluid-client-service))
- (documentation "Run a server for a Solid application.")
- (requirement '(user-processes))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start
- #~(begin
- (let* ((user (getpwnam "disfluid"))
- (prepare-directory
- (lambda (dir)
- (mkdir-p dir)
- (chown dir (passwd:uid user) (passwd:gid user))
- (chmod dir #o700))))
- (prepare-directory "/var/log/disfluid"))
- (make-forkexec-constructor
- (list
- (string-append #$disfluid "/bin/disfluid")
- "client-service"
- "--complete-corresponding-source" #$ccs
- "--client-id" #$client-id
- "--redirect-uri" #$redirect-uri
- "--client-name" #$client-name
- "--client-uri" #$client-uri
- "--port" (with-output-to-string (lambda () (display #$port)))
- "--log-file" "client-service.log"
- "--error-file" "client-service.err"
- #$@extra-options)
- #:user "disfluid"
- #:group "disfluid"
- #:directory "/var/log/disfluid"
- #:environment-variables
- `("LANG=C"))))
- (stop #~(make-kill-destructor))))))))
-
-(define disfluid-server-shepherd-service
- (match-lambda
- (($ <disfluid-server-configuration>
- disfluid ccs server-name key-file subject encrypted-password-file jwks-uri
- authorization-endpoint-uri token-endpoint-uri port
- extra-options)
- (with-imported-modules
- (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- (list (shepherd-service
- (provision '(disfluid-server))
- (documentation "Run the full Solid server.")
- (requirement '(user-processes))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start
- #~(begin
- (let* ((user (getpwnam "disfluid"))
- (prepare-directory
- (lambda (dir)
- (mkdir-p dir)
- (chown dir (passwd:uid user) (passwd:gid user))
- (chmod dir #o700))))
- (prepare-directory "/var/log/disfluid")
- (prepare-directory "/var/lib/disfluid")
- (prepare-directory "/var/cache/disfluid"))
- (make-forkexec-constructor
- (list
- (string-append #$disfluid "/bin/disfluid")
- "server"
- "--complete-corresponding-source" #$ccs
- "--server-name" #$server-name
- "--key-file" #$key-file
- "--subject" #$subject
- "--encrypted-password-from-file" #$encrypted-password-file
- "--jwks-uri" #$jwks-uri
- "--authorization-endpoint-uri" #$authorization-endpoint-uri
- "--token-endpoint-uri" #$token-endpoint-uri
- "--port" (with-output-to-string (lambda () (display #$port)))
- "--log-file" "server.log"
- "--error-file" "server.err"
- #$@extra-options)
- #:user "disfluid"
- #:group "disfluid"
- #:directory "/var/log/disfluid"
- #:environment-variables
- `("XDG_DATA_HOME=/var/lib"
- "XDG_CACHE_HOME=/var/cache"
- "LANG=C"))))
- (stop #~(make-kill-destructor))))))))
+ ((id . ($ <disfluid-issuer-configuration>
+ disfluid ccs issuer key-file subject encrypted-password-file jwks-uri
+ authorization-endpoint-uri token-endpoint-uri port extra-options))
+ `(,(shepherd-service
+ (provision (list (string->symbol (format #f "disfluid-~a" id))))
+ (documentation (format #f "Run a Solid identity provider (~a)" id))
+ (requirement '(user-processes))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start
+ (with-imported-modules
+ (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ #~(begin
+ (let* ((user (getpwnam "disfluid"))
+ (prepare-directory
+ (lambda (dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700))))
+ (prepare-directory "/var/log/disfluid")
+ (prepare-directory #$(format #f "/var/lib/disfluid/~a" id))
+ (prepare-directory #$(format #f "/var/cache/disfluid/~a" id)))
+ (make-forkexec-constructor
+ (list
+ (string-append #$disfluid "/bin/disfluid")
+ "identity-provider"
+ "--complete-corresponding-source" #$ccs
+ "--server-name" #$issuer
+ "--key-file" #$key-file
+ "--subject" #$subject
+ "--encrypted-password-from-file" #$encrypted-password-file
+ "--jwks-uri" #$jwks-uri
+ "--authorization-endpoint-uri" #$authorization-endpoint-uri
+ "--token-endpoint-uri" #$token-endpoint-uri
+ "--port" (with-output-to-string (lambda () (display #$port)))
+ "--log-file" #$(format #f "issuer-~a.log" id)
+ "--error-file" #$(format #f "issuer-~a.err" id)
+ #$@extra-options)
+ #:user "disfluid"
+ #:group "disfluid"
+ #:directory "/var/log/disfluid"
+ #:environment-variables
+ '(#$(format #f "XDG_DATA_HOME=/var/lib/disfluid/~a" id)
+ #$(format #f "XDG_CACHE_HOME=/var/cache/disfluid/~a" id)
+ "LANG=C")))))
+ (stop #~(make-kill-destructor)))))
+ ((id . ($ <disfluid-reverse-proxy-configuration>
+ disfluid ccs port inbound-uri outbound-uri header extra-options))
+ `(,(shepherd-service
+ (provision (list (string->symbol (format #f "disfluid-~a" id))))
+ (documentation (format #f "Run a Solid reverse proxy (~a)" id))
+ (requirement '(user-processes))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start
+ (with-imported-modules
+ (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ #~(begin
+ (let* ((user (getpwnam "disfluid"))
+ (prepare-directory
+ (lambda (dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700))))
+ (prepare-directory "/var/log/disfluid")
+ (prepare-directory #$(format #f "/var/lib/disfluid/~a" id))
+ (prepare-directory #$(format #f "/var/cache/disfluid/~a" id)))
+ (make-forkexec-constructor
+ (list
+ (string-append #$disfluid "/bin/disfluid")
+ "reverse-proxy"
+ "--complete-corresponding-source" #$ccs
+ "--port" (with-output-to-string (lambda () (display #$port)))
+ "--server-name" #$inbound-uri
+ "--backend-uri" #$outbound-uri
+ "--header" #$header
+ "--log-file" #$(format #f "reverse-proxy-~a.log" id)
+ "--error-file" #$(format #f "reverse-proxy-~a.err" id)
+ #$@extra-options)
+ #:user "disfluid"
+ #:group "disfluid"
+ #:directory "/var/log/disfluid"
+ #:environment-variables
+ '(#$(format #f "XDG_DATA_HOME=/var/lib/disfluid/~a" id)
+ #$(format #f "XDG_CACHE_HOME=/var/cache/disfluid/~a" id)
+ "LANG=C")))))
+ (stop #~(make-kill-destructor)))))
+ ((id . ($ <disfluid-hello-configuration>
+ disfluid ccs port extra-options))
+ `(,(shepherd-service
+ (provision (list (string->symbol (format #f "disfluid-~a" id))))
+ (documentation (format #f "Run a demonstration Solid server (~a)" id))
+ (requirement '(user-processes))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start
+ (with-imported-modules
+ (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ #~(begin
+ (let* ((user (getpwnam "disfluid"))
+ (prepare-directory
+ (lambda (dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700))))
+ (prepare-directory "/var/log/disfluid")
+ (prepare-directory #$(format #f "/var/lib/disfluid/~a" id))
+ (prepare-directory #$(format #f "/var/cache/disfluid/~a" id)))
+ (make-forkexec-constructor
+ (list
+ (string-append #$disfluid "/bin/disfluid-hello")
+ "--complete-corresponding-source" #$ccs
+ "--port" (with-output-to-string (lambda () (display #$port)))
+ "--log-file" #$(format #f "hello-~a.log" id)
+ "--error-file" #$(format #f "hello-~a.err" id)
+ #$@extra-options)
+ #:user "disfluid"
+ #:group "disfluid"
+ #:directory "/var/log/disfluid"
+ #:environment-variables
+ '(#$(format #f "XDG_DATA_HOME=/var/lib/disfluid/~a" id)
+ #$(format #f "XDG_CACHE_HOME=/var/cache/disfluid/~a" id)
+ "LANG=C")))))
+ (stop #~(make-kill-destructor)))))
+ ((id . ($ <disfluid-client-service-configuration>
+ disfluid ccs client-id redirect-uri client-name client-uri port
+ extra-options))
+ `(,(shepherd-service
+ (provision (list (string->symbol (format #f "disfluid-~a" id))))
+ (documentation (format #f "Serve the public page for an application (~a)" id))
+ (requirement '(user-processes))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start
+ (with-imported-modules
+ (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ #~(begin
+ (let* ((user (getpwnam "disfluid"))
+ (prepare-directory
+ (lambda (dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700))))
+ (prepare-directory "/var/log/disfluid")
+ (prepare-directory #$(format #f "/var/lib/disfluid/~a" id))
+ (prepare-directory #$(format #f "/var/cache/disfluid/~a" id)))
+ (make-forkexec-constructor
+ (list
+ (string-append #$disfluid "/bin/disfluid")
+ "client-service"
+ "--complete-corresponding-source" #$ccs
+ "--client-id" #$client-id
+ "--redirect-uri" #$redirect-uri
+ "--client-name" #$client-name
+ "--client-uri" #$client-uri
+ "--port" (with-output-to-string (lambda () (display #$port)))
+ "--log-file" #$(format #f "client-service-~a.log" id)
+ "--error-file" #$(format #f "client-service-~a.err" id)
+ #$@extra-options)
+ #:user "disfluid"
+ #:group "disfluid"
+ #:directory "/var/log/disfluid"
+ #:environment-variables
+ '(#$(format #f "XDG_DATA_HOME=/var/lib/disfluid/~a" id)
+ #$(format #f "XDG_CACHE_HOME=/var/cache/disfluid/~a" id)
+ "LANG=C")))))
+ (stop #~(make-kill-destructor)))))
+ ((id . ($ <disfluid-server-configuration>
+ disfluid ccs server-name key-file subject encrypted-password-file jwks-uri
+ authorization-endpoint-uri token-endpoint-uri port
+ extra-options))
+ `(,(shepherd-service
+ (provision (list (string->symbol (format #f "disfluid-~a" id))))
+ (documentation (format #f "Run a full server (~a)" id))
+ (requirement '(user-processes))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start
+ (with-imported-modules
+ (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ #~(begin
+ (let* ((user (getpwnam "disfluid"))
+ (prepare-directory
+ (lambda (dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700))))
+ (prepare-directory "/var/log/disfluid")
+ (prepare-directory #$(format #f "/var/lib/disfluid/~a" id))
+ (prepare-directory #$(format #f "/var/cache/disfluid/~a" id)))
+ (make-forkexec-constructor
+ (list
+ (string-append #$disfluid "/bin/disfluid")
+ "server"
+ "--complete-corresponding-source" #$ccs
+ "--server-name" #$server-name
+ "--key-file" #$key-file
+ "--subject" #$subject
+ "--encrypted-password-from-file" #$encrypted-password-file
+ "--jwks-uri" #$jwks-uri
+ "--authorization-endpoint-uri" #$authorization-endpoint-uri
+ "--token-endpoint-uri" #$token-endpoint-uri
+ "--port" (with-output-to-string (lambda () (display #$port)))
+ "--log-file" #$(format #f "server-~a.log" id)
+ "--error-file" #$(format #f "server-~a.err" id)
+ #$@extra-options)
+ #:user "disfluid"
+ #:group "disfluid"
+ #:directory "/var/log/disfluid"
+ #:environment-variables
+ '(#$(format #f "XDG_DATA_HOME=/var/lib/disfluid/~a" id)
+ #$(format #f "XDG_CACHE_HOME=/var/cache/disfluid/~a" id)
+ "LANG=C")))))
+ (stop #~(make-kill-destructor)))))
+ ((items ...)
+ (apply append (map configuration->shepherd-service items)))))
(define %disfluid-accounts
(list (user-group (name "disfluid")
@@ -427,83 +417,67 @@
(name "disfluid")
(group "disfluid")
(system? #t)
- (comment "The user that runs the disfluid issuer and resource server.")
+ (comment "The user that runs the disfluid servers.")
(home-directory "/var/empty")
(shell (file-append shadow "/sbin/nologin")))))
-(define (%disfluid-log-rotation file)
- (list (log-rotation
+(define configuration->log-rotation
+ (match-lambda
+ ((id . ($ <disfluid-issuer-configuration>))
+ `(,(log-rotation
(frequency 'daily)
(files
- (map (lambda (ext) (string-append "/var/log/disfluid/" file "." ext))
- '("log" "err")))
- (options '("sharedscripts"
- "storedir /var/log/disfluid")))))
-
-(define-public disfluid-issuer-service-type
- (service-type
- (name 'disfluid-issuer)
- (extensions
- (list
- (service-extension account-service-type
- (const %disfluid-accounts))
- (service-extension rottlog-service-type
- (const (%disfluid-log-rotation "issuer")))
- (service-extension
- shepherd-root-service-type
- disfluid-issuer-shepherd-service)))))
-
-(define-public disfluid-reverse-proxy-service-type
- (service-type
- (name 'disfluid-reverse-proxy)
- (extensions
- (list
- (service-extension account-service-type
- (const %disfluid-accounts))
- (service-extension rottlog-service-type
- (const (%disfluid-log-rotation "reverse-proxy")))
- (service-extension
- shepherd-root-service-type
- disfluid-reverse-proxy-shepherd-service)))))
-
-(define-public disfluid-hello-service-type
- (service-type
- (name 'disfluid-hello)
- (extensions
- (list
- (service-extension account-service-type
- (const %disfluid-accounts))
- (service-extension rottlog-service-type
- (const (%disfluid-log-rotation "hello")))
- (service-extension
- shepherd-root-service-type
- disfluid-hello-shepherd-service)))))
-
-(define-public disfluid-client-service-service-type
- (service-type
- (name 'disfluid-client-service)
- (extensions
- (list
- (service-extension account-service-type
- (const %disfluid-accounts))
- (service-extension rottlog-service-type
- (const (%disfluid-log-rotation "client-service")))
- (service-extension
- shepherd-root-service-type
- disfluid-client-service-shepherd-service)))))
+ (map (lambda (ext)
+ (format #f "/var/log/disfluid/issuer-~a.~a" id ext))
+ '("log err")))
+ (options '("sharedscripts" "storedir /var/log/disfluid")))))
+ ((id . ($ <disfluid-reverse-proxy-configuration>))
+ `(,(log-rotation
+ (frequency 'daily)
+ (files
+ (map (lambda (ext)
+ (format #f "/var/log/disfluid/reverse-proxy-~a.~a" id ext))
+ '("log err")))
+ (options '("sharedscripts" "storedir /var/log/disfluid")))))
+ ((id . ($ <disfluid-hello-configuration>))
+ `(,(log-rotation
+ (frequency 'daily)
+ (files
+ (map (lambda (ext)
+ (format #f "/var/log/disfluid/hello-~a.~a" id ext))
+ '("log err")))
+ (options '("sharedscripts" "storedir /var/log/disfluid")))))
+ ((id . ($ <disfluid-client-service-configuration>))
+ `(,(log-rotation
+ (frequency 'daily)
+ (files
+ (map (lambda (ext)
+ (format #f "/var/log/disfluid/client-service-~a.~a" id ext))
+ '("log err")))
+ (options '("sharedscripts" "storedir /var/log/disfluid")))))
+ ((id . ($ <disfluid-server-configuration>))
+ `(,(log-rotation
+ (frequency 'daily)
+ (files
+ (map (lambda (ext)
+ (format #f "/var/log/disfluid/server-~a.~a" id ext))
+ '("log err")))
+ (options '("sharedscripts" "storedir /var/log/disfluid")))))
+ ((items ...)
+ (apply append (map configuration->log-rotation items)))))
-(define-public disfluid-server-service-type
+(define-public disfluid-service-type
(service-type
- (name 'disfluid-server)
+ (name 'disfluid)
(extensions
(list
(service-extension account-service-type
(const %disfluid-accounts))
(service-extension rottlog-service-type
- (const (%disfluid-log-rotation "server")))
+ configuration->log-rotation)
(service-extension
shepherd-root-service-type
- disfluid-server-shepherd-service)))))
+ configuration->shepherd-service)))))
(define-public disfluid-website
(nginx-server-configuration