Refine authorization.
This commit is contained in:
+15
-11
@@ -87,16 +87,17 @@ void ListUserFollowers(webcc::HttpClientSession& session,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// List the followers of the current authorized user.
|
// List the followers of the current authorized user using Basic authorization.
|
||||||
// Header syntax: Authorization: <type> <credentials>
|
// E.g., list my own followers:
|
||||||
// Example:
|
// ListAuthUserFollowers(session, "sprinfall@gmail.com", "<MyPassword>");
|
||||||
// ListAuthUserFollowers(session, "Basic <base64 encoded login:password>")
|
|
||||||
// ListAuthUserFollowers(session, "Token <token>")
|
|
||||||
void ListAuthUserFollowers(webcc::HttpClientSession& session,
|
void ListAuthUserFollowers(webcc::HttpClientSession& session,
|
||||||
const std::string& auth) {
|
const std::string& login,
|
||||||
|
const std::string& password) {
|
||||||
try {
|
try {
|
||||||
auto r = session.Get(kUrlRoot + "/user/followers", {},
|
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
|
||||||
{"Authorization", auth});
|
Url(kUrlRoot + "/user/followers").
|
||||||
|
AuthBasic(login, password)
|
||||||
|
());
|
||||||
|
|
||||||
PRINT_JSON_STRING(r->content());
|
PRINT_JSON_STRING(r->content());
|
||||||
|
|
||||||
@@ -108,9 +109,11 @@ void ListAuthUserFollowers(webcc::HttpClientSession& session,
|
|||||||
void CreateAuthorization(webcc::HttpClientSession& session,
|
void CreateAuthorization(webcc::HttpClientSession& session,
|
||||||
const std::string& auth) {
|
const std::string& auth) {
|
||||||
try {
|
try {
|
||||||
|
std::string data =
|
||||||
std::string data = "{'note': 'Webcc test', 'scopes': ['public_repo',\
|
"{\n"
|
||||||
'repo', 'repo:status', 'user']}";
|
" 'note': 'Webcc test',\n"
|
||||||
|
" 'scopes': ['public_repo', 'repo', 'repo:status', 'user']\n"
|
||||||
|
"}";
|
||||||
|
|
||||||
auto r = session.Post(kUrlRoot + "/authorizations", std::move(data), true,
|
auto r = session.Post(kUrlRoot + "/authorizations", std::move(data), true,
|
||||||
{"Authorization", auth});
|
{"Authorization", auth});
|
||||||
@@ -128,6 +131,7 @@ int main() {
|
|||||||
WEBCC_LOG_INIT("", webcc::LOG_CONSOLE);
|
WEBCC_LOG_INIT("", webcc::LOG_CONSOLE);
|
||||||
|
|
||||||
webcc::HttpClientSession session;
|
webcc::HttpClientSession session;
|
||||||
|
|
||||||
session.set_ssl_verify(kSslVerify);
|
session.set_ssl_verify(kSslVerify);
|
||||||
|
|
||||||
ListEvents(session);
|
ListEvents(session);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "webcc/http_client_session.h"
|
#include "webcc/http_client_session.h"
|
||||||
|
|
||||||
|
#include "webcc/base64.h"
|
||||||
#include "webcc/logger.h"
|
#include "webcc/logger.h"
|
||||||
#include "webcc/url.h"
|
#include "webcc/url.h"
|
||||||
|
|
||||||
@@ -9,6 +10,21 @@ HttpClientSession::HttpClientSession() {
|
|||||||
InitHeaders();
|
InitHeaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HttpClientSession::Auth(const std::string& type,
|
||||||
|
const std::string& credentials) {
|
||||||
|
headers_.Set(http::headers::kAuthorization, type + " " + credentials);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HttpClientSession::AuthBasic(const std::string& login,
|
||||||
|
const std::string& password) {
|
||||||
|
auto credentials = Base64Encode(login + ":" + password);
|
||||||
|
return Auth("Basic", credentials);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HttpClientSession::AuthToken(const std::string& token) {
|
||||||
|
return Auth("Token", token);
|
||||||
|
}
|
||||||
|
|
||||||
HttpResponsePtr HttpClientSession::Request(HttpRequestPtr request) {
|
HttpResponsePtr HttpClientSession::Request(HttpRequestPtr request) {
|
||||||
assert(request);
|
assert(request);
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,6 @@ public:
|
|||||||
|
|
||||||
~HttpClientSession() = default;
|
~HttpClientSession() = default;
|
||||||
|
|
||||||
void set_content_type(const std::string& content_type) {
|
|
||||||
content_type_ = content_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_charset(const std::string& charset) {
|
|
||||||
charset_ = charset;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_ssl_verify(bool ssl_verify) {
|
void set_ssl_verify(bool ssl_verify) {
|
||||||
ssl_verify_ = ssl_verify;
|
ssl_verify_ = ssl_verify;
|
||||||
}
|
}
|
||||||
@@ -46,6 +38,23 @@ public:
|
|||||||
headers_.Set(key, value);
|
headers_.Set(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_content_type(const std::string& content_type) {
|
||||||
|
content_type_ = content_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_charset(const std::string& charset) {
|
||||||
|
charset_ = charset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set authorization.
|
||||||
|
void Auth(const std::string& type, const std::string& credentials);
|
||||||
|
|
||||||
|
// Set Basic authorization.
|
||||||
|
void AuthBasic(const std::string& login, const std::string& password);
|
||||||
|
|
||||||
|
// Set Token authorization.
|
||||||
|
void AuthToken(const std::string& token);
|
||||||
|
|
||||||
// Send a request.
|
// Send a request.
|
||||||
// Please use HttpRequestBuilder to build the request.
|
// Please use HttpRequestBuilder to build the request.
|
||||||
HttpResponsePtr Request(HttpRequestPtr request);
|
HttpResponsePtr Request(HttpRequestPtr request);
|
||||||
|
|||||||
@@ -23,10 +23,18 @@ public:
|
|||||||
|
|
||||||
~HttpRequest() override = default;
|
~HttpRequest() override = default;
|
||||||
|
|
||||||
|
const std::string& method() const {
|
||||||
|
return method_;
|
||||||
|
}
|
||||||
|
|
||||||
void set_method(const std::string& method) {
|
void set_method(const std::string& method) {
|
||||||
method_ = method;
|
method_ = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Url& url() const {
|
||||||
|
return url_;
|
||||||
|
}
|
||||||
|
|
||||||
void set_url(const std::string& url) {
|
void set_url(const std::string& url) {
|
||||||
url_.Init(url);
|
url_.Init(url);
|
||||||
}
|
}
|
||||||
@@ -35,14 +43,6 @@ public:
|
|||||||
url_.AddQuery(key, value);
|
url_.AddQuery(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& method() const {
|
|
||||||
return method_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Url& url() const {
|
|
||||||
return url_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string& host() const {
|
const std::string& host() const {
|
||||||
return url_.host();
|
return url_.host();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ HttpRequestBuilder& HttpRequestBuilder::AuthBasic(const std::string& login,
|
|||||||
return Auth("Basic", credentials);
|
return Auth("Basic", credentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HttpRequestBuilder& HttpRequestBuilder::AuthToken(const std::string& token) {
|
||||||
|
return Auth("Token", token);
|
||||||
|
}
|
||||||
|
|
||||||
void HttpRequestBuilder::SetContent(HttpRequestPtr request,
|
void HttpRequestBuilder::SetContent(HttpRequestPtr request,
|
||||||
std::string&& data) {
|
std::string&& data) {
|
||||||
if (gzip_ && data.size() > kGzipThreshold) {
|
if (gzip_ && data.size() > kGzipThreshold) {
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ public:
|
|||||||
HttpRequestBuilder& AuthBasic(const std::string& login,
|
HttpRequestBuilder& AuthBasic(const std::string& login,
|
||||||
const std::string& password);
|
const std::string& password);
|
||||||
|
|
||||||
|
HttpRequestBuilder& AuthToken(const std::string& token);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetContent(HttpRequestPtr request, std::string&& data);
|
void SetContent(HttpRequestPtr request, std::string&& data);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user