From 974c2e05af96ca2681239e41b1281cdb0d22347f Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Tue, 21 Jul 2020 19:36:21 -0400 Subject: feat(web/panettone): Read config from env Read the port and data directory from environment variables, in preparation for deploying as a systemd unit to Whitby Change-Id: I066dced7b7926b6bdc77132d13a4da6c886b20e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1338 Tested-by: BuildkiteCI Reviewed-by: tazjin --- lisp/klatre/klatre.lisp | 6 ++++++ lisp/klatre/package.lisp | 3 ++- web/panettone/src/panettone.lisp | 34 +++++++++++++++++++++++----------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lisp/klatre/klatre.lisp b/lisp/klatre/klatre.lisp index b20d1ab5282a..50cc510502e8 100644 --- a/lisp/klatre/klatre.lisp +++ b/lisp/klatre/klatre.lisp @@ -88,3 +88,9 @@ separated by SEP." (comment (format-dottime (local-time:now))) + +(defun try-parse-integer (str) + "Attempt to parse STR as an integer, returning nil if it is invalid." + (check-type str string) + (handler-case (parse-integer str) + (sb-int:simple-parse-error (_) nil))) diff --git a/lisp/klatre/package.lisp b/lisp/klatre/package.lisp index b5f574fa16c6..2e6340167909 100644 --- a/lisp/klatre/package.lisp +++ b/lisp/klatre/package.lisp @@ -9,4 +9,5 @@ #:chunk-list #:mapconcat ;; String handling - #:+dottime-format+ #:format-dottime)) + #:+dottime-format+ #:format-dottime + #:try-parse-integer)) diff --git a/web/panettone/src/panettone.lisp b/web/panettone/src/panettone.lisp index f42a449b00ae..16ab7cd969d6 100644 --- a/web/panettone/src/panettone.lisp +++ b/web/panettone/src/panettone.lisp @@ -2,6 +2,7 @@ (:use :cl :klatre :easy-routes) (:import-from :defclass-std :defclass/std) (:import-from :alexandria :if-let) + (:shadowing-import-from :alexandria :when-let) (:export :start-panettone :main)) (in-package :panettone) @@ -32,10 +33,10 @@ (defvar *ldap* nil "The ldap connection") -(defun connect-ldap () - ;; TODO(grfn): make this configurable - (setq *ldap* (ldap:new-ldap :host "localhost" - :port 3899))) +(defun connect-ldap (&key + (host "localhost") + (port 389)) + (setq *ldap* (ldap:new-ldap :host host :port port))) (defun ldap-entry->user (entry) (apply @@ -269,20 +270,30 @@ updated issue" (defvar *acceptor* nil "Hunchentoot acceptor for Panettone's web server.") -(defun start-panettone (&key port data-dir) - (connect-ldap) +(defun start-panettone (&key port data-dir + (ldap-host "localhost") + (ldap-port 389)) + (connect-ldap :host ldap-host + :port ldap-port) (initialize-persistence data-dir) (setq *acceptor* (make-instance 'easy-routes:routes-acceptor :port port)) (hunchentoot:start *acceptor*)) +(defun integer-env (var &key default) + (or + (when-let ((str (uiop:getenvp var))) + (try-parse-integer str)) + default)) + (defun main () - ;; TODO(grfn): Read config from env - (let ((port 6161) - (data-dir "/tmp/panettone")) + (let ((port (integer-env "PANETTONE_PORT" :default 6161)) + (ldap-port (integer-env "LDAP_PORT" :default 389)) + (data-dir (or (uiop:getenvp "PANETTONE_DATA_DIR") "/var/lib/panettone"))) (start-panettone :port port - :data-dir data-dir) + :data-dir data-dir + :ldap-port ldap-port) (sb-thread:join-thread (find-if (lambda (th) (string= (sb-thread:thread-name th) @@ -291,5 +302,6 @@ updated issue" (comment (start-panettone :port 6161 - :data-dir "/tmp/panettone") + :data-dir "/tmp/panettone" + :ldap-port 3899) ) -- cgit 1.4.1