Ejemplo n.º 1
0
Archivo: OAUTH.cpp Proyecto: tiku/test
bool Oauth::Step1(){
	Init();
	if(!GetRequestToken()){
		return false;
	}
	GetVerifier();
	return true;
}
Ejemplo n.º 2
0
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 );
}