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