1 -- -*- Coding: utf-8 -*-
2 module Rakka.Resource.Object
6 import Network.HTTP.Lucu
7 import Rakka.Environment
10 import Rakka.SystemConfig
11 import System.FilePath.Posix
14 resObject :: Environment -> ResourceDef
17 resUsesNativeThread = False
19 , resGet = Just $ getPathInfo >>= handleGet env . toPageName
26 toPageName :: [String] -> PageName
27 toPageName = UTF8.decodeString . joinPath
30 handleGet :: Environment -> PageName -> Resource ()
32 = do pageM <- getPage (envStorage env) name Nothing
34 Nothing -> foundNoEntity Nothing
35 Just page -> if isEntity page then
38 handleRedirect env page
43 Location: http://example.org/object/Destination
45 handleRedirect :: Environment -> Page -> Resource ()
46 handleRedirect env redir
47 = do BaseURI baseURI <- getSysConf (envSysConf env)
48 redirect Found (mkObjectURI baseURI $ redirName redir)
53 Content-Type: image/png
57 handleGetEntity :: Page -> Resource ()
59 = do case entityRevision page of
60 0 -> foundTimeStamp (entityLastMod page) -- 0 はデフォルトページ
61 rev -> foundEntity (strongETag $ show rev) (entityLastMod page)
63 setContentType (entityType page)
64 outputLBS (entityContent page)