fix(web/panettone): Don't add extra padding when already padded
Because of math being upsetting, we were adding 4 padding characters to an already-properly-padded base64 string, which broke tazjin. This also breaks this function out into panettone.util, and adds a test for it. Change-Id: I7bc8a440ad9d0917272dd9f2e341081ea14693da Reviewed-on: https://cl.tvl.fyi/c/depot/+/5782 Autosubmit: grfn <grfn@gws.fyi> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
parent
b39ca017c0
commit
1fbed8e317
5 changed files with 20 additions and 8 deletions
|
@ -42,6 +42,7 @@ depot.nix.buildLisp.program {
|
||||||
./test/package.lisp
|
./test/package.lisp
|
||||||
./test/model_test.lisp
|
./test/model_test.lisp
|
||||||
./test/inline-markdown_test.lisp
|
./test/inline-markdown_test.lisp
|
||||||
|
./test/util_test.lisp
|
||||||
];
|
];
|
||||||
|
|
||||||
expression = "(fiveam:run!)";
|
expression = "(fiveam:run!)";
|
||||||
|
|
|
@ -78,12 +78,6 @@ the user, however email addresses are temporarily not available."
|
||||||
;; TODO(tazjin): Figure out actual displayName mapping in tokens.
|
;; TODO(tazjin): Figure out actual displayName mapping in tokens.
|
||||||
:displayname username)))
|
:displayname username)))
|
||||||
|
|
||||||
(defun add-missing-base64-padding (s)
|
|
||||||
"Add any missing padding characters to the (un-padded) base64 string `S', such
|
|
||||||
that it can be successfully decoded by the `BASE64' package"
|
|
||||||
;; I apologize
|
|
||||||
(format nil "~A~v@{~A~:*~}" s (- 4 (mod (length s) 4)) "="))
|
|
||||||
|
|
||||||
(defun fetch-token (code)
|
(defun fetch-token (code)
|
||||||
"Fetches the access token on completion of user authentication through
|
"Fetches the access token on completion of user authentication through
|
||||||
the OAuth2 endpoint and returns the resulting user object."
|
the OAuth2 endpoint and returns the resulting user object."
|
||||||
|
@ -117,5 +111,5 @@ the OAuth2 endpoint and returns the resulting user object."
|
||||||
;; lisp base64 library doesn't know how to deal with
|
;; lisp base64 library doesn't know how to deal with
|
||||||
;; that - we need to add those extra padding
|
;; that - we need to add those extra padding
|
||||||
;; characters here.
|
;; characters here.
|
||||||
(add-missing-base64-padding payload)))))
|
(panettone.util:add-missing-base64-padding payload)))))
|
||||||
(claims-to-user claims))))))
|
(claims-to-user claims))))))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
(defpackage panettone.util
|
(defpackage panettone.util
|
||||||
(:use :cl :klatre)
|
(:use :cl :klatre)
|
||||||
(:import-from :alexandria :when-let)
|
(:import-from :alexandria :when-let)
|
||||||
(:export :integer-env))
|
(:export :integer-env :add-missing-base64-padding))
|
||||||
|
|
||||||
(defpackage panettone.css
|
(defpackage panettone.css
|
||||||
(:use :cl :lass)
|
(:use :cl :lass)
|
||||||
|
|
|
@ -5,3 +5,11 @@
|
||||||
(when-let ((str (uiop:getenvp var)))
|
(when-let ((str (uiop:getenvp var)))
|
||||||
(try-parse-integer str))
|
(try-parse-integer str))
|
||||||
default))
|
default))
|
||||||
|
|
||||||
|
(defun add-missing-base64-padding (s)
|
||||||
|
"Add any missing padding characters to the (un-padded) base64 string `S', such
|
||||||
|
that it can be successfully decoded by the `BASE64' package"
|
||||||
|
;; I apologize
|
||||||
|
(let* ((needed-padding (mod (length s) 4))
|
||||||
|
(pad-chars (if (zerop needed-padding) 0 (- 4 needed-padding))))
|
||||||
|
(format nil "~A~v@{~A~:*~}" s pad-chars "=")))
|
||||||
|
|
9
web/panettone/test/util_test.lisp
Normal file
9
web/panettone/test/util_test.lisp
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
(in-package :panettone.tests)
|
||||||
|
(declaim (optimize (safety 3)))
|
||||||
|
|
||||||
|
(test add-missing-base64-padding-test
|
||||||
|
(is (string=
|
||||||
|
"abcdef"
|
||||||
|
(base64:base64-string-to-string
|
||||||
|
(panettone.util:add-missing-base64-padding
|
||||||
|
"YWJjZGVm")))))
|
Loading…
Reference in a new issue