diff --git a/Yesod/Auth/OAuth2.hs b/Yesod/Auth/OAuth2.hs index 39012b6..849eeee 100644 --- a/Yesod/Auth/OAuth2.hs +++ b/Yesod/Auth/OAuth2.hs @@ -57,17 +57,17 @@ authOAuth2 name oauth getCreds = AuthPlugin name dispatch login withCallback csrfToken = do tm <- getRouteToParent - render <- lift $ getUrlRender - let newEndpoint = oauthOAuthorizeEndpoint oauth <> "&state=" <> encodeUtf8 csrfToken - return $ oauth { - oauthCallback = Just $ encodeUtf8 $ render $ tm url, - oauthOAuthorizeEndpoint = newEndpoint + render <- lift getUrlRender + return oauth + { oauthCallback = Just $ encodeUtf8 $ render $ tm url + , oauthOAuthorizeEndpoint = oauthOAuthorizeEndpoint oauth + <> "&state=" <> encodeUtf8 csrfToken } dispatch "GET" ["forward"] = do - csrfToken <- liftIO $ generateToken + csrfToken <- liftIO generateToken setSession tokenSessionKey csrfToken - authUrl <- (bsToText . authorizationUrl) <$> withCallback csrfToken + authUrl <- bsToText . authorizationUrl <$> withCallback csrfToken lift $ redirect authUrl dispatch "GET" ["callback"] = do @@ -90,15 +90,14 @@ authOAuth2 name oauth getCreds = AuthPlugin name dispatch login dispatch _ _ = notFound - generateToken = (pack . take 30 . randomRs ('a','z')) <$> newStdGen + generateToken = pack . take 30 . randomRs ('a', 'z') <$> newStdGen tokenSessionKey :: Text tokenSessionKey = "_yesod_oauth2_" <> name - login tm = do - render <- getUrlRender - let oaUrl = render $ tm $ oauth2Url name - [whamlet| Login via #{name} |] + login tm = [whamlet| + Login via #{name} + |] bsToText :: ByteString -> Text bsToText = decodeUtf8With lenientDecode