X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FResource%2FRender.hs;h=3823cb4fa915f80be5b9c9c98e41a73f817fcadc;hb=df6079ca32f808d76c595e7953bff7a1dd46b10b;hp=01c75e105091994cb43a1c30abb3ab1ff3640cff;hpb=71f2db55513679098869de2122b5d5989dbc2be2;p=Rakka.git diff --git a/Rakka/Resource/Render.hs b/Rakka/Resource/Render.hs index 01c75e1..3823cb4 100644 --- a/Rakka/Resource/Render.hs +++ b/Rakka/Resource/Render.hs @@ -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) =>