packages feed

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