X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Rakka%2FResource%2FRender.hs;h=302360e645830239f1a4fa06394cb2981b78ecc3;hb=42f51754dea02201aececaacbf194d714cd58aaf;hp=bcfd17f209f48cb526a8252247fa07c3e47f11f2;hpb=ee28059eadd401e5f9256df590bbb7491f952685;p=Rakka.git diff --git a/Rakka/Resource/Render.hs b/Rakka/Resource/Render.hs index bcfd17f..302360e 100644 --- a/Rakka/Resource/Render.hs +++ b/Rakka/Resource/Render.hs @@ -1,309 +1,110 @@ +{-# LANGUAGE + Arrows + , TypeOperators + , UnicodeSyntax + #-} module Rakka.Resource.Render - ( fallbackRender + ( resRender ) where - +import qualified Codec.Binary.UTF8.String as UTF8 import Control.Arrow import Control.Arrow.ArrowIO -import Control.Arrow.ArrowIf -import Data.Char +import Control.Arrow.ArrowList +import Control.Arrow.Unicode +import Control.Monad.Trans +import Control.Monad.Unicode +import qualified Data.ByteString.Lazy as Lazy +import Data.Text as T import Network.HTTP.Lucu -import Network.HTTP.Lucu.Utils +import OpenSSL.EVP.Base64 +import Prelude.Unicode import Rakka.Environment import Rakka.Page -import Rakka.Resource -import Rakka.Storage -import Rakka.SystemConfig +import Rakka.Utils import Rakka.Wiki.Engine -import System.FilePath -import System.Time +import System.FilePath.Posix import Text.XML.HXT.Arrow.Namespace +import Text.XML.HXT.Arrow.WriteDocument import Text.XML.HXT.Arrow.XmlArrow -import Text.XML.HXT.Arrow.XmlNodeSet +import Text.XML.HXT.Arrow.XmlState import Text.XML.HXT.DOM.TypeDefs - -fallbackRender :: Environment -> [String] -> IO (Maybe ResourceDef) -fallbackRender env path - | null path = return Nothing - | null $ head path = return Nothing - | isLower $ head $ head path = return Nothing -- 先頭の文字が小文字であってはならない - | otherwise - = return $ Just $ ResourceDef { - resUsesNativeThread = False - , resIsGreedy = True - , resGet = Just $ handleGet env (toPageName path) - , resHead = Nothing - , resPost = Nothing - , resPut = Nothing - , resDelete = Nothing - } +resRender ∷ Environment → ResourceDef +resRender env + = ResourceDef { + resUsesNativeThread = False + , resIsGreedy = True + , resGet = Nothing + , resHead = Nothing + , resPost = Just $ getPathInfo ≫= handleRender env ∘ toPageName + , resPut = Nothing + , resDelete = Nothing + } where - toPageName :: [String] -> PageName - toPageName = decodePageName . dropExtension . joinWith "/" - - -handleGet :: Environment -> PageName -> Resource () -handleGet env name - = runIdempotentA $ proc () - -> do pageM <- getPageA (envStorage env) -< (name, Nothing) - case pageM of - Nothing - -> handlePageNotFound env -< name - - Just redir@(Redirection _ _ _ _) - -> handleRedirect env -< redir - - Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _) - -> handleGetEntity env -< entity - -{- - HTTP/1.1 302 Found - Location: http://example.org/Destination?from=Source --} -handleRedirect :: (ArrowXml a, ArrowIO a) => Environment -> a Page (Resource ()) -handleRedirect env - = proc redir - -> do BaseURI baseURI <- getSysConfA (envSysConf env) -< () - returnA -< redirect Found (mkPageURI baseURI $ redirName redir) -- FIXME - - -{- - -- デフォルトでない場合のみ存在 - lastModified="2000-01-01T00:00:00"> - - - - - - -