module Reddit.Login
  ( login ) where

import Reddit.Types.Reddit

import Data.Text (Text)
import Network.API.Builder hiding (runRoute)

loginRoute :: Text -> Text -> Route
loginRoute :: Text -> Text -> Route
loginRoute Text
user Text
pass = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"login" ]
                             [ Text
"rem" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
True
                             , Text
"user" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
user
                             , Text
"passwd" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
pass ]
                             Method
"POST"

getLoginDetails :: Monad m => Text -> Text -> ClientParams -> RedditT m LoginDetails
getLoginDetails :: Text -> Text -> ClientParams -> RedditT m LoginDetails
getLoginDetails Text
user Text
pass ClientParams
cp = ([Header] -> [Header])
-> RedditT m LoginDetails -> RedditT m LoginDetails
forall (m :: * -> *) a.
Monad m =>
([Header] -> [Header]) -> RedditT m a -> RedditT m a
withHeaders (ClientParams -> Header
mkClientParamsHeader ClientParams
cp Header -> [Header] -> [Header]
forall a. a -> [a] -> [a]
:) (RedditT m LoginDetails -> RedditT m LoginDetails)
-> RedditT m LoginDetails -> RedditT m LoginDetails
forall a b. (a -> b) -> a -> b
$ Route -> RedditT m LoginDetails
forall a (m :: * -> *).
(Receivable a, Monad m) =>
Route -> RedditT m a
receiveRoute (Route -> RedditT m LoginDetails)
-> Route -> RedditT m LoginDetails
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Route
loginRoute Text
user Text
pass

-- | Make a login request with the given username and password.
login :: Monad m
      => Text -- ^ Username to login with
      -> Text -- ^ Password to login with
      -> ClientParams
      -> RedditT m LoginDetails
login :: Text -> Text -> ClientParams -> RedditT m LoginDetails
login = Text -> Text -> ClientParams -> RedditT m LoginDetails
forall (m :: * -> *).
Monad m =>
Text -> Text -> ClientParams -> RedditT m LoginDetails
getLoginDetails