X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FResource.hs;h=12056ee8ec4fd2ac73fa9c8aac1682cdf1e88bd3;hp=a8d8011fdbb3b971b0aeb01b3edc6ac9efa5bbc0;hb=497cbd0e695fa05a0db8dd17dad7b303321ed1e0;hpb=e4afb8c074c14a06f9c738e0d2d9380e19b42583 diff --git a/Network/HTTP/Lucu/Resource.hs b/Network/HTTP/Lucu/Resource.hs index a8d8011..12056ee 100644 --- a/Network/HTTP/Lucu/Resource.hs +++ b/Network/HTTP/Lucu/Resource.hs @@ -85,6 +85,7 @@ module Network.HTTP.Lucu.Resource , getAcceptEncoding , isEncodingAcceptable , getContentType + , getAuthorization -- ** Finding an entity @@ -117,6 +118,7 @@ module Network.HTTP.Lucu.Resource , setContentType , setLocation , setContentEncoding + , setWWWAuthenticate -- ** Writing a response body @@ -143,6 +145,7 @@ import Data.List import Data.Maybe import Data.Time import Network.HTTP.Lucu.Abortion +import Network.HTTP.Lucu.Authorization import Network.HTTP.Lucu.Config import Network.HTTP.Lucu.ContentCoding import Network.HTTP.Lucu.DefaultPage @@ -365,6 +368,20 @@ getContentType (Just $ "Unparsable Content-Type: " ++ C8.unpack cType) +-- |Get the header \"Authorization\" as +-- 'Network.HTTP.Lucu.Authorization.AuthCredential'. +getAuthorization :: Resource (Maybe AuthCredential) +getAuthorization + = do authM <- getHeader (C8.pack "Authorization") + case authM of + Nothing + -> return Nothing + Just auth + -> case parse authCredentialP (L8.fromChunks [auth]) of + (# Success a, _ #) -> return $ Just a + (# _ , _ #) -> return Nothing + + {- ExaminingRequest 時に使用するアクション群 -} -- |Tell the system that the 'Resource' found an entity for the @@ -806,6 +823,12 @@ setContentEncoding codings _ -> undefined setHeader (C8.pack "Content-Encoding") (C8.pack $ joinWith ", " $ map tr codings) +-- |Computation of @'setWWWAuthenticate' challenge@ sets the response +-- header \"WWW-Authenticate\" to @challenge@. +setWWWAuthenticate :: AuthChallenge -> Resource () +setWWWAuthenticate challenge + = setHeader (C8.pack "WWW-Authenticate") (C8.pack $ show challenge) + {- DecidingBody 時に使用するアクション群 -}