aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/build-server-token-seed.scm
blob: 4a0c48dac00f1dc87cf61824938a8d92e9e51d3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(define-module (guix-data-service model build-server-token-seed)
  #:use-module (ice-9 match)
  #:use-module (rnrs bytevectors)
  #:use-module (squee)
  #:use-module (gcrypt hash)
  #:use-module (gcrypt base64)
  #: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)))
    (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
    "
SELECT token_seed
FROM build_server_token_seeds
WHERE build_server_id = $1
ORDER BY token_seed")

  (map
   (match-lambda
     ((token-seed)
      (cons token-seed
            (compute-token secret-key-base
                           build-server-id
                           token-seed))))
   (exec-query conn query (list (number->string build-server-id)))))