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