Fix URL-encoding issue with port-numbers

:80 and :443 would be redundantly added to HTTP
and HTTPS URLs, respectively.
This commit is contained in:
Jaidyn Ann 2024-05-28 23:12:36 -05:00
parent 36c8b2a87b
commit 0a26e42b6f

View File

@ -151,10 +151,10 @@ already set)."
https://invalid.tld/dad alive.jpg https://invalid.tld/dad%20alive.jpg" https://invalid.tld/dad alive.jpg https://invalid.tld/dad%20alive.jpg"
(let ((uri (quri:uri uri))) (let ((uri (quri:uri uri)))
(format nil "~@[~A://~]~A~@[:~A~]~A" (format nil "~@[~A://~]~A~@[:~A~]~A"
(quri:uri-scheme uri) (quri:uri-scheme uri)
(quri:uri-host uri) (quri:uri-host uri)
(quri:uri-port uri) (uri-explicit-port uri)
(url-encode-path (quri:uri-path uri))))) (url-encode-path (quri:uri-path uri)))))
;; string → string ;; string → string
(defun url-encode-path (path) (defun url-encode-path (path)
@ -166,3 +166,15 @@ already set)."
(lambda (a b) (lambda (a b)
(format nil "~A/~A" a b)) (format nil "~A/~A" a b))
(mapcar #'quri:url-encode path-parts)))) (mapcar #'quri:url-encode path-parts))))
;; quri-uri → number
(defun uri-explicit-port (uri)
"Given a HTTP/HTTPS URI, return a port-number if it isnt implied by the protocol.
That is, 443 is implied by HTTPS, so nil is returned; but 998 wouldnt be implied."
(let ((scheme (quri:uri-scheme uri))
(port (quri:uri-port uri)))
(unless (or (and (equal scheme "https")
(eq port 443))
(and (equal scheme "http")
(eq port 80)))
port)))