packages feed

gogol 0.3.0 → 0.4.0

raw patch · 8 files changed

+180/−75 lines, 8 filesdep +unliftio-coredep −monad-controldep −transformers-basedep ~gogol-coredep ~http-conduitPVP ok

version bump matches the API change (PVP)

Dependencies added: unliftio-core

Dependencies removed: monad-control, transformers-base

Dependency ranges changed: gogol-core, http-conduit

API changes (from Hackage documentation)

- Network.Google: instance Control.Monad.Base.MonadBase GHC.Types.IO (Network.Google.Google s)
- Network.Google: instance Control.Monad.Trans.Control.MonadBaseControl GHC.Types.IO (Network.Google.Google s)
- Network.Google.Auth: Secret :: Text -> Secret
- Network.Google.Auth: newtype Secret :: *
+ Network.Google: instance Control.Monad.IO.Unlift.MonadUnliftIO (Network.Google.Google s)
+ Network.Google: type family HasScope (s :: [Symbol]) a :: Constraint
+ Network.Google.Auth: GSecret :: Text -> GSecret
+ Network.Google.Auth: newtype GSecret
+ Network.Google.Auth: serviceAccountUser :: forall s. AllowScopes s => Maybe Text -> Credentials s -> Credentials s
+ Network.Google.Auth.Scope: type family Delete x xs
- Network.Google: Body :: ~MediaType -> ~RequestBody -> Body
+ Network.Google: Body :: !MediaType -> !RequestBody -> Body
- Network.Google: class AsAuthError a where _RetrievalError = _AuthError . _RetrievalError _MissingFileError = _AuthError . _MissingFileError _InvalidFileError = _AuthError . _InvalidFileError _TokenRefreshError = _AuthError . _TokenRefreshError
+ Network.Google: class AsAuthError a
- Network.Google: class HasEnv s a | a -> s where envOverride = environment . lens _envOverride (\ s a -> s {_envOverride = a}) envLogger = environment . lens _envLogger (\ s a -> s {_envLogger = a}) envManager = environment . lens _envManager (\ s a -> s {_envManager = a}) envStore = environment . lens _envStore (\ s a -> s {_envStore = a}) envScopes = environment . lens (\ _ -> Proxy :: Proxy s) (flip allow)
+ Network.Google: class HasEnv s a | a -> s
- Network.Google: data Body :: *
+ Network.Google: data Body
- Network.Google: runResourceT :: MonadBaseControl IO m => ResourceT m a -> m a
+ Network.Google: runResourceT :: MonadUnliftIO m => ResourceT m a -> m a
- Network.Google.Auth: Auth :: !(Credentials s) -> !(OAuthToken s) -> Auth
+ Network.Google.Auth: Auth :: !Credentials s -> !OAuthToken s -> Auth
- Network.Google.Auth: FromClient :: !OAuthClient -> !(OAuthCode s) -> Credentials
+ Network.Google.Auth: FromClient :: !OAuthClient -> !OAuthCode s -> Credentials
- Network.Google.Auth: OAuthClient :: !ClientId -> !Secret -> OAuthClient
+ Network.Google.Auth: OAuthClient :: !ClientId -> !GSecret -> OAuthClient
- Network.Google.Auth: OAuthToken :: !AccessToken -> !(Maybe RefreshToken) -> !UTCTime -> OAuthToken
+ Network.Google.Auth: OAuthToken :: !AccessToken -> !Maybe RefreshToken -> !UTCTime -> OAuthToken
- Network.Google.Auth: TokenRefreshError :: Status -> Text -> (Maybe Text) -> AuthError
+ Network.Google.Auth: TokenRefreshError :: Status -> Text -> Maybe Text -> AuthError
- Network.Google.Auth: [_clientSecret] :: OAuthClient -> !Secret
+ Network.Google.Auth: [_clientSecret] :: OAuthClient -> !GSecret
- Network.Google.Auth: [_credentials] :: Auth -> !(Credentials s)
+ Network.Google.Auth: [_credentials] :: Auth -> !Credentials s
- Network.Google.Auth: [_tokenRefresh] :: OAuthToken -> !(Maybe RefreshToken)
+ Network.Google.Auth: [_tokenRefresh] :: OAuthToken -> !Maybe RefreshToken
- Network.Google.Auth: [_token] :: Auth -> !(OAuthToken s)
+ Network.Google.Auth: [_token] :: Auth -> !OAuthToken s
- Network.Google.Auth: class AsAuthError a where _RetrievalError = _AuthError . _RetrievalError _MissingFileError = _AuthError . _MissingFileError _InvalidFileError = _AuthError . _InvalidFileError _TokenRefreshError = _AuthError . _TokenRefreshError
+ Network.Google.Auth: class AsAuthError a
- Network.Google.Auth: newtype AccessToken :: *
+ Network.Google.Auth: newtype AccessToken
- Network.Google.Auth: newtype ClientId :: *
+ Network.Google.Auth: newtype ClientId
- Network.Google.Auth: newtype OAuthScope :: *
+ Network.Google.Auth: newtype OAuthScope
- Network.Google.Auth: newtype RefreshToken :: *
+ Network.Google.Auth: newtype RefreshToken
- Network.Google.Auth: newtype ServiceId :: *
+ Network.Google.Auth: newtype ServiceId
- Network.Google.Auth.InstalledApplication: exchangeCode :: (MonadIO m, MonadCatch m) => OAuthClient -> (OAuthCode s) -> Logger -> Manager -> m (OAuthToken s)
+ Network.Google.Auth.InstalledApplication: exchangeCode :: (MonadIO m, MonadCatch m) => OAuthClient -> OAuthCode s -> Logger -> Manager -> m (OAuthToken s)
- Network.Google.Auth.InstalledApplication: refreshToken :: (MonadIO m, MonadCatch m) => OAuthClient -> (OAuthToken s) -> Logger -> Manager -> m (OAuthToken s)
+ Network.Google.Auth.InstalledApplication: refreshToken :: (MonadIO m, MonadCatch m) => OAuthClient -> OAuthToken s -> Logger -> Manager -> m (OAuthToken s)
- Network.Google.Env: Env :: !(Dual (Endo ServiceConfig)) -> !Logger -> !Manager -> !(Store s) -> Env
+ Network.Google.Env: Env :: !Dual (Endo ServiceConfig) -> !Logger -> !Manager -> !Store s -> Env
- Network.Google.Env: [_envOverride] :: Env -> !(Dual (Endo ServiceConfig))
+ Network.Google.Env: [_envOverride] :: Env -> !Dual (Endo ServiceConfig)
- Network.Google.Env: [_envStore] :: Env -> !(Store s)
+ Network.Google.Env: [_envStore] :: Env -> !Store s
- Network.Google.Env: class HasEnv s a | a -> s where envOverride = environment . lens _envOverride (\ s a -> s {_envOverride = a}) envLogger = environment . lens _envLogger (\ s a -> s {_envLogger = a}) envManager = environment . lens _envManager (\ s a -> s {_envManager = a}) envStore = environment . lens _envStore (\ s a -> s {_envStore = a}) envScopes = environment . lens (\ _ -> Proxy :: Proxy s) (flip allow)
+ Network.Google.Env: class HasEnv s a | a -> s

