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
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 :: Bool -> Bool -> Bool -> String -> BuildAuthorizeUrlOptions
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 (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
]