#lang racket/base (require racket/cmdline racket/path "private/auth.rkt" "private/config.rkt" "private/database.rkt" "private/storage.rkt" "server.rkt") (provide start start-wiki) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; goal : Start the wiki using explicit server parameters. ; pre : data-dir, port, listen-ip and the remaining values are valid wiki ; configuration values. ; post : Wiki storage has been initialized and PostgreSQL is prepared when configured and the ; HTTP server has been started. ; result : The result returned by start-wiki-server. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (start #:data-dir [data-dir "wiki-data"] #:port [port 8080] #:listen-ip [listen-ip "127.0.0.1"] #:secure-cookie? [secure-cookie? #f] #:site-title [site-title "Racket Wiki"] #:session-seconds [session-seconds (* 12 60 60)] #:language [language "en"]) (define config (make-wiki-config #:data-dir data-dir #:port port #:listen-ip listen-ip #:secure-cookie? secure-cookie? #:site-title site-title #:session-seconds session-seconds #:language language)) (start-wiki config)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; goal : Start the wiki using a configuration. ; pre : config is a wiki-config value. ; post : Wiki storage has been initialized and PostgreSQL is prepared when configured and the ; HTTP server has been started. ; result : The result returned by start-wiki-server. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (start-wiki [config (default-wiki-config)]) (ensure-wiki-data! config) (when (database-settings-exist? config) (initialize-database! config)) (start-wiki-server config)) (module+ main (define config (default-wiki-config)) (define create-admin-user #f) (define create-admin-password #f) (command-line #:program "racket-wiki" #:once-each (("--data") directory "Wiki data directory" (set! config (struct-copy wiki-config config (data-dir (path->complete-path directory))))) (("--port") port "HTTP port" (set! config (struct-copy wiki-config config (port (string->number port))))) (("--listen") listen-ip "Listen IP; use * for all interfaces" (set! config (struct-copy wiki-config config (listen-ip (if (string=? listen-ip "*") #f listen-ip))))) (("--title") title "Site title" (set! config (struct-copy wiki-config config (site-title title)))) (("--language") language "UI language (for example en or nl)" (set! config (struct-copy wiki-config config (language language)))) (("--secure-cookie") "Mark the session cookie Secure (enable behind HTTPS)" (set! config (struct-copy wiki-config config (secure-cookie? #t)))) (("--create-admin") username password "Create or reset an administrator account" (set! create-admin-user username) (set! create-admin-password password))) (ensure-wiki-data! config) (when (database-settings-exist? config) (initialize-database! config)) (cond (create-admin-user (unless (database-ready? config) (error 'racket-wiki "PostgreSQL must be configured through /setup before --create-admin can be used")) (upsert-user! config create-admin-user create-admin-user create-admin-password 'admin 'enabled) (displayln (format "Administrator '~a' is ready." create-admin-user))) (else (start-wiki-server config))))