]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource.hs
basic authorization support
[Rakka.git] / Rakka / Resource.hs
index 21acb4b02c16e74faea015adf5ea9743618bf8c5..26d73897e544cc1ec13d3553913bff5bf214da15 100644 (file)
@@ -3,6 +3,7 @@ module Rakka.Resource
     , runXmlA
     , getEntityType
     , outputXmlPage
+    , getUserID
     )
     where
 
@@ -13,8 +14,10 @@ import           Control.Monad.Trans
 import           Network.HTTP.Lucu
 import           Network.HTTP.Lucu.Utils
 import           Network.URI hiding (path)
+import           Rakka.Authorization
 import           Rakka.Environment
 import           Rakka.Validation
+import           System.Log.Logger
 import           Text.XML.HXT.Arrow.ReadDocument
 import           Text.XML.HXT.Arrow.WriteDocument
 import           Text.XML.HXT.Arrow.XmlIOStateArrow
@@ -22,6 +25,10 @@ import           Text.XML.HXT.DOM.TypeDefs
 import           Text.XML.HXT.DOM.XmlKeywords
 
 
+logger :: String
+logger = "Rakka.Resource"
+
+
 -- "/"         ==> "/"
 -- "/foo"      ==> "/foo.html"
 -- "/foo/"     ==> "/foo.html"
@@ -101,6 +108,7 @@ getInputReader
     where
       getXmlReader
           = do req <- input defaultLimit
+               liftIO $ debugM logger req
                return $ readString [ (a_validate         , v_0)
                                    , (a_check_namespaces , v_1)
                                    , (a_remove_whitespace, v_0)
@@ -139,4 +147,17 @@ outputXmlPage tree toXHTML
                                         >>>
                                         writeDocumentToString [ (a_indent, v_1) ]
                                       )
-         output resultStr
\ No newline at end of file
+         output resultStr
+
+
+getUserID :: Environment -> Resource (Maybe String)
+getUserID env
+    = do auth <- getAuthorization
+         case auth of
+           Just (BasicAuthCredential userID password)
+               -> do valid <- isValidPair (envAuthDB env) userID password
+                     if valid then
+                         return (Just userID)
+                       else
+                         return Nothing
+           _   -> return Nothing