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
, getAccessToken
, getRefreshToken
, getUserResponse
, getUserResponseJSON
) where
@ -67,6 +68,14 @@ getAccessToken :: Creds m -> Maybe AccessToken
getAccessToken =
(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'@
getUserResponse :: Creds m -> Maybe ByteString
getUserResponse =

View File

@ -114,13 +114,18 @@ scopeParam d = ("scope",) . encodeUtf8 . T.intercalate d
-- | Construct part of @'credsExtra'@
--
-- Sets the following keys:
-- Always the following keys:
--
-- - @accessToken@: to support follow-up requests
-- - @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 token userResponse =
[ ("accessToken", atoken $ accessToken token)
, ("userResponse", decodeUtf8 $ BL.toStrict userResponse)
]
<> maybe [] (pure . ("refreshToken",) . rtoken) (refreshToken token)