hoauth2-1.6.2: example/Okta/test.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Main where
import Data.Aeson
import Data.Aeson.Types
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BSL
import qualified Data.Text as T
import GHC.Generics
import Network.HTTP.Conduit
import qualified Network.HTTP.Types as HT
import URI.ByteString
import URI.ByteString.QQ
import Network.OAuth.OAuth2
import Keys
data Errors =
SomeRandomError
deriving (Show, Eq, Generic)
instance FromJSON Errors where
parseJSON = genericParseJSON defaultOptions { constructorTagModifier = camelTo2 '_', allNullaryToStringTag = True }
main :: IO ()
main = do
BS.putStrLn
$ serializeURIRef'
$ appendQueryParams [("scope", "openid profile"), ("state", "test-state-123")]
$ authorizationUrl oktaKey
putStrLn "visit the url and paste code here: "
code <- getLine
mgr <- newManager tlsManagerSettings
token <- fetchAccessToken mgr oktaKey (ExchangeToken (T.pack code))
print token
case token of
Right at -> getUserInfo mgr (accessToken at) >>= print
Left _ -> putStrLn "no access token found yet"
getUserInfo :: Manager -> AccessToken -> IO (OAuth2Result Errors BSL.ByteString)
getUserInfo mgr token =
authGetBS mgr token [uri|https://dev-148986.oktapreview.com/oauth2/v1/userinfo|]