unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] http-client: Support basic authentication.
@ 2015-12-16 10:19 Ricardo Wurmus
  2015-12-16 10:51 ` Ricardo Wurmus
  0 siblings, 1 reply; 5+ messages in thread
From: Ricardo Wurmus @ 2015-12-16 10:19 UTC (permalink / raw)
  To: guix-devel@gnu.org

[-- Attachment #1: Type: text/plain, Size: 536 bytes --]

Hi Guix,

for the Bioconductor importer extension to the CRAN importer I need our
HTTP client to support basic authentication as the DESCRIPTION files are
only available on the SVN web interface, which requires authentication
with a fixed username and password.

The attached patch adds this feature to the ‘http-fetch’ procedure.  Now
“protected” URLs like

    https://readonly:readonly@hedgehog.fhcrc.org/bioconductor/branches/RELEASE_3_2/madman/Rpacks/genomation/DESCRIPTION

can be downloaded.

~~ Ricardo


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-http-client-Support-basic-authentication.patch --]
[-- Type: text/x-patch, Size: 2119 bytes --]

From 9a4385353dac7cf74c4950921bbf6f8ecc06d92a Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
Date: Wed, 16 Dec 2015 11:12:46 +0100
Subject: [PATCH] http-client: Support basic authentication.

* guix/http-client.scm (http-fetch): Add Authorization header to request
  when the URI contains userinfo.
---
 guix/http-client.scm | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/guix/http-client.scm b/guix/http-client.scm
index eb2c3f4..1feb428 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -32,6 +32,7 @@
   #:use-module (rnrs bytevectors)
   #:use-module (guix ui)
   #:use-module (guix utils)
+  #:use-module (guix base64)
   #:use-module ((guix build utils)
                 #:select (mkdir-p dump-port))
   #:use-module ((guix build download)
@@ -213,12 +214,20 @@ Raise an '&http-get-error' condition if downloading fails."
     (let ((port (or port (open-connection-for-uri uri))))
       (unless buffered?
         (setvbuf port _IONBF))
-      (let*-values (((resp data)
+      (let*-values ((auth-header
+                     (match (uri-userinfo uri)
+                       ((str) (cons 'Authorization
+                                    (string-append "Basic "
+                                                   (base64-encode
+                                                    (string->utf8 str)))))
+                       (_ '())))
+                    ((resp data)
                      ;; Try hard to use the API du jour to get an input port.
                      (if (guile-version>? "2.0.7")
-                         (http-get uri #:streaming? #t #:port port) ; 2.0.9+
+                         (http-get uri #:streaming? #t #:port port
+                                   #:headers auth-header) ; 2.0.9+
                          (http-get* uri #:decode-body? text?        ; 2.0.7
-                                    #:port port)))
+                                    #:port port #:headers auth-header)))
                     ((code)
                      (response-code resp)))
         (case code
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-12-19 13:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-16 10:19 [PATCH] http-client: Support basic authentication Ricardo Wurmus
2015-12-16 10:51 ` Ricardo Wurmus
2015-12-16 12:28   ` Ricardo Wurmus
2015-12-19 13:52     ` Ludovic Courtès
2015-12-19 13:51   ` Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).