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