access tokenが取得できるように

This commit is contained in:
keita
2022-04-23 04:55:43 +09:00
parent d43e04506b
commit 560fe707a6
75 changed files with 591 additions and 193 deletions
+33
View File
@@ -0,0 +1,33 @@
#include <cocoatweet/api/oauth1/accessToken.h>
#include <cocoatweet/util/util.h>
#include <iostream>
namespace CocoaTweet::API::OAuth1{
AccessToken::AccessToken(){
contentType_ = "application/x-www-form-urlencoded";
url_ = "https://api.twitter.com/oauth/access_token";
}
void AccessToken::oauthVerifier(const std::string& _verifier){
bodyParam_.insert_or_assign("oauth_verifier", _verifier);
}
void AccessToken::oauthToken(const CocoaTweet::API::Model::OAuthToken _token){
oauthToken_ = _token;
}
const CocoaTweet::API::Model::OAuthToken AccessToken::process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth){
CocoaTweet::API::Model::OAuthToken oauthToken;
HttpPost::process(_oauth, [&oauthToken](const std::string& _rcv){
auto mp = CocoaTweet::Util::parse(_rcv, '&', '=');
if(mp.count("oauth_token")){
oauthToken.oauthToken(mp.at("oauth_token"));
}
if(mp.count("oauth_token_secret")){
oauthToken.oauthTokenSecret(mp.at("oauth_token_secret"));
}
std::cout << _rcv << std::endl;
});
return oauthToken;
}
}
+20
View File
@@ -0,0 +1,20 @@
#ifndef COCOATWEET_API_OAUTH1_ACCESSTOKEN_H
#define COCOATWEET_API_OAUTH1_ACCESSTOKEN_H
#include <cocoatweet/api/interface/httpPost.h>
#include <cocoatweet/api/model/oauthToken.h>
namespace CocoaTweet::API::OAuth1{
class AccessToken: public CocoaTweet::API::Interface::HttpPost {
private:
CocoaTweet::API::Model::OAuthToken oauthToken_;
public:
AccessToken();
void oauthVerifier(const std::string& _verifier);
void oauthToken(const CocoaTweet::API::Model::OAuthToken _token);
const CocoaTweet::API::Model::OAuthToken process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth) ;
};
}
#endif
+33
View File
@@ -0,0 +1,33 @@
#include <string>
#include <cocoatweet/api/oauth1/authorize.h>
#include <iostream>
#include <cocoatweet/util/util.h>
namespace CocoaTweet::API::OAuth1{
Authorize::Authorize(){
contentType_ = "application/x-www-form-urlencoded";
url_ = "https://api.twitter.com/oauth/authorize";
}
void Authorize::oauthToken(const std::string& _oauthToken){
bodyParam_.insert_or_assign("oauth_token", _oauthToken);
}
void Authorize::forceLogin(const bool _forceLogin){
bodyParam_.insert_or_assign("force_login", std::to_string(static_cast<int>(_forceLogin)));
}
void Authorize::screenName(const std::string& _screenName){
bodyParam_.insert_or_assign("screen_name", _screenName);
}
const std::string Authorize::process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> __unused__) {
std::vector<std::string> tmp;
std::string query = "";
for (const auto& [key, value] : bodyParam_) {
tmp.push_back(key + "=" + value);
query = CocoaTweet::Util::join(tmp, "&");
}
return url_ + "?" + query;;
}
}
+20
View File
@@ -0,0 +1,20 @@
#ifndef COCOATWEET_API_OAUTH1_AUTHORIZE_H
#define COCOATWEET_API_OAUTH1_AUTHORIZE_H
#include <cocoatweet/api/interface/httpPost.h>
namespace CocoaTweet::API::OAuth1{
class Authorize: public CocoaTweet::API::Interface::HttpPost {
public:
Authorize();
void oauthToken(const std::string& _oauthToken);
void forceLogin(const bool _forceLogin);
void screenName(const std::string& _screenName);
const std::string process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> __unused__) ;
};
}
#endif
+35
View File
@@ -0,0 +1,35 @@
#include <cocoatweet/api/oauth1/oauth.h>
#include <cocoatweet/authentication/authenticate.h>
namespace CocoaTweet::API::OAuth1 {
OAuth::OAuth(std::shared_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth){
oauth_ = _oauth;
}
CocoaTweet::API::Model::OAuthToken OAuth::requestToken(const std::string& _oauthCallback) const{
auto key = oauth_.lock()->key();
key.authType(CocoaTweet::Authentication::Key::AUTH_TYPE::OAUTH10A);
auto oauth = std::make_shared<CocoaTweet::Authentication::OAuth1>(key);
CocoaTweet::API::OAuth1::RequestToken requestToken;
requestToken.oauthCallback(_oauthCallback);
return requestToken.process(oauth);
}
const std::string OAuth::authorize(const CocoaTweet::API::Model::OAuthToken _oauthToken) const{
CocoaTweet::API::OAuth1::Authorize authorize;
authorize.oauthToken(_oauthToken.oauthToken());
return authorize.process(oauth_);
}
const CocoaTweet::API::Model::OAuthToken OAuth::accessToken(const CocoaTweet::API::Model::OAuthToken _oauthToken, const std::string _verifier) const{
auto key = oauth_.lock()->key();
key.authType(CocoaTweet::Authentication::Key::AUTH_TYPE::OAUTH10A);
key.accessToken(_oauthToken.oauthToken());
key.accessTokenSecret(_oauthToken.oauthTokenSecret());
auto oauth = std::make_shared<CocoaTweet::Authentication::OAuth1>(key);
CocoaTweet::API::OAuth1::AccessToken accessToken;
accessToken.oauthVerifier(_verifier);
return accessToken.process(oauth);
}
} // namespace CocoaTweet::API::Statuses
+30
View File
@@ -0,0 +1,30 @@
#ifndef COCOATWEET_API_OAUTH1_OAUTH_H_
#define COCOATWEET_API_OAUTH1_OAUTH_H_
#include "cocoatweet/api/interface/groupInterface.h"
#include <cocoatweet/api/oauth1/accessToken.h>
#include <cocoatweet/api/oauth1/requestToken.h>
#include <cocoatweet/api/oauth1/authorize.h>
#include <cocoatweet/api/model/oauthToken.h>
#include <vector>
#include <utility>
namespace CocoaTweet::API::OAuth1 {
/// @brief class for using users/show endpoint
class OAuth : public groupInterface {
public:
/// @brief primary constructor
OAuth() = default;
/// @brief constructor which finally should to be called.
/// @param[in] std::shared_ptr<CocoaTweet::Authentication::AuthenticatorBase> : pointer to OAuth object
OAuth(std::shared_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth);
CocoaTweet::API::Model::OAuthToken requestToken(const std::string& _oauthCallback) const;
const std::string authorize(const CocoaTweet::API::Model::OAuthToken _oauthToken) const;
const CocoaTweet::API::Model::OAuthToken accessToken(const CocoaTweet::API::Model::OAuthToken _oauthToken, const std::string _verifier) const;
};
} // namespace CocoaTweet::API::Statuses
#endif
+29
View File
@@ -0,0 +1,29 @@
#include <cocoatweet/api/oauth1/requestToken.h>
#include <cocoatweet/util/util.h>
#include <iostream>
namespace CocoaTweet::API::OAuth1{
RequestToken::RequestToken(){
contentType_ = "application/x-www-form-urlencoded";
url_ = "https://api.twitter.com/oauth/request_token";
}
void RequestToken::oauthCallback(const std::string& _oauthCallback){
bodyParam_.insert_or_assign("oauth_callback", _oauthCallback);
}
CocoaTweet::API::Model::OAuthToken RequestToken::process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth){
CocoaTweet::API::Model::OAuthToken oauthToken;
HttpPost::process(_oauth, [&oauthToken](const std::string& _rcv){
auto mp = CocoaTweet::Util::parse(_rcv, '&', '=');
if(mp.count("oauth_token")){
oauthToken.oauthToken(mp.at("oauth_token"));
}
if(mp.count("oauth_token_secret")){
oauthToken.oauthTokenSecret(mp.at("oauth_token_secret"));
}
std::cout << _rcv << std::endl;
});
return oauthToken;
}
}
+17
View File
@@ -0,0 +1,17 @@
#ifndef COCOATWEET_API_OAUTH1_REQUESTTOKEN_H
#define COCOATWEET_API_OAUTH1_REQUESTTOKEN_H
#include <cocoatweet/api/interface/httpPost.h>
#include <cocoatweet/api/model/oauthToken.h>
namespace CocoaTweet::API::OAuth1{
class RequestToken: public CocoaTweet::API::Interface::HttpPost {
public:
RequestToken();
void oauthCallback(const std::string& _oauthCallback);
CocoaTweet::API::Model::OAuthToken process(std::weak_ptr<CocoaTweet::Authentication::AuthenticatorBase> _oauth);
};
}
#endif