parse_request refactored

pull/12/head
moneroexamples 7 years ago
parent 9523317101
commit b4a30998ee

@ -43,17 +43,18 @@ void
YourMoneroRequests::login(const shared_ptr<Session> session, const Bytes & body)
{
json j_response;
json j_request;
map<string, string> values_map{{"address" , {}}, {"view_key", {}}};
vector<string> required_values {"address", "view_key"};
if (!parse_request(body, values_map, j_response))
if (!parse_request(body, required_values, j_request, j_response))
{
session_close(session, j_response.dump());
return;
}
const string& xmr_address = values_map["address"];
const string& view_key = values_map["view_key"];
string xmr_address = j_request["address"];
string view_key = j_request["view_key"];
// make hash of the submited viewkey. we only store
// hash of viewkey in database, not acctual viewkey.
@ -78,7 +79,7 @@ YourMoneroRequests::login(const shared_ptr<Session> session, const Bytes & body)
if (viewkey_hash == acc.viewkey_hash)
{
acc.viewkey = values_map["view_key"];
acc.viewkey = view_key;
start_search_thread = true;
}
@ -106,7 +107,7 @@ YourMoneroRequests::login(const shared_ptr<Session> session, const Bytes & body)
// select newly created account
if (xmr_accounts->select(acc_id, acc))
{
acc.viewkey = values_map["view_key"];
acc.viewkey = view_key;
start_search_thread = true;
}
@ -151,17 +152,18 @@ void
YourMoneroRequests::get_address_txs(const shared_ptr< Session > session, const Bytes & body)
{
json j_response;
json j_request;
map<string, string> values_map{{"address" , {}}, {"view_key", {}}};
vector<string> requested_values{"address", "view_key"};
if (!parse_request(body, values_map, j_response))
if (!parse_request(body, requested_values, j_request, j_response))
{
session_close(session, j_response.dump());
return;
}
const string& xmr_address = values_map["address"];
const string& view_key = values_map["view_key"];
string xmr_address = j_request["address"];
string view_key = j_request["view_key"];
// make hash of the submited viewkey. we only store
// hash of viewkey in database, not acctual viewkey.
@ -334,17 +336,18 @@ void
YourMoneroRequests::get_address_info(const shared_ptr< Session > session, const Bytes & body)
{
json j_response;
json j_request;
map<string, string> values_map{{"address" , {}}, {"view_key", {}}};
vector<string> requested_values {"address" , "view_key"};
if (!parse_request(body, values_map, j_response))
if (!parse_request(body, requested_values, j_request, j_response))
{
session_close(session, j_response.dump());
return;
}
const string& xmr_address = values_map["address"];
const string& view_key = values_map["view_key"];
const string& xmr_address = j_request["address"];
const string& view_key = j_request["view_key"];
// make hash of the submited viewkey. we only store
// hash of viewkey in database, not acctual viewkey.
@ -455,16 +458,33 @@ YourMoneroRequests::get_address_info(const shared_ptr< Session > session, const
void
YourMoneroRequests::get_unspent_outs(const shared_ptr< Session > session, const Bytes & body)
{
json j_request = body_to_json(body);
json j_response;
json j_request;
vector<string> requested_values {"address" , "view_key", "mixin",
"use_dust", "dust_threshold", "amount"};
string xmr_address = j_request["address"];
uint64_t mixin = j_request["mixin"];
bool use_dust = j_request["use_dust"];
if (!parse_request(body, requested_values, j_request, j_response))
{
session_close(session, j_response.dump());
return;
}
string xmr_address = j_request["address"];
string view_key = j_request["view_key"];
uint64_t mixin = j_request["mixin"];
bool use_dust = j_request["use_dust"];
uint64_t dust_threshold = boost::lexical_cast<uint64_t>(j_request["dust_threshold"].get<string>());
uint64_t amount = boost::lexical_cast<uint64_t>(j_request["amount"].get<string>());
json j_response {
// make hash of the submited viewkey. we only store
// hash of viewkey in database, not acctual viewkey.
string viewkey_hash = make_hash(view_key);
j_response = json {
{"amount" , 0}, // total value of the outputs
{"outputs", json::array()} // list of outputs
// exclude those without require
@ -477,6 +497,15 @@ YourMoneroRequests::get_unspent_outs(const shared_ptr< Session > session, const
// select this account if its existing one
if (xmr_accounts->select(xmr_address, acc))
{
if (viewkey_hash != acc.viewkey_hash)
{
j_response = json {{"status", "error"},
{"reason", "Viewkey provided is incorrect"}};
session_close(session, j_response.dump());
return;
}
uint64_t total_outputs_amount {0};
uint64_t current_blockchain_height
@ -948,33 +977,31 @@ YourMoneroRequests::session_close(const shared_ptr< Session > session, string re
bool
YourMoneroRequests::parse_request(
const Bytes& body,
map<string, string>& values_map,
vector<string>& values_map,
json& j_request,
json& j_response)
{
json j_request;
try
{
j_request = body_to_json(body);
for (const auto& kv: values_map)
// parsing was successful
// now check if all required values are there.
for (const auto& v: values_map)
{
if (j_request.count(kv.first) == 0)
if (j_request.count(v) == 0)
{
cerr << kv.first + " value not provided" << endl;
cerr << v + " value not provided" << endl;
j_response["status"] = "error";
j_response["reason"] = kv.first + " value not provided";
j_response["reason"] = v + " value not provided";
return false;
}
values_map[kv.first] = j_request[kv.first];
// assume some needed value in json is not given
j_response["reason"] = kv.first + " value not provided";
}
return true;

@ -117,7 +117,8 @@ private:
session_close(const shared_ptr< Session > session, string response_body);
bool parse_request(const Bytes& body,
map<string, string>& values_map,
vector<string>& values_map,
json& j_request,
json& j_response);
};

Loading…
Cancel
Save