hackerbase/src/configuration.scm

134 lines
3.7 KiB
Scheme

;;
;; configuraiton.scm
;;
;; Configuration parameters used by various modules.
;;
;; ISC License
;;
;; Copyright 2023 Brmlab, z.s.
;; Dominik Pantůček <dominik.pantucek@trustica.cz>
;;
;; Permission to use, copy, modify, and/or distribute this software
;; for any purpose with or without fee is hereby granted, provided
;; that the above copyright notice and this permission notice appear
;; in all copies.
;;
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;;
(declare (unit configuration))
(module
configuration
(
*etc-hackerbase*
*members-directory*
*apikeys-file*
*checked-file*
*bank-dir*
*email-from*
*summary-mailto*
*doku-base*
load-configuration!
)
(import scheme
(chicken base)
(chicken time)
(chicken time posix)
(chicken file)
(chicken io)
util-parser)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Initial configuration from *etc-hackerbase*
;; Where to load initial configuration from
(define *etc-hackerbase* (make-parameter "/etc/hackerbase"))
;; Needed by multiple modules actually
(define *members-directory* (make-parameter #f))
(define =members-directory= "members")
;; List of bank accounts and Fio API keys (no support for other banks now)
(define *apikeys-file* (make-parameter #f))
(define =apikeys-file= "apikey.ntlm")
;; Old last checket transaction id support
(define *checked-file* (make-parameter #f))
(define =checked-file= "checked.ntlm")
;; Where are the bank CSV files
(define *bank-dir* (make-parameter #f))
;; From address for emails
(define *email-from* (make-parameter #f))
(define =email-from= "Brmlab - Rada <rada@brmlab.cz>")
;; Summary email address
(define *summary-mailto* (make-parameter #f))
(define =summary-mailto= "rada@brmlab.cz")
;; DokuWiki base dir
(define *doku-base* (make-parameter #f))
(define =doku-base= "/var/www")
;; Loads the configuration file and possibly changes the default
;; parameters.
(define (load-configuration!)
(when (file-exists? (*etc-hackerbase*))
(let loop ((lines (read-lines (open-input-file (*etc-hackerbase*)))))
(when (not (null? lines))
(let* ((line (car lines))
(kv (parser-parse-line
(parser-preprocess-line line))))
(when (pair? kv)
(let ((k (car kv))
(v (cdr kv)))
(case k
((members-directory)
(when (not (*members-directory*))
(*members-directory* v)))
((apikeys-file)
(when (not (*apikeys-file*))
(*apikeys-file* v)))
((checked-file)
(when (not (*checked-file*))
(*checked-file* v)))
((bank-dir)
(when (not (*bank-dir*))
(*bank-dir* v)))
((email-from)
(when (not (*email-from*))
(*email-from* v)))
((summary-mailto)
(when (not (*summary-mailto*))
(*summary-mailto* v)))
((dokuwiki)
(*doku-base* v))
)))
(loop (cdr lines))))))
(when (not (*members-directory*))
(*members-directory* =members-directory=))
(when (not (*apikeys-file*))
(*apikeys-file* =apikeys-file=))
(when (not (*checked-file*))
(*checked-file* =checked-file=))
;; No bank-dir - #f default
(when (not (*email-from*))
(*email-from* =email-from=))
(when (not (*summary-mailto*))
(*summary-mailto* =summary-mailto=))
(when (not (*doku-base*))
(*doku-base* =doku-base=)))
)