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