diff options
author | Christopher Baines <mail@cbaines.net> | 2019-12-29 09:34:12 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-12-29 16:04:45 +0000 |
commit | d15ba4f25c0dfcc6ea8e03982819e217d5bb35b9 (patch) | |
tree | 389b4a0fc5240db329021701d6d7eb484bd57dff /guix-data-service/web/nar | |
parent | 7ca9b11885f443a1042768ad48a5bbbebcc38b64 (diff) | |
download | data-service-d15ba4f25c0dfcc6ea8e03982819e217d5bb35b9.tar data-service-d15ba4f25c0dfcc6ea8e03982819e217d5bb35b9.tar.gz |
Serve narinfo files for derivation sources
Diffstat (limited to 'guix-data-service/web/nar')
-rw-r--r-- | guix-data-service/web/nar/controller.scm | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/guix-data-service/web/nar/controller.scm b/guix-data-service/web/nar/controller.scm index 9c46eb5..b3c9f39 100644 --- a/guix-data-service/web/nar/controller.scm +++ b/guix-data-service/web/nar/controller.scm @@ -174,6 +174,22 @@ nar-bytevector derivation-references) port)))))) + (and=> (select-derivation-source-file-data-by-file-name-hash conn + hash) + (match-lambda + ((store-path compression compressed-size + hash-algorithm hash uncompressed-size) + (list (build-response + #:code 200 + #:headers '((content-type . (application/x-narinfo)))) + (lambda (port) + (display (derivation-source-file-narinfo-string store-path + compression + compressed-size + hash-algorithm + hash + uncompressed-size) + port)))))) (not-found (request-uri request)))) @@ -217,3 +233,44 @@ References: ~a~%" (string->utf8 (canonical-sexp->string (signed-string info))))) info))) + +(define* (derivation-source-file-narinfo-string store-item + compression + compressed-size + hash-algorithm + hash + uncompressed-size + #:key (nar-path "nar")) + (define (signed-string s) + (let* ((public-key (%narinfo-signing-public-key)) + (hash (bytevector->hash-data (sha256 (string->utf8 s)) + #:key-type (key-type public-key)))) + (signature-sexp hash (%narinfo-signing-private-key) public-key))) + + (let* ((info (format #f + "\ +StorePath: ~a +URL: ~a +Compression: ~a +FileSize: ~d +NarHash: ~a:~a +NarSize: ~d +References: ~%" + store-item + (encode-and-join-uri-path + (list nar-path + compression + (basename store-item))) + compression + compressed-size + hash-algorithm + hash + uncompressed-size))) + (if (%narinfo-signing-private-key) + (format #f "~aSignature: 1;~a;~a~%" + info + (gethostname) + (base64-encode + (string->utf8 + (canonical-sexp->string (signed-string info))))) + info))) |