X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Focaml-http%2Fhttp_request.ml;h=354546ea2f11b269b6806d3db58955967ab72199;hb=41bb791af5cba55838dae8307339aea5098c4e2d;hp=65cba9710d95a00e29fd5f4cea335c441c3f89d6;hpb=3e666920212c55ad4960ee2b30335acf8eb40560;p=helm.git diff --git a/helm/DEVEL/ocaml-http/http_request.ml b/helm/DEVEL/ocaml-http/http_request.ml index 65cba9710..354546ea2 100644 --- a/helm/DEVEL/ocaml-http/http_request.ml +++ b/helm/DEVEL/ocaml-http/http_request.ml @@ -31,6 +31,9 @@ let debug_dump_request path params = (String.concat ";" (List.map (fun (h,v) -> String.concat "=" [h;v]) params))) +let auth_sep_RE = Pcre.regexp ":" +let basic_auth_RE = Pcre.regexp "^Basic\\s+" + exception Fallback;; (* used internally by request class *) class request ic = @@ -124,5 +127,17 @@ class request ic = sprintf "%s %s %s" method_string self#uri (string_of_version version) | None -> sprintf "%s %s" method_string self#uri + method authorization: auth_info option = + try + let credentials = + Netencoding.Base64.decode + (Pcre.replace ~rex:basic_auth_RE (self#header "authorization")) + in + debug_print ("HTTP Basic auth credentials: " ^ credentials); + (match Pcre.split ~rex:auth_sep_RE credentials with + | [username; password] -> Some (`Basic (username, password)) + | l -> raise Exit) + with Header_not_found _ | Invalid_argument _ | Exit -> None + end