/*++ * @method: oAuth::getOAuthHeader * * @description: this method builds OAuth header that should be used in HTTP requests to twitter * * @input: eType - HTTP request type * rawUrl - raw url of the HTTP request * rawData - HTTP data (post fields) * includeOAuthVerifierPin - flag to indicate whether or not oauth_verifier needs to included * in OAuth header * * @output: oAuthHttpHeader - OAuth header * *--*/ bool oAuth::getOAuthHeader( const eOAuthHttpRequestType eType, const std::string& rawUrl, const std::string& rawData, std::string& oAuthHttpHeader, const bool includeOAuthVerifierPin ) { oAuthKeyValuePairs rawKeyValuePairs; std::string rawParams; // MDM Made this a member so it could be read if needed. // std::string oauthSignature; m_oAuthSignature = ""; std::string paramsSeperator; std::string pureUrl( rawUrl ); /* Clear header string initially */ oAuthHttpHeader = ""; rawKeyValuePairs.clear(); /* If URL itself contains ?key=value, then extract and put them in map */ size_t nPos = rawUrl.find_first_of( "?" ); if( std::string::npos != nPos ) { /* Get only URL */ pureUrl = rawUrl.substr( 0, nPos ); /* Get only key=value data part */ std::string dataPart = rawUrl.substr( nPos + 1 ); /* Split the data in URL as key=value pairs */ buildOAuthRawDataKeyValPairs( dataPart, true, rawKeyValuePairs ); } /* Split the raw data if it's present, as key=value pairs. Data should already be urlencoded once */ buildOAuthRawDataKeyValPairs( rawData, false, rawKeyValuePairs ); /* Build key-value pairs needed for OAuth request token, without signature */ buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, rawKeyValuePairs, true ); /* Get url encoded base64 signature using request type, url and parameters */ getSignature( eType, pureUrl, rawKeyValuePairs ); /* Clear map so that the parameters themselves are not sent along with the OAuth values */ rawKeyValuePairs.clear(); /* Now, again build key-value pairs with signature this time */ buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, rawKeyValuePairs, false ); /* Get OAuth header in string format */ paramsSeperator = ","; getStringFromOAuthKeyValuePairs( rawKeyValuePairs, rawParams, paramsSeperator ); /* Build authorization header */ oAuthHttpHeader.assign( oAuthLibDefaults::OAUTHLIB_AUTHHEADER_STRING ); oAuthHttpHeader.append( rawParams ); return !oAuthHttpHeader.empty(); }
/*++ * \fn OAuth::get_oauth_header * * \brief this method builds OAuth header that should be used in HTTP requests to twitter * * \param eType - HTTP request type * rawUrl - raw url of the HTTP request * rawData - HTTP data (post fields) * includeOAuthVerifierPin - flag to indicate whether or not oauth_verifier needs to included * in OAuth header * * \return oAuthHttpHeader - OAuth header * *--*/ std::string OAuth::get_oauth_header( const e_HTTP_request_type method, const std::string& rawUrl, const std::string& rawData, const bool includeOAuthVerifierPin ) { std::string oAuthHttpHeader; std::map<std::string, std::string> rawKeyValuePairs; std::string rawParams; std::string oauthSignature; std::string paramsSeperator; std::string pureUrl( rawUrl ); Utils::debug("----------------------"); Utils::debug("oAuthHeader INPUT :"); Utils::debug("URL : " + rawUrl); Utils::debug("Data : " + rawData); Utils::debug("Header : " + oAuthHttpHeader); /* Clear header string initially */ oAuthHttpHeader.assign( "" ); rawKeyValuePairs.clear(); /* If URL itself contains ?key=value, then extract and put them in map */ size_t nPos = rawUrl.find_first_of( "?" ); if( std::string::npos != nPos ) { /* Get only URL */ pureUrl = rawUrl.substr( 0, nPos ); /* Get only key=value data part */ std::string dataPart = rawUrl.substr( nPos + 1 ); /* Split the data in URL as key=value pairs */ rawKeyValuePairs = buildOAuthRawDataKeyValPairs( dataPart, true ); } /* Split the raw data if it's present, as key=value pairs. Data should already be urlencoded once */ rawKeyValuePairs = buildOAuthRawDataKeyValPairs( rawData, false ); /* Build key-value pairs needed for OAuth request token, without signature */ buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, std::string( "" ), rawKeyValuePairs, true ); /* Get url encoded base64 signature using request type, url and parameters */ getSignature( method, pureUrl, rawKeyValuePairs, oauthSignature ); /* Clear map so that the parameters themselves are not sent along with the OAuth values */ rawKeyValuePairs.clear(); /* Now, again build key-value pairs with signature this time */ buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, oauthSignature, rawKeyValuePairs, false ); /* Get OAuth header in string format */ paramsSeperator = ","; getStringFromOAuthKeyValuePairs( rawKeyValuePairs, rawParams, paramsSeperator ); /* Build authorization header */ oAuthHttpHeader.assign( OAuthConsts::AUTHHEADER_STRING ); oAuthHttpHeader.append( rawParams ); Utils::debug("++++++++++++++++++++++"); Utils::debug("oAuthHeader OUPUT : "); Utils::debug("URL : " + rawUrl); Utils::debug("Data : " + rawData); Utils::debug("Header : " + oAuthHttpHeader); return oAuthHttpHeader; }