aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-06-29 14:42:19 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-06-29 14:42:19 -0700
commit934f99cf96ae362b898528ef357f9af148ed01c6 (patch)
tree176e9599f8dcc4d9ce4770f3def1b7f41fdc2e95 /src
parentd5848cbbb862ffa0b3e44e978acf042eeed63ce7 (diff)
Support of OAuth2 on C++ layer. Also reindent code.
Diffstat (limited to 'src')
-rw-r--r--src/async/imap/MCIMAPAsyncConnection.cc10
-rw-r--r--src/async/imap/MCIMAPAsyncConnection.h185
-rw-r--r--src/async/imap/MCIMAPAsyncSession.cc17
-rw-r--r--src/async/imap/MCIMAPAsyncSession.h6
-rw-r--r--src/core/abstract/MCMessageConstants.h387
-rw-r--r--src/core/imap/MCIMAPSession.cc16
-rw-r--r--src/core/imap/MCIMAPSession.h6
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;