Skip to content
This repository has been archived by the owner on Apr 1, 2024. It is now read-only.

Commit

Permalink
added: sendReceiver
Browse files Browse the repository at this point in the history
  • Loading branch information
nexan-pro committed Mar 9, 2019
1 parent 11c8afe commit f8a2e02
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 122 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set(CMAKE_CXX_STANDARD 17)
set(CURL_LIBRARY "-lcurl")
find_package(CURL REQUIRED)

add_executable(anonfile main.cpp helpers/helpers.cpp helpers/helpers.h pjson/pjson.h json_handler/JHandler.cpp json_handler/JHandler.h)
add_executable(anonfile main.cpp helpers/helpers.cpp helpers/helpers.h pjson/pjson.h json_handler/JHandler.cpp json_handler/JHandler.h sendReceiver/sendReceiver.cpp sendReceiver/sendReceiver.h)

include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(anonfile ${CURL_LIBRARIES})
12 changes: 0 additions & 12 deletions helpers/helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,3 @@ std::string Helpers::readFromFile(std::ifstream& _in) {
throw std::runtime_error("Error, unable to open file!");
return tmp;
}

void Helpers::printRequestData() {
if (status) {
std::cout << "File was uploaded successfully!\n"
<< "Full url to file: " << url_ptr->str_full
<< "\nShort url to file: " << url_ptr->str_short
<< "\nFile id: " << MD_ptr->id
<< "\nFilename: " << MD_ptr->name
<< "\nSize of file: " << MD_ptr->size << '\n';
} else
std::cerr << "Error: " << error_msg << std::endl;
}
13 changes: 4 additions & 9 deletions helpers/helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,14 @@
#include <fstream>
#include "../json_handler/JHandler.h"

class Helpers : protected JHandler {
class Helpers {
public:
Helpers(std::string cfg) : JHandler(cfg) {}

Helpers() = default;
static int get_current_length(char* str);

static bool contains(char* &tmp);

protected:
static int get_current_length(char* str);
static bool contains(char*& tmp);
static char* reverse(char*& str);

static std::string readFromFile(std::ifstream& _in);

void printRequestData();
};
#endif //ANONFILE_HELPERS_H
113 changes: 13 additions & 100 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,121 +2,34 @@
#include <curl/curl.h>
#include <iostream>
#include <cstring>
#include "helpers/helpers.h"
#include "json_handler/JHandler.h"

#define LINUX
//#define DEBUG

size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up) {
((std::string*)up)->append(buf, size * nmemb);
return size * nmemb;
}
#include "sendReceiver/sendReceiver.h"

int main(int argc, char** argv) {
std::string contents, data;
char *filename = new char[256];
if (argc == 2)
if (argc == 3 && strncmp(argv[1], "-i", 2) == 0) {
std::string id = static_cast<std::string>(argv[2]);
SendReceiver ctrl;
ctrl.getInfoReq(id);

}
else if (argc == 2) {
strcpy(filename, argv[1]);
SendReceiver ctrl;
ctrl.uploadFile(filename);
}
else if (argc == 1) {
std::cout << "Enter filename: ";
std::cin.getline(filename, 256);
SendReceiver ctrl;
ctrl.uploadFile(filename);
}
else {
std::cerr << "Error too many arguments provided, usage: anonfile <your_path_to_file>\n"
<< "File path must be without spaces.\n";
return -1;
}

int ecx = Helpers::get_current_length(filename), i = 0;
char *formattedFilename = new char[ecx];

if (Helpers::contains(filename)) {
while (filename[ecx] != '\\') {
ecx--;
if (ecx < 0) break;
if (filename[ecx] == '/') break;
formattedFilename[i] = filename[ecx];
i++;
}
Helpers::reverse(formattedFilename);

#ifdef DEBUG
std::cout << "[DEBUG] : formatted filename is: " << formattedFilename << std::endl;
#endif

} else
for (int c = 0; c <= ecx; c++)
formattedFilename[c] = filename[c];
std::cout << "filename is: " << filename << std::endl;

std::ifstream in(filename, std::ios::in | std::ios::binary);

contents = Helpers::readFromFile(in);

CURL* curl;
CURLcode res;

struct curl_httppost* formpost = NULL;
struct curl_httppost* lastptr = NULL;
struct curl_slist* headerlist = NULL;

curl_global_init(CURL_GLOBAL_ALL);

// set up the header
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "cache-control:",
CURLFORM_COPYCONTENTS, "no-cache",
CURLFORM_END);

curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "content-type:",
CURLFORM_COPYCONTENTS, "multipart/form-data",
CURLFORM_END);

curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "file", // the (in this case) wanted file-Tag!
CURLFORM_BUFFER, formattedFilename,
CURLFORM_BUFFERPTR, contents.data(),
CURLFORM_BUFFERLENGTH, contents.size(),
CURLFORM_END);

curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, "pragma:");
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://anonfile.com/api/upload");