Files

CHANGELOG.md view
@@ -1,5 +1,92 @@ # Change Log +## [0.4.0](https://github.com/brendanhay/gogol/tree/0.4.0)++Released: **04 February, 2019**, Compare: [0.4.0](https://github.com/brendanhay/gogol/compare/0.3.0...0.4.0)++### Added++- Added 3 examples of Google Sheets [\#80](https://github.com/brendanhay/gogol/pull/80)+- Support service account user impersonation [\#78](https://github.com/brendanhay/gogol/pull/78)++### Fixed++- Fixed tinylog typo [\#76](https://github.com/brendanhay/gogol/pull/76)+- Fix import conflicts for servant 0.13 [\#96](https://github.com/brendanhay/gogol/pull/96)+- Updated dependencies++## New Libraries++- `gogol-abusiveexperiencereport`+- `gogol-acceleratedmobilepageurl`+- `gogol-accesscontextmanager`+- `gogol-adexchangebuyer2`+- `gogol-adexperiencereport`+- `gogol-alertcenter`+- `gogol-analyticsreporting`+- `gogol-androiddeviceprovisioning`+- `gogol-androidmanagement`+- `gogol-bigquerydatatransfer`+- `gogol-bigtableadmin`+- `gogol-binaryauthorization`+- `gogol-chat`+- `gogol-cloudasset`+- `gogol-clouderrorreporting`+- `gogol-cloudfunctions`+- `gogol-cloudidentity`+- `gogol-cloudiot`+- `gogol-cloudkms`+- `gogol-cloudprofiler`+- `gogol-cloudscheduler`+- `gogol-cloudsearch`+- `gogol-cloudshell`+- `gogol-cloudtasks`+- `gogol-composer`+- `gogol-consumersurveys`+- `gogol-containeranalysis`+- `gogol-dialogflow`+- `gogol-digitalassetlinks`+- `gogol-dlp`+- `gogol-driveactivity`+- `gogol-file`+- `gogol-firebasehosting`+- `gogol-firebaseremoteconfig`+- `gogol-firestore`+- `gogol-iamcredentials`+- `gogol-iap`+- `gogol-indexing`+- `gogol-jobs`+- `gogol-libraryagent`+- `gogol-oslogin`+- `gogol-photoslibrary`+- `gogol-playcustomapp`+- `gogol-poly`+- `gogol-redis`+- `gogol-remotebuildexecution`+- `gogol-searchconsole`+- `gogol-servicebroker`+- `gogol-serviceconsumermanagement`+- `gogol-servicenetworking`+- `gogol-serviceusage`+- `gogol-serviceuser`+- `gogol-sourcerepo`+- `gogol-spanner`+- `gogol-speech`+- `gogol-streetviewpublish`+- `gogol-surveys`+- `gogol-testing`+- `gogol-texttospeech`+- `gogol-toolresults`+- `gogol-tpu`+- `gogol-tracing`+- `gogol-vault`+- `gogol-videointelligence`+- `gogol-websecurityscanner`++### Updated Service Definitions++- All service definitions have been updated to their latest respective versions.+ ## [0.3.0](https://github.com/brendanhay/gogol/tree/0.3.0)  Released: **12 July, 2017**, Compare: [0.3.0](https://github.com/brendanhay/gogol/compare/0.2.0...0.3.0)
gogol.cabal view
@@ -1,5 +1,5 @@ name:                  gogol-version:               0.3.0+version:               0.4.0 synopsis:              Comprehensive Google Services SDK. homepage:              https://github.com/brendanhay/gogol bug-reports:           https://github.com/brendanhay/gogol/issues@@ -66,21 +66,20 @@         , directory            >= 1.2         , exceptions           >= 0.6         , filepath             >= 1.2-        , gogol-core           == 0.3.0.*+        , gogol-core           == 0.4.0.*         , http-client          >= 0.5 && < 1-        , http-conduit         >= 2.2 && < 3+        , http-conduit         >= 2.3 && < 3         , http-media           >= 0.6         , http-types           >= 0.8.6         , lens                 >= 4.4         , memory               >= 0.8         , mime-types           >= 0.1-        , monad-control        >= 1         , mtl                  >= 2.1.3.1         , resourcet            >= 1.1         , text                 >= 1.1         , time                 >= 1.2         , transformers         >= 0.2-        , transformers-base    >= 0.4+        , unliftio-core        >= 0.1         , unordered-containers >= 0.2.5         , x509                 >= 1.5         , x509-store           >= 1.5
src/Network/Google.hs view
@@ -114,33 +114,34 @@     , module Network.Google.Types     ) where -import           Control.Applicative-import           Control.Exception.Lens-import           Control.Monad-import           Control.Monad.Base-import           Control.Monad.Catch-import           Control.Monad.Reader-import qualified Control.Monad.RWS.Lazy         as LRW-import qualified Control.Monad.RWS.Strict       as RW-import qualified Control.Monad.State.Lazy       as LS-import qualified Control.Monad.State.Strict     as S-import           Control.Monad.Trans.Control-import           Control.Monad.Trans.Except     (ExceptT)-import           Control.Monad.Trans.Identity   (IdentityT)-import           Control.Monad.Trans.List       (ListT)-import           Control.Monad.Trans.Maybe      (MaybeT)-import           Control.Monad.Trans.Resource-import qualified Control.Monad.Writer.Lazy      as LW-import qualified Control.Monad.Writer.Strict    as W-import           Network.Google.Auth-import           Network.Google.Env-import           Network.Google.Internal.Body-import           Network.Google.Internal.HTTP-import           Network.Google.Internal.Logger-import           Network.Google.Prelude-import           Network.Google.Types-import           Network.HTTP.Conduit           (newManager, tlsManagerSettings)+import Control.Applicative+import Control.Exception.Lens+import Control.Monad+import Control.Monad.Catch+import Control.Monad.IO.Unlift      (MonadUnliftIO (withRunInIO))+import Control.Monad.Reader+import Control.Monad.Trans.Except   (ExceptT)+import Control.Monad.Trans.Identity (IdentityT)+import Control.Monad.Trans.List     (ListT)+import Control.Monad.Trans.Maybe    (MaybeT)+import Control.Monad.Trans.Resource +import Network.Google.Auth+import Network.Google.Env+import Network.Google.Internal.Body+import Network.Google.Internal.HTTP+import Network.Google.Internal.Logger+import Network.Google.Prelude+import Network.Google.Types+import Network.HTTP.Conduit           (newManager, tlsManagerSettings)++import qualified Control.Monad.Writer.Lazy   as LW+import qualified Control.Monad.Writer.Strict as W+import qualified Control.Monad.RWS.Lazy      as LRW+import qualified Control.Monad.RWS.Strict    as RW+import qualified Control.Monad.State.Lazy    as LS+import qualified Control.Monad.State.Strict  as S+ -- | The 'Google' monad containing configuration environment and tracks -- resource allocation via 'ResourceT'. -- The functions in "Network.Google" are generalised@@ -155,7 +156,6 @@         , MonadThrow         , MonadCatch         , MonadMask-        , MonadBase IO         , MonadReader (Env s)         , MonadResource         )@@ -183,11 +183,11 @@ instance AllowScopes s => MonadGoogle s (Google s) where     liftGoogle = id -instance MonadBaseControl IO (Google s) where-    type StM (Google s) a = StM (ReaderT (Env s) (ResourceT IO)) a--    liftBaseWith f = Google $ liftBaseWith $ \g -> f (g . unGoogle)-    restoreM       = Google . restoreM+instance MonadUnliftIO (Google s) where+    withRunInIO inner =+        Google $ withRunInIO $ \run ->+            inner (run . unGoogle)+    {-# INLINE withRunInIO #-}  instance MonadGoogle s m => MonadGoogle s (IdentityT m) where     liftGoogle = lift . liftGoogle@@ -440,6 +440,6 @@ The 'newLogger' function can be used to construct a simple logger which writes output to a 'Handle', but in most production code you should probably consider using a more robust logging library such as-<http://hackage.haskell.org/package/tiny-log tiny-log> or+<http://hackage.haskell.org/package/tinylog tinylog> or <http://hackage.haskell.org/package/fast-logger fast-logger>. -}
src/Network/Google/Auth.hs view
@@ -25,6 +25,9 @@     , saveAuthorizedUserToWellKnownPath     , saveAuthorizedUser +    -- ** Service account user impersonation+    , serviceAccountUser+     -- ** Installed Application Credentials     , installedApplication     , formURL@@ -60,7 +63,7 @@     -- * Re-exported Types     , AccessToken    (..)     , RefreshToken   (..)-    , Secret         (..)+    , GSecret        (..)     , ServiceId      (..)     , ClientId       (..) @@ -163,10 +166,10 @@ exchange c l = fmap (Auth c) . action l   where     action = case c of-        FromMetadata s    -> metadataToken       s-        FromAccount  a    -> serviceAccountToken a (Proxy :: Proxy s)-        FromClient   x n  -> exchangeCode        x n-        FromUser     u    -> authorizedUserToken u Nothing+        FromMetadata s   -> metadataToken       s+        FromAccount  a   -> serviceAccountToken a (Proxy :: Proxy s)+        FromClient   x n -> exchangeCode        x n+        FromUser     u   -> authorizedUserToken u Nothing  -- | Refresh an existing 'OAuthToken'. refresh :: forall m s. (MonadIO m, MonadCatch m, AllowScopes s)@@ -198,3 +201,13 @@             , "Bearer " <> toHeader (_tokenAccess t)             ) : Client.requestHeaders rq         }++-- | Set the user to be impersonated for a service account with domain+-- wide delegation. See+-- https://developers.google.com/identity/protocols/OAuth2ServiceAccount+serviceAccountUser :: forall s. (AllowScopes s)+                   => Maybe Text+                   -> Credentials s+                   -> Credentials s+serviceAccountUser u (FromAccount s) = FromAccount $ s { _serviceAccountUser = u }+serviceAccountUser _ c               = c
src/Network/Google/Auth/ServiceAccount.hs view
@@ -125,10 +125,10 @@             , "kid" .= _serviceKeyId s             ] -        payload = base64Encode+        payload = base64Encode $             [ "aud"   .= tokenURL             , "scope" .= concatScopes (allowScopes p)             , "iat"   .= n             , "exp"   .= (n + seconds maxTokenLifetime)             , "iss"   .= _serviceEmail s-            ]+            ] <> maybe [] (\sub -> ["sub" .= sub]) (_serviceAccountUser s)
src/Network/Google/Internal/Auth.hs view
@@ -91,10 +91,11 @@ /See:/ <https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority Delegating authority to your service account>. -} data ServiceAccount = ServiceAccount-    { _serviceId         :: !ClientId-    , _serviceEmail      :: !Text-    , _serviceKeyId      :: !Text-    , _servicePrivateKey :: !PrivateKey+    { _serviceId          :: !ClientId+    , _serviceEmail       :: !Text+    , _serviceKeyId       :: !Text+    , _servicePrivateKey  :: !PrivateKey+    , _serviceAccountUser :: !(Maybe Text)     } deriving (Eq, Show)  instance FromJSON ServiceAccount where@@ -109,6 +110,7 @@             <*> o .: "client_email"             <*> o .: "private_key_id"             <*> pure k+            <*> pure Nothing  {-| Authorized User credentials which are typically generated by the Cloud SDK Tools such as @gcloud init@, of the following form:@@ -126,7 +128,7 @@ data AuthorizedUser = AuthorizedUser     { _userId      :: !ClientId     , _userRefresh :: !RefreshToken-    , _userSecret  :: !Secret+    , _userSecret  :: !GSecret     } deriving (Eq, Show)  instance ToJSON AuthorizedUser where@@ -145,7 +147,7 @@ -- | A client identifier and accompanying secret used to obtain/refresh a token. data OAuthClient = OAuthClient     { _clientId     :: !ClientId-    , _clientSecret :: !Secret+    , _clientSecret :: !GSecret     } deriving (Eq, Show)  {-| An OAuth bearer type token of the following form:
src/Network/Google/Internal/HTTP.hs view
@@ -15,28 +15,32 @@ -- module Network.Google.Internal.HTTP where -import           Control.Lens                      ((%~), (&))-import           Control.Monad.Catch-import           Control.Monad.IO.Class            (MonadIO)-import           Control.Monad.Trans.Resource      (MonadResource (..))-import qualified Data.ByteString.Lazy              as LBS-import           Data.Conduit                      (($$+-))-import qualified Data.Conduit.List                 as Conduit-import           Data.Monoid                       (Dual (..), Endo (..), (<>))-import qualified Data.Text.Encoding                as Text-import qualified Data.Text.Lazy                    as LText-import qualified Data.Text.Lazy.Builder            as Build-import           GHC.Exts                          (toList)-import           Network.Google.Auth               (AllowScopes, authorize)-import           Network.Google.Env                (Env (..))-import           Network.Google.Internal.Logger    (logDebug)-import           Network.Google.Internal.Multipart-import           Network.Google.Types-import qualified Network.HTTP.Client.Conduit       as Client-import           Network.HTTP.Conduit-import           Network.HTTP.Media                (RenderHeader (..))-import           Network.HTTP.Types+import Control.Lens                 ((%~), (&))+import Control.Monad.Catch+import Control.Monad.IO.Class       (MonadIO)+import Control.Monad.Trans.Resource (MonadResource (..)) +import Data.Conduit (($$+-))+import Data.Monoid  (Dual (..), Endo (..), (<>))++import GHC.Exts (toList)++import Network.Google.Auth               (AllowScopes, authorize)+import Network.Google.Env                (Env (..))+import Network.Google.Internal.Logger    (logDebug)+import Network.Google.Internal.Multipart+import Network.Google.Types+import Network.HTTP.Conduit+import Network.HTTP.Media                (RenderHeader (..))+import Network.HTTP.Types++import qualified Data.ByteString.Lazy        as LBS+import qualified Data.Conduit.List           as Conduit+import qualified Data.Text.Encoding          as Text+import qualified Data.Text.Lazy              as LText+import qualified Data.Text.Lazy.Builder      as Build+import qualified Network.HTTP.Client.Conduit as Client+ -- FIXME: "mediaType" param also comes/calculated from the request body? -- -- Resumable endpoints - Not supported to begin with, need to figure@@ -53,7 +57,7 @@   where     Request       {..} = _cliRequest     ServiceConfig {..} = _cliService-    Client        {..} = requestClient x+    GClient       {..} = requestClient x         & clientService %~ appEndo (getDual _envOverride)      go = liftResourceT $ do@@ -103,7 +107,7 @@     statusCheck rs         | _cliCheck (responseStatus rs) = pure ()         | otherwise                     = do-                b <- LBS.fromChunks <$> (responseBody rs $$+- Conduit.consume)+                b <- sinkLBS (responseBody rs)                 throwM . toException . ServiceError $ ServiceError'                     { _serviceId      = _svcId                     , _serviceStatus  = responseStatus rs
src/Network/Google/Internal/Logger.hs view
@@ -47,7 +47,7 @@ import qualified Data.Text.Lazy               as LText import qualified Data.Text.Lazy.Encoding      as LText import           Data.Word                    (Word16)-import           Network.Google.Prelude       hiding (Header, Request)+import           Network.Google.Prelude       hiding (Request) import           Network.HTTP.Conduit import           Network.HTTP.Types import           Numeric                      (showFFloat)