diff --git a/package.yaml b/package.yaml index e389c65..d0d4650 100644 --- a/package.yaml +++ b/package.yaml @@ -21,7 +21,7 @@ library: - aeson >=0.6 && <1.4 - bytestring >=0.9.1.4 - errors - - hoauth2 >=1.3.0 && <1.6 + - hoauth2 >=1.3.0 && <1.8 - http-client >=0.4.0 && <0.6 - http-conduit >=2.0 && <3.0 - http-types >=0.8 && <0.13 @@ -31,8 +31,8 @@ library: - text >=0.7 && <2.0 - transformers >=0.2.2 && <0.6 - uri-bytestring - - yesod-auth >=1.3 && <1.5 - - yesod-core >=1.2 && <1.5 + - yesod-auth >=1.6.0 && <1.7 + - yesod-core >=1.6.0 && <1.7 executables: yesod-auth-oauth2-example: diff --git a/src/Yesod/Auth/OAuth2.hs b/src/Yesod/Auth/OAuth2.hs index 0c3a7d3..53b4395 100644 --- a/src/Yesod/Auth/OAuth2.hs +++ b/src/Yesod/Auth/OAuth2.hs @@ -52,7 +52,7 @@ authOAuth2 name = authOAuth2Widget [whamlet|Login via #{name}|] name -- authOAuth2Widget :: YesodAuth m - => WidgetT m IO () + => WidgetFor m () -> Text -> OAuth2 -> FetchCreds m diff --git a/src/Yesod/Auth/OAuth2/BattleNet.hs b/src/Yesod/Auth/OAuth2/BattleNet.hs index f7e3af9..286973b 100644 --- a/src/Yesod/Auth/OAuth2/BattleNet.hs +++ b/src/Yesod/Auth/OAuth2/BattleNet.hs @@ -29,7 +29,7 @@ pluginName = "battle.net" oauth2BattleNet :: YesodAuth m - => WidgetT m IO () -- ^ Login widget + => WidgetFor m () -- ^ Login widget -> Text -- ^ User region (e.g. "eu", "cn", "us") -> Text -- ^ Client ID -> Text -- ^ Client Secret @@ -64,6 +64,6 @@ wwwHost :: Text -> Host wwwHost "cn" = "www.battlenet.com.cn" wwwHost region = Host $ encodeUtf8 $ region <> ".battle.net" -oAuth2BattleNet :: YesodAuth m => Text -> Text -> Text -> WidgetT m IO () -> AuthPlugin m +oAuth2BattleNet :: YesodAuth m => Text -> Text -> Text -> WidgetFor m () -> AuthPlugin m oAuth2BattleNet i s r w = oauth2BattleNet w r i s {-# DEPRECATED oAuth2BattleNet "Use oauth2BattleNet" #-} diff --git a/src/Yesod/Auth/OAuth2/Dispatch.hs b/src/Yesod/Auth/OAuth2/Dispatch.hs index c044a8c..8f0b372 100644 --- a/src/Yesod/Auth/OAuth2/Dispatch.hs +++ b/src/Yesod/Auth/OAuth2/Dispatch.hs @@ -3,6 +3,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} module Yesod.Auth.OAuth2.Dispatch ( FetchCreds , dispatchAuthRequest @@ -46,7 +47,7 @@ dispatchForward :: Text -> OAuth2 -> AuthHandler m TypedContent dispatchForward name oauth2 = do csrf <- setSessionCSRF $ tokenSessionKey name oauth2' <- withCallbackAndState name oauth2 csrf - lift $ redirect $ toText $ authorizationUrl oauth2' + redirect $ toText $ authorizationUrl oauth2' -- | Handle @GET \/callback@ -- @@ -59,11 +60,11 @@ dispatchCallback name oauth2 getCreds = do csrf <- verifySessionCSRF $ tokenSessionKey name onErrorResponse errInvalidOAuth code <- requireGetParam "code" - manager <- lift $ getsYesod authHttpManager + manager <- authHttpManager oauth2' <- withCallbackAndState name oauth2 csrf token <- denyLeft $ fetchAccessToken manager oauth2' $ ExchangeToken code creds <- denyLeft $ tryIO $ getCreds manager token - lift $ setCredsRedirect creds + setCredsRedirect creds where -- On a Left result, log it and return an opaque permission-denied denyLeft :: (MonadHandler m, MonadLogger m, Show e) => IO (Either e a) -> m a @@ -81,7 +82,8 @@ withCallbackAndState name oauth2 csrf = do let callbackText = render url callback <- maybe - (throwString + (liftIO + $ throwString $ "Invalid callback URI: " <> T.unpack callbackText <> ". Not using an absolute Approot?" @@ -93,9 +95,9 @@ withCallbackAndState name oauth2 csrf = do `withQuery` [("state", encodeUtf8 csrf)] } -getParentUrlRender :: HandlerT child (HandlerT parent IO) (Route child -> Text) +getParentUrlRender :: MonadHandler m => m (Route (SubHandlerSite m) -> Text) getParentUrlRender = (.) - <$> lift getUrlRender + <$> getUrlRender <*> getRouteToParent -- | Set a random, 30-character value in the session diff --git a/src/Yesod/Auth/OAuth2/EveOnline.hs b/src/Yesod/Auth/OAuth2/EveOnline.hs index 4a7294f..6477063 100644 --- a/src/Yesod/Auth/OAuth2/EveOnline.hs +++ b/src/Yesod/Auth/OAuth2/EveOnline.hs @@ -30,9 +30,9 @@ data WidgetType m | SmallWhite | BigBlack | SmallBlack - | Custom (WidgetT m IO ()) + | Custom (WidgetFor m ()) -asWidget :: YesodAuth m => WidgetType m -> WidgetT m IO () +asWidget :: YesodAuth m => WidgetType m -> WidgetFor m () asWidget Plain = [whamlet|Login via eveonline|] asWidget BigWhite = [whamlet||] asWidget BigBlack = [whamlet||] diff --git a/stack.yaml b/stack.yaml index e8ce11d..4804724 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,5 +1,6 @@ --- -resolver: lts-10.7 - +resolver: lts-11.5 +extra-deps: + - hoauth2-1.7.1 ghc-options: - "$locals": -fhide-source-paths + "$locals": -fhide-source-paths