diff --git a/Handler/Announcements.hs b/Handler/Announcements.hs index 003db32..e957313 100644 --- a/Handler/Announcements.hs +++ b/Handler/Announcements.hs @@ -3,6 +3,7 @@ module Handler.Announcements where import Import import Handler.Shared +import Web.Announcements (runSlackHook) getTestAnnouncementsR :: Handler Html getTestAnnouncementsR = do diff --git a/Handler/Shared.hs b/Handler/Shared.hs index 375fc06..1538925 100644 --- a/Handler/Shared.hs +++ b/Handler/Shared.hs @@ -15,7 +15,6 @@ import System.Exit import qualified Data.Text as T -import qualified Data.Text.Encoding as DTE import Database.Persist.Sql (fromSqlKey) @@ -43,6 +42,8 @@ import System.IO.Unsafe (unsafePerformIO) import Text.Regex.TDFA +import Web.Announcements (formatLink) + import GEval.Core import GEval.Common import GEval.EvaluationScheme @@ -50,8 +51,6 @@ import GEval.Formatting (formatTheResultWithErrorBounds) import qualified Data.Vector as DV -import Network.HTTP.Req as R - arena :: Handler FilePath arena = do app <- getYesod @@ -744,21 +743,8 @@ compareFun :: MetricOrdering -> Double -> Double -> Ordering compareFun TheLowerTheBetter = flip compare compareFun TheHigherTheBetter = compare -runSlackHook :: Text -> Text -> IO () -runSlackHook hook message = do - let (Just (hookUrl, _)) = parseUrlHttps $ DTE.encodeUtf8 hook - - R.runReq def $ do - let payload = object [ "text" .= message ] - (_ :: IgnoreResponse) <- R.req R.POST - hookUrl - (R.ReqBodyJson payload) - R.ignoreResponse - mempty - return () - slackLink :: App -> Text -> Text -> Text -slackLink app title addr = "<" ++ slink ++ "|" ++ title ++ ">" +slackLink app title addr = formatLink slink title where slink = (appRoot $ appSettings app) ++ "/" ++ addr formatVersion :: (Int, Int, Int) -> Text diff --git a/Handler/ShowChallenge.hs b/Handler/ShowChallenge.hs index 8497be6..6b617d8 100644 --- a/Handler/ShowChallenge.hs +++ b/Handler/ShowChallenge.hs @@ -33,7 +33,7 @@ import Database.Persist.Sql (fromSqlKey) import qualified Data.Map as Map - +import Web.Announcements import Data.Maybe (fromJust) diff --git a/Web/Announcements.hs b/Web/Announcements.hs new file mode 100644 index 0000000..40d1081 --- /dev/null +++ b/Web/Announcements.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE OverloadedStrings #-} + +module Web.Announcements + (runSlackHook, + formatLink) + where + +import Data.Text +import qualified Data.Text.Encoding as DTE +import Data.Maybe +import Network.HTTP.Req as R +import Prelude +import Data.Aeson +import Data.Default + + +runSlackHook :: Text -> Text -> IO () +runSlackHook hook message = do + let (Just (hookUrl, _)) = parseUrlHttps $ DTE.encodeUtf8 hook + + R.runReq def $ do + let payload = object [ "text" .= message ] + (_ :: IgnoreResponse) <- R.req R.POST + hookUrl + (R.ReqBodyJson payload) + R.ignoreResponse + mempty + return () + +formatLink :: Text -> Text -> Text +formatLink url title = "<" <> url <> "|" <> title <> ">" diff --git a/gonito.cabal b/gonito.cabal index fe8fcff..4801668 100644 --- a/gonito.cabal +++ b/gonito.cabal @@ -64,6 +64,7 @@ library Handler.JWT Handler.Team Handler.Announcements + Web.Announcements if flag(dev) || flag(library-only) cpp-options: -DDEVELOPMENT