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