]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/Render.hs
Use HsOpenSSL instead of Crypto
[Rakka.git] / Rakka / Resource / Render.hs
index 01c75e105091994cb43a1c30abb3ab1ff3640cff..3823cb4fa915f80be5b9c9c98e41a73f817fcadc 100644 (file)
@@ -7,18 +7,15 @@ import           Control.Arrow
 import           Control.Arrow.ArrowIO
 import           Control.Arrow.ArrowList
 import           Control.Monad.Trans
-import qualified Codec.Binary.UTF8.String as UTF8
 import qualified Data.ByteString.Lazy as Lazy
-import qualified Data.Map as M
+import           Data.Maybe
 import           Network.HTTP.Lucu
 import           Network.HTTP.Lucu.Utils
+import           OpenSSL.EVP.Base64
 import           Rakka.Environment
 import           Rakka.Page
-import           Rakka.Wiki
+import           Rakka.Utils
 import           Rakka.Wiki.Engine
-import           Rakka.Wiki.Parser
-import           Rakka.Wiki.Interpreter
-import           Text.ParserCombinators.Parsec
 import           Text.XML.HXT.Arrow.Namespace
 import           Text.XML.HXT.Arrow.WriteDocument
 import           Text.XML.HXT.Arrow.XmlArrow
@@ -65,8 +62,18 @@ resRender env
 -}
 handleRender :: Environment -> PageName -> Resource ()
 handleRender env name
-    = do cType <- guessTypeIfNeeded =<< getContentType
-         bin   <- inputLBS defaultLimit
+    = do entity <- inputLBS defaultLimit
+         cTypeM <- getContentType
+
+         let (bin, cType) = case cTypeM of
+                              Just (MIMEType "application" "x-rakka-base64-stream" _)
+                                  -> let b = decodeBase64LBS entity
+                                     in
+                                       (b, guessMIMEType b)
+                              Just t
+                                  -> (entity, t)
+                              Nothing
+                                  -> (entity, guessMIMEType entity)
 
          setContentType $ read "text/xml"
          [xmlStr] <- liftIO $ runX ( setErrorMsgHandler False fail
@@ -78,10 +85,6 @@ handleRender env name
                                      writeDocumentToString [ (a_indent, v_1) ]
                                    )
          output xmlStr
-    where
-      guessTypeIfNeeded :: Maybe MIMEType -> Resource MIMEType
-      guessTypeIfNeeded (Just t) = return t
-      guessTypeIfNeeded Nothing  = fail "not impl"
 
 
 render :: (ArrowXml a, ArrowChoice a, ArrowIO a) =>