module Clckwrks.IrcBot.Route where import Control.Applicative ((<$>)) import Control.Monad.Reader (ask) import Clckwrks (Clck, Role(..), requiresRole_) import Clckwrks.IrcBot.Monad (IrcBotM, IrcBotConfig(..)) import Clckwrks.IrcBot.Page.IrcLog (ircLog) import Clckwrks.IrcBot.Page.IrcLogs (ircLogs) import Clckwrks.IrcBot.Page.Reconnect (ircReconnectPage) import Clckwrks.IrcBot.Page.Settings (ircBotSettings) import Clckwrks.IrcBot.URL (IrcBotURL(..), IrcBotAdminURL(..)) import qualified Data.Set as Set import Happstack.Server (Response, toResponse, notFound) checkAuth :: IrcBotURL -> IrcBotM IrcBotURL checkAuth url = case url of IrcBotAdmin {} -> do showFn <- ircBotClckURL <$> ask requiresRole_ showFn (Set.singleton Administrator) url _ -> return url routeIrcBot :: IrcBotURL -> IrcBotM Response routeIrcBot unsecureURL = do url <- checkAuth unsecureURL case url of IrcLogs -> ircLogs IrcLog fp -> ircLog fp (IrcBotAdmin IrcBotReconnect) -> ircReconnectPage url (IrcBotAdmin IrcBotSettings) -> ircBotSettings url