]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource.hs
implemented language link editor (partly)
[Rakka.git] / Rakka / Resource.hs
index 8448ea11d137d53dae3866bdd4ea9f11994602ba..5cbf188e46c8a468b16b5bdbfcbd5f1722f8d7c6 100644 (file)
@@ -3,9 +3,12 @@ module Rakka.Resource
     , runXmlA
     , getEntityType
     , outputXmlPage
+    , outputXmlPage'
+    , getUserID
     )
     where
 
+import qualified Codec.Binary.UTF8.String as UTF8
 import           Control.Arrow
 import           Control.Arrow.ArrowList
 import           Control.Monad
@@ -13,6 +16,7 @@ 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
@@ -110,7 +114,7 @@ getInputReader
                return $ readString [ (a_validate         , v_0)
                                    , (a_check_namespaces , v_1)
                                    , (a_remove_whitespace, v_0)
-                                   ] req
+                                   ] (UTF8.decodeString req)
       getFailingReader code headers msg
           = return $ proc _ -> abortA -< (code, (headers, msg))
 
@@ -125,18 +129,18 @@ getEntityType
     where
       extMap :: [(String, MIMEType)]
       extMap = [ ("html", read "application/xhtml+xml")
+               , ( "rdf", read "application/rss+xml"  )
                , ( "xml", read "text/xml"             )
                ]
 
 
-outputXmlPage :: XmlTree -> IOSArrow XmlTree XmlTree -> Resource ()
-outputXmlPage tree toXHTML
+outputXmlPage :: XmlTree -> [(MIMEType, IOSArrow XmlTree XmlTree)] -> Resource ()
+outputXmlPage tree formatters
     = do mType <- getEntityType
          setContentType mType
-         let formatter = case mType of
-                           MIMEType "application" "xhtml+xml" _ -> toXHTML
-                           MIMEType "text"        "xml"       _ -> this
-                           _                                    -> undefined
+         let formatter = case lookup mType formatters of
+                           Just f  -> f
+                           Nothing -> this
          [resultStr] <- liftIO $ runX ( setErrorMsgHandler False fail
                                         >>>
                                         constA tree
@@ -145,4 +149,22 @@ outputXmlPage tree toXHTML
                                         >>>
                                         writeDocumentToString [ (a_indent, v_1) ]
                                       )
-         output resultStr
\ No newline at end of file
+         output resultStr
+
+
+outputXmlPage' :: XmlTree -> IOSArrow XmlTree XmlTree -> Resource ()
+outputXmlPage' tree toXHTML
+    = outputXmlPage tree [(MIMEType "application" "xhtml+xml" [], toXHTML)]
+
+
+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