1 -- -*- Coding: utf-8 -*-
2 module Rakka.Resource.Object
7 import Network.HTTP.Lucu
8 import Network.HTTP.Lucu.Utils
9 import Rakka.Environment
12 import Rakka.SystemConfig
15 resObject :: Environment -> ResourceDef
18 resUsesNativeThread = False
20 , resGet = Just $ getPathInfo >>= handleGet env . toPageName
27 toPageName :: [String] -> PageName
28 toPageName = decodePageName . joinWith "/"
31 handleGet :: Environment -> PageName -> Resource ()
33 = do pageM <- getPage (envStorage env) name Nothing
35 Nothing -> foundNoEntity Nothing
36 Just page -> if isEntity page then
39 handleRedirect env page
44 Location: http://example.org/object/Destination
46 handleRedirect :: Environment -> Page -> Resource ()
47 handleRedirect env redir
48 = do BaseURI baseURI <- getSysConf (envSysConf env)
49 redirect Found (mkObjectURI baseURI $ redirName redir)
54 Content-Type: image/png
58 handleGetEntity :: Page -> Resource ()
60 = do case entityRevision page of
61 0 -> foundTimeStamp (entityLastMod page) -- 0 はデフォルトページ
62 rev -> foundEntity (strongETag $ show rev) (entityLastMod page)
64 setContentType (entityType page)
65 outputLBS (entityContent page)