Initial import
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
#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))))
|
||||
Reference in New Issue
Block a user