Add JSONP mode and captcha

JSONP mode is on by default. It will fetch main wiki pages in the
browser, without the server needing to make any requests. To turn it
off, add [feature_json] enabled = false to config.ini.

Captcha is off by default. It is a custom solution and is still
experimental at this stage. If you turn it on, please monitor the logs
to see how it goes! config.ini options are as follows:

[captcha]
enabled = true|false
log = true|false
ip_header = <header name set by your reverse proxy, like x-forwarded-for>
This commit is contained in:
Cadence Ember
2025-11-04 23:06:55 +13:00
parent 443f1eecbc
commit 23a201cc84
11 changed files with 431 additions and 47 deletions

View File

@@ -1,5 +1,7 @@
#lang racket/base
(require web-server/servlet-dispatch
(require racket/splicing
web-server/servlet-dispatch
web-server/safety-limits
"src/config.rkt"
"src/dispatcher-tree.rkt"
"src/reloadable.rkt")
@@ -9,6 +11,9 @@
(reloadable-entry-point->procedure
(make-reloadable-entry-point (quote varname) filename))))
(require-reloadable "src/page-captcha.rkt" page-captcha)
(require-reloadable "src/page-captcha.rkt" page-captcha-image)
(require-reloadable "src/page-captcha.rkt" page-captcha-verify)
(require-reloadable "src/page-category.rkt" page-category)
(require-reloadable "src/page-global-search.rkt" page-global-search)
(require-reloadable "src/page-home.rkt" page-home)
@@ -22,7 +27,9 @@
(require-reloadable "src/page-static-archive.rkt" page-static-archive)
(require-reloadable "src/page-subdomain.rkt" subdomain-dispatcher)
(require-reloadable "src/page-wiki.rkt" page-wiki)
(require-reloadable "src/page-wiki.rkt" page-wiki-with-data)
(require-reloadable "src/page-wiki-offline.rkt" page-wiki-offline)
(require-reloadable "src/page-wiki-jsonp.rkt" page-wiki-jsonp)
(require-reloadable "src/page-file.rkt" page-file)
(reload!)
@@ -34,10 +41,14 @@
(if (config-true? 'debug) "127.0.0.1" #f)
(config-get 'bind_host))
#:port (string->number (config-get 'port))
#:safety-limits (make-safety-limits #:max-request-body-length (* 8 1024 1024))
(λ (quit)
(channel-put ch (lambda () (semaphore-post quit)))
(dispatcher-tree
; order of these does not matter
page-captcha
page-captcha-image
page-captcha-verify
page-category
page-global-search
page-home
@@ -48,7 +59,9 @@
page-set-user-settings
page-static-archive
page-wiki
page-wiki-with-data
page-wiki-offline
page-wiki-jsonp
page-file
redirect-wiki-home
static-dispatcher