1 module Rakka.Resource.Object
6 import Network.HTTP.Lucu
7 import Network.HTTP.Lucu.Utils
8 import Rakka.Environment
11 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
36 -> foundNoEntity Nothing
38 Just redir@(Redirection _ _ _ _)
39 -> handleRedirect env redir
41 Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _)
42 -> handleGetEntity env entity
47 Location: http://example.org/object/Destination
49 handleRedirect :: Environment -> Page -> Resource ()
50 handleRedirect env redir
51 = do BaseURI baseURI <- getSysConf (envSysConf env) (BaseURI undefined)
52 redirect Found (mkObjectURI baseURI $ redirName redir)
57 Content-Type: image/png
61 handleGetEntity :: Environment -> Page -> Resource ()
62 handleGetEntity env page
63 = do let lastMod = toClockTime $ pageLastMod page
65 case pageRevision page of
66 Nothing -> foundTimeStamp lastMod
67 Just rev -> foundEntity (strongETag $ show rev) lastMod
69 setContentType (pageType page)
70 outputLBS (pageContent page)