Salome HOME
FileService
[modules/gde.git] / projects / GDE_API_CPP / api / src / HttpConnection.cpp
index 32a8e18e5ca3ea77cca27495c9bcb5d87c05dd24..b07bc72e479a087115371fa2b8be08baa78daba6 100644 (file)
@@ -7,11 +7,12 @@
 
 #include <Poco/StreamCopier.h>
 #include <Poco/Net/HTTPResponse.h>
+#include <Poco/Base64Encoder.h>
 
 using namespace Poco::Net;
 
-gde::HttpConnection::HttpConnection(Poco::URI uri)
-  : _path("/")
+gde::HttpConnection::HttpConnection(Poco::URI uri, const Credentials& cred)
+  : _path("/"), _credentials(cred)
 {
   try {
     _session.setHost(uri.getHost());
@@ -40,33 +41,42 @@ gde::HttpConnection::~HttpConnection()
 // 6. CommandResultTO --> (json) response
 
 gde::CommandResultTO
-gde::HttpConnection::_processRequest(const HTTPRequest& request,
-                                     const std::string& requestBody)
+gde::HttpConnection::_processRequest(const std::string& method,
+                                     const CommandTO& cto)
 {
   int code = CommandResultTO::OK;
   std::string message = "";
   std::string data = "";
 
-  std::cout << "processRequest: body = " << requestBody << std::endl;
+  std::string requestBody = cto.toJson();
 
   try {
-    std::cout << "Sending request...\n";
+    HTTPRequest request(method, _path, HTTPMessage::HTTP_1_1);
+
+    // Authenticating
+    std::stringstream ss;
+    Poco::Base64Encoder b64enc(ss);
+    b64enc << _credentials.getLogin() << ":" << _credentials.getPassword(); // user::password
+    b64enc.close();
+    request.set("Authorization" , "Basic "+ss.str());
+
+    // Sending request
+    request.setContentLength(requestBody.length());
     std::ostream& os = _session.sendRequest((HTTPRequest&)request);
     // Send request body, if any
     if (!requestBody.empty()) {
-      std::istringstream iss(requestBody);
-      Poco::StreamCopier::copyStream((std::istream&)iss, os);
+      //std::istringstream iss(requestBody);
+      //Poco::StreamCopier::copyStream((std::istream&)iss, os);
+      os << requestBody;
     }
 
-    std::cout << "Getting response...\n";
     // Get response
     HTTPResponse response;
     std::istream& rs = _session.receiveResponse(response);
-    std::cout << response.getStatus() << " " << response.getReason() << std::endl;
+    //std::cout << response.getStatus() << " " << response.getReason() << std::endl;
     std::ostringstream responseBody;
     Poco::StreamCopier::copyStream(rs, responseBody);
     // responseBody contains a CommandResultTO in json format
-    std::cout << "Returning result...\n";
     return CommandResultTO::fromJson(responseBody.str());
   } catch (Poco::Exception& e) {
     std::cerr << e.displayText() << std::endl;
@@ -77,13 +87,11 @@ gde::HttpConnection::_processRequest(const HTTPRequest& request,
 gde::CommandResultTO
 gde::HttpConnection::doGet(const CommandTO& cto)
 {
-  HTTPRequest request(HTTPRequest::HTTP_GET, _path, HTTPMessage::HTTP_1_1);
-  return _processRequest(request, cto.getData());
+  return _processRequest(HTTPRequest::HTTP_GET, cto);
 }
 
 gde::CommandResultTO
 gde::HttpConnection::doPost(const CommandTO& cto)
 {
-  HTTPRequest request(HTTPRequest::HTTP_POST, _path, HTTPMessage::HTTP_1_1);
-  return _processRequest(request, cto.getData());
+  return _processRequest(HTTPRequest::HTTP_POST, cto);
 }