From b9026488ed53e76c5b8ff741a76e6b8c57256d4a Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 24 Nov 2023 16:11:57 +0000 Subject: Memoize computing tokens As I'm not sure how expensive this is, but it doesn't need doing for every request. --- .../model/build-server-token-seed.scm | 29 ++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'guix-data-service') diff --git a/guix-data-service/model/build-server-token-seed.scm b/guix-data-service/model/build-server-token-seed.scm index c26f796..59cce2c 100644 --- a/guix-data-service/model/build-server-token-seed.scm +++ b/guix-data-service/model/build-server-token-seed.scm @@ -21,21 +21,24 @@ #:use-module (squee) #:use-module (gcrypt hash) #:use-module (gcrypt base64) + #:use-module (guix memoization) #:export (compute-tokens-for-build-server)) -(define (compute-token secret-key-base build-server-id token-seed) - (let ((source-string - (simple-format #f "~A:~A:~A" - secret-key-base - build-server-id - token-seed))) - (string-filter - ;; Remove the + / and = to make handling the value easier - char-set:letter+digit - (base64-encode - (bytevector-hash - (string->utf8 source-string) - (hash-algorithm sha1)))))) +(define compute-token + (memoize + (lambda (secret-key-base build-server-id token-seed) + (let ((source-string + (simple-format #f "~A:~A:~A" + secret-key-base + build-server-id + token-seed))) + (string-filter + ;; Remove the + / and = to make handling the value easier + char-set:letter+digit + (base64-encode + (bytevector-hash + (string->utf8 source-string) + (hash-algorithm sha1)))))))) (define (compute-tokens-for-build-server conn secret-key-base build-server-id) (define query -- cgit v1.2.3