~ruther/guix-local

242ad41c0129eabfdc6678ae9eebd1c887ece55e — David Thompson 9 years ago 8dec222
download: Use basic authentication when userinfo is present in URI.

* guix/download.scm (url-fetch): Include (guix base64) module on the
  build-side.
* guix/build/download.scm (http-fetch): Add "Authorization" header when
  userinfo is present in the URI.
2 files changed, 14 insertions(+), 3 deletions(-)

M guix/build/download.scm
M guix/download.scm
M guix/build/download.scm => guix/build/download.scm +12 -2
@@ 23,9 23,11 @@
  #:use-module (web http)
  #:use-module ((web client) #:hide (open-socket-for-uri))
  #:use-module (web response)
  #:use-module (guix base64)
  #:use-module (guix ftp-client)
  #:use-module (guix build utils)
  #:use-module (rnrs io ports)
  #:use-module (rnrs bytevectors)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-19)


@@ 598,14 600,22 @@ FILE on success."
        (string>? (version) "2.0.7")))

  (define headers
    '(;; Some web sites, such as http://dist.schmorp.de, would block you if
    `(;; Some web sites, such as http://dist.schmorp.de, would block you if
      ;; there's no 'User-Agent' header, presumably on the assumption that
      ;; you're a spammer.  So work around that.
      (User-Agent . "GNU Guile")

      ;; Some servers, such as https://alioth.debian.org, return "406 Not
      ;; Acceptable" when not explicitly told that everything is accepted.
      (Accept . "*/*")))
      (Accept . "*/*")

      ;; Basic authentication, if needed.
      ,@(match (uri-userinfo uri)
          ((? string? str)
           `((Authorization . ,(string-append "Basic "
                                              (base64-encode
                                               (string->utf8 str))))))
          (_ '()))))

  (let*-values (((connection)
                 (open-connection-for-uri uri #:timeout timeout))

M guix/download.scm => guix/download.scm +2 -1
@@ 328,7 328,8 @@ in the store."
                            #:modules '((guix build download)
                                        (guix build utils)
                                        (guix ftp-client)
                                        (guix base32))
                                        (guix base32)
                                        (guix base64))

                            ;; Use environment variables and a fixed script
                            ;; name so there's only one script in store for