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
-}
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
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) =>