-- | 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