-- | 'Strive.Actions.Authentication' module Strive.Options.Authentication ( BuildAuthorizeUrlOptions (..) ) where import Data.Aeson (encode) import Data.ByteString.Char8 (unpack) import Data.ByteString.Lazy (toStrict) import Data.Default (Default, def) import Data.List (intercalate) import Data.Maybe (catMaybes) import Network.HTTP.Types (QueryLike, toQuery) -- | 'Strive.Actions.buildAuthorizeUrl' data BuildAuthorizeUrlOptions = BuildAuthorizeUrlOptions { buildAuthorizeUrlOptions_approvalPrompt :: Bool , buildAuthorizeUrlOptions_privateScope :: Bool , buildAuthorizeUrlOptions_writeScope :: Bool , buildAuthorizeUrlOptions_state :: String } deriving Show instance Default BuildAuthorizeUrlOptions where def = BuildAuthorizeUrlOptions { buildAuthorizeUrlOptions_approvalPrompt = False , buildAuthorizeUrlOptions_privateScope = False , buildAuthorizeUrlOptions_writeScope = False , buildAuthorizeUrlOptions_state = "" } instance QueryLike BuildAuthorizeUrlOptions where toQuery options = toQuery $ [ ("approval_prompt", unpack (toStrict (encode (buildAuthorizeUrlOptions_approvalPrompt options)))) , ("state", buildAuthorizeUrlOptions_state options) ] ++ if null scopes then [] else [("scope", intercalate "," scopes)] where scopes = catMaybes [ if buildAuthorizeUrlOptions_privateScope options then Just "view_private" else Nothing , if buildAuthorizeUrlOptions_writeScope options then Just "write" else Nothing ]