aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/build-server-token-seed.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/model/build-server-token-seed.scm')
-rw-r--r--guix-data-service/model/build-server-token-seed.scm29
1 files changed, 16 insertions, 13 deletions
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