Refine authorization.

master
Chunting Gu 6 years ago
parent 8b6ce4a0c1
commit 3742143657

@ -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);

Loading…
Cancel
Save