Deduplicate the wiki name regex

This commit is contained in:
blankie 2022-10-02 16:44:44 +07:00 committed by Gitea
parent ece762fc5b
commit 57e700cef5
3 changed files with 12 additions and 7 deletions

View file

@ -8,7 +8,8 @@
(prefix-in sequencer: web-server/dispatchers/dispatch-sequencer) (prefix-in sequencer: web-server/dispatchers/dispatch-sequencer)
(prefix-in lift: web-server/dispatchers/dispatch-lift) (prefix-in lift: web-server/dispatchers/dispatch-lift)
(prefix-in filter: web-server/dispatchers/dispatch-filter) (prefix-in filter: web-server/dispatchers/dispatch-filter)
"config.rkt") "config.rkt"
"url-utils.rkt")
(provide (provide
; syntax to make the hashmap from names ; syntax to make the hashmap from names
@ -43,9 +44,9 @@
(pathprocedure:make "/" (hash-ref ds 'page-home)) (pathprocedure:make "/" (hash-ref ds 'page-home))
(pathprocedure:make "/proxy" (hash-ref ds 'page-proxy)) (pathprocedure:make "/proxy" (hash-ref ds 'page-proxy))
(pathprocedure:make "/search" (hash-ref ds 'page-global-search)) (pathprocedure:make "/search" (hash-ref ds 'page-global-search))
(filter:make #px"^/[a-zA-Z0-9-]{3,50}/wiki/Category:.+$" (lift:make (hash-ref ds 'page-category))) (filter:make (pregexp (format "^/~a/wiki/Category:.+$" wikiname-regex)) (lift:make (hash-ref ds 'page-category)))
(filter:make #px"^/[a-zA-Z0-9-]{3,50}/wiki/.+$" (lift:make (hash-ref ds 'page-wiki))) (filter:make (pregexp (format "^/~a/wiki/.+$" wikiname-regex)) (lift:make (hash-ref ds 'page-wiki)))
(filter:make #px"^/[a-zA-Z0-9-]{3,50}/search$" (lift:make (hash-ref ds 'page-search))) (filter:make (pregexp (format "^/~a/search$" wikiname-regex)) (lift:make (hash-ref ds 'page-search)))
(filter:make #px"^/[a-zA-Z0-9-]{3,50}(/(wiki(/)?)?)?$" (lift:make (hash-ref ds 'redirect-wiki-home))) (filter:make (pregexp (format "^/~a(/(wiki(/)?)?)?$" wikiname-regex)) (lift:make (hash-ref ds 'redirect-wiki-home)))
(hash-ref ds 'static-dispatcher) (hash-ref ds 'static-dispatcher)
(lift:make (hash-ref ds 'page-not-found))))))) (lift:make (hash-ref ds 'page-not-found)))))))

View file

@ -143,7 +143,7 @@
(λ (href) (λ (href)
((compose1 ((compose1
(λ (href) (regexp-replace #rx"^(/wiki/.*)" href (format "/~a\\1" wikiname))) (λ (href) (regexp-replace #rx"^(/wiki/.*)" href (format "/~a\\1" wikiname)))
(λ (href) (regexp-replace #px"^https://([a-zA-Z0-9-]{3,50}).fandom.com(/wiki/.*)" href "/\\1\\2"))) (λ (href) (regexp-replace (pregexp (format "^https://(~a)\\.fandom\\.com(/wiki/.*)" wikiname-regex)) href "/\\1\\2")))
href))) href)))
; add noreferrer to a.image ; add noreferrer to a.image
(curry u (curry u

View file

@ -4,6 +4,8 @@
(require/typed "config.rkt" [config-true? (Symbol -> Boolean)]) (require/typed "config.rkt" [config-true? (Symbol -> Boolean)])
(provide (provide
; regex to match wiki names
wikiname-regex
; make a query string from an association list of strings ; make a query string from an association list of strings
params->query params->query
; make a proxied version of a fandom url ; make a proxied version of a fandom url
@ -16,6 +18,8 @@
(module+ test (module+ test
(require "typed-rackunit.rkt")) (require "typed-rackunit.rkt"))
(define wikiname-regex "[a-zA-Z0-9-]{3,50}")
;; https://url.spec.whatwg.org/#urlencoded-serializing ;; https://url.spec.whatwg.org/#urlencoded-serializing
(define urlencoded-set '(#\! #\' #\( #\) #\~ ; urlencoded set (define urlencoded-set '(#\! #\' #\( #\) #\~ ; urlencoded set
@ -60,7 +64,7 @@
(: is-fandom-url? (String -> Boolean)) (: is-fandom-url? (String -> Boolean))
(define (is-fandom-url? url) (define (is-fandom-url? url)
(regexp-match? #px"^https://static.wikia.nocookie.net/|^https://[a-zA-Z0-9-]{3,50}.fandom.com/" url)) (regexp-match? (pregexp (format "^https://static\\.wikia\\.nocookie\\.net/|^https://~a\\.fandom\\.com/" wikiname-regex)) url))
(module+ test (module+ test
(check-true (is-fandom-url? "https://static.wikia.nocookie.net/wikiname/images/2/2f/SomeImage.jpg/revision/latest?cb=20110210094136")) (check-true (is-fandom-url? "https://static.wikia.nocookie.net/wikiname/images/2/2f/SomeImage.jpg/revision/latest?cb=20110210094136"))
(check-true (is-fandom-url? "https://test.fandom.com/wiki/Some_Page")) (check-true (is-fandom-url? "https://test.fandom.com/wiki/Some_Page"))