module Clckwrks.Media.Route where import Control.Applicative ((<$>)) import Control.Monad.Reader (ask) import Clckwrks (Clck, Role(..), requiresRole_) import Clckwrks.Media.Monad (MediaM, MediaConfig(..)) import Clckwrks.Media.URL (MediaURL(..), MediaAdminURL(..)) import Clckwrks.Media.Page.AllMedia (allMedia) import Clckwrks.Media.Page.GetMedium (getMedium) import Clckwrks.Media.Page.Preview (previewMedium) import Clckwrks.Media.Page.Upload (uploadMedium) import qualified Data.Set as Set import Happstack.Server (Response) import Magic -- import Paths_clckwrks_plugin_media (getDataDir) checkAuth :: MediaURL -> MediaM MediaURL checkAuth url = case url of MediaAdmin {} -> do showFn <- mediaClckURL <$> ask requiresRole_ showFn (Set.singleton Administrator) url _ -> return url routeMedia :: MediaURL -> MediaM Response routeMedia unsecureURL = do url <- checkAuth unsecureURL case url of (MediaAdmin Upload) -> uploadMedium url (MediaAdmin AllMedia) -> allMedia (GetMedium mid) -> getMedium mid (Preview mid) -> previewMedium mid