diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-06-29 14:42:19 -0700 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-06-29 14:42:19 -0700 |
commit | 934f99cf96ae362b898528ef357f9af148ed01c6 (patch) | |
tree | 176e9599f8dcc4d9ce4770f3def1b7f41fdc2e95 /src | |
parent | d5848cbbb862ffa0b3e44e978acf042eeed63ce7 (diff) |
Support of OAuth2 on C++ layer. Also reindent code.
Diffstat (limited to 'src')
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.cc | 10 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.h | 185 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.cc | 17 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.h | 6 | ||||
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 387 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSession.cc | 16 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSession.h | 6 |
7 files changed, 343 insertions, 284 deletions
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc index a4244ed3..fc1935b7 100644 --- a/src/async/imap/MCIMAPAsyncConnection.cc +++ b/src/async/imap/MCIMAPAsyncConnection.cc @@ -146,6 +146,16 @@ String * IMAPAsyncConnection::password() return mSession->password(); } +void IMAPAsyncConnection::setOAuth2Token(String * token) +{ + mSession->setOAuth2Token(token); +} + +String * IMAPAsyncConnection::OAuth2Token() +{ + return mSession->OAuth2Token(); +} + void IMAPAsyncConnection::setAuthType(AuthType authType) { mSession->setAuthType(authType); diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h index 48d47ad9..319cc224 100644 --- a/src/async/imap/MCIMAPAsyncConnection.h +++ b/src/async/imap/MCIMAPAsyncConnection.h @@ -8,136 +8,139 @@ #ifdef __cplusplus namespace mailcore { - - class IMAPOperation; - class IMAPFetchFoldersOperation; - class IMAPAppendMessageOperation; - class IMAPCopyMessagesOperation; - class IMAPFetchMessagesOperation; - class IMAPFetchContentOperation; - class IMAPIdleOperation; - class IMAPFolderInfoOperation; - class IMAPFolderStatusOperation; - class IMAPSession; - class IMAPNamespace; - class IMAPSearchOperation; - class IMAPSearchExpression; - class IMAPFetchNamespaceOperation; - class IMAPIdentityOperation; - class IMAPCapabilityOperation; + + class IMAPOperation; + class IMAPFetchFoldersOperation; + class IMAPAppendMessageOperation; + class IMAPCopyMessagesOperation; + class IMAPFetchMessagesOperation; + class IMAPFetchContentOperation; + class IMAPIdleOperation; + class IMAPFolderInfoOperation; + class IMAPFolderStatusOperation; + class IMAPSession; + class IMAPNamespace; + class IMAPSearchOperation; + class IMAPSearchExpression; + class IMAPFetchNamespaceOperation; + class IMAPIdentityOperation; + class IMAPCapabilityOperation; class IMAPOperationQueueCallback; class IMAPAsyncSession; class IMAPConnectionLogger; - class IMAPAsyncConnection : public Object { - public: - IMAPAsyncConnection(); - virtual ~IMAPAsyncConnection(); - - virtual void setHostname(String * hostname); - virtual String * hostname(); + class IMAPAsyncConnection : public Object { + public: + IMAPAsyncConnection(); + virtual ~IMAPAsyncConnection(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); - virtual void setPort(unsigned int port); - virtual unsigned int port(); + virtual void setUsername(String * username); + virtual String * username(); - virtual void setUsername(String * username); - virtual String * username(); + virtual void setPassword(String * password); + virtual String * password(); - virtual void setPassword(String * password); - virtual String * password(); + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); - virtual void setAuthType(AuthType authType); - virtual AuthType authType(); + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); - virtual void setConnectionType(ConnectionType connectionType); - virtual ConnectionType connectionType(); + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); - virtual void setTimeout(time_t timeout); - virtual time_t timeout(); - - virtual void setCheckCertificateEnabled(bool enabled); - virtual bool isCheckCertificateEnabled(); + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); - virtual void setVoIPEnabled(bool enabled); - virtual bool isVoIPEnabled(); + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); - virtual void setDelimiter(char delimiter); - virtual char delimiter(); + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); - virtual void setDefaultNamespace(IMAPNamespace * ns); - virtual IMAPNamespace * defaultNamespace(); + virtual void setDelimiter(char delimiter); + virtual char delimiter(); + + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); - virtual IMAPFolderInfoOperation * folderInfoOperation(String * folder); + virtual IMAPFolderInfoOperation * folderInfoOperation(String * folder); virtual IMAPFolderStatusOperation * folderStatusOperation(String * folder); - - virtual IMAPFetchFoldersOperation * fetchSubscribedFoldersOperation(); - virtual IMAPFetchFoldersOperation * fetchAllFoldersOperation(); - - virtual IMAPOperation * renameFolderOperation(String * folder, String * otherName); - virtual IMAPOperation * deleteFolderOperation(String * folder); - virtual IMAPOperation * createFolderOperation(String * folder); - - virtual IMAPOperation * subscribeFolderOperation(String * folder); - virtual IMAPOperation * unsubscribeFolderOperation(String * folder); - - virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags); - - virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder); - - virtual IMAPOperation * expungeOperation(String * folder); - - virtual IMAPFetchMessagesOperation * fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, + + virtual IMAPFetchFoldersOperation * fetchSubscribedFoldersOperation(); + virtual IMAPFetchFoldersOperation * fetchAllFoldersOperation(); + + virtual IMAPOperation * renameFolderOperation(String * folder, String * otherName); + virtual IMAPOperation * deleteFolderOperation(String * folder); + virtual IMAPOperation * createFolderOperation(String * folder); + + virtual IMAPOperation * subscribeFolderOperation(String * folder); + virtual IMAPOperation * unsubscribeFolderOperation(String * folder); + + virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags); + + virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder); + + virtual IMAPOperation * expungeOperation(String * folder); + + virtual IMAPFetchMessagesOperation * fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, IndexSet * uids); - virtual IMAPFetchMessagesOperation * fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, + virtual IMAPFetchMessagesOperation * fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, IndexSet * numbers); virtual IMAPFetchMessagesOperation * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, IndexSet * uids, uint64_t modSeq); - virtual IMAPFetchContentOperation * fetchMessageByUIDOperation(String * folder, uint32_t uid); - virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, + virtual IMAPFetchContentOperation * fetchMessageByUIDOperation(String * folder, uint32_t uid); + virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, Encoding encoding); - - virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags); - virtual IMAPOperation * storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels); - - virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString); - virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchExpression * expression); - - virtual IMAPIdleOperation * idleOperation(String * folder, uint32_t lastKnownUID); - - virtual IMAPFetchNamespaceOperation * fetchNamespaceOperation(); - - virtual IMAPIdentityOperation * identityOperation(String * vendor, String * name, String * version); + + virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags); + virtual IMAPOperation * storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels); + + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString); + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchExpression * expression); + + virtual IMAPIdleOperation * idleOperation(String * folder, uint32_t lastKnownUID); + + virtual IMAPFetchNamespaceOperation * fetchNamespaceOperation(); + + virtual IMAPIdentityOperation * identityOperation(String * vendor, String * name, String * version); virtual IMAPOperation * checkAccountOperation(); virtual IMAPCapabilityOperation * capabilityOperation(); private: - IMAPSession * mSession; - OperationQueue * mQueue; - char mDelimiter; - IMAPNamespace * mDefaultNamespace; - String * mLastFolder; + IMAPSession * mSession; + OperationQueue * mQueue; + char mDelimiter; + IMAPNamespace * mDefaultNamespace; + String * mLastFolder; IMAPOperationQueueCallback * mQueueCallback; - IMAPAsyncSession * mOwner; + IMAPAsyncSession * mOwner; ConnectionLogger * mConnectionLogger; IMAPConnectionLogger * mInternalLogger; pthread_mutex_t mConnectionLoggerLock; virtual void tryAutomaticDisconnectAfterDelay(void * context); - + public: // private - virtual void runOperation(IMAPOperation * operation); - virtual IMAPSession * session(); + virtual void runOperation(IMAPOperation * operation); + virtual IMAPSession * session(); - virtual unsigned int operationsCount(); + virtual unsigned int operationsCount(); - virtual void setLastFolder(String * folder); - virtual String * lastFolder(); + virtual void setLastFolder(String * folder); + virtual String * lastFolder(); virtual void tryAutomaticDisconnect(); virtual void queueStartRunning(); diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc index 9272a034..6981322e 100644 --- a/src/async/imap/MCIMAPAsyncSession.cc +++ b/src/async/imap/MCIMAPAsyncSession.cc @@ -27,6 +27,7 @@ IMAPAsyncSession::IMAPAsyncSession() mPort = 0; mUsername = NULL; mPassword = NULL; + mOAuth2Token = NULL; mAuthType = AuthTypeSASLNone; mConnectionType = ConnectionTypeClear; mCheckCertificateEnabled = true; @@ -40,6 +41,11 @@ IMAPAsyncSession::IMAPAsyncSession() IMAPAsyncSession::~IMAPAsyncSession() { MC_SAFE_RELEASE(mSessions); + MC_SAFE_RELEASE(mHostname); + MC_SAFE_RELEASE(mUsername); + MC_SAFE_RELEASE(mPassword); + MC_SAFE_RELEASE(mOAuth2Token); + MC_SAFE_RELEASE(mDefaultNamespace); } void IMAPAsyncSession::setHostname(String * hostname) @@ -82,6 +88,16 @@ String * IMAPAsyncSession::password() return mPassword; } +void IMAPAsyncSession::setOAuth2Token(String * token) +{ + MC_SAFE_REPLACE_COPY(String, mOAuth2Token, token); +} + +String * IMAPAsyncSession::OAuth2Token() +{ + return mOAuth2Token; +} + void IMAPAsyncSession::setAuthType(AuthType authType) { mAuthType = authType; @@ -184,6 +200,7 @@ IMAPAsyncConnection * IMAPAsyncSession::session() session->setPort(mPort); session->setUsername(mUsername); session->setPassword(mPassword); + session->setOAuth2Token(mOAuth2Token); session->setAuthType(mAuthType); session->setConnectionType(mConnectionType); session->setTimeout(mTimeout); diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index ded3ffae..ae1bbb90 100644 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -51,6 +51,11 @@ namespace mailcore { virtual void setPassword(String * password); virtual String * password(); + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + virtual void setAuthType(AuthType authType); virtual AuthType authType(); @@ -135,6 +140,7 @@ namespace mailcore { unsigned int mPort; String * mUsername; String * mPassword; + String * mOAuth2Token; AuthType mAuthType; ConnectionType mConnectionType; bool mCheckCertificateEnabled; diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index 417bdb6c..9e1b46b7 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -4,214 +4,215 @@ #ifdef __cplusplus namespace mailcore { - - enum ConnectionType { - ConnectionTypeClear = 1 << 0, - ConnectionTypeStartTLS = 1 << 1, - ConnectionTypeTLS = 1 << 2, - }; + + enum ConnectionType { + ConnectionTypeClear = 1 << 0, + ConnectionTypeStartTLS = 1 << 1, + ConnectionTypeTLS = 1 << 2, + }; - enum AuthType { - AuthTypeSASLNone = 0, - AuthTypeSASLCRAMMD5 = 1 << 0, - AuthTypeSASLPlain = 1 << 1, - AuthTypeSASLGSSAPI = 1 << 2, - AuthTypeSASLDIGESTMD5 = 1 << 3, - AuthTypeSASLLogin = 1 << 4, - AuthTypeSASLSRP = 1 << 5, - AuthTypeSASLNTLM = 1 << 6, - AuthTypeSASLKerberosV4 = 1 << 7, - }; + enum AuthType { + AuthTypeSASLNone = 0, + AuthTypeSASLCRAMMD5 = 1 << 0, + AuthTypeSASLPlain = 1 << 1, + AuthTypeSASLGSSAPI = 1 << 2, + AuthTypeSASLDIGESTMD5 = 1 << 3, + AuthTypeSASLLogin = 1 << 4, + AuthTypeSASLSRP = 1 << 5, + AuthTypeSASLNTLM = 1 << 6, + AuthTypeSASLKerberosV4 = 1 << 7, + AuthTypeXOAuth2 = 1 << 8, + }; - enum IMAPFolderFlag { - IMAPFolderFlagNone = 0, - IMAPFolderFlagMarked = 1 << 0, - IMAPFolderFlagUnmarked = 1 << 1, - IMAPFolderFlagNoSelect = 1 << 2, - IMAPFolderFlagNoInferiors = 1 << 3, - IMAPFolderFlagInbox = 1 << 4, - IMAPFolderFlagSentMail = 1 << 5, - IMAPFolderFlagStarred = 1 << 6, - IMAPFolderFlagAllMail = 1 << 7, - IMAPFolderFlagTrash = 1 << 8, - IMAPFolderFlagDrafts = 1 << 9, - IMAPFolderFlagSpam = 1 << 10, - IMAPFolderFlagImportant = 1 << 11, - IMAPFolderFlagArchive = 1 << 12, + enum IMAPFolderFlag { + IMAPFolderFlagNone = 0, + IMAPFolderFlagMarked = 1 << 0, + IMAPFolderFlagUnmarked = 1 << 1, + IMAPFolderFlagNoSelect = 1 << 2, + IMAPFolderFlagNoInferiors = 1 << 3, + IMAPFolderFlagInbox = 1 << 4, + IMAPFolderFlagSentMail = 1 << 5, + IMAPFolderFlagStarred = 1 << 6, + IMAPFolderFlagAllMail = 1 << 7, + IMAPFolderFlagTrash = 1 << 8, + IMAPFolderFlagDrafts = 1 << 9, + IMAPFolderFlagSpam = 1 << 10, + IMAPFolderFlagImportant = 1 << 11, + IMAPFolderFlagArchive = 1 << 12, IMAPFolderFlagAll = IMAPFolderFlagAllMail, IMAPFolderFlagJunk = IMAPFolderFlagSpam, IMAPFolderFlagFlagged = IMAPFolderFlagStarred, - }; + }; - enum MessageFlag { - MessageFlagNone = 0, - MessageFlagSeen = 1 << 0, - MessageFlagAnswered = 1 << 1, - MessageFlagFlagged = 1 << 2, - MessageFlagDeleted = 1 << 3, - MessageFlagDraft = 1 << 4, - MessageFlagMDNSent = 1 << 5, - MessageFlagForwarded = 1 << 6, - MessageFlagSubmitPending = 1 << 7, - MessageFlagSubmitted = 1 << 8, - } ; + enum MessageFlag { + MessageFlagNone = 0, + MessageFlagSeen = 1 << 0, + MessageFlagAnswered = 1 << 1, + MessageFlagFlagged = 1 << 2, + MessageFlagDeleted = 1 << 3, + MessageFlagDraft = 1 << 4, + MessageFlagMDNSent = 1 << 5, + MessageFlagForwarded = 1 << 6, + MessageFlagSubmitPending = 1 << 7, + MessageFlagSubmitted = 1 << 8, + } ; - enum IMAPMessagesRequestKind { - IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched - IMAPMessagesRequestKindFlags = 1 << 0, - IMAPMessagesRequestKindHeaders = 1 << 1, - IMAPMessagesRequestKindStructure = 1 << 2, - IMAPMessagesRequestKindInternalDate = 1 << 3, - IMAPMessagesRequestKindFullHeaders = 1 << 4, - IMAPMessagesRequestKindHeaderSubject = 1 << 5, - IMAPMessagesRequestKindGmailLabels = 1 << 6, - IMAPMessagesRequestKindGmailMessageID = 1 << 7, - IMAPMessagesRequestKindGmailThreadID = 1 << 8, - }; + enum IMAPMessagesRequestKind { + IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched + IMAPMessagesRequestKindFlags = 1 << 0, + IMAPMessagesRequestKindHeaders = 1 << 1, + IMAPMessagesRequestKindStructure = 1 << 2, + IMAPMessagesRequestKindInternalDate = 1 << 3, + IMAPMessagesRequestKindFullHeaders = 1 << 4, + IMAPMessagesRequestKindHeaderSubject = 1 << 5, + IMAPMessagesRequestKindGmailLabels = 1 << 6, + IMAPMessagesRequestKindGmailMessageID = 1 << 7, + IMAPMessagesRequestKindGmailThreadID = 1 << 8, + }; - enum IMAPFetchRequestType { - IMAPFetchRequestTypeUID = 0, - IMAPFetchRequestTypeSequence = 1 - }; + enum IMAPFetchRequestType { + IMAPFetchRequestTypeUID = 0, + IMAPFetchRequestTypeSequence = 1 + }; - enum IMAPStoreFlagsRequestKind { - IMAPStoreFlagsRequestKindAdd, - IMAPStoreFlagsRequestKindRemove, - IMAPStoreFlagsRequestKindSet, - }; + enum IMAPStoreFlagsRequestKind { + IMAPStoreFlagsRequestKindAdd, + IMAPStoreFlagsRequestKindRemove, + IMAPStoreFlagsRequestKindSet, + }; - enum IMAPWorkaround { - IMAPWorkaroundGmail = 1 << 0, - IMAPWorkaroundYahoo = 1 << 1, - IMAPWorkaroundExchange2003 = 1 << 2, - }; + enum IMAPWorkaround { + IMAPWorkaroundGmail = 1 << 0, + IMAPWorkaroundYahoo = 1 << 1, + IMAPWorkaroundExchange2003 = 1 << 2, + }; - enum IMAPCapability { - IMAPCapabilityACL, - IMAPCapabilityBinary, - IMAPCapabilityCatenate, - IMAPCapabilityChildren, - IMAPCapabilityCompressDeflate, - IMAPCapabilityCondstore, - IMAPCapabilityEnable, - IMAPCapabilityIdle, - IMAPCapabilityId, - IMAPCapabilityLiteralPlus, - IMAPCapabilityMultiAppend, - IMAPCapabilityNamespace, - IMAPCapabilityQResync, - IMAPCapabilityQuota, - IMAPCapabilitySort, - IMAPCapabilityStartTLS, - IMAPCapabilityThreadOrderedSubject, - IMAPCapabilityThreadReferences, - IMAPCapabilityUIDPlus, - IMAPCapabilityUnselect, - IMAPCapabilityXList, - IMAPCapabilityAuthAnonymous, - IMAPCapabilityAuthCRAMMD5, - IMAPCapabilityAuthDigestMD5, - IMAPCapabilityAuthExternal, - IMAPCapabilityAuthGSSAPI, - IMAPCapabilityAuthKerberosV4, - IMAPCapabilityAuthLogin, - IMAPCapabilityAuthNTLM, - IMAPCapabilityAuthOTP, - IMAPCapabilityAuthPlain, - IMAPCapabilityAuthSKey, - IMAPCapabilityAuthSRP, - }; + enum IMAPCapability { + IMAPCapabilityACL, + IMAPCapabilityBinary, + IMAPCapabilityCatenate, + IMAPCapabilityChildren, + IMAPCapabilityCompressDeflate, + IMAPCapabilityCondstore, + IMAPCapabilityEnable, + IMAPCapabilityIdle, + IMAPCapabilityId, + IMAPCapabilityLiteralPlus, + IMAPCapabilityMultiAppend, + IMAPCapabilityNamespace, + IMAPCapabilityQResync, + IMAPCapabilityQuota, + IMAPCapabilitySort, + IMAPCapabilityStartTLS, + IMAPCapabilityThreadOrderedSubject, + IMAPCapabilityThreadReferences, + IMAPCapabilityUIDPlus, + IMAPCapabilityUnselect, + IMAPCapabilityXList, + IMAPCapabilityAuthAnonymous, + IMAPCapabilityAuthCRAMMD5, + IMAPCapabilityAuthDigestMD5, + IMAPCapabilityAuthExternal, + IMAPCapabilityAuthGSSAPI, + IMAPCapabilityAuthKerberosV4, + IMAPCapabilityAuthLogin, + IMAPCapabilityAuthNTLM, + IMAPCapabilityAuthOTP, + IMAPCapabilityAuthPlain, + IMAPCapabilityAuthSKey, + IMAPCapabilityAuthSRP, + }; - enum POPCapability { - POPCapabilityNone, - POPCapabilityStartTLS, - POPCapabilityTop, - POPCapabilityUser, - POPCapabilityRespCodes, - POPCapabilityPipelining, - POPCapabilityUIDL, - POPCapabilitySASL, - POPCapabilityAuthAnonymous, - POPCapabilityAuthCRAMMD5, - POPCapabilityAuthDigestMD5, - POPCapabilityAuthExternal, - POPCapabilityAuthGSSAPI, - POPCapabilityAuthKerberosV4, - POPCapabilityAuthLogin, - POPCapabilityAuthNTLM, - POPCapabilityAuthOTP, - POPCapabilityAuthPlain, - POPCapabilityAuthSKey, - POPCapabilityAuthSRP, - }; + enum POPCapability { + POPCapabilityNone, + POPCapabilityStartTLS, + POPCapabilityTop, + POPCapabilityUser, + POPCapabilityRespCodes, + POPCapabilityPipelining, + POPCapabilityUIDL, + POPCapabilitySASL, + POPCapabilityAuthAnonymous, + POPCapabilityAuthCRAMMD5, + POPCapabilityAuthDigestMD5, + POPCapabilityAuthExternal, + POPCapabilityAuthGSSAPI, + POPCapabilityAuthKerberosV4, + POPCapabilityAuthLogin, + POPCapabilityAuthNTLM, + POPCapabilityAuthOTP, + POPCapabilityAuthPlain, + POPCapabilityAuthSKey, + POPCapabilityAuthSRP, + }; - enum Encoding { - Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT - Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT - EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY - EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 - EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE - EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER - // negative values should be used for other encoding - EncodingUUEncode = -1 - }; - - enum IMAPSearchKind { - IMAPSearchKindNone, - IMAPSearchKindFrom, - IMAPSearchKindRecipient, - IMAPSearchKindSubject, - IMAPSearchKindContent, - IMAPSearchKindHeader, - IMAPSearchKindOr, - IMAPSearchKindAnd, - }; - - enum ErrorCode { - ErrorNone, - ErrorConnection, - ErrorTLSNotAvailable, - ErrorParse, - ErrorCertificate, - ErrorAuthentication, - ErrorGmailIMAPNotEnabled, - ErrorGmailExceededBandwidthLimit, - ErrorGmailTooManySimultaneousConnections, - ErrorMobileMeMoved, - ErrorYahooUnavailable, - ErrorNonExistantFolder, - ErrorRename, - ErrorDelete, - ErrorCreate, - ErrorSubscribe, - ErrorAppend, - ErrorCopy, - ErrorExpunge, - ErrorFetch, - ErrorIdle, - ErrorIdentity, - ErrorNamespace, - ErrorStore, + enum Encoding { + Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT + Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT + EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY + EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 + EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE + EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER + // negative values should be used for other encoding + EncodingUUEncode = -1 + }; + + enum IMAPSearchKind { + IMAPSearchKindNone, + IMAPSearchKindFrom, + IMAPSearchKindRecipient, + IMAPSearchKindSubject, + IMAPSearchKindContent, + IMAPSearchKindHeader, + IMAPSearchKindOr, + IMAPSearchKindAnd, + }; + + enum ErrorCode { + ErrorNone, + ErrorConnection, + ErrorTLSNotAvailable, + ErrorParse, + ErrorCertificate, + ErrorAuthentication, + ErrorGmailIMAPNotEnabled, + ErrorGmailExceededBandwidthLimit, + ErrorGmailTooManySimultaneousConnections, + ErrorMobileMeMoved, + ErrorYahooUnavailable, + ErrorNonExistantFolder, + ErrorRename, + ErrorDelete, + ErrorCreate, + ErrorSubscribe, + ErrorAppend, + ErrorCopy, + ErrorExpunge, + ErrorFetch, + ErrorIdle, + ErrorIdentity, + ErrorNamespace, + ErrorStore, ErrorCapability, - ErrorStartTLSNotAvailable, - ErrorSendMessageIllegalAttachment, - ErrorStorageLimit, - ErrorSendMessageNotAllowed, - ErrorNeedsConnectToWebmail, - ErrorSendMessage, - ErrorAuthenticationRequired, - ErrorFetchMessageList, - ErrorDeleteMessage, + ErrorStartTLSNotAvailable, + ErrorSendMessageIllegalAttachment, + ErrorStorageLimit, + ErrorSendMessageNotAllowed, + ErrorNeedsConnectToWebmail, + ErrorSendMessage, + ErrorAuthenticationRequired, + ErrorFetchMessageList, + ErrorDeleteMessage, ErrorInvalidAccount, - }; - - enum PartType { - PartTypeSingle, - PartTypeMessage, - PartTypeMultipartMixed, - PartTypeMultipartRelated, - PartTypeMultipartAlternative, - }; + }; + + enum PartType { + PartTypeSingle, + PartTypeMessage, + PartTypeMultipartMixed, + PartTypeMultipartRelated, + PartTypeMultipartAlternative, + }; } #endif diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 2dc970c5..8437cded 100644 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -313,6 +313,7 @@ void IMAPSession::init() mPort = 0; mUsername = NULL; mPassword = NULL; + mOAuth2Token = NULL; mAuthType = AuthTypeSASLNone; mConnectionType = ConnectionTypeClear; mCheckCertificateEnabled = true; @@ -355,6 +356,7 @@ IMAPSession::~IMAPSession() MC_SAFE_RELEASE(mHostname); MC_SAFE_RELEASE(mUsername); MC_SAFE_RELEASE(mPassword); + MC_SAFE_RELEASE(mOAuth2Token); MC_SAFE_RELEASE(mWelcomeString); MC_SAFE_RELEASE(mDefaultNamespace); MC_SAFE_RELEASE(mCurrentFolder); @@ -401,6 +403,16 @@ String * IMAPSession::password() return mPassword; } +void IMAPSession::setOAuth2Token(String * token) +{ + MC_SAFE_REPLACE_COPY(String, mOAuth2Token, token); +} + +String * IMAPSession::OAuth2Token() +{ + return mOAuth2Token; +} + void IMAPSession::setAuthType(AuthType authType) { mAuthType = authType; @@ -746,6 +758,10 @@ void IMAPSession::login(ErrorCode * pError) utf8username, utf8username, utf8password, NULL/* realm */); break; + + case AuthTypeXOAuth2: + r = mailimap_oauth2_authenticate(mImap, MCUTF8(mUsername), MCUTF8(mOAuth2Token)); + break; } if (r == MAILIMAP_ERROR_STREAM) { * pError = ErrorConnection; diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h index ac282072..212f0876 100644 --- a/src/core/imap/MCIMAPSession.h +++ b/src/core/imap/MCIMAPSession.h @@ -37,6 +37,11 @@ namespace mailcore { virtual void setPassword(String * password); virtual String * password(); + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + virtual void setAuthType(AuthType authType); virtual AuthType authType(); @@ -145,6 +150,7 @@ namespace mailcore { unsigned int mPort; String * mUsername; String * mPassword; + String * mOAuth2Token; AuthType mAuthType; ConnectionType mConnectionType; bool mCheckCertificateEnabled; |