google-server-api 0.3.2.1 → 0.3.3.1
raw patch · 6 files changed
+100/−34 lines, 6 filesdep ~HsOpenSSLdep ~RSAdep ~aeson
Dependency ranges changed: HsOpenSSL, RSA, aeson, aeson-casing, base64-bytestring, bytestring, http-api-data, http-client, http-client-tls, http-media, mime-mail, monad-control, monad-logger, mtl, servant, servant-client, text, time, transformers, transformers-base, unix-time, unordered-containers, wai, wai-extra, warp
Files
- google-server-api.cabal +29/−29
- src/Google/Client.hs +35/−3
- src/Google/Form.hs +3/−1
- src/Google/JWT.hs +6/−1
- src/Google/Response.hs +17/−0
- src/Google/Type.hs +10/−0
google-server-api.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.31.2.+-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack ----- hash: dfb218bddcb334f3b85a53829c1046e9b4769b28d15b15cdbaabfb5e8f2ea1e3+-- hash: a0f7961e20660b0657db7262b80d50981c8e43c6eb3f88bfc556e0010bf9dc0b name: google-server-api-version: 0.3.2.1+version: 0.3.3.1 synopsis: Google APIs for server to server applications description: This library provides a way to use Google API for server to server applications. category: Web@@ -37,33 +37,33 @@ Paths_google_server_api hs-source-dirs: src- default-extensions: AutoDeriveTypeable BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns+ default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends:- HsOpenSSL >=0.11.4.13- , RSA >=2.3.0- , aeson >=1.2.4.0- , aeson-casing >=0.1.0.5+ HsOpenSSL >=0.11.4.13 && <0.12+ , RSA >=2.3.0 && <2.5+ , aeson >=1.2.4.0 && <1.6+ , aeson-casing >=0.1.0.5 && <0.3 , base >=4.9 && <5- , base64-bytestring >=1.0.0.1- , bytestring >=0.10.8.2- , http-api-data >=0.3.7.2- , http-client >=0.5.10- , http-client-tls >=0.3.5.3- , http-media >=0.7.1.2- , mime-mail >=0.4.14- , monad-control >=1.0.2.3- , monad-logger >=0.3.28.1- , mtl >=2.2.2- , servant >=0.13- , servant-client >=0.13- , text >=1.2.3.0- , time >=1.8.0.2- , transformers >=0.5.2.0- , transformers-base >=0.4.4- , unix-time >=0.3.8- , unordered-containers >=0.2.9.0- , wai >=3.2.1.1- , wai-extra >=3.0.22.0- , warp >=3.2.18.1+ , base64-bytestring >=1.0.0.1 && <1.2+ , bytestring >=0.10.8.2 && <0.11+ , http-api-data >=0.3.7.2 && <0.5+ , http-client >=0.5.10 && <0.7+ , http-client-tls >=0.3.5.3 && <0.4+ , http-media >=0.7.1.2 && <0.9+ , mime-mail >=0.4.14 && <0.6+ , monad-control >=1.0.2.3 && <1.1+ , monad-logger >=0.3.28.1 && <0.4+ , mtl >=2.2.2 && <2.3+ , servant >=0.13 && <0.19+ , servant-client >=0.13 && <0.19+ , text >=1.2.3.0 && <1.3+ , time >=1.8.0.2 && <1.10+ , transformers >=0.5.2.0 && <0.6+ , transformers-base >=0.4.4 && <0.5+ , unix-time >=0.3.8 && <0.5+ , unordered-containers >=0.2.9.0 && <0.3+ , wai >=3.2.1.1 && <3.3+ , wai-extra >=3.0.22.0 && <3.2+ , warp >=3.2.18.1 && <3.4 default-language: Haskell2010
src/Google/Client.hs view
@@ -12,6 +12,8 @@ , getCalendarEventList , postCalendarEvent , postGmailSend+ , getGmailList+ , getGmailMessage , getDriveFileList , createDriveFileMultipart , downloadDriveFile@@ -21,7 +23,9 @@ import Data.ByteString.Base64.URL (encode) import qualified Data.ByteString.Lazy as LBS import Data.Data (Data)+#if !MIN_VERSION_base(4, 11, 0) import Data.Monoid ((<>))+#endif import Data.Proxy (Proxy(..)) import Data.Text (Text) import Data.Text.Encoding (decodeUtf8)@@ -105,6 +109,14 @@ Header "Authorization" Bearer :> ReqBody '[ JSON] Form.GmailSend :> Post '[ JSON] Response.GmailSend+ :<|> "gmail" :> "v1" :> "users" :> "me" :> "messages" :>+ Header "Authorization" Bearer :>+ QueryParam "maxResults" Int :>+ QueryParam "labelIds" [Type.LabelId] :>+ Get '[ JSON] Response.GmailList+ :<|> "gmail" :> "v1" :> "users" :> "me" :> "messages" :> Capture "messageId" Text :>+ Header "Authorization" Bearer :>+ Get '[ JSON] Response.GmailMessage :<|> "drive":> "v3" :> "files" :> Header "Authorization" Bearer :> QueryParam "q" Type.QueryString :>@@ -142,6 +154,8 @@ -> Form.CalendarEvent -> ClientM Response.CalendarEvent postGmailSend' :: Maybe Bearer -> Form.GmailSend -> ClientM Response.GmailSend+getGmailList' :: Maybe Bearer -> Maybe Int -> Maybe [Type.LabelId] -> ClientM Response.GmailList+getGmailMessage' :: Text -> Maybe Bearer -> ClientM Response.GmailMessage getDriveFileList' :: Maybe Bearer -> Maybe Type.QueryString@@ -161,6 +175,8 @@ :<|> getCalendarEventList' :<|> postCalendarEvent' :<|> postGmailSend'+ :<|> getGmailList'+ :<|> getGmailMessage' :<|> getDriveFileList' :<|> createDriveFileMultipart' :<|> downloadDriveFile'@@ -225,10 +241,26 @@ (postGmailSend' (pure . toBearer $ token) gmailSend) (mkClientEnv manager googleBaseUrl) +getGmailList ::+ Response.Token -> Maybe Int -> Maybe [Type.LabelId] -> IO (Either ClientError Response.GmailList)+getGmailList token maxResults labelIds = do+ manager <- newManager tlsManagerSettings+ runClientM+ (getGmailList' (pure . toBearer $ token) maxResults labelIds)+ (mkClientEnv manager googleBaseUrl)++getGmailMessage ::+ Response.Token -> Text -> IO (Either ClientError Response.GmailMessage)+getGmailMessage token messageId = do+ manager <- newManager tlsManagerSettings+ runClientM+ (getGmailMessage' messageId (pure . toBearer $ token))+ (mkClientEnv manager googleBaseUrl)+ getDriveFileList :: Response.Token -> Form.GetFileParams- -> IO (Either ServantError Response.FileList)+ -> IO (Either ClientError Response.FileList) getDriveFileList token Form.GetFileParams{..} = do manager <- newManager tlsManagerSettings runClientM@@ -241,7 +273,7 @@ createDriveFileMultipart :: Response.Token -> Form.MultipartBody- -> IO (Either ServantError Response.FileResource)+ -> IO (Either ClientError Response.FileResource) createDriveFileMultipart token body = do manager <- newManager tlsManagerSettings runClientM@@ -254,7 +286,7 @@ downloadDriveFile :: Response.Token -> Form.DownloadFileParams- -> IO (Either ServantError Response.MediaContent)+ -> IO (Either ClientError Response.MediaContent) downloadDriveFile token Form.DownloadFileParams {..} = do manager <- newManager tlsManagerSettings runClientM
src/Google/Form.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-} {- |@@ -23,7 +24,9 @@ import qualified Data.ByteString.Base64 as BSB import qualified Data.ByteString.Lazy as LBS import Data.Maybe (maybeToList)+#if !MIN_VERSION_base(4, 11, 0) import Data.Monoid ((<>))+#endif import Data.String (IsString(..)) import Data.Text (Text) import Data.Text.Encoding (encodeUtf8)@@ -34,7 +37,6 @@ import Network.Mail.Mime (Address(..), Mail(..), renderAddress, simpleMail) import Servant.API (MimeRender(..)) import Web.FormUrlEncoded (Form(..), ToForm(toForm))-import Web.Internal.HttpApiData (toQueryParam) import Web.HttpApiData (ToHttpApiData(..)) import qualified Data.HashMap.Strict as HashMap
src/Google/JWT.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | Create a signed JWT needed to make the access token request -- to gain access to Google APIs for server to server applications. --@@ -30,7 +31,9 @@ import qualified Data.ByteString.Lazy as LBS import Data.ByteString.Lazy (fromStrict, toStrict) import Data.Maybe (fromJust, fromMaybe)+#if !MIN_VERSION_base(4, 11, 0) import Data.Monoid ((<>))+#endif import Data.Text (Text) import qualified Data.Text as T import Data.Text.Encoding (encodeUtf8)@@ -75,6 +78,7 @@ data Scope = ScopeCalendarFull | ScopeCalendarRead+ | ScopeGmailFull | ScopeGmailSend | ScopeDriveFile | ScopeDriveMetadataRead@@ -87,6 +91,7 @@ scopeUrl ScopeCalendarFull = "https://www.googleapis.com/auth/calendar" scopeUrl ScopeCalendarRead = "https://www.googleapis.com/auth/calendar.readonly" scopeUrl ScopeGmailSend = "https://www.googleapis.com/auth/gmail.send"+scopeUrl ScopeGmailFull = "https://www.googleapis.com/auth/gmail" scopeUrl ScopeDriveFile = "https://www.googleapis.com/auth/drive.file" scopeUrl ScopeDriveMetadataRead = "https://www.googleapis.com/auth/drive.metadata.readonly" @@ -146,7 +151,7 @@ ] return $ either- (fail "RSAError")+ (\err -> Left $ "RSAError: " <> show err) (\s -> return $ SignedJWT $ i <> "." <> encode (toStrict s)) (rsassa_pkcs1_v1_5_sign hashSHA256 privateKey $ fromStrict i) where
src/Google/Response.hs view
@@ -13,6 +13,8 @@ , CalendarEvent(..) , CalendarEventList(..) , GmailSend(..)+ , GmailList(..)+ , GmailMessage(..) , FileResource(..) , FileList(..) , MediaContent(..)@@ -116,6 +118,21 @@ instance ToForm GmailSend +data GmailMessage = GmailMessage+ { id :: Text+ , threadId :: Text+ , snippet :: Maybe Text+ } deriving (Eq, Generic, Show, Typeable)+deriveJSON defaultOptions ''GmailMessage++instance FromForm GmailMessage++instance ToForm GmailMessage++data GmailList = GmailList+ { messages :: [GmailMessage]+ } deriving (Eq, Generic, Show, Typeable)+deriveJSON defaultOptions ''GmailList data FileResource = FileResource { kind :: Text
src/Google/Type.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE CPP #-} {- | Module : Google.Type@@ -16,6 +17,7 @@ , SortKey(..) , QueryString(..) , Order(..)+ , LabelId(..) ) where import Data.Aeson.TH (Options(..), defaultOptions, deriveJSON)@@ -23,7 +25,9 @@ import qualified Data.ByteString.Lazy as LBS import Data.Char (toLower) import Data.List.NonEmpty (NonEmpty((:|)))+#if !MIN_VERSION_base(4, 11, 0) import Data.Monoid ((<>))+#endif import Data.Text (Text, intercalate) import Data.Typeable (Typeable) import GHC.Generics (Generic)@@ -172,4 +176,10 @@ toUrlPiece (Desc key) = toUrlPiece key <> " desc" instance ToHttpApiData [Order] where+ toUrlPiece = (intercalate ",") . toUrlPieces++newtype LabelId = LabelId Text+ deriving (Eq, Generic, Show, Typeable, ToHttpApiData)++instance ToHttpApiData [LabelId] where toUrlPiece = (intercalate ",") . toUrlPieces