diff --git a/backends/twitter/libtwitcurl/twitcurl.cpp b/backends/twitter/libtwitcurl/twitcurl.cpp index 68a338042ac0aaebbfd36fcf9dabce85f48eaa0b..f50f5c6bf89b0bdaed660d44624f54d1b4255356 100644 --- a/backends/twitter/libtwitcurl/twitcurl.cpp +++ b/backends/twitter/libtwitcurl/twitcurl.cpp @@ -1464,6 +1464,7 @@ bool twitCurl::performGet( const std::string& getUrl ) /* Set http request and url */ curl_easy_setopt( m_curlHandle, CURLOPT_HTTPGET, 1 ); +// curl_easy_setopt( m_curlHandle, CURLOPT_VERBOSE, 1 ); curl_easy_setopt( m_curlHandle, CURLOPT_URL, getUrl.c_str() ); /* Send http request */ diff --git a/backends/twitter/main.cpp b/backends/twitter/main.cpp index aa9a9d91494969311e83f8b08344748ab68d2b8c..cd49c0d1dd13d3cdacacb8c70dbff657cf0ef2f8 100644 --- a/backends/twitter/main.cpp +++ b/backends/twitter/main.cpp @@ -134,7 +134,7 @@ class TwitterPlugin : public NetworkPlugin { storagebackend->getUserSetting((long)info.id, OAUTH_KEY, type, key); storagebackend->getUserSetting((long)info.id, OAUTH_SECRET, type, secret); - if(key == "" || secret == ""/*registeredUsers.count(user) == 0*/) { + if(key == "" || secret == "") { LOG4CXX_INFO(logger, "Intiating oauthflow for user " << user) std::string authUrl; @@ -147,8 +147,6 @@ class TwitterPlugin : public NetworkPlugin { handleMessage(user, "twitter-account", std::string("Please reply with the PIN provided by twitter. Prefix the pin with 'pin:'. Ex. 'pin: 1234'")); connectionState[user] = WAITING_FOR_PIN; } else { - //std::vector keysecret; - //db->fetch(user, keysecret); LOG4CXX_INFO(logger, user << " is already registerd. Using the stored oauth key and secret") LOG4CXX_INFO(logger, key << " " << secret) @@ -165,114 +163,120 @@ class TwitterPlugin : public NetworkPlugin { connectionState[user] = DISCONNECTED; } + void handlePINExchange(const std::string &user, std::string &data) { + sessions[user]->getOAuth().setOAuthPin( data ); + if (sessions[user]->oAuthAccessToken() == false) { + LOG4CXX_ERROR(logger, "Error while exchanging PIN with AcessToken!") + handleLogoutRequest(user, ""); + return; + } + + std::string OAuthAccessTokenKey, OAuthAccessTokenSecret; + sessions[user]->getOAuth().getOAuthTokenKey( OAuthAccessTokenKey ); + sessions[user]->getOAuth().getOAuthTokenSecret( OAuthAccessTokenSecret ); - void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml = "") { - LOG4CXX_INFO(logger, "Sending message from " << user << " to " << legacyName << "."); - if(legacyName == "twitter-account") { - std::string cmd = message.substr(0, message.find(':')); - std::string data = message.substr(message.find(':') + 1); - - handleMessage(user, "twitter-account", cmd + " " + data); + UserInfo info; + if(storagebackend->getUser(user, info) == false) { + LOG4CXX_ERROR(logger, "Didn't find entry for " << user << " in the database!") + handleLogoutRequest(user, ""); + return; + } - if(cmd == "pin") { - sessions[user]->getOAuth().setOAuthPin( data ); - if (sessions[user]->oAuthAccessToken() == false) { - LOG4CXX_ERROR(logger, "Error while exchanging PIN with AcessToken!") - handleLogoutRequest(user, ""); - return; - } - - std::string OAuthAccessTokenKey, OAuthAccessTokenSecret; - sessions[user]->getOAuth().getOAuthTokenKey( OAuthAccessTokenKey ); - sessions[user]->getOAuth().getOAuthTokenSecret( OAuthAccessTokenSecret ); - - //db->insert(UserData(user, OAuthAccessTokenKey, OAuthAccessTokenSecret)); - //registeredUsers.insert(user); - UserInfo info; - - if(storagebackend->getUser(user, info) == false) { - LOG4CXX_ERROR(logger, "Didn't find entry for " << user << " in the database!") - handleLogoutRequest(user, ""); - return; - } - - storagebackend->updateUserSetting((long)info.id, OAUTH_KEY, OAuthAccessTokenKey); - storagebackend->updateUserSetting((long)info.id, OAUTH_SECRET, OAuthAccessTokenSecret); - - connectionState[user] = CONNECTED; - LOG4CXX_INFO(logger, "Sent PIN " << data << " and obtained access token"); - } + storagebackend->updateUserSetting((long)info.id, OAUTH_KEY, OAuthAccessTokenKey); + storagebackend->updateUserSetting((long)info.id, OAUTH_SECRET, OAuthAccessTokenSecret); - if(cmd == "#help") { - std::string helpMsg = "\nHELP\n\ -status: - Update your status\n\ -#timeline - Retrieve your timeline\n\ -@: - Send a directed message to the user \n\ -#help - print this help message\n"; + connectionState[user] = CONNECTED; + LOG4CXX_INFO(logger, "Sent PIN " << data << " and obtained access token"); + } - handleMessage(user, "twitter-account", helpMsg); - } + void printHelpMessage(const std::string &user) { + std::string helpMsg = ""; + helpMsg = helpMsg + + "\nHELP\n" + + "status: - Update your status\n" + + "#timeline - Retrieve your timeline\n" + + "@: - Send a directed message to the user \n" + + "#help - print this help message\n"; + + handleMessage(user, "twitter-account", helpMsg); + } + + void handleDirectMessage(const std::string &user, std::string &username, std::string &data) { + if(sessions[user]->directMessageSend(username, data, false) == false) { + LOG4CXX_ERROR(logger, "Error while sending directed message to user " << username ); + return; + } + + LOG4CXX_INFO(logger, "Sending " << data << " to " << username) - if(cmd[0] == '@') { - std::string username = cmd.substr(1); - if(sessions[user]->directMessageSend(username, data, false) == false) { - LOG4CXX_ERROR(logger, "Error while sending directed message to user " << username ); - return; - } + std::string replyMsg; + sessions[user]->getLastWebResponse( replyMsg ); + LOG4CXX_INFO(logger, replyMsg); + } + + void handleStatusUpdate(const std::string &user, std::string &data) { + if(connectionState[user] != CONNECTED) { + LOG4CXX_ERROR(logger, "Trying to update status for " << user << " when not connected!"); + return; + } - LOG4CXX_INFO(logger, "Sending " << data << " to " << username) + std::string replyMsg; + if( sessions[user]->statusUpdate( data ) ) { + replyMsg = ""; + while(replyMsg.length() == 0) { + sessions[user]->getLastWebResponse( replyMsg ); + } + LOG4CXX_INFO(logger, "twitCurl:statusUpdate web response: " << replyMsg ); + } else { + sessions[user]->getLastCurlError( replyMsg ); + LOG4CXX_INFO(logger, "twitCurl::statusUpdate error: " << replyMsg ); + } + LOG4CXX_INFO(logger, "Updated status for " << user << ": " << data); + } - std::string replyMsg; + void fetchTimeline(const std::string &user) { + if(connectionState[user] != CONNECTED) { + LOG4CXX_ERROR(logger, "Trying to update status for " << user << " when not connected!"); + return; + } + + std::string replyMsg = ""; + if( sessions[user]->timelineHomeGet()) { + + while(replyMsg.length() == 0) { sessions[user]->getLastWebResponse( replyMsg ); - LOG4CXX_INFO(logger, replyMsg); } - if(cmd == "status") { - if(connectionState[user] != CONNECTED) { - LOG4CXX_ERROR(logger, "Trying to update status for " << user << " when not connected!"); - return; - } - - std::string replyMsg; - if( sessions[user]->statusUpdate( data ) ) { - replyMsg = ""; - while(replyMsg.length() == 0) { - sessions[user]->getLastWebResponse( replyMsg ); - } - - LOG4CXX_INFO(logger, "twitCurl:statusUpdate web response: " << replyMsg ); - } - else { - sessions[user]->getLastCurlError( replyMsg ); - LOG4CXX_INFO(logger, "twitCurl::statusUpdate error: " << replyMsg ); - } - - LOG4CXX_INFO(logger, "Updated status for " << user << ": " << data); + LOG4CXX_INFO(logger, "twitCurl::timeline web response: " << replyMsg.length() << " " << replyMsg << "\n" ); + + std::vector tweets = getTimeline(replyMsg); + std::string timeline = "\n"; + for(int i=0 ; itimelineHomeGet()/*(false, false, 20, sessions[user]->getTwitterUsername(), true)*/ ) { - sessions[user]->getLastWebResponse( replyMsg ); - LOG4CXX_INFO(logger, "twitCurl::timeline web response: " << replyMsg ); - - std::vector tweets = getTimeline(replyMsg); - std::string timeline = "\n"; - for(int i=0 ; igetLastCurlError( replyMsg ); - LOG4CXX_INFO(logger, "twitCurl::timeline error: " << replyMsg ); - } + handleMessage(user, "twitter-account", timeline); - } + } else { + sessions[user]->getLastCurlError( replyMsg ); + LOG4CXX_INFO(logger, "twitCurl::timeline error: " << replyMsg ); + } + } + + + void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml = "") { + LOG4CXX_INFO(logger, "Sending message from " << user << " to " << legacyName << "."); + if(legacyName == "twitter-account") { + std::string cmd = message.substr(0, message.find(':')); + std::string data = message.substr(message.find(':') + 1); + + handleMessage(user, "twitter-account", cmd + " " + data); + + if(cmd == "#pin") handlePINExchange(user, data); + else if(cmd == "#help") printHelpMessage(user); + else if(cmd[0] == '@') {std::string username = cmd.substr(1); handleDirectMessage(user, username, data);} + else if(cmd == "#status") handleStatusUpdate(user, data); + else if(cmd == "#timeline") fetchTimeline(user); } }