112 lines
3.9 KiB
Racket
112 lines
3.9 KiB
Racket
#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))))
|