module Rakka.Resource.Page.Get
( handleGet
)
where
import Control.Arrow
import Control.Arrow.ArrowList
import Network.HTTP.Lucu
import Network.URI
import Rakka.Environment
import Rakka.Page
import Rakka.Resource
import Rakka.Storage
import Rakka.Utils
import Text.XML.HXT.Arrow.XmlArrow
import Text.XML.HXT.DOM.TypeDefs
{-
[リダイレクトの場合]
HTTP/1.1 302 Found
Location: http://example.org/Destination?from=Source&revision=112
[text/* の場合]
-- デフォルトでない場合のみ存在
lastModified="2000-01-01T00:00:00" />
blah blah...
-- 存在しない場合もある
blah blah...
[text/* 以外の場合: content 要素の代はりに object 要素]
-- data 屬性に URI
-}
handleGet :: Environment -> PageName -> Resource ()
handleGet env name
= let sto = envStorage env
in
runIdempotentA $ proc ()
-> do siteName <- getSiteNameA env -< ()
baseURI <- getBaseURIA env -< ()
pageM <- getPageA sto -< name
case pageM of
Nothing
-> returnA -< foundNoEntity Nothing
Just redir@(Redirection _ _ _ _)
-> do tree <- ( eelem "/"
+= ( eelem "page"
+= sattr "site" siteName
+= sattr "baseURI" (uriToString id baseURI "")
+= sattr "name" name
+= sattr "redirect" (redirDest redir)
+= ( case redirRevision redir of
Nothing -> none
Just rev -> sattr "revision" (show rev)
)
+= sattr "lastModified" (formatW3CDateTime $ redirLastMod redir)
)
) -<< ()
returnA -< do redirect SeeOther (mkPageURI baseURI name)
outputXmlPage tree redirToXHTML
redirToXHTML :: ArrowXml a => a XmlTree XmlTree
redirToXHTML = error "not implemented"