controller: Add session manager.
authorRicardo Wurmus <rekado@elephly.net>
Sun, 5 Apr 2020 15:33:02 +0000 (17:33 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Sun, 5 Apr 2020 16:28:44 +0000 (18:28 +0200)
mumi/config.scm.in
mumi/web/controller.scm

index 3daeace80192e9e9e6faad8ea37f283a8e4b04c0..23ca7745246ae8cb665e7cbc920726580824c6e6 100644 (file)
                                        (string-replace dir "@prefix@"
                                                        0 (string-length "${prefix}"))
                                        dir)))))
+           (key-dir      . ,(let ((maybe-dir (getcwd)))
+                              (if (and (getenv "MUMI_UNINSTALLED")
+                                       (file-exists? maybe-dir))
+                                  maybe-dir
+                                  (let ((dir "@localstatedir@/mumi/"))
+                                    (if (string-prefix? "${prefix}" dir)
+                                        (string-replace dir "@prefix@"
+                                                        0 (string-length "${prefix}"))
+                                        dir)))))
            (mail-dir . ,(let ((maybe-dir
                                (string-append (getcwd) "/mails")))
                           (if (and (getenv "MUMI_UNINSTALLED")
index 5487bd0d55620d34955e98bb372744c49feb50e7..11ad7142ed4a9fbb462451edfb085371d993115e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mumi -- Mediocre, uh, mail interface
-;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This program is free software: you can redistribute it and/or
 ;;; modify it under the terms of the GNU Affero General Public License
   #:use-module (srfi srfi-26)
   #:use-module (web request)
   #:use-module (web uri)
+  #:use-module (webutils sessions)
+  #:use-module (gcrypt base64)
+  #:use-module (gcrypt mac)
+  #:use-module (mumi config)
   #:use-module (mumi messages)
   #:use-module (mumi web render)
   #:use-module (mumi web download)
   ;;     (render-html (error-page message))))
   )
 
+(define %session-manager
+  (let ((key-file (string-append (%config 'key-dir) "signing-key")))
+    (if (file-exists? key-file)
+        (make-session-manager (with-input-from-file key-file read))
+        (with-output-to-file key-file
+          (lambda () (write (base64-encode (generate-signing-key))))))))
+
 (define (controller request body)
   (match-lambda
     (('GET)