27 #include "aossl/core/include/buffers.h" 29 #include "Poco/StreamCopier.h" 31 #include "Poco/Net/Context.h" 32 #include "Poco/Net/HTTPRequest.h" 33 #include "Poco/Net/HTTPSClientSession.h" 34 #include "Poco/Net/HTTPResponse.h" 35 #include "Poco/Net/SSLException.h" 37 #ifndef AOSSL_CORE_INCLUDE_BASE_HTTP_CLIENT_H_ 38 #define AOSSL_CORE_INCLUDE_BASE_HTTP_CLIENT_H_ 50 std::string cert_location;
51 std::string http_addr;
52 std::string acl_token;
53 std::string acl_token_name;
54 inline void init(std::string& vaddr,
int tout) {
56 http_addr.assign(vaddr);
58 inline void get_http_response(Poco::Net::HTTPClientSession& session, \
60 Poco::Net::HTTPResponse res;
61 std::istream& rs = session.receiveResponse(res);
62 if (res.getStatus() > Poco::Net::HTTPResponse::HTTP_PARTIAL_CONTENT) {
64 ret_buffer.
err_msg.assign(
"Error sending message to Vault: " + res.getReason());
66 std::istreambuf_iterator<char> eos;
67 std::string resp(std::istreambuf_iterator<char>(rs), eos);
69 ret_buffer.
val.assign(resp);
72 inline void send_http_request(Poco::Net::HTTPClientSession& session, \
74 session.sendRequest(req);
75 get_http_response(session, ret_buffer);
77 inline void send_http_request(Poco::Net::HTTPClientSession& session, \
79 req.setContentLength(body.length());
80 session.sendRequest(req) << body;
81 get_http_response(session, ret_buffer);
83 inline void create_and_send_request(std::string& req_type,
bool use_body, \
88 const Poco::URI uri( http_addr );
89 Poco::Net::HTTPRequest req(req_type, query_url );
92 req.add(acl_token_name, acl_token);
96 const Poco::Net::Context::Ptr context(
new Poco::Net::Context( \
97 Poco::Net::Context::CLIENT_USE,
"", cert_location,
"", \
98 Poco::Net::Context::VerificationMode::VERIFY_NONE ) );
99 Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context );
101 send_http_request(session, req, body, ret_buffer);
103 send_http_request(session, req, ret_buffer);
106 Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
108 send_http_request(session, req, body, ret_buffer);
110 send_http_request(session, req, ret_buffer);
113 }
catch(
const Poco::Net::SSLException& e ) {
115 ret_buffer.
err_msg.assign(e.message());
116 }
catch(
const std::exception& e ) {
118 ret_buffer.
err_msg.assign(e.what());
124 {init(vaddr, tout);secured=
true;cert_location.assign(cert);}
131 std::string get_address() {
return http_addr;}
132 std::string get_ssl_cert() {
return cert_location;}
133 std::string get_acl_token() {
return acl_token;}
138 std::string req_type = Poco::Net::HTTPRequest::HTTP_PUT;
139 create_and_send_request(req_type,
true, query_url, body, ret_buffer);
144 std::string req_type = Poco::Net::HTTPRequest::HTTP_POST;
145 create_and_send_request(req_type,
true, query_url, body, ret_buffer);
149 std::string body =
"";
150 std::string req_type = Poco::Net::HTTPRequest::HTTP_GET;
151 create_and_send_request(req_type,
false, query_url, body, ret_buffer);
155 std::string body =
"";
156 std::string req_type = Poco::Net::HTTPRequest::HTTP_DELETE;
157 create_and_send_request(req_type,
false, query_url, body, ret_buffer);
161 acl_token.assign(new_token);
162 acl_token_name.assign(token_name);
169 #endif // AOSSL_CORE_INCLUDE_BASE_HTTP_CLIENT_H_ A Structure for holding a single value.
Definition: buffers.h:42
std::string val
Value stored.
Definition: buffers.h:44
void post_by_reference(std::string &query_url, std::string &body, AOSSL::StringBuffer &ret_buffer)
Execute a Post query.
Definition: base_http_client.h:142
void delete_by_reference(std::string &query_url, AOSSL::StringBuffer &ret_buffer)
Execute a Delete query.
Definition: base_http_client.h:154
BaseHttpClient(std::string &vaddr, int tout, std::string &cert)
Construct a secured HTTP Client.
Definition: base_http_client.h:123
BaseHttpClient(std::string &vaddr, int tout)
Construct an unsecured HTTP Client.
Definition: base_http_client.h:126
void set_acl_token(std::string token_name, std::string new_token)
Add an ACL Token.
Definition: base_http_client.h:160
bool success
Success flag.
Definition: buffers.h:35
void put_by_reference(std::string &query_url, std::string &body, AOSSL::StringBuffer &ret_buffer)
Execute a Put query.
Definition: base_http_client.h:136
void get_by_reference(std::string &query_url, AOSSL::StringBuffer &ret_buffer)
Execute a Get query.
Definition: base_http_client.h:148
std::string err_msg
Error Message.
Definition: buffers.h:38
Base HTTP Client.
Definition: base_http_client.h:46