Store refreshToken in credsExtra, if available

This commit is contained in:
patrick brisbin 2018-07-29 10:00:30 -04:00
parent d9eeb787d6
commit 44c05d7a2d
2 changed files with 15 additions and 1 deletions

View File

@ -19,6 +19,7 @@ module Yesod.Auth.OAuth2
-- * Reading our @'credsExtra'@ keys -- * Reading our @'credsExtra'@ keys
, getAccessToken , getAccessToken
, getRefreshToken
, getUserResponse , getUserResponse
, getUserResponseJSON , getUserResponseJSON
) where ) where
@ -67,6 +68,14 @@ getAccessToken :: Creds m -> Maybe AccessToken
getAccessToken = getAccessToken =
(AccessToken <$>) . lookup "accessToken" . credsExtra (AccessToken <$>) . lookup "accessToken" . credsExtra
-- | Read the @'RefreshToken'@ from the values set via @'setExtra'@
--
-- N.B. not all providers supply this value.
--
getRefreshToken :: Creds m -> Maybe RefreshToken
getRefreshToken =
(RefreshToken <$>) . lookup "refreshToken" . credsExtra
-- | Read the original profile response from the values set via @'setExtra'@ -- | Read the original profile response from the values set via @'setExtra'@
getUserResponse :: Creds m -> Maybe ByteString getUserResponse :: Creds m -> Maybe ByteString
getUserResponse = getUserResponse =

View File

@ -114,13 +114,18 @@ scopeParam d = ("scope",) . encodeUtf8 . T.intercalate d
-- | Construct part of @'credsExtra'@ -- | Construct part of @'credsExtra'@
-- --
-- Sets the following keys: -- Always the following keys:
-- --
-- - @accessToken@: to support follow-up requests -- - @accessToken@: to support follow-up requests
-- - @userResponse@: to support getting additional information -- - @userResponse@: to support getting additional information
-- --
-- May set the following keys:
--
-- - @refreshToken@: if the provider supports refreshing the @accessToken@
--
setExtra :: OAuth2Token -> BL.ByteString -> [(Text, Text)] setExtra :: OAuth2Token -> BL.ByteString -> [(Text, Text)]
setExtra token userResponse = setExtra token userResponse =
[ ("accessToken", atoken $ accessToken token) [ ("accessToken", atoken $ accessToken token)
, ("userResponse", decodeUtf8 $ BL.toStrict userResponse) , ("userResponse", decodeUtf8 $ BL.toStrict userResponse)
] ]
<> maybe [] (pure . ("refreshToken",) . rtoken) (refreshToken token)