1 -- -*- Coding: utf-8 -*-
2 module Rakka.Resource.Object
8 import Network.HTTP.Lucu
9 import Network.HTTP.Lucu.Utils
10 import Rakka.Environment
13 import Rakka.SystemConfig
16 resObject :: Environment -> ResourceDef
19 resUsesNativeThread = False
21 , resGet = Just $ getPathInfo >>= handleGet env . toPageName
28 toPageName :: [String] -> PageName
29 toPageName = decodePageName . joinWith "/"
32 handleGet :: Environment -> PageName -> Resource ()
34 = do pageM <- getPage (envStorage env) name Nothing
36 Nothing -> foundNoEntity Nothing
37 Just page -> if isEntity page then
40 handleRedirect env page
45 Location: http://example.org/object/Destination
47 handleRedirect :: Environment -> Page -> Resource ()
48 handleRedirect env redir
49 = do BaseURI baseURI <- getSysConf (envSysConf env)
50 redirect Found (mkObjectURI baseURI $ redirName redir)
55 Content-Type: image/png
59 handleGetEntity :: Page -> Resource ()
61 = do case entityRevision page of
62 0 -> foundTimeStamp (entityLastMod page) -- 0 はデフォルトページ
63 rev -> foundEntity (strongETag $ show rev) (entityLastMod page)
65 setContentType (entityType page)
66 outputLBS (entityContent page)