]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/PageEntity.hs
basic authorization support
[Rakka.git] / Rakka / Resource / PageEntity.hs
index 59753d7d5fd223ceaeab59453d15fa8dc87fdd29..8f63bbaad3b9c6f68748530ccc261cd68c0bb5d2 100644 (file)
@@ -38,11 +38,11 @@ fallbackPageEntity env path
         = return $ Just $ ResourceDef {
             resUsesNativeThread = False
           , resIsGreedy         = True
-          , resGet              = Just $ handleGet env (toPageName path)
+          , resGet              = Just $ handleGet    env (toPageName path)
           , resHead             = Nothing
           , resPost             = Nothing
-          , resPut              = Just $ handlePut env (toPageName path)
-          , resDelete           = Nothing
+          , resPut              = Just $ handlePut    env (toPageName path)
+          , resDelete           = Just $ handleDelete env (toPageName path)
           }
     where
       toPageName :: [String] -> PageName
@@ -54,14 +54,12 @@ handleGet env name
     = runIdempotentA $ proc ()
     -> do pageM <- getPageA (envStorage env) -< (name, Nothing)
           case pageM of
-            Nothing
-                -> handlePageNotFound env -< name
+            Nothing   -> handlePageNotFound env -< name
+            Just page -> if isEntity page then
+                             handleGetEntity env -< page
+                         else
+                             handleRedirect env -< page
 
-            Just redir@(Redirection _ _ _ _ _)
-                -> handleRedirect env -< redir
-
-            Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
-                -> handleGetEntity env -< entity
 
 {-
   HTTP/1.1 302 Found
@@ -308,7 +306,15 @@ notFoundToXHTML env
 
 handlePut :: Environment -> PageName -> Resource ()
 handlePut env name
-    = runXmlA env "rakka-page-1.0.rng" $ proc tree
-    -> do page   <- parseXmlizedPage -< (name, tree)
-          status <- putPageA (envStorage env) -< page
-          returnA  -< setStatus status
+    = do userID <- getUserID env
+         runXmlA env "rakka-page-1.0.rng" $ proc tree
+             -> do page   <- parseXmlizedPage -< (name, tree)
+                   status <- putPageA (envStorage env) -< (userID, page)
+                   returnA  -< setStatus status
+
+
+handleDelete :: Environment -> PageName -> Resource ()
+handleDelete env name
+    = do userID <- getUserID env
+         status <- deletePage (envStorage env) userID name
+         setStatus status