]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Authorization.hs
The library now compiles, and I'm now working on ImplantFile.hs
[Lucu.git] / Network / HTTP / Lucu / Authorization.hs
index 6472fb4e6ce6f5668a35382dc20d13defbb32a82..d91fe29024dc3a8ac6e27bb1e989ffa287044b9b 100644 (file)
@@ -2,7 +2,6 @@
     OverloadedStrings
   , UnicodeSyntax
   #-}
-{-# OPTIONS_HADDOCK prune #-}
 
 -- |Manipulation of WWW authorization.
 module Network.HTTP.Lucu.Authorization
@@ -13,7 +12,7 @@ module Network.HTTP.Lucu.Authorization
     , Password
 
     , printAuthChallenge
-    , authCredentialP -- private
+    , authCredentialP
     )
     where
 import Data.Ascii (Ascii)
@@ -21,7 +20,6 @@ import qualified Data.Ascii as A
 import Data.Attoparsec.Char8
 import qualified Data.ByteString.Base64 as B64
 import qualified Data.ByteString.Char8 as C8
-import Data.Maybe
 import Data.Monoid.Unicode
 import Network.HTTP.Lucu.Parser.Http
 import Network.HTTP.Lucu.Utils
@@ -60,8 +58,7 @@ printAuthChallenge (BasicAuthChallenge realm)
 
 authCredentialP ∷ Parser AuthCredential
 authCredentialP
-    = try $
-      do _ ← string "Basic"
+    = do _ ← string "Basic"
          skipMany1 lws
          b64 ← takeWhile1 base64
          case C8.break (≡ ':') (B64.decodeLenient b64) of
@@ -69,10 +66,14 @@ authCredentialP
                | C8.null cPassword
                    → fail "no colons in the basic auth credential"
                | otherwise
-                   → let u = fromJust $ A.fromByteString user
-                         p = fromJust $ A.fromByteString (C8.tail cPassword)
-                     in
-                       return (BasicAuthCredential u p)
+                   → do u ← asc user
+                        p ← asc (C8.tail cPassword)
+                        return (BasicAuthCredential u p)
     where
       base64 ∷ Char → Bool
       base64 = inClass "a-zA-Z0-9+/="
+
+      asc ∷ C8.ByteString → Parser Ascii
+      asc bs = case A.fromByteString bs of
+                 Just as → return as
+                 Nothing → fail "Non-ascii character in auth credential"