X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FAuthorization.hs;h=11de19962d75b6c78817ab3df33207dcb126bc5d;hb=b923d45;hp=6472fb4e6ce6f5668a35382dc20d13defbb32a82;hpb=4200b71ce2d0b25a0e6c5df4e0230215c070858f;p=Lucu.git diff --git a/Network/HTTP/Lucu/Authorization.hs b/Network/HTTP/Lucu/Authorization.hs index 6472fb4..11de199 100644 --- a/Network/HTTP/Lucu/Authorization.hs +++ b/Network/HTTP/Lucu/Authorization.hs @@ -21,7 +21,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 +59,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 +67,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"