bool Oauth::Step1(){ Init(); if(!GetRequestToken()){ return false; } GetVerifier(); return true; }
bool CJaiku::GetAccessToken( const char *consumerKey, const char *consumerSecret, CString &oauthToken, CString &oauthTokenSecret ) { bool ret = false; if ( !consumerKey || !(*consumerKey) || !consumerSecret || !(*consumerSecret) ) return ( ret ); // request token 取得 CString _oauthToken = _T(""); CString _oauthTokenSecret = _T(""); if ( !GetRequestToken( consumerKey, consumerSecret, _oauthToken, _oauthTokenSecret ) ) { MessageBox( NULL, "リクエストトークンの取得に失敗しました。 ", "アクセス中止", MB_OK|MB_ICONERROR ); return ( ret ); } // ブラウザ起動 -- ユーザにアクセス許可を求める CString targetURL = _T(""); targetURL.LoadString(IDS_URL_JAIKU_AUTHORIZE); char url[MAX_URLLENGTH]; sprintf( url, "%s?" "oauth_token=%s&" "perms=%s", targetURL, _oauthToken, "write" ); ShellExecute( NULL, "open", url, NULL, NULL, SW_SHOWNORMAL ); // ユーザの許可待ち int r = MessageBox( NULL, "Chirrup が Jaiku にアクセスする許可を与えてください。\r\n" "許可を与え終わったら、OK ボタンを押してください。\r\n" "許可を与えたくない場合は キャンセル ボタンを押してください。 ", "Jaiku へのアクセス許可", MB_OKCANCEL|MB_ICONINFORMATION ); if ( r != IDOK ) { MessageBox( NULL, "Jaiku へのアクセスを中止します。 ", "アクセス中止", MB_OK|MB_ICONWARNING ); return ( ret ); } // access token 取得 time_t t = time( NULL ); size_t sz = MAX_CONTENT_SIZE * 16; char base[MAX_CONTENT_SIZE]; char param[MAX_CONTENT_SIZE]; char nonce[MAX_KEYLENGTH]; char key[MAX_KEYLENGTH * 2]; char *request = new char[sz]; char *response = new char[sz]; targetURL = _T(""); targetURL.LoadString(IDS_URL_JAIKU_ACCESS_TOKEN); strcpy( nonce, getNonce(NULL) ); sprintf( key, "%s&", encodeURLi( consumerSecret, FALSE ) ); sprintf( key + strlen(key), "%s", encodeURLi( _oauthTokenSecret, FALSE ) ); sprintf( base, "GET&" "%s&", encodeURLi( targetURL, FALSE ) ); sprintf( param, "oauth_consumer_key=%s&" "oauth_nonce=%s&" "oauth_signature_method=HMAC-SHA1&" "oauth_timestamp=%ld&" "oauth_token=%s&" "oauth_version=1.0", consumerKey, nonce, t, _oauthToken ); MakeOAuthRequest( targetURL, "GET", request, key, base, param ); SetUserAgent(); setUpReceiveBuffer( response, sz ); _http_getBASIC( request, NULL, NULL, response, NULL, NULL ); ret = GetToken( response, oauthToken, oauthTokenSecret ); if ( ret ) { m_oauthToken = oauthToken; m_oauthTokenSecret = oauthTokenSecret; } else MessageBox( NULL, "アクセストークンの取得に失敗しました。 ", "アクセス中止", MB_OK|MB_ICONERROR ); delete [] response; delete [] request; return ( ret ); }