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 -> Bool
buildAuthorizeUrlOptions_approvalPrompt :: Bool,
BuildAuthorizeUrlOptions -> Bool
buildAuthorizeUrlOptions_privateScope :: Bool,
BuildAuthorizeUrlOptions -> Bool
buildAuthorizeUrlOptions_writeScope :: Bool,
BuildAuthorizeUrlOptions -> String
buildAuthorizeUrlOptions_state :: String
}
deriving (Int -> BuildAuthorizeUrlOptions -> ShowS
[BuildAuthorizeUrlOptions] -> ShowS
BuildAuthorizeUrlOptions -> String
(Int -> BuildAuthorizeUrlOptions -> ShowS)
-> (BuildAuthorizeUrlOptions -> String)
-> ([BuildAuthorizeUrlOptions] -> ShowS)
-> Show BuildAuthorizeUrlOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BuildAuthorizeUrlOptions -> ShowS
showsPrec :: Int -> BuildAuthorizeUrlOptions -> ShowS
$cshow :: BuildAuthorizeUrlOptions -> String
show :: BuildAuthorizeUrlOptions -> String
$cshowList :: [BuildAuthorizeUrlOptions] -> ShowS
showList :: [BuildAuthorizeUrlOptions] -> ShowS
Show)
instance Default BuildAuthorizeUrlOptions where
def :: BuildAuthorizeUrlOptions
def =
BuildAuthorizeUrlOptions
{ buildAuthorizeUrlOptions_approvalPrompt :: Bool
buildAuthorizeUrlOptions_approvalPrompt = Bool
False,
buildAuthorizeUrlOptions_privateScope :: Bool
buildAuthorizeUrlOptions_privateScope = Bool
False,
buildAuthorizeUrlOptions_writeScope :: Bool
buildAuthorizeUrlOptions_writeScope = Bool
False,
buildAuthorizeUrlOptions_state :: String
buildAuthorizeUrlOptions_state = String
""
}
instance QueryLike BuildAuthorizeUrlOptions where
toQuery :: BuildAuthorizeUrlOptions -> Query
toQuery BuildAuthorizeUrlOptions
options =
[(String, String)] -> Query
forall a. QueryLike a => a -> Query
toQuery ([(String, String)] -> Query) -> [(String, String)] -> Query
forall a b. (a -> b) -> a -> b
$
[ ( String
"approval_prompt",
ByteString -> String
unpack
( ByteString -> ByteString
toStrict
(Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode (BuildAuthorizeUrlOptions -> Bool
buildAuthorizeUrlOptions_approvalPrompt BuildAuthorizeUrlOptions
options))
)
),
(String
"state", BuildAuthorizeUrlOptions -> String
buildAuthorizeUrlOptions_state BuildAuthorizeUrlOptions
options)
]
[(String, String)] -> [(String, String)] -> [(String, String)]
forall a. Semigroup a => a -> a -> a
<> if [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
scopes then [] else [(String
"scope", String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"," [String]
scopes)]
where
scopes :: [String]
scopes =
[Maybe String] -> [String]
forall a. [Maybe a] -> [a]
catMaybes
[ if BuildAuthorizeUrlOptions -> Bool
buildAuthorizeUrlOptions_privateScope BuildAuthorizeUrlOptions
options
then String -> Maybe String
forall a. a -> Maybe a
Just String
"view_private"
else Maybe String
forall a. Maybe a
Nothing,
if BuildAuthorizeUrlOptions -> Bool
buildAuthorizeUrlOptions_writeScope BuildAuthorizeUrlOptions
options
then String -> Maybe String
forall a. a -> Maybe a
Just String
"write"
else Maybe String
forall a. Maybe a
Nothing
]