#ifndef LINUX
curl_easy_setopt (curl, CURLOPT_CAINFO, "cacert.pem"); // set path to SSL CA cert issue "cacert.pem"
#endif

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

res = curl_easy_perform(curl);

/* Check for errors */
if (res != CURLE_OK)
std::cerr << "Error, check you internet connection [" << curl_easy_strerror(res)<< "]\n";

#ifdef DEBUG
std::cout << std::endl << "[DEBUG|DATA] : " << data << std::endl;
#endif

curl_easy_cleanup(curl);
curl_formfree(formpost);
curl_slist_free_all(headerlist);
}
curl_global_cleanup();

delete[] filename;
delete[] formattedFilename;

Helpers handler(data);
handler.printRequestData();

std::cout << "Press ENTER to exit.\n";
std::cin.get();
Expand Down
119 changes: 119 additions & 0 deletions sendReceiver/sendReceiver.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#include "sendReceiver.h"
#include "curl/curl.h"

size_t SendReceiver::writeCallback(char* buf, size_t size, size_t nmemb, void* up) {
((std::string*)up)->append(buf, size * nmemb);
return size * nmemb;
}

bool SendReceiver::uploadFile(char*& pathToFile) {
std::string data, contents;
int ecx = Helpers::get_current_length(pathToFile), i = 0;
char *formattedFilename = new char[ecx];

if (Helpers::contains(pathToFile)) {
while (pathToFile[ecx] != '\\') {
ecx--;
if (ecx < 0) break;
if (pathToFile[ecx] == '/') break;
formattedFilename[i] = pathToFile[ecx];
i++;
}
Helpers::reverse(formattedFilename);

#ifdef DEBUG
std::cout << "[DEBUG] : formatted filename is: " << formattedFilename << std::endl;
#endif

} else
for (int c = 0; c <= ecx; c++)
formattedFilename[c] = pathToFile[c];
std::cout << "pathToFile is: " << pathToFile << std::endl;

std::ifstream in(pathToFile, std::ios::in | std::ios::binary);

contents = Helpers::readFromFile(in);

CURL* curl;
CURLcode res;

struct curl_httppost* formpost = nullptr;
struct curl_httppost* lastptr = nullptr;
struct curl_slist* headerlist = nullptr;

curl_global_init(CURL_GLOBAL_ALL);

// set up the header
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "cache-control:",
CURLFORM_COPYCONTENTS, "no-cache",
CURLFORM_END);

curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "content-type:",
CURLFORM_COPYCONTENTS, "multipart/form-data",
CURLFORM_END);

curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "file", // the (in this case) wanted file-Tag!
CURLFORM_BUFFER, formattedFilename,
CURLFORM_BUFFERPTR, contents.data(),
CURLFORM_BUFFERLENGTH, contents.size(),
CURLFORM_END);

curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, "pragma:");
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://anonfile.com/api/upload");

#ifndef LINUX
curl_easy_setopt (curl, CURLOPT_CAINFO, "cacert.pem"); // set path to SSL CA cert issue "cacert.pem"
#endif

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

res = curl_easy_perform(curl);

/* Check for errors */
if (res != CURLE_OK) {
std::cerr << "Error, check you internet connection [" << curl_easy_strerror(res) << "]\n";
return false;
}

#ifdef DEBUG
std::cout << std::endl << "[DEBUG|DATA] : " << data << std::endl;
#endif

curl_easy_cleanup(curl);
curl_formfree(formpost);
curl_slist_free_all(headerlist);
}
curl_global_cleanup();

delete[] pathToFile;
delete[] formattedFilename;

SendReceiver handler(data);
handler.printRequestData();
return status;
}

bool SendReceiver::getInfoReq(std::string& id) {
std::string link = "https://anonfile.com/api/v2/file/" + static_cast<std::string>(id) + "/info";
}

void SendReceiver::printRequestData() {
if (status) {
std::cout << "File was uploaded successfully!\n"
<< "Full url to file: " << url_ptr->str_full
<< "\nShort url to file: " << url_ptr->str_short
<< "\nFile id: " << MD_ptr->id
<< "\nFilename: " << MD_ptr->name
<< "\nSize of file: " << MD_ptr->size << '\n';
} else
std::cerr << "Error: " << error_msg << std::endl;
}
22 changes: 22 additions & 0 deletions sendReceiver/sendReceiver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef ANONFILE_SENDER_H
#define ANONFILE_SENDER_H

#define LINUX
#define DEBUG

#include "../helpers/helpers.h"
#include "../json_handler/JHandler.h"

class SendReceiver : protected Helpers, protected JHandler {
private:
static size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up);
void printRequestData();
public:
explicit SendReceiver(std::string cfg) : JHandler(cfg) { }
SendReceiver() = default;
bool uploadFile(char*& pathToFile);
bool getInfoReq(std::string& id); //TODO:
};


#endif //ANONFILE_SENDER_H

0 comments on commit f8a2e02

Please sign in to comment.