/Source/externals/GData/Source/BaseClasses/GDataServiceGoogle.h

http://google-email-uploader-mac.googlecode.com/ · C++ Header · 313 lines · 165 code · 69 blank · 79 comment · 0 complexity · 6189e518275511bdafd2e102db9fbc45 MD5 · raw file

  1. /* Copyright (c) 2007 Google Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. //
  16. // GDataServiceGoogle.h
  17. //
  18. #import "GDataServiceBase.h"
  19. #undef _EXTERN
  20. #undef _INITIALIZE_AS
  21. #ifdef GDATASERVICEGOOGLE_DEFINE_GLOBALS
  22. #define _EXTERN
  23. #define _INITIALIZE_AS(x) =x
  24. #else
  25. #define _EXTERN GDATA_EXTERN
  26. #define _INITIALIZE_AS(x)
  27. #endif
  28. _EXTERN NSString* const kGDataServiceErrorCaptchaRequired _INITIALIZE_AS(@"CaptchaRequired");
  29. // The default user is the authenticated user
  30. //
  31. // In the projections of many feeds, the username can be replaced with "default"
  32. // to indicate the feed should be for the authenticate user's account
  33. _EXTERN NSString* const kGDataServiceDefaultUser _INITIALIZE_AS(@"default");
  34. // The Auth token is stored in the response dict under this key.
  35. _EXTERN NSString* const kGDataServiceAuthTokenKey _INITIALIZE_AS(@"Auth");
  36. // additional server error info keys (capitalized to match the server's
  37. // response key)
  38. _EXTERN NSString* const kGDataServerInfoStringKey _INITIALIZE_AS(@"Info");
  39. _EXTERN NSString* const kGDataServerInfoInvalidSecondFactor _INITIALIZE_AS(@"InvalidSecondFactor");
  40. enum {
  41. kGDataBadAuthentication = 403,
  42. kGDataExpectationFailed = 417
  43. };
  44. @interface NSDictionary (GDataServiceGoogleAdditions)
  45. // category to get auth info from the callback error's userInfo
  46. - (NSString *)authenticationError;
  47. - (NSString *)authenticationInfo;
  48. - (NSString *)captchaToken;
  49. - (NSURL *)captchaURL;
  50. @end
  51. @class GDataServiceGoogle;
  52. @class GDataServiceTicket;
  53. #if NS_BLOCKS_AVAILABLE
  54. typedef void (^GDataServiceGoogleCompletionHandler)(GDataServiceTicket *ticket, id object, NSError *error);
  55. typedef void (^GDataServiceGoogleFeedBaseCompletionHandler)(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error);
  56. typedef void (^GDataServiceGoogleEntryBaseCompletionHandler)(GDataServiceTicket *ticket, GDataEntryBase *entry, NSError *error);
  57. #else
  58. typedef void *GDataServiceGoogleCompletionHandler;
  59. typedef void *GDataServiceGoogleFeedBaseCompletionHandler;
  60. typedef void *GDataServiceGoogleEntryBaseCompletionHandler;
  61. #endif
  62. // GDataServiceTicket is the version of a ticket that supports
  63. // Google authentication
  64. @interface GDataServiceTicket : GDataServiceTicketBase {
  65. @private
  66. GTMHTTPFetcher *authFetcher_;
  67. NSString *authToken_;
  68. NSDate *credentialDate_;
  69. }
  70. - (void)cancelTicket; // stops fetches in progress
  71. // ClientLogin support; not used with OAuth 1 & 2 authorizers
  72. - (GTMHTTPFetcher *)authFetcher;
  73. - (void)setAuthFetcher:(GTMHTTPFetcher *)fetcher;
  74. // ClientLogin support; not used with OAuth 1 & 2 authorizers
  75. - (NSString *)authToken;
  76. - (void)setAuthToken:(NSString *)str;
  77. // ClientLogin support; not used with OAuth 1 & 2 authorizers
  78. - (NSDate *)credentialDate;
  79. - (void)setCredentialDate:(NSDate *)date;
  80. @end
  81. // GDataServiceGoogle is the version of the service class that supports
  82. // Google authentication.
  83. @interface GDataServiceGoogle : GDataServiceBase {
  84. @private
  85. // ClientLogin support
  86. NSString *captchaToken_;
  87. NSString *captchaAnswer_;
  88. NSString *authToken_;
  89. // AuthSub support
  90. NSString *authSubToken_;
  91. NSString *accountType_; // hosted or google
  92. NSString *signInDomain_;
  93. NSString *serviceID_; // typically supplied by the subclass overriding -serviceID
  94. GTMHTTPFetcher *pendingAuthFetcher_;
  95. NSDate *credentialDate_;
  96. BOOL shouldUseMethodOverrideHeader_;
  97. }
  98. //
  99. // delegate callback fetches
  100. //
  101. // fetch a feed, authenticated
  102. //
  103. // when the class of the returned feed or entry is not specified, it
  104. // must be inferable from the XML (by "kind" category elements present
  105. // in the feed or entry)
  106. - (GDataServiceTicket *)fetchFeedWithURL:(NSURL *)feedURL
  107. delegate:(id)delegate
  108. didFinishSelector:(SEL)finishedSelector;
  109. - (GDataServiceTicket *)fetchFeedWithURL:(NSURL *)feedURL
  110. feedClass:(Class)feedClass
  111. delegate:(id)delegate
  112. didFinishSelector:(SEL)finishedSelector;
  113. - (GDataServiceTicket *)fetchFeedWithURL:(NSURL *)feedURL
  114. feedClass:(Class)feedClass
  115. ETag:(NSString *)etag
  116. delegate:(id)delegate
  117. didFinishSelector:(SEL)finishedSelector;
  118. // fetch a query, authenticated
  119. - (GDataServiceTicket *)fetchFeedWithQuery:(GDataQuery *)query
  120. delegate:(id)delegate
  121. didFinishSelector:(SEL)finishedSelector;
  122. - (GDataServiceTicket *)fetchFeedWithQuery:(GDataQuery *)query
  123. feedClass:(Class)feedClass
  124. delegate:(id)delegate
  125. didFinishSelector:(SEL)finishedSelector;
  126. // fetch an entry, authenticated
  127. - (GDataServiceTicket *)fetchEntryWithURL:(NSURL *)entryURL
  128. delegate:(id)delegate
  129. didFinishSelector:(SEL)finishedSelector;
  130. - (GDataServiceTicket *)fetchEntryWithURL:(NSURL *)entryURL
  131. entryClass:(Class)entryClass
  132. delegate:(id)delegate
  133. didFinishSelector:(SEL)finishedSelector;
  134. - (GDataServiceTicket *)fetchEntryWithURL:(NSURL *)entryURL
  135. entryClass:(Class)entryClass
  136. ETag:(NSString *)etag
  137. delegate:(id)delegate
  138. didFinishSelector:(SEL)finishedSelector;
  139. // insert an entry, authenticated
  140. - (GDataServiceTicket *)fetchEntryByInsertingEntry:(GDataEntryBase *)entryToInsert
  141. forFeedURL:(NSURL *)feedURL
  142. delegate:(id)delegate
  143. didFinishSelector:(SEL)finishedSelector;
  144. // update an entry, authenticated
  145. - (GDataServiceTicket *)fetchEntryByUpdatingEntry:(GDataEntryBase *)entryToUpdate
  146. delegate:(id)delegate
  147. didFinishSelector:(SEL)finishedSelector;
  148. - (GDataServiceTicket *)fetchEntryByUpdatingEntry:(GDataEntryBase *)entryToUpdate
  149. forEntryURL:(NSURL *)entryURL
  150. delegate:(id)delegate
  151. didFinishSelector:(SEL)finishedSelector;
  152. // delete an entry, authenticated
  153. // (on success, callback will have nil object and error pointers)
  154. - (GDataServiceTicket *)deleteEntry:(GDataEntryBase *)entryToDelete
  155. delegate:(id)delegate
  156. didFinishSelector:(SEL)finishedSelector;
  157. - (GDataServiceTicket *)deleteResourceURL:(NSURL *)resourceEditURL
  158. ETag:(NSString *)etag
  159. delegate:(id)delegate
  160. didFinishSelector:(SEL)finishedSelector;
  161. // fetch a batch feed
  162. - (GDataServiceTicket *)fetchFeedWithBatchFeed:(GDataFeedBase *)batchFeed
  163. forBatchFeedURL:(NSURL *)feedURL
  164. delegate:(id)delegate
  165. didFinishSelector:(SEL)finishedSelector;
  166. #if NS_BLOCKS_AVAILABLE
  167. //
  168. // Blocks callback fetches
  169. //
  170. // fetch a feed, authenticated
  171. - (GDataServiceTicket *)fetchFeedWithURL:(NSURL *)feedURL
  172. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error))handler;
  173. // fetch a feed using query, authenticated
  174. - (GDataServiceTicket *)fetchFeedWithQuery:(GDataQuery *)query
  175. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error))handler;
  176. // fetch an entry, authenticated
  177. - (GDataServiceTicket *)fetchEntryWithURL:(NSURL *)entryURL
  178. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataEntryBase *entry, NSError *error))handler;
  179. // insert an entry, authenticated
  180. - (GDataServiceTicket *)fetchEntryByInsertingEntry:(GDataEntryBase *)entryToInsert
  181. forFeedURL:(NSURL *)feedURL
  182. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataEntryBase *entry, NSError *error))handler;
  183. // update an entry, authenticated
  184. - (GDataServiceTicket *)fetchEntryByUpdatingEntry:(GDataEntryBase *)entryToUpdate
  185. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataEntryBase *entry, NSError *error))handler;
  186. // update an entry, authenticated (use this for updating via chunked uploads,
  187. // with the URL from the entry's uploadEditLink)
  188. - (GDataServiceTicket *)fetchEntryByUpdatingEntry:(GDataEntryBase *)entryToUpdate
  189. forEntryURL:(NSURL *)entryURL
  190. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataEntryBase *entry, NSError *error))handler;
  191. // delete an entry, authenticated
  192. // (on success, callback will have receive nil pointers for both object and error)
  193. - (GDataServiceTicket *)deleteEntry:(GDataEntryBase *)entryToDelete
  194. completionHandler:(void (^)(GDataServiceTicket *ticket, id nilObject, NSError *error))handler;
  195. - (GDataServiceTicket *)deleteResourceURL:(NSURL *)resourceEditURL
  196. ETag:(NSString *)etag
  197. completionHandler:(void (^)(GDataServiceTicket *ticket, id nilObject, NSError *error))handler;
  198. // fetch a batch feed, authenticated
  199. - (GDataServiceTicket *)fetchFeedWithBatchFeed:(GDataFeedBase *)batchFeed
  200. forBatchFeedURL:(NSURL *)feedURL
  201. completionHandler:(void (^)(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error))handler;
  202. #endif // NS_BLOCKS_AVAILABLE
  203. // authenticate without fetching a feed or entry
  204. //
  205. // authSelector has a signature matching:
  206. // - (void)ticket:(GDataServiceTicket *)ticket authenticatedWithError:(NSError *)error;
  207. //
  208. // If authentication succeeds, the selector is invoked with a nil error,
  209. // and the auth token is available as [[ticket service] authToken]
  210. //
  211. // The returned ticket may be ignored unless the caller wants to cancel it
  212. - (GDataServiceTicket *)authenticateWithDelegate:(id)delegate
  213. didAuthenticateSelector:(SEL)authSelector;
  214. - (void)setCaptchaToken:(NSString *)captchaToken
  215. captchaAnswer:(NSString *)captchaAnswer;
  216. - (NSString *)authToken;
  217. - (void)setAuthToken:(NSString *)str;
  218. - (NSString *)authSubToken;
  219. - (void)setAuthSubToken:(NSString *)str;
  220. + (NSString *)authorizationScope;
  221. // default account type is HOSTED_OR_GOOGLE
  222. - (NSString *)accountType;
  223. - (void)setAccountType:(NSString *)str;
  224. // default sign-in domain is www.google.com
  225. - (NSString *)signInDomain;
  226. - (void)setSignInDomain:(NSString *)domain;
  227. // when it's not possible to do http methods other than GET and POST,
  228. // the X-HTTP-Method-Override header can be used in conjunction with POST
  229. // for other commands. Default for this is NO.
  230. - (BOOL)shouldUseMethodOverrideHeader;
  231. - (void)setShouldUseMethodOverrideHeader:(BOOL)flag;
  232. + (NSString *)serviceID; // implemented by subclasses, like @"cl" for calendar
  233. - (void)setServiceID:(NSString *)str; // call only if not using a subclass
  234. - (NSString *)serviceID;
  235. + (NSString *)serviceRootURLString;
  236. // subclasses may specify what namespaces to attach to posted user entries
  237. // when the entries lack explicit root-level namespaces
  238. + (NSDictionary *)standardServiceNamespaces;
  239. - (GTMHTTPFetcher *)pendingAuthFetcher;
  240. - (void)setPendingAuthFetcher:(GTMHTTPFetcher *)fetcher;
  241. // the date the credentials were set
  242. - (NSDate *)credentialDate;
  243. - (void)setCredentialDate:(NSDate *)date;
  244. @end