-- |
module Strive.Actions.Authentication
( buildAuthorizeUrl,
exchangeToken,
deauthorize,
)
where
import Data.ByteString.Char8 (unpack)
import Network.HTTP.Types (Query, renderQuery, toQuery)
import Strive.Aliases
( ApplicationId,
ApplicationSecret,
AuthorizationCode,
RedirectUri,
Result,
)
import Strive.Client (Client, buildClient)
import Strive.Internal.HTTP (post)
import Strive.Options (BuildAuthorizeUrlOptions)
import Strive.Types (DeauthorizationResponse, TokenExchangeResponse)
-- |
buildAuthorizeUrl ::
ApplicationId -> RedirectUri -> BuildAuthorizeUrlOptions -> String
buildAuthorizeUrl clientId redirectUri options =
"https://www.strava.com/oauth/authorize" <> unpack (renderQuery True query)
where
query =
toQuery
[ ("client_id", show clientId),
("redirect_uri", redirectUri),
("response_type", "code")
]
<> toQuery options
-- |
exchangeToken ::
ApplicationId ->
ApplicationSecret ->
AuthorizationCode ->
IO (Result TokenExchangeResponse)
exchangeToken clientId clientSecret code = do
client <- buildClient Nothing
post client resource query
where
resource = "oauth/token"
query =
[ ("client_id", show clientId),
("client_secret", clientSecret),
("code", code)
]
-- |
deauthorize :: Client -> IO (Result DeauthorizationResponse)
deauthorize client = post client resource query
where
resource = "oauth/deauthorize"
query = [] :: Query