{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-}
module Network.Mattermost
(
ConnectionPoolConfig(..)
, Login(..)
, Hostname
, Port
, ConnectionData
, Session
, Id(..)
, User(..)
, UserId(..)
, InitialLoad(..)
, Team(..)
, TeamMember(..)
, Type(..)
, TeamId(..)
, TeamsCreate(..)
, Channel(..)
, ChannelWithData(..)
, ChannelData(..)
, ChannelId(..)
, Channels
, ConnectionType(..)
, MinChannel(..)
, UsersCreate(..)
, Post(..)
, PostType(..)
, PostProps(..)
, PendingPost(..)
, PostId(..)
, FileId(..)
, FileInfo(..)
, Reaction(..)
, urlForFile
, Posts(..)
, MinCommand(..)
, CommandResponse(..)
, CommandResponseType(..)
, Preference(..)
, PreferenceCategory(..)
, PreferenceName(..)
, PreferenceValue(..)
, FlaggedPost(..)
, preferenceToFlaggedPost
, Logger
, LogEvent(..)
, LogEventType(..)
, withLogger
, noLogger
, HasId(..)
, defaultConnectionPoolConfig
, mkConnectionData
, initConnectionData
, mmCloseSession
, mmLogin
, mmCreateDirect
, mmCreateChannel
, mmCreateGroupChannel
, mmCreateTeam
, mmDeleteChannel
, mmLeaveChannel
, mmJoinChannel
, mmGetTeams
, mmGetChannels
, mmGetAllChannelsForUser
, mmGetAllChannelDataForUser
, mmGetAllChannelsWithDataForUser
, mmGetMoreChannels
, mmGetChannel
, mmViewChannel
, mmDeletePost
, mmGetPost
, mmGetPosts
, mmGetPostsSince
, mmGetPostsBefore
, mmGetPostsAfter
, mmSearchPosts
, mmGetReactionsForPost
, mmGetFileInfo
, mmGetFile
, mmGetUser
, mmGetUsers
, mmGetTeamMembers
, mmGetChannelMembers
, mmGetProfilesForDMList
, mmGetMe
, mmGetProfiles
, mmGetStatuses
, mmGetInitialLoad
, mmSaveConfig
, mmSetChannelHeader
, mmChannelAddUser
, mmChannelRemoveUser
, mmTeamAddUser
, mmUsersCreate
, mmUsersCreateWithSession
, mmPost
, mmUpdatePost
, mmExecute
, mmGetConfig
, mmGetClientConfig
, mmSetPreferences
, mmSavePreferences
, mmDeletePreferences
, mmFlagPost
, mmUnflagPost
, mmGetFlaggedPosts
, mmGetMyPreferences
, mkPendingPost
, idString
, hoistE
, noteE
, assertE
) where
import Control.Exception (throwIO)
import Control.Monad (when)
import Data.Monoid ((<>))
import Text.Printf ( printf )
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as BL
import Network.HTTP.Headers ( HeaderName(..)
, mkHeader
)
import Network.HTTP.Base ( Request(..)
, RequestMethod(..)
, defaultUserAgent
, Response_String
, Response(..) )
import Network.URI ( URI, parseRelativeReference )
import Network.HTTP.Stream ( simpleHTTP_ )
import Data.HashMap.Strict ( HashMap )
import qualified Data.HashMap.Strict as HM
import qualified Data.Aeson.KeyMap as KM
import Data.Aeson ( Value(..)
, ToJSON(..)
, FromJSON
, object
, (.=)
, encode
, eitherDecode
)
import Data.Maybe ( maybeToList, fromJust )
import qualified Data.Foldable as F
import qualified Data.Sequence as Seq
import qualified Data.Text as T
import Control.Arrow ( left )
import Network.Mattermost.Connection (assertJSONResponse, mmGetHeader)
import Network.Mattermost.Exceptions
import Network.Mattermost.Util
import Network.Mattermost.Types.Base
import Network.Mattermost.Types.Internal
import Network.Mattermost.Types
mmPath :: String -> IO URI
mmPath :: [Char] -> IO URI
mmPath [Char]
str =
Maybe URI -> URIParseException -> IO URI
forall e r. Exception e => Maybe r -> e -> IO r
noteE ([Char] -> Maybe URI
parseRelativeReference [Char]
str)
([Char] -> URIParseException
URIParseException ([Char]
"mmPath: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
str))
mmGetJSONBody :: FromJSON t => String -> Response_String -> IO (Value, t)
mmGetJSONBody :: forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
label Response_String
rsp = do
Response_String -> IO ()
assertJSONResponse Response_String
rsp
let value :: Either JSONDecodeException t
value = ([Char] -> JSONDecodeException)
-> Either [Char] t -> Either JSONDecodeException t
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left (\[Char]
s -> [Char] -> [Char] -> JSONDecodeException
JSONDecodeException ([Char]
"mmGetJSONBody: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
": " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
s)
(Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp))
(ByteString -> Either [Char] t
forall a. FromJSON a => ByteString -> Either [Char] a
eitherDecode ([Char] -> ByteString
BL.pack (Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp)))
let rawVal :: Either JSONDecodeException Value
rawVal = ([Char] -> JSONDecodeException)
-> Either [Char] Value -> Either JSONDecodeException Value
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left (\[Char]
s -> [Char] -> [Char] -> JSONDecodeException
JSONDecodeException ([Char]
"mmGetJSONBody: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
": " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
s)
(Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp))
(ByteString -> Either [Char] Value
forall a. FromJSON a => ByteString -> Either [Char] a
eitherDecode ([Char] -> ByteString
BL.pack (Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp)))
Either JSONDecodeException (Value, t) -> IO (Value, t)
forall e r. Exception e => Either e r -> IO r
hoistE (Either JSONDecodeException (Value, t) -> IO (Value, t))
-> Either JSONDecodeException (Value, t) -> IO (Value, t)
forall a b. (a -> b) -> a -> b
$ do
Value
x <- Either JSONDecodeException Value
rawVal
t
y <- Either JSONDecodeException t
value
(Value, t) -> Either JSONDecodeException (Value, t)
forall a. a -> Either JSONDecodeException a
forall (m :: * -> *) a. Monad m => a -> m a
return (Value
x, t
y)
mmUnauthenticatedHTTPPost :: ToJSON t => ConnectionData -> URI -> t -> IO Response_String
mmUnauthenticatedHTTPPost :: forall t.
ToJSON t =>
ConnectionData -> URI -> t -> IO Response_String
mmUnauthenticatedHTTPPost ConnectionData
cd URI
path t
json = do
Result Response_String
rsp <- ConnectionData
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a. ConnectionData -> (MMConn -> IO a) -> IO a
withConnection ConnectionData
cd ((MMConn -> IO (Result Response_String))
-> IO (Result Response_String))
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a b. (a -> b) -> a -> b
$ \MMConn
con -> do
let content :: ByteString
content = ByteString -> ByteString
BL.toStrict (t -> ByteString
forall a. ToJSON a => a -> ByteString
encode t
json)
contentLength :: Int
contentLength = ByteString -> Int
B.length ByteString
content
request :: Request [Char]
request = Request
{ rqURI :: URI
rqURI = URI
path
, rqMethod :: RequestMethod
rqMethod = RequestMethod
POST
, rqHeaders :: [Header]
rqHeaders = [ HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrHost (Text -> [Char]
T.unpack (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ ConnectionData -> Text
cdHostname ConnectionData
cd)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrUserAgent [Char]
defaultUserAgent
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentType [Char]
"application/json"
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentLength (Int -> [Char]
forall a. Show a => a -> [Char]
show Int
contentLength)
] [Header] -> [Header] -> [Header]
forall a. [a] -> [a] -> [a]
++ AutoClose -> [Header]
autoCloseToHeader (ConnectionData -> AutoClose
cdAutoClose ConnectionData
cd)
, rqBody :: [Char]
rqBody = ByteString -> [Char]
B.unpack ByteString
content
}
MMConn -> Request [Char] -> IO (Result Response_String)
forall s.
Stream s =>
s -> Request [Char] -> IO (Result Response_String)
simpleHTTP_ MMConn
con Request [Char]
request
Either ConnectionException Response_String -> IO Response_String
forall e r. Exception e => Either e r -> IO r
hoistE (Either ConnectionException Response_String -> IO Response_String)
-> Either ConnectionException Response_String -> IO Response_String
forall a b. (a -> b) -> a -> b
$ (ConnError -> ConnectionException)
-> Result Response_String
-> Either ConnectionException Response_String
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left ConnError -> ConnectionException
ConnectionException Result Response_String
rsp
mmLogin :: ConnectionData -> Login -> IO (Either LoginFailureException (Session, User))
mmLogin :: ConnectionData
-> Login -> IO (Either LoginFailureException (Session, User))
mmLogin ConnectionData
cd Login
login = do
let rawPath :: [Char]
rawPath = [Char]
"/api/v3/users/login"
URI
path <- [Char] -> IO URI
mmPath [Char]
rawPath
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
"mmLogin" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
GET [Char]
rawPath ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just (Login -> [Char]
forall a. Show a => a -> [Char]
show (Login -> [Char]) -> Login -> [Char]
forall a b. (a -> b) -> a -> b
$ Login
login { password = "<elided>" }))
Response_String
rsp <- ConnectionData -> URI -> Login -> IO Response_String
forall t.
ToJSON t =>
ConnectionData -> URI -> t -> IO Response_String
mmUnauthenticatedHTTPPost ConnectionData
cd URI
path Login
login
if (Response_String -> ResponseCode
forall a. Response a -> ResponseCode
rspCode Response_String
rsp ResponseCode -> ResponseCode -> Bool
forall a. Eq a => a -> a -> Bool
/= (Int
2,Int
0,Int
0))
then do
let eMsg :: [Char]
eMsg = [Char]
"Server returned unexpected " [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> ResponseCode -> [Char]
showRespCode (Response_String -> ResponseCode
forall a. Response a -> ResponseCode
rspCode Response_String
rsp) [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> [Char]
" response"
Either LoginFailureException (Session, User)
-> IO (Either LoginFailureException (Session, User))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either LoginFailureException (Session, User)
-> IO (Either LoginFailureException (Session, User)))
-> Either LoginFailureException (Session, User)
-> IO (Either LoginFailureException (Session, User))
forall a b. (a -> b) -> a -> b
$ LoginFailureException
-> Either LoginFailureException (Session, User)
forall a b. a -> Either a b
Left (LoginFailureException
-> Either LoginFailureException (Session, User))
-> LoginFailureException
-> Either LoginFailureException (Session, User)
forall a b. (a -> b) -> a -> b
$ [Char] -> LoginFailureException
LoginFailureException [Char]
eMsg
else do
[Char]
token <- Response_String -> HeaderName -> IO [Char]
mmGetHeader Response_String
rsp ([Char] -> HeaderName
HdrCustom [Char]
"Token")
(Value
raw, User
value) <- [Char] -> Response_String -> IO (Value, User)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"User" Response_String
rsp
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
"mmLogin" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
rawPath ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
raw)
Either LoginFailureException (Session, User)
-> IO (Either LoginFailureException (Session, User))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ((Session, User) -> Either LoginFailureException (Session, User)
forall a b. b -> Either a b
Right (ConnectionData -> Token -> Session
Session ConnectionData
cd ([Char] -> Token
Token [Char]
token), User
value))
showRespCode :: (Int, Int, Int) -> String
showRespCode :: ResponseCode -> [Char]
showRespCode (Int
a, Int
b, Int
c) = [[Char]] -> [Char]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[Char]] -> [Char]) -> [[Char]] -> [Char]
forall a b. (a -> b) -> a -> b
$ Int -> [Char]
forall a. Show a => a -> [Char]
show (Int -> [Char]) -> [Int] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Int
a, Int
b, Int
c]
mmGetInitialLoad :: Session -> IO InitialLoad
mmGetInitialLoad :: Session -> IO InitialLoad
mmGetInitialLoad Session
sess =
Session -> [Char] -> [Char] -> IO InitialLoad
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetInitialLoad" [Char]
"/api/v3/users/initial_load"
mmGetTeams :: Session -> IO (HashMap TeamId Team)
mmGetTeams :: Session -> IO (HashMap TeamId Team)
mmGetTeams Session
sess =
Session -> [Char] -> [Char] -> IO (HashMap TeamId Team)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetTeams" [Char]
"/api/v3/teams/all"
mmCreateTeam :: Session -> TeamsCreate -> IO Team
mmCreateTeam :: Session -> TeamsCreate -> IO Team
mmCreateTeam Session
sess TeamsCreate
payload = do
let path :: [Char]
path = [Char]
"/api/v3/teams/create"
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateTeam" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ TeamsCreate -> [Char]
forall a. Show a => a -> [Char]
show TeamsCreate
payload)
Response_String
rsp <- Session -> URI -> TeamsCreate -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri TeamsCreate
payload
(Value
val, Team
r) <- [Char] -> Response_String -> IO (Value, Team)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Team" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateTeam" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
Team -> IO Team
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Team
r
mmGetChannels :: Session -> TeamId -> IO Channels
mmGetChannels :: Session -> TeamId -> IO Channels
mmGetChannels Session
sess TeamId
teamid = Session -> [Char] -> [Char] -> IO Channels
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetChannels" ([Char] -> IO Channels) -> [Char] -> IO Channels
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/" (TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
mmGetMoreChannels :: Session -> TeamId -> Int -> Int -> IO Channels
mmGetMoreChannels :: Session -> TeamId -> Int -> Int -> IO Channels
mmGetMoreChannels Session
sess TeamId
teamid Int
offset Int
limit =
Session -> [Char] -> [Char] -> IO Channels
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetMoreChannels" ([Char] -> IO Channels) -> [Char] -> IO Channels
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/more/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
Int
offset
Int
limit
mmGetChannel :: Session
-> TeamId
-> ChannelId
-> IO ChannelWithData
mmGetChannel :: Session -> TeamId -> ChannelId -> IO ChannelWithData
mmGetChannel Session
sess TeamId
teamid ChannelId
chanid = Session
-> [Char]
-> [Char]
-> (ChannelWithData -> IO ChannelWithData)
-> IO ChannelWithData
forall t a.
FromJSON t =>
Session -> [Char] -> [Char] -> (t -> IO a) -> IO a
mmWithRequest Session
sess [Char]
"mmGetChannel"
([Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid))
ChannelWithData -> IO ChannelWithData
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return
mmGetAllChannelDataForUser :: Session
-> TeamId
-> UserId
-> IO (Seq.Seq ChannelData)
mmGetAllChannelDataForUser :: Session -> TeamId -> UserId -> IO (Seq ChannelData)
mmGetAllChannelDataForUser Session
sess TeamId
teamid UserId
userid =
Session -> [Char] -> [Char] -> IO (Seq ChannelData)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetAllChannelDataForUser" ([Char] -> IO (Seq ChannelData)) -> [Char] -> IO (Seq ChannelData)
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/users/%s/teams/%s/channels/members"
(UserId -> Text
forall x. IsId x => x -> Text
idString UserId
userid)
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
mmGetAllChannelsForUser :: Session
-> TeamId
-> UserId
-> IO (Seq.Seq Channel)
mmGetAllChannelsForUser :: Session -> TeamId -> UserId -> IO Channels
mmGetAllChannelsForUser Session
sess TeamId
teamid UserId
userid =
Session -> [Char] -> [Char] -> IO Channels
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetAllChannelsForUser" ([Char] -> IO Channels) -> [Char] -> IO Channels
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/users/%s/teams/%s/channels"
(UserId -> Text
forall x. IsId x => x -> Text
idString UserId
userid)
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
mmGetAllChannelsWithDataForUser :: Session
-> TeamId
-> UserId
-> IO (HM.HashMap ChannelId ChannelWithData)
mmGetAllChannelsWithDataForUser :: Session
-> TeamId -> UserId -> IO (HashMap ChannelId ChannelWithData)
mmGetAllChannelsWithDataForUser Session
sess TeamId
teamid UserId
userid = do
Channels
chans <- Session -> TeamId -> UserId -> IO Channels
mmGetAllChannelsForUser Session
sess TeamId
teamid UserId
userid
Seq ChannelData
datas <- Session -> TeamId -> UserId -> IO (Seq ChannelData)
mmGetAllChannelDataForUser Session
sess TeamId
teamid UserId
userid
let dataMap :: HashMap ChannelId ChannelData
dataMap = [(ChannelId, ChannelData)] -> HashMap ChannelId ChannelData
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([(ChannelId, ChannelData)] -> HashMap ChannelId ChannelData)
-> [(ChannelId, ChannelData)] -> HashMap ChannelId ChannelData
forall a b. (a -> b) -> a -> b
$ Seq (ChannelId, ChannelData) -> [(ChannelId, ChannelData)]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
F.toList (Seq (ChannelId, ChannelData) -> [(ChannelId, ChannelData)])
-> Seq (ChannelId, ChannelData) -> [(ChannelId, ChannelData)]
forall a b. (a -> b) -> a -> b
$ (\ChannelData
d -> (ChannelData -> ChannelId
channelDataChannelId ChannelData
d, ChannelData
d)) (ChannelData -> (ChannelId, ChannelData))
-> Seq ChannelData -> Seq (ChannelId, ChannelData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Seq ChannelData
datas
mkPair :: Channel -> (ChannelId, ChannelWithData)
mkPair Channel
chan = (Channel -> ChannelId
forall x y. HasId x y => x -> y
getId Channel
chan, Channel -> ChannelData -> ChannelWithData
ChannelWithData Channel
chan (ChannelData -> ChannelWithData) -> ChannelData -> ChannelWithData
forall a b. (a -> b) -> a -> b
$ Maybe ChannelData -> ChannelData
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ChannelData -> ChannelData)
-> Maybe ChannelData -> ChannelData
forall a b. (a -> b) -> a -> b
$ ChannelId -> HashMap ChannelId ChannelData -> Maybe ChannelData
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
HM.lookup (Channel -> ChannelId
forall x y. HasId x y => x -> y
getId Channel
chan) HashMap ChannelId ChannelData
dataMap)
HashMap ChannelId ChannelWithData
-> IO (HashMap ChannelId ChannelWithData)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (HashMap ChannelId ChannelWithData
-> IO (HashMap ChannelId ChannelWithData))
-> HashMap ChannelId ChannelWithData
-> IO (HashMap ChannelId ChannelWithData)
forall a b. (a -> b) -> a -> b
$ [(ChannelId, ChannelWithData)] -> HashMap ChannelId ChannelWithData
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([(ChannelId, ChannelWithData)]
-> HashMap ChannelId ChannelWithData)
-> [(ChannelId, ChannelWithData)]
-> HashMap ChannelId ChannelWithData
forall a b. (a -> b) -> a -> b
$ Seq (ChannelId, ChannelWithData) -> [(ChannelId, ChannelWithData)]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
F.toList (Seq (ChannelId, ChannelWithData)
-> [(ChannelId, ChannelWithData)])
-> Seq (ChannelId, ChannelWithData)
-> [(ChannelId, ChannelWithData)]
forall a b. (a -> b) -> a -> b
$ Channel -> (ChannelId, ChannelWithData)
mkPair (Channel -> (ChannelId, ChannelWithData))
-> Channels -> Seq (ChannelId, ChannelWithData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Channels
chans
mmViewChannel :: Session
-> TeamId
-> ChannelId
-> Maybe ChannelId
-> IO ()
mmViewChannel :: Session -> TeamId -> ChannelId -> Maybe ChannelId -> IO ()
mmViewChannel Session
sess TeamId
teamid ChannelId
chanid Maybe ChannelId
previd = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/view"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
prev :: [(Text, ChannelId)]
prev = Maybe (Text, ChannelId) -> [(Text, ChannelId)]
forall a. Maybe a -> [a]
maybeToList ((Text
"prev_channel_id" :: T.Text,) (ChannelId -> (Text, ChannelId))
-> Maybe ChannelId -> Maybe (Text, ChannelId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId
previd)
payload :: HashMap Text ChannelId
payload = [(Text, ChannelId)] -> HashMap Text ChannelId
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([(Text, ChannelId)] -> HashMap Text ChannelId)
-> [(Text, ChannelId)] -> HashMap Text ChannelId
forall a b. (a -> b) -> a -> b
$ [(Text
"channel_id" :: T.Text, ChannelId
chanid)] [(Text, ChannelId)] -> [(Text, ChannelId)] -> [(Text, ChannelId)]
forall a. [a] -> [a] -> [a]
++ [(Text, ChannelId)]
prev
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmViewChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ HashMap Text ChannelId -> [Char]
forall a. Show a => a -> [Char]
show HashMap Text ChannelId
payload)
Response_String
_ <- Session -> URI -> HashMap Text ChannelId -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri HashMap Text ChannelId
payload
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmViewChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmJoinChannel :: Session
-> TeamId
-> ChannelId
-> IO ()
mmJoinChannel :: Session -> TeamId -> ChannelId -> IO ()
mmJoinChannel Session
sess TeamId
teamid ChannelId
chanid = do
let path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/join"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmJoinChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
Response_String
rsp <- Session -> URI -> Text -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri (Text
""::T.Text)
(Value
val, (Channel
_::Channel)) <- [Char] -> Response_String -> IO (Value, Channel)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Channel" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmJoinChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmLeaveChannel :: Session
-> TeamId
-> ChannelId
-> IO ()
mmLeaveChannel :: Session -> TeamId -> ChannelId -> IO ()
mmLeaveChannel Session
sess TeamId
teamid ChannelId
chanid = do
let path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/leave"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
payload :: HashMap Text ChannelId
payload = [(Text, ChannelId)] -> HashMap Text ChannelId
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList [(Text
"id" :: T.Text, ChannelId
chanid)]
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmLeaveChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ HashMap Text ChannelId -> [Char]
forall a. Show a => a -> [Char]
show HashMap Text ChannelId
payload)
Response_String
rsp <- Session -> URI -> HashMap Text ChannelId -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri HashMap Text ChannelId
payload
(Value
val, (HashMap Text ChannelId
_::HM.HashMap T.Text ChannelId)) <- [Char] -> Response_String -> IO (Value, HashMap Text ChannelId)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Channel name/ID map" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateDirect" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmGetPosts :: Session
-> TeamId
-> ChannelId
-> Int
-> Int
-> IO Posts
mmGetPosts :: Session -> TeamId -> ChannelId -> Int -> Int -> IO Posts
mmGetPosts Session
sess TeamId
teamid ChannelId
chanid Int
offset Int
limit =
Session -> [Char] -> [Char] -> IO Posts
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetPosts" ([Char] -> IO Posts) -> [Char] -> IO Posts
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/page/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
Int
offset
Int
limit
mmGetPostsSince :: Session
-> TeamId
-> ChannelId
-> ServerTime
-> IO Posts
mmGetPostsSince :: Session -> TeamId -> ChannelId -> ServerTime -> IO Posts
mmGetPostsSince Session
sess TeamId
teamid ChannelId
chanid ServerTime
since =
Session -> [Char] -> [Char] -> IO Posts
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetPostsSince" ([Char] -> IO Posts) -> [Char] -> IO Posts
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/since/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
(ServerTime -> Int
timeToServer ServerTime
since)
mmGetPost :: Session
-> TeamId
-> ChannelId
-> PostId
-> IO Posts
mmGetPost :: Session -> TeamId -> ChannelId -> PostId -> IO Posts
mmGetPost Session
sess TeamId
teamid ChannelId
chanid PostId
postid = do
let path :: [Char]
path = [Char] -> Text -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/%s/get"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
(PostId -> Text
forall x. IsId x => x -> Text
idString PostId
postid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Response_String
rsp <- Session -> URI -> IO Response_String
mmRequest Session
sess URI
uri
(Value
raw, Posts
json) <- [Char] -> Response_String -> IO (Value, Posts)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Posts" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmGetPost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
raw)
Posts -> IO Posts
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Posts
json
mmGetPostsAfter :: Session
-> TeamId
-> ChannelId
-> PostId
-> Int
-> Int
-> IO Posts
mmGetPostsAfter :: Session -> TeamId -> ChannelId -> PostId -> Int -> Int -> IO Posts
mmGetPostsAfter Session
sess TeamId
teamid ChannelId
chanid PostId
postid Int
offset Int
limit =
Session -> [Char] -> [Char] -> IO Posts
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetPosts" ([Char] -> IO Posts) -> [Char] -> IO Posts
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/%s/after/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
(PostId -> Text
forall x. IsId x => x -> Text
idString PostId
postid)
Int
offset
Int
limit
mmGetPostsBefore :: Session
-> TeamId
-> ChannelId
-> PostId
-> Int
-> Int
-> IO Posts
mmGetPostsBefore :: Session -> TeamId -> ChannelId -> PostId -> Int -> Int -> IO Posts
mmGetPostsBefore Session
sess TeamId
teamid ChannelId
chanid PostId
postid Int
offset Int
limit =
Session -> [Char] -> [Char] -> IO Posts
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetPosts" ([Char] -> IO Posts) -> [Char] -> IO Posts
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/%s/before/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
(PostId -> Text
forall x. IsId x => x -> Text
idString PostId
postid)
Int
offset
Int
limit
mmSearchPosts :: Session
-> TeamId
-> T.Text
-> Bool
-> IO Posts
mmSearchPosts :: Session -> TeamId -> Text -> Bool -> IO Posts
mmSearchPosts Session
sess TeamId
teamid Text
terms Bool
isOrSearch = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/teams/%s/posts/search" (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
let req :: SearchPosts
req = Text -> Bool -> SearchPosts
SearchPosts Text
terms Bool
isOrSearch
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmSearchPosts" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ SearchPosts -> [Char]
forall a. Show a => a -> [Char]
show SearchPosts
req)
Response_String
rsp <- Session -> URI -> SearchPosts -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri SearchPosts
req
(Value
raw, Posts
value) <- [Char] -> Response_String -> IO (Value, Posts)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"SearchPostsResult" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmSearchPosts" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
raw)
Posts -> IO Posts
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Posts
value
mmGetFileInfo :: Session
-> FileId
-> IO FileInfo
mmGetFileInfo :: Session -> FileId -> IO FileInfo
mmGetFileInfo Session
sess FileId
fileId =
Session -> [Char] -> [Char] -> IO FileInfo
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetFileInfo" ([Char] -> IO FileInfo) -> [Char] -> IO FileInfo
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/files/%s/get_info" (FileId -> Text
forall x. IsId x => x -> Text
idString FileId
fileId)
mmGetFile :: Session
-> FileId
-> IO B.ByteString
mmGetFile :: Session -> FileId -> IO ByteString
mmGetFile sess :: Session
sess@(Session ConnectionData
cd Token
_) FileId
fileId = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/files/%s" (FileId -> Text
forall x. IsId x => x -> Text
idString FileId
fileId)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
"mmGetFile" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
GET [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
Response_String
rsp <- Session -> URI -> IO Response_String
mmRequest Session
sess URI
uri
ByteString -> IO ByteString
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Char] -> ByteString
B.pack (Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp))
mmGetUser :: Session -> UserId -> IO User
mmGetUser :: Session -> UserId -> IO User
mmGetUser Session
sess UserId
userid = Session -> [Char] -> [Char] -> IO User
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetUser" ([Char] -> IO User) -> [Char] -> IO User
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/users/%s/get" (UserId -> Text
forall x. IsId x => x -> Text
idString UserId
userid)
mmGetUsers :: Session -> Int -> Int -> IO (HashMap UserId User)
mmGetUsers :: Session -> Int -> Int -> IO (HashMap UserId User)
mmGetUsers Session
sess Int
offset Int
limit =
Session -> [Char] -> [Char] -> IO (HashMap UserId User)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetUsers" ([Char] -> IO (HashMap UserId User))
-> [Char] -> IO (HashMap UserId User)
forall a b. (a -> b) -> a -> b
$
[Char] -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/users/%d/%d" Int
offset Int
limit
mmGetTeamMembers :: Session -> TeamId -> IO (Seq.Seq TeamMember)
mmGetTeamMembers :: Session -> TeamId -> IO (Seq TeamMember)
mmGetTeamMembers Session
sess TeamId
teamid = Session -> [Char] -> [Char] -> IO (Seq TeamMember)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetTeamMembers" ([Char] -> IO (Seq TeamMember)) -> [Char] -> IO (Seq TeamMember)
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/members/%s" (TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
mmGetChannelMembers :: Session
-> TeamId
-> ChannelId
-> Int
-> Int
-> IO (HashMap UserId User)
mmGetChannelMembers :: Session
-> TeamId -> ChannelId -> Int -> Int -> IO (HashMap UserId User)
mmGetChannelMembers Session
sess TeamId
teamid ChannelId
chanid Int
offset Int
limit = Session -> [Char] -> [Char] -> IO (HashMap UserId User)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetChannelMembers" ([Char] -> IO (HashMap UserId User))
-> [Char] -> IO (HashMap UserId User)
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/users/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
Int
offset
Int
limit
mmGetProfilesForDMList :: Session -> TeamId
-> IO (HashMap UserId User)
mmGetProfilesForDMList :: Session -> TeamId -> IO (HashMap UserId User)
mmGetProfilesForDMList Session
sess TeamId
teamid =
Session -> [Char] -> [Char] -> IO (HashMap UserId User)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetProfilesForDMList" ([Char] -> IO (HashMap UserId User))
-> [Char] -> IO (HashMap UserId User)
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/users/profiles_for_dm_list/%s" (TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
mmGetMe :: Session -> IO User
mmGetMe :: Session -> IO User
mmGetMe Session
sess = Session -> [Char] -> [Char] -> IO User
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetMe" [Char]
"/api/v3/users/me"
mmGetProfiles :: Session
-> TeamId
-> Int
-> Int
-> IO (HashMap UserId User)
mmGetProfiles :: Session -> TeamId -> Int -> Int -> IO (HashMap UserId User)
mmGetProfiles Session
sess TeamId
teamid Int
offset Int
limit = Session -> [Char] -> [Char] -> IO (HashMap UserId User)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetProfiles" ([Char] -> IO (HashMap UserId User))
-> [Char] -> IO (HashMap UserId User)
forall a b. (a -> b) -> a -> b
$
[Char] -> Text -> Int -> Int -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/users/%d/%d"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
Int
offset
Int
limit
mmGetStatuses :: Session -> IO (HashMap UserId T.Text)
mmGetStatuses :: Session -> IO (HashMap UserId Text)
mmGetStatuses Session
sess = Session -> [Char] -> [Char] -> IO (HashMap UserId Text)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetStatuses" ([Char] -> IO (HashMap UserId Text))
-> [Char] -> IO (HashMap UserId Text)
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/users/status"
mmCreateDirect :: Session -> TeamId -> UserId -> IO Channel
mmCreateDirect :: Session -> TeamId -> UserId -> IO Channel
mmCreateDirect Session
sess TeamId
teamid UserId
userid = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/create_direct" (TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
payload :: HashMap Text UserId
payload = [(Text, UserId)] -> HashMap Text UserId
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList [(Text
"user_id" :: T.Text, UserId
userid)]
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateDirect" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ HashMap Text UserId -> [Char]
forall a. Show a => a -> [Char]
show HashMap Text UserId
payload)
Response_String
rsp <- Session -> URI -> HashMap Text UserId -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri HashMap Text UserId
payload
(Value
val, Channel
r) <- [Char] -> Response_String -> IO (Value, Channel)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Channel" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateDirect" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
Channel -> IO Channel
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Channel
r
mmCreateChannel :: Session -> TeamId -> MinChannel -> IO Channel
mmCreateChannel :: Session -> TeamId -> MinChannel -> IO Channel
mmCreateChannel Session
sess TeamId
teamid MinChannel
payload = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/create" (TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ MinChannel -> [Char]
forall a. Show a => a -> [Char]
show MinChannel
payload)
Response_String
rsp <- Session -> URI -> MinChannel -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri MinChannel
payload
(Value
val, Channel
r) <- [Char] -> Response_String -> IO (Value, Channel)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Channel" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmCreateChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
Channel -> IO Channel
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Channel
r
mmDeleteChannel :: Session -> TeamId -> ChannelId -> IO ()
mmDeleteChannel :: Session -> TeamId -> ChannelId -> IO ()
mmDeleteChannel Session
sess TeamId
teamid ChannelId
chanid = do
let path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/delete"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid) (ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmDeleteChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
Response_String
_ <- Session -> URI -> ByteString -> IO Response_String
mmRawPOST Session
sess URI
uri ByteString
""
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmDeleteChannel" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmDeletePost :: Session
-> TeamId
-> ChannelId
-> PostId
-> IO ()
mmDeletePost :: Session -> TeamId -> ChannelId -> PostId -> IO ()
mmDeletePost Session
sess TeamId
teamid ChannelId
chanid PostId
postid = do
let path :: [Char]
path = [Char] -> Text -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/%s/delete"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
(PostId -> Text
forall x. IsId x => x -> Text
idString PostId
postid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmDeletePost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
Response_String
rsp <- Session -> URI -> [[Char]] -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri ([]::[String])
(Value
_, Value
_::Value) <- [Char] -> Response_String -> IO (Value, Value)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Post" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmDeletePost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmUpdatePost :: Session
-> TeamId
-> Post
-> IO Post
mmUpdatePost :: Session -> TeamId -> Post -> IO Post
mmUpdatePost Session
sess TeamId
teamid Post
post = do
let chanid :: ChannelId
chanid = Post -> ChannelId
postChannelId Post
post
path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/update"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmUpdatePost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just (Post -> [Char]
forall a. Show a => a -> [Char]
show Post
post))
Response_String
rsp <- Session -> URI -> Post -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Post
post
(Value
val, Post
r) <- [Char] -> Response_String -> IO (Value, Post)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Post" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmUpdatePost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
Post -> IO Post
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Post
r
mmPost :: Session
-> TeamId
-> PendingPost
-> IO Post
mmPost :: Session -> TeamId -> PendingPost -> IO Post
mmPost Session
sess TeamId
teamid PendingPost
post = do
let chanid :: ChannelId
chanid = PendingPost -> ChannelId
pendingPostChannelId PendingPost
post
path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/create"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmPost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ PendingPost -> [Char]
forall a. Show a => a -> [Char]
show PendingPost
post)
Response_String
rsp <- Session -> URI -> PendingPost -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri PendingPost
post
(Value
val, Post
r) <- [Char] -> Response_String -> IO (Value, Post)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Post" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmPost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
Post -> IO Post
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Post
r
mmGetConfig :: Session
-> IO Value
mmGetConfig :: Session -> IO Value
mmGetConfig Session
sess =
Session -> [Char] -> [Char] -> IO Value
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetConfig" [Char]
"/api/v3/admin/config"
mmGetClientConfig :: Session
-> IO Value
mmGetClientConfig :: Session -> IO Value
mmGetClientConfig Session
sess =
Session -> [Char] -> [Char] -> IO Value
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetClientConfig" [Char]
"/api/v4/config/client?format=old"
mmSaveConfig :: Session
-> Value
-> IO ()
mmSaveConfig :: Session -> Value -> IO ()
mmSaveConfig Session
sess Value
config = do
let path :: [Char]
path = [Char]
"/api/v3/admin/save_config"
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmSaveConfig" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
config)
Response_String
_ <- Session -> URI -> Value -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Value
config
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmSaveConfig" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmChannelAddUser :: Session
-> TeamId
-> ChannelId
-> UserId
-> IO ChannelData
mmChannelAddUser :: Session -> TeamId -> ChannelId -> UserId -> IO ChannelData
mmChannelAddUser Session
sess TeamId
teamid ChannelId
chanId UserId
uId = do
let path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/add"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
chanId)
req :: Value
req = [Pair] -> Value
object [Key
"user_id" Key -> UserId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
.= UserId
uId]
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmChannelAddUser" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
req)
Response_String
rsp <- Session -> URI -> Value -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Value
req
(Value
val, ChannelData
r) <- [Char] -> Response_String -> IO (Value, ChannelData)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"ChannelData" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmChannelAddUser" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
ChannelData -> IO ChannelData
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ChannelData
r
mmTeamAddUser :: Session
-> TeamId
-> UserId
-> IO ()
mmTeamAddUser :: Session -> TeamId -> UserId -> IO ()
mmTeamAddUser Session
sess TeamId
teamid UserId
uId = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/add_user_to_team"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
req :: Value
req = [Pair] -> Value
object [Key
"user_id" Key -> UserId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
.= UserId
uId]
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmTeamAddUser" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
req)
Response_String
_ <- Session -> URI -> Value -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Value
req
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmTeamAddUSer" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmExecute :: Session
-> TeamId
-> MinCommand
-> IO CommandResponse
mmExecute :: Session -> TeamId -> MinCommand -> IO CommandResponse
mmExecute Session
sess TeamId
teamid MinCommand
command = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/commands/execute"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmExecute" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ MinCommand -> [Char]
forall a. Show a => a -> [Char]
show MinCommand
command)
Response_String
rsp <- Session -> URI -> MinCommand -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri MinCommand
command
(Value
val, CommandResponse
r) <- [Char] -> Response_String -> IO (Value, CommandResponse)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Value" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmExecute" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
CommandResponse -> IO CommandResponse
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return CommandResponse
r
mmUsersCreate :: ConnectionData
-> UsersCreate
-> IO User
mmUsersCreate :: ConnectionData -> UsersCreate -> IO User
mmUsersCreate ConnectionData
cd UsersCreate
usersCreate = do
let path :: [Char]
path = [Char]
"/api/v3/users/create"
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
"mmUsersCreate" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ UsersCreate -> [Char]
forall a. Show a => a -> [Char]
show UsersCreate
usersCreate)
Response_String
rsp <- ConnectionData -> URI -> UsersCreate -> IO Response_String
forall t.
ToJSON t =>
ConnectionData -> URI -> t -> IO Response_String
mmUnauthenticatedHTTPPost ConnectionData
cd URI
uri UsersCreate
usersCreate
(Value
val, User
r) <- [Char] -> Response_String -> IO (Value, User)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"User" Response_String
rsp
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
"mmUsersCreate" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
User -> IO User
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return User
r
mmUsersCreateWithSession :: Session
-> UsersCreate
-> IO User
mmUsersCreateWithSession :: Session -> UsersCreate -> IO User
mmUsersCreateWithSession Session
sess UsersCreate
usersCreate = do
let path :: [Char]
path = [Char]
"/api/v3/users/create"
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmUsersCreateWithToken" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ UsersCreate -> [Char]
forall a. Show a => a -> [Char]
show UsersCreate
usersCreate)
Response_String
rsp <- Session -> URI -> UsersCreate -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri UsersCreate
usersCreate
(Value
val, User
r) <- [Char] -> Response_String -> IO (Value, User)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"User" Response_String
rsp
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmUsersCreateWithToken" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
val)
User -> IO User
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return User
r
mmGetReactionsForPost :: Session
-> TeamId
-> ChannelId
-> PostId
-> IO [Reaction]
mmGetReactionsForPost :: Session -> TeamId -> ChannelId -> PostId -> IO [Reaction]
mmGetReactionsForPost Session
sess TeamId
tId ChannelId
cId PostId
pId = do
let path :: [Char]
path = [Char] -> Text -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/%s/posts/%s/reactions"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
tId)
(ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
cId)
(PostId -> Text
forall x. IsId x => x -> Text
idString PostId
pId)
Session -> [Char] -> [Char] -> IO [Reaction]
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetReactionsForPost" [Char]
path
mmSetPreferences :: Session
-> UserId
-> Seq.Seq Preference
-> IO ()
mmSetPreferences :: Session -> UserId -> Seq Preference -> IO ()
mmSetPreferences Session
sess UserId
uId Seq Preference
prefs = do
URI
uri <- [Char] -> IO URI
mmPath ([Char] -> IO URI) -> [Char] -> IO URI
forall a b. (a -> b) -> a -> b
$ [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/users/%s/preferences" (UserId -> Text
forall x. IsId x => x -> Text
idString UserId
uId)
Response_String
_ <- Session -> URI -> Seq Preference -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPUT Session
sess URI
uri Seq Preference
prefs
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmSavePreferences :: Session
-> Seq.Seq Preference
-> IO ()
mmSavePreferences :: Session -> Seq Preference -> IO ()
mmSavePreferences Session
sess Seq Preference
pref = do
URI
uri <- [Char] -> IO URI
mmPath [Char]
"/api/v3/preferences/save"
Response_String
_ <- Session -> URI -> Seq Preference -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Seq Preference
pref
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmDeletePreferences :: Session
-> Seq.Seq Preference
-> IO ()
mmDeletePreferences :: Session -> Seq Preference -> IO ()
mmDeletePreferences Session
sess Seq Preference
pref = do
URI
uri <- [Char] -> IO URI
mmPath [Char]
"/api/v3/preferences/delete"
Response_String
_ <- Session -> URI -> Seq Preference -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri Seq Preference
pref
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmFlagPost :: Session
-> UserId
-> PostId
-> IO ()
mmFlagPost :: Session -> UserId -> PostId -> IO ()
mmFlagPost Session
sess UserId
uId PostId
pId = do
let flaggedPost :: FlaggedPost
flaggedPost =
FlaggedPost
{ flaggedPostUserId :: UserId
flaggedPostUserId = UserId
uId
, flaggedPostId :: PostId
flaggedPostId = PostId
pId
, flaggedPostStatus :: Bool
flaggedPostStatus = Bool
True
}
let rawPath :: [Char]
rawPath = [Char]
"/api/v3/preferences/save"
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmFlagPost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
rawPath ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([FlaggedPost] -> [Char]
forall a. Show a => a -> [Char]
show [FlaggedPost
flaggedPost]))
URI
uri <- [Char] -> IO URI
mmPath [Char]
rawPath
Response_String
_ <- Session -> URI -> Seq FlaggedPost -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri (FlaggedPost -> Seq FlaggedPost
forall a. a -> Seq a
Seq.singleton FlaggedPost
flaggedPost)
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmUnflagPost :: Session
-> UserId
-> PostId
-> IO ()
mmUnflagPost :: Session -> UserId -> PostId -> IO ()
mmUnflagPost Session
sess UserId
uId PostId
pId = do
let flaggedPost :: FlaggedPost
flaggedPost =
FlaggedPost
{ flaggedPostUserId :: UserId
flaggedPostUserId = UserId
uId
, flaggedPostId :: PostId
flaggedPostId = PostId
pId
, flaggedPostStatus :: Bool
flaggedPostStatus = Bool
True
}
let rawPath :: [Char]
rawPath = [Char]
"/api/v3/preferences/delete"
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmUnflagPost" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
rawPath ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([FlaggedPost] -> [Char]
forall a. Show a => a -> [Char]
show [FlaggedPost
flaggedPost]))
URI
uri <- [Char] -> IO URI
mmPath [Char]
rawPath
Response_String
_ <- Session -> URI -> Seq FlaggedPost -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri (FlaggedPost -> Seq FlaggedPost
forall a. a -> Seq a
Seq.singleton FlaggedPost
flaggedPost)
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mmGetFlaggedPosts :: Session
-> UserId
-> IO Posts
mmGetFlaggedPosts :: Session -> UserId -> IO Posts
mmGetFlaggedPosts Session
sess UserId
uId =
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/users/%s/posts/flagged" (UserId -> Text
forall x. IsId x => x -> Text
idString UserId
uId)
in Session -> [Char] -> [Char] -> IO Posts
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmGetFlaggedPosts" [Char]
path
mmGetMyPreferences :: Session
-> IO (Seq.Seq Preference)
mmGetMyPreferences :: Session -> IO (Seq Preference)
mmGetMyPreferences Session
sess =
Session -> [Char] -> [Char] -> IO (Seq Preference)
forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
"mmMyPreferences" [Char]
"/api/v4/users/me/preferences"
mmChannelRemoveUser :: Session
-> ChannelId
-> UserId
-> IO ()
mmChannelRemoveUser :: Session -> ChannelId -> UserId -> IO ()
mmChannelRemoveUser Session
sess ChannelId
cId UserId
uId =
let path :: [Char]
path = [Char] -> Text -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v4/channels/%s/members/%s" (ChannelId -> Text
forall x. IsId x => x -> Text
idString ChannelId
cId) (UserId -> Text
forall x. IsId x => x -> Text
idString UserId
uId)
in Session -> URI -> IO ()
mmDeleteRequest Session
sess (URI -> IO ()) -> IO URI -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< [Char] -> IO URI
mmPath [Char]
path
mmCreateGroupChannel :: Session
-> [UserId]
-> IO Channel
mmCreateGroupChannel :: Session -> [UserId] -> IO Channel
mmCreateGroupChannel sess :: Session
sess@(Session ConnectionData
cd Token
_) [UserId]
uIds = do
let path :: [Char]
path = [Char]
"/api/v4/channels/group"
fnname :: [Char]
fnname = [Char]
"mmCreateGroupChannel"
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
fnname (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ [UserId] -> [Char]
forall a. Show a => a -> [Char]
show [UserId]
uIds)
Response_String
rsp <- Session -> URI -> [UserId] -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri [UserId]
uIds
(Value
raw, Channel
json) <- [Char] -> Response_String -> IO (Value, Channel)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
fnname Response_String
rsp
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
fnname (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
raw)
Channel -> IO Channel
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Channel
json
mmDeleteRequest :: Session -> URI -> IO ()
mmDeleteRequest :: Session -> URI -> IO ()
mmDeleteRequest (Session ConnectionData
cd Token
token) URI
path = do
Result Response_String
rawRsp <- ConnectionData
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a. ConnectionData -> (MMConn -> IO a) -> IO a
withConnection ConnectionData
cd ((MMConn -> IO (Result Response_String))
-> IO (Result Response_String))
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a b. (a -> b) -> a -> b
$ \MMConn
con -> do
let request :: Request [Char]
request = Request
{ rqURI :: URI
rqURI = URI
path
, rqMethod :: RequestMethod
rqMethod = RequestMethod
DELETE
, rqHeaders :: [Header]
rqHeaders = [ HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrAuthorization ([Char]
"Bearer " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Token -> [Char]
getTokenString Token
token)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrHost (Text -> [Char]
T.unpack (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ ConnectionData -> Text
cdHostname ConnectionData
cd)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrUserAgent [Char]
defaultUserAgent
] [Header] -> [Header] -> [Header]
forall a. [a] -> [a] -> [a]
++ AutoClose -> [Header]
autoCloseToHeader (ConnectionData -> AutoClose
cdAutoClose ConnectionData
cd)
, rqBody :: [Char]
rqBody = [Char]
""
}
MMConn -> Request [Char] -> IO (Result Response_String)
forall s.
Stream s =>
s -> Request [Char] -> IO (Result Response_String)
simpleHTTP_ MMConn
con Request [Char]
request
Response_String
rsp <- Either ConnectionException Response_String -> IO Response_String
forall e r. Exception e => Either e r -> IO r
hoistE (Either ConnectionException Response_String -> IO Response_String)
-> Either ConnectionException Response_String -> IO Response_String
forall a b. (a -> b) -> a -> b
$ (ConnError -> ConnectionException)
-> Result Response_String
-> Either ConnectionException Response_String
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left ConnError -> ConnectionException
ConnectionException Result Response_String
rawRsp
URI -> Response_String -> IO ()
assert200Response URI
path Response_String
rsp
mmRequest :: Session -> URI -> IO Response_String
mmRequest :: Session -> URI -> IO Response_String
mmRequest (Session ConnectionData
cd Token
token) URI
path = do
Result Response_String
rawRsp <- ConnectionData
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a. ConnectionData -> (MMConn -> IO a) -> IO a
withConnection ConnectionData
cd ((MMConn -> IO (Result Response_String))
-> IO (Result Response_String))
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a b. (a -> b) -> a -> b
$ \MMConn
con -> do
let request :: Request [Char]
request = Request
{ rqURI :: URI
rqURI = URI
path
, rqMethod :: RequestMethod
rqMethod = RequestMethod
GET
, rqHeaders :: [Header]
rqHeaders = [ HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrAuthorization ([Char]
"Bearer " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Token -> [Char]
getTokenString Token
token)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrHost (Text -> [Char]
T.unpack (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ ConnectionData -> Text
cdHostname ConnectionData
cd)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrUserAgent [Char]
defaultUserAgent
] [Header] -> [Header] -> [Header]
forall a. [a] -> [a] -> [a]
++ AutoClose -> [Header]
autoCloseToHeader (ConnectionData -> AutoClose
cdAutoClose ConnectionData
cd)
, rqBody :: [Char]
rqBody = [Char]
""
}
MMConn -> Request [Char] -> IO (Result Response_String)
forall s.
Stream s =>
s -> Request [Char] -> IO (Result Response_String)
simpleHTTP_ MMConn
con Request [Char]
request
Response_String
rsp <- Either ConnectionException Response_String -> IO Response_String
forall e r. Exception e => Either e r -> IO r
hoistE (Either ConnectionException Response_String -> IO Response_String)
-> Either ConnectionException Response_String -> IO Response_String
forall a b. (a -> b) -> a -> b
$ (ConnError -> ConnectionException)
-> Result Response_String
-> Either ConnectionException Response_String
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left ConnError -> ConnectionException
ConnectionException Result Response_String
rawRsp
URI -> Response_String -> IO ()
assert200Response URI
path Response_String
rsp
Response_String -> IO Response_String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Response_String
rsp
mmDoRequest :: FromJSON t
=> Session
-> String
-> String
-> IO t
mmDoRequest :: forall t. FromJSON t => Session -> [Char] -> [Char] -> IO t
mmDoRequest Session
sess [Char]
fnname [Char]
path = Session -> [Char] -> [Char] -> (t -> IO t) -> IO t
forall t a.
FromJSON t =>
Session -> [Char] -> [Char] -> (t -> IO a) -> IO a
mmWithRequest Session
sess [Char]
fnname [Char]
path t -> IO t
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return
mmWithRequest :: FromJSON t
=> Session
-> String
-> String
-> (t -> IO a)
-> IO a
mmWithRequest :: forall t a.
FromJSON t =>
Session -> [Char] -> [Char] -> (t -> IO a) -> IO a
mmWithRequest sess :: Session
sess@(Session ConnectionData
cd Token
_) [Char]
fnname [Char]
path t -> IO a
action = do
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
fnname (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
GET [Char]
path Maybe [Char]
forall a. Maybe a
Nothing
Response_String
rsp <- Session -> URI -> IO Response_String
mmRequest Session
sess URI
uri
(Value
raw,t
json) <- [Char] -> Response_String -> IO (Value, t)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
fnname Response_String
rsp
ConnectionData -> [Char] -> LogEventType -> IO ()
runLogger ConnectionData
cd [Char]
fnname (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
Int -> [Char] -> Maybe [Char] -> LogEventType
HttpResponse Int
200 [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ Value -> [Char]
forall a. Show a => a -> [Char]
show Value
raw)
t -> IO a
action t
json
mmPOST :: ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST :: forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
path t
json =
Session -> URI -> ByteString -> IO Response_String
mmRawPOST Session
sess URI
path (ByteString -> ByteString
BL.toStrict (t -> ByteString
forall a. ToJSON a => a -> ByteString
encode t
json))
mmPUT :: ToJSON t => Session -> URI -> t -> IO Response_String
mmPUT :: forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPUT Session
sess URI
path t
json =
Session -> URI -> ByteString -> IO Response_String
mmRawPUT Session
sess URI
path (ByteString -> ByteString
BL.toStrict (t -> ByteString
forall a. ToJSON a => a -> ByteString
encode t
json))
mmSetChannelHeader :: Session -> TeamId -> ChannelId -> T.Text -> IO Channel
Session
sess TeamId
teamid ChannelId
chanid Text
header = do
let path :: [Char]
path = [Char] -> Text -> [Char]
forall r. PrintfType r => [Char] -> r
printf [Char]
"/api/v3/teams/%s/channels/update_header"
(TeamId -> Text
forall x. IsId x => x -> Text
idString TeamId
teamid)
URI
uri <- [Char] -> IO URI
mmPath [Char]
path
let req :: SetChannelHeader
req = ChannelId -> Text -> SetChannelHeader
SetChannelHeader ChannelId
chanid Text
header
Session -> [Char] -> LogEventType -> IO ()
runLoggerS Session
sess [Char]
"mmSetChannelHeader" (LogEventType -> IO ()) -> LogEventType -> IO ()
forall a b. (a -> b) -> a -> b
$
RequestMethod -> [Char] -> Maybe [Char] -> LogEventType
HttpRequest RequestMethod
POST [Char]
path ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just (SetChannelHeader -> [Char]
forall a. Show a => a -> [Char]
show SetChannelHeader
req))
Response_String
rsp <- Session -> URI -> SetChannelHeader -> IO Response_String
forall t. ToJSON t => Session -> URI -> t -> IO Response_String
mmPOST Session
sess URI
uri SetChannelHeader
req
(Value
_, Channel
r) <- [Char] -> Response_String -> IO (Value, Channel)
forall t. FromJSON t => [Char] -> Response_String -> IO (Value, t)
mmGetJSONBody [Char]
"Channel" Response_String
rsp
Channel -> IO Channel
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Channel
r
mmRawPOST :: Session -> URI -> B.ByteString -> IO Response_String
mmRawPOST :: Session -> URI -> ByteString -> IO Response_String
mmRawPOST (Session ConnectionData
cd Token
token) URI
path ByteString
content = do
Result Response_String
rawRsp <- ConnectionData
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a. ConnectionData -> (MMConn -> IO a) -> IO a
withConnection ConnectionData
cd ((MMConn -> IO (Result Response_String))
-> IO (Result Response_String))
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a b. (a -> b) -> a -> b
$ \MMConn
con -> do
let contentLength :: Int
contentLength = ByteString -> Int
B.length ByteString
content
request :: Request [Char]
request = Request
{ rqURI :: URI
rqURI = URI
path
, rqMethod :: RequestMethod
rqMethod = RequestMethod
POST
, rqHeaders :: [Header]
rqHeaders = [ HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrAuthorization ([Char]
"Bearer " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Token -> [Char]
getTokenString Token
token)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrHost (Text -> [Char]
T.unpack (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ ConnectionData -> Text
cdHostname ConnectionData
cd)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrUserAgent [Char]
defaultUserAgent
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentType [Char]
"application/json"
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentLength (Int -> [Char]
forall a. Show a => a -> [Char]
show Int
contentLength)
] [Header] -> [Header] -> [Header]
forall a. [a] -> [a] -> [a]
++ AutoClose -> [Header]
autoCloseToHeader (ConnectionData -> AutoClose
cdAutoClose ConnectionData
cd)
, rqBody :: [Char]
rqBody = ByteString -> [Char]
B.unpack ByteString
content
}
MMConn -> Request [Char] -> IO (Result Response_String)
forall s.
Stream s =>
s -> Request [Char] -> IO (Result Response_String)
simpleHTTP_ MMConn
con Request [Char]
request
Response_String
rsp <- Either ConnectionException Response_String -> IO Response_String
forall e r. Exception e => Either e r -> IO r
hoistE (Either ConnectionException Response_String -> IO Response_String)
-> Either ConnectionException Response_String -> IO Response_String
forall a b. (a -> b) -> a -> b
$ (ConnError -> ConnectionException)
-> Result Response_String
-> Either ConnectionException Response_String
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left ConnError -> ConnectionException
ConnectionException Result Response_String
rawRsp
URI -> Response_String -> IO ()
assert200Response URI
path Response_String
rsp
Response_String -> IO Response_String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Response_String
rsp
mmRawPUT :: Session -> URI -> B.ByteString -> IO Response_String
mmRawPUT :: Session -> URI -> ByteString -> IO Response_String
mmRawPUT (Session ConnectionData
cd Token
token) URI
path ByteString
content = do
Result Response_String
rawRsp <- ConnectionData
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a. ConnectionData -> (MMConn -> IO a) -> IO a
withConnection ConnectionData
cd ((MMConn -> IO (Result Response_String))
-> IO (Result Response_String))
-> (MMConn -> IO (Result Response_String))
-> IO (Result Response_String)
forall a b. (a -> b) -> a -> b
$ \MMConn
con -> do
let contentLength :: Int
contentLength = ByteString -> Int
B.length ByteString
content
request :: Request [Char]
request = Request
{ rqURI :: URI
rqURI = URI
path
, rqMethod :: RequestMethod
rqMethod = RequestMethod
PUT
, rqHeaders :: [Header]
rqHeaders = [ HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrAuthorization ([Char]
"Bearer " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Token -> [Char]
getTokenString Token
token)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrHost (Text -> [Char]
T.unpack (Text -> [Char]) -> Text -> [Char]
forall a b. (a -> b) -> a -> b
$ ConnectionData -> Text
cdHostname ConnectionData
cd)
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrUserAgent [Char]
defaultUserAgent
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentType [Char]
"application/json"
, HeaderName -> [Char] -> Header
mkHeader HeaderName
HdrContentLength (Int -> [Char]
forall a. Show a => a -> [Char]
show Int
contentLength)
] [Header] -> [Header] -> [Header]
forall a. [a] -> [a] -> [a]
++ AutoClose -> [Header]
autoCloseToHeader (ConnectionData -> AutoClose
cdAutoClose ConnectionData
cd)
, rqBody :: [Char]
rqBody = ByteString -> [Char]
B.unpack ByteString
content
}
MMConn -> Request [Char] -> IO (Result Response_String)
forall s.
Stream s =>
s -> Request [Char] -> IO (Result Response_String)
simpleHTTP_ MMConn
con Request [Char]
request
Response_String
rsp <- Either ConnectionException Response_String -> IO Response_String
forall e r. Exception e => Either e r -> IO r
hoistE (Either ConnectionException Response_String -> IO Response_String)
-> Either ConnectionException Response_String -> IO Response_String
forall a b. (a -> b) -> a -> b
$ (ConnError -> ConnectionException)
-> Result Response_String
-> Either ConnectionException Response_String
forall b c d. (b -> c) -> Either b d -> Either c d
forall (a :: * -> * -> *) b c d.
ArrowChoice a =>
a b c -> a (Either b d) (Either c d)
left ConnError -> ConnectionException
ConnectionException Result Response_String
rawRsp
URI -> Response_String -> IO ()
assert200Response URI
path Response_String
rsp
Response_String -> IO Response_String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Response_String
rsp
assert200Response :: URI -> Response_String -> IO ()
assert200Response :: URI -> Response_String -> IO ()
assert200Response URI
path Response_String
rsp =
let is20x :: (a, a, c) -> Bool
is20x (a
2, a
0, c
_) = Bool
True
is20x (a, a, c)
_ = Bool
False
in Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ ResponseCode -> Bool
forall {a} {a} {c}. (Eq a, Eq a, Num a, Num a) => (a, a, c) -> Bool
is20x (ResponseCode -> Bool) -> ResponseCode -> Bool
forall a b. (a -> b) -> a -> b
$ Response_String -> ResponseCode
forall a. Response a -> ResponseCode
rspCode Response_String
rsp) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
let httpExc :: HTTPResponseException
httpExc = [Char] -> HTTPResponseException
HTTPResponseException ([Char] -> HTTPResponseException)
-> [Char] -> HTTPResponseException
forall a b. (a -> b) -> a -> b
$ [Char]
"mmRequest: expected 200 response, got " [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<>
(ResponseCode -> [Char]
forall a. Show a => a -> [Char]
show (ResponseCode -> [Char]) -> ResponseCode -> [Char]
forall a b. (a -> b) -> a -> b
$ Response_String -> ResponseCode
forall a. Response a -> ResponseCode
rspCode Response_String
rsp)
in case ByteString -> Either [Char] Value
forall a. FromJSON a => ByteString -> Either [Char] a
eitherDecode (ByteString -> Either [Char] Value)
-> ByteString -> Either [Char] Value
forall a b. (a -> b) -> a -> b
$ [Char] -> ByteString
BL.pack ([Char] -> ByteString) -> [Char] -> ByteString
forall a b. (a -> b) -> a -> b
$ Response_String -> [Char]
forall a. Response a -> a
rspBody Response_String
rsp of
Right (Object Object
o) ->
case Key -> Object -> Maybe Value
forall v. Key -> KeyMap v -> Maybe v
KM.lookup Key
"message" Object
o of
Just (String Text
msg) ->
let newMsg :: Text
newMsg = ([Char] -> Text
T.pack ([Char] -> Text) -> [Char] -> Text
forall a b. (a -> b) -> a -> b
$ [Char]
"Error requesting " [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> URI -> [Char]
forall a. Show a => a -> [Char]
show URI
path [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> [Char]
": ") Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
in MattermostServerError -> IO ()
forall e a. Exception e => e -> IO a
throwIO (MattermostServerError -> IO ()) -> MattermostServerError -> IO ()
forall a b. (a -> b) -> a -> b
$ Text -> MattermostServerError
MattermostServerError Text
newMsg
Maybe Value
_ -> HTTPResponseException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (HTTPResponseException -> IO ()) -> HTTPResponseException -> IO ()
forall a b. (a -> b) -> a -> b
$ HTTPResponseException
httpExc
Either [Char] Value
_ -> HTTPResponseException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (HTTPResponseException -> IO ()) -> HTTPResponseException -> IO ()
forall a b. (a -> b) -> a -> b
$ HTTPResponseException
httpExc
mmCloseSession :: Session -> IO ()
mmCloseSession :: Session -> IO ()
mmCloseSession (Session ConnectionData
cd Token
_) = ConnectionData -> IO ()
destroyConnectionData ConnectionData
cd