Compare commits

...

6 Commits

@ -37,7 +37,7 @@ if(NEROSHOP_BUILD_GUI AND NEROSHOP_USE_QT)
if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
find_package(Qt5 COMPONENTS Qml Quick Gui Concurrent #[[QuickControls2]])# REQUIRED) # v5.12.8
find_package(Qt5 COMPONENTS Qml Quick Gui Concurrent #[[QuickControls2]])# REQUIRED) # v5.15.x
# add the qml.qrc file
qt5_add_resources(neroshop_res qml.qrc)#qt_add_resources# <= introduced in Qt 5.15 and higher
endif()
@ -384,8 +384,9 @@ endif()
######################################
# libi2pd (and i2pd_client)
set(i2pd_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/daemon ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/i18n ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/libi2pd ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/libi2pd_client) # v2.50.2
set(i2pd_src ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pdclient.a ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pd.a ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pdlang.a ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pddaemon.a)
set(i2pd_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/daemon ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/i18n ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/libi2pd ${CMAKE_CURRENT_SOURCE_DIR}/external/i2pd/libi2pd_client)
set(i2pd_src ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pdclient.a ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pd.a ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pdlang.a)
set(i2pd_daemon_src ${CMAKE_CURRENT_SOURCE_DIR}/build/libi2pddaemon.a)
######################################
# i2psam
@ -426,17 +427,15 @@ set(neroshop_price_src
)
set(neroshop_protocol_src
${NEROSHOP_CORE_SRC_DIR}/protocol/messages/msgpack.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/key_mapper.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/messages/msgpack.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/key_mapper.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/node.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/routing_table.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/serializer.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/rpc/json_rpc.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/client.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/ip_address.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/server.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/zmq_client.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/zmq_server.cpp
${NEROSHOP_CORE_SRC_DIR}/protocol/transport/server.cpp
)
set(neroshop_tools_src
@ -471,6 +470,8 @@ set(neroshop_core_src
${neroshop_wallet_src}
)
set(client_src ${neroshop_crypto_src} ${neroshop_database_src} ${neroshop_network_src} ${neroshop_price_src} ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/serializer.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/rpc/json_rpc.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/client.cpp ${neroshop_tools_src} ${neroshop_wallet_src} ${NEROSHOP_CORE_SRC_DIR}/cart.cpp ${NEROSHOP_CORE_SRC_DIR}/escrow.cpp ${NEROSHOP_CORE_SRC_DIR}/listing.cpp ${NEROSHOP_CORE_SRC_DIR}/order.cpp ${NEROSHOP_CORE_SRC_DIR}/product.cpp ${NEROSHOP_CORE_SRC_DIR}/seller.cpp ${NEROSHOP_CORE_SRC_DIR}/settings.cpp ${NEROSHOP_CORE_SRC_DIR}/user.cpp)
######################################
# neroshop tests
if(NEROSHOP_BUILD_TESTS) # -DNEROSHOP_BUILD_TESTS=1
@ -482,23 +483,24 @@ endif()
######################################
# neroshop-daemon
set(daemon_executable "neromon")
set(daemon_src ${neroshop_crypto_src} ${neroshop_database_src} ${neroshop_network_src} ${NEROSHOP_CORE_SRC_DIR}/protocol/messages/msgpack.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/key_mapper.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/node.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/routing_table.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/rpc/json_rpc.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/client.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/ip_address.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/server.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/zmq_client.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/zmq_server.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/base64.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/logger.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/timestamp.cpp)
set(daemon_src ${neroshop_crypto_src} ${neroshop_database_src} ${neroshop_network_src} ${NEROSHOP_CORE_SRC_DIR}/protocol/messages/msgpack.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/key_mapper.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/node.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/p2p/routing_table.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/rpc/json_rpc.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/client.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/ip_address.cpp ${NEROSHOP_CORE_SRC_DIR}/protocol/transport/server.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/base64.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/logger.cpp ${NEROSHOP_CORE_SRC_DIR}/tools/timestamp.cpp)
add_executable(${daemon_executable} src/daemon/main.cpp ${daemon_src})#target_link_libraries(daemon ${curl_src} ${OPENSSL_LIBRARIES}) # curl requires both openssl(used in monero) and zlib(used in libi2pd)
install(TARGETS ${daemon_executable} DESTINATION bin)
target_compile_definitions(${daemon_executable} PRIVATE NEROSHOP_DEBUG)
target_include_directories(${daemon_executable} PRIVATE #[[${CMAKE_CURRENT_SOURCE_DIR}/src/]] ${monero_include_dirs} ${monero_cpp_include_dir} ${sqlite_include_dir} ${json_include_dir} ${zlib_include_dir} ${i2pd_include_dirs} ${cxxopts_include_dir})
target_link_libraries(${daemon_executable} ${i2pd_src} ${monero_cpp_src} ${sqlite_src} ${monero_src} ${zlib_src})#set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -ldl") # fixes undefined reference to symbol 'dlsym@@GLIBC_2.2.5' error
target_link_libraries(${daemon_executable} ${i2pd_src} ${i2pd_daemon_src} ${monero_cpp_src} ${sqlite_src} ${monero_src} ${zlib_src})#set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -ldl") # fixes undefined reference to symbol 'dlsym@@GLIBC_2.2.5' error
######################################
# neroshop-console
if(NEROSHOP_BUILD_CLI)
set(neroshop_console "neroshop-console")
add_executable(${neroshop_console} src/console/main.cpp ${neroshop_core_src})
add_executable(${neroshop_console} src/console/main.cpp ${client_src})
install(TARGETS ${neroshop_console} DESTINATION bin)
target_compile_definitions(${neroshop_console} PRIVATE NEROSHOP_DEBUG)
target_include_directories(${neroshop_console} PRIVATE #[[${CMAKE_CURRENT_SOURCE_DIR}/src/]] ${monero_include_dirs} ${monero_cpp_include_dir} ${sqlite_include_dir} ${json_include_dir} ${zlib_include_dir} ${i2pd_include_dirs} ${lua_include_dir} ${curl_include_dirs} ${stduuid_include_dirs} ${linenoise_include_dir})
target_link_libraries(${neroshop_console} ${i2pd_src} ${monero_cpp_src} ${sqlite_src} #[[${qrcodegen_src}]] ${curl_src} ${monero_src} ${zlib_src} ${lua_src} ${linenoise_src})
message(STATUS "${BoldMagenta}NEROSHOP_BUILD_CLI option set to ON${ColourReset}")
target_compile_definitions(${neroshop_console} PRIVATE NEROSHOP_BUILD_CLI)
endif()
######################################
@ -507,7 +509,7 @@ if(NEROSHOP_BUILD_GUI)
set(neroshop_executable "neroshop")
add_executable(${neroshop_executable})
install(TARGETS ${neroshop_executable} DESTINATION bin)
target_sources(${neroshop_executable} PRIVATE ${neroshop_res} src/gui/main.cpp src/gui/script_manager.cpp src/gui/wallet_controller.cpp src/gui/user_controller.cpp src/gui/image_loader.cpp src/gui/image_provider.cpp src/gui/wallet_qr_provider.cpp src/gui/currency_rate_provider.cpp #[[src/gui/table_model.cpp]] src/gui/daemon_manager.cpp src/gui/enum_wrapper.cpp src/gui/proxy_manager.cpp src/gui/backend.cpp ${neroshop_core_src})
target_sources(${neroshop_executable} PRIVATE ${neroshop_res} src/gui/main.cpp src/gui/script_manager.cpp src/gui/wallet_controller.cpp src/gui/user_controller.cpp src/gui/image_loader.cpp src/gui/image_provider.cpp src/gui/wallet_qr_provider.cpp src/gui/currency_rate_provider.cpp #[[src/gui/table_model.cpp]] src/gui/daemon_manager.cpp src/gui/enum_wrapper.cpp src/gui/proxy_manager.cpp src/gui/backend.cpp ${client_src})
target_compile_definitions(${neroshop_executable} PRIVATE NEROSHOP_DEBUG)#set_target_properties(${neroshop_executable} PROPERTIES COMPILE_DEFINITIONS "NEROSHOP_DEBUG")
target_include_directories(${neroshop_executable} PRIVATE #[[${CMAKE_CURRENT_SOURCE_DIR}/src/]] ${monero_include_dirs} ${monero_cpp_include_dir} ${sqlite_include_dir} ${json_include_dir} ${zlib_include_dir} ${i2pd_include_dirs} ${lua_include_dir} ${qrcodegen_include_dir})
target_link_libraries(${neroshop_executable} ${i2pd_src} ${monero_cpp_src} ${sqlite_src} ${qrcodegen_src} ${monero_src} ${zlib_src} ${lua_src})

@ -78,7 +78,7 @@ https://gist.github.com/layters/83efdef0c5ea3d8ff458bfc312d11be3
| [linenoise](https://github.com/antirez/linenoise) | ? | command line interface | :heavy_check_mark: :white_square_button: :package: |
| [lua](https://www.lua.org/) | 5.1.5 | configuration script | :heavy_check_mark: :package: |
| [cxxopts](https://github.com/jarro2783/cxxopts) | ? | command line option parser | :heavy_check_mark: :package: |
| [libi2pd](https://github.com/PurpleI2P/i2pd) | latest | network proxy | :grey_question: :package: |
| [libi2pd](https://github.com/PurpleI2P/i2pd) | latest | network proxy | :heavy_check_mark: :package: |
| [i2psam](https://github.com/i2p/i2psam) | ? | network proxy | :grey_question: :package: |
### Compiling neroshop from source
@ -243,7 +243,7 @@ WW2pQTQWHpyJf2CHrCmZG7Tn3zBnYRZTH8g4U3pSZf5s6xsTXrZc9odDWmrWzjRc9MMQWrKXxjHsRdzH
- [Gitea](https://git.wownero.com/layter/neroshop)
- Lemmy: https://monero.town/c/neroshop
- Mail: neroshop@protonmail.com
- Matrix:
- Matrix Rooms:
- [#neroshop:matrix.org](https://matrix.to/#/#neroshop:matrix.org)
- [#neroshop-dev:matrix.org](https://matrix.to/#/#neroshop-dev:matrix.org)

@ -1,8 +1,6 @@
#include <iostream>
#include <string>
#include "../core/protocol/transport/zmq_client.hpp"
#include "../neroshop.hpp"
using namespace neroshop;
namespace neroshop_tools = neroshop::tools;
@ -14,12 +12,12 @@ static void print_commands() {
{"help ", "Display list of available commands"},
{"exit ", "Exit CLI"},
{"version ", "Show version"},
{"monero_nodes", "Display a list of monero nodes"},
{"query ", "Execute an SQLite query"},
{"curl_version", "Show libcurl version"},
{"send ", "Send a test message to the local daemon IPC server"}
/*,
{"", ""}*/
{"monero_nodes", "Display a list of monero nodes"},
{"query ", "Execute an SQLite query"},
{"curl_version", "Show libcurl version"},
{"get ", "Get the value for a key from DHT network"},
{"status ", "Get network status from local daemon server"}
//,{"", ""}
};
std::cout << "Usage: " << "[COMMAND] ...\n\n";
for (auto const& [key, value] : commands) {
@ -31,7 +29,6 @@ static void print_commands() {
int main(int argc, char** argv) {
//-------------------------------------------------------
// Connect to daemon server (daemon must be launched first)
#if !defined(NEROSHOP_USE_LIBZMQ)
neroshop::Client * client = neroshop::Client::get_main_client();
int port = NEROSHOP_IPC_DEFAULT_PORT;
std::string ip = "localhost"; // 0.0.0.0 means anyone can connect to your server
@ -39,9 +36,6 @@ int main(int argc, char** argv) {
std::cout << "Please launch neromon first\n";
exit(0);
}
#else
neroshop::ZmqClient client("tcp://localhost:5555");
#endif
//-------------------------------------------------------
neroshop::load_nodes_from_memory();
@ -53,10 +47,6 @@ int main(int argc, char** argv) {
return 1;
}
std::vector<std::string> monero_nodes = Script::get_table_string(lua_state, "monero.nodes." + network_type);
if(monero_nodes.empty()) {
std::cout << "failed to get nodes in the config file\nCheck your config file in ~/.config/neroshop" << std::endl;
}
//-------------------------------------------------------
char * line = NULL;
while((line = linenoise("neroshop-console> ")) != NULL) {
@ -79,15 +69,28 @@ int main(int argc, char** argv) {
}
else if(neroshop::string::starts_with(command, "query")) {
auto arg_count = neroshop::string::split(command, " ").size();
if(arg_count == 1) neroshop::print("expected arguments after 'query'", 1);
if(arg_count == 1) std::cout << "\033[91mexpected arguments after 'query'\033[0m\n";
if(arg_count > 1) {
std::size_t arg_pos = command.find_first_of(" ");
std::string sql = neroshop::string::trim_left(command.substr(arg_pos + 1));////trim_left(command.substr(std::string("query").length() + 1)); // <- this works too
assert(neroshop::string::starts_with(sql, "SELECT", false) && "Only SELECT queries are allowed"); // since the ability to run sql commands gives too much power to the user to alter the database anyhow, limit queries to select statements only
std::string json = neroshop::rpc::json::translate(sql);
// No need to call RPC server to access RPC functions when it can be done directly.
std::cout << neroshop::rpc::json::process(json) << "\n";
// Usage: query SELECT * FROM mappings;
std::size_t arg_pos = command.find_first_of(" ");
std::string sql = neroshop::string::trim_left(command.substr(arg_pos + 1));////trim_left(command.substr(std::string("query").length() + 1)); // <- this works too
assert(neroshop::string::starts_with(sql, "SELECT", false) && "Only SELECT queries are allowed"); // since the ability to run sql commands gives too much power to the user to alter the database anyhow, limit queries to select statements only
std::string json = neroshop::rpc::json::translate(sql);
// No need to call RPC server to access RPC functions when it can be done directly.
std::cout << neroshop::rpc::json::process(json) << "\n";
// Usage: query SELECT * FROM mappings;
}
}
else if(command == "status") {
if (client->is_connected()) {
std::string response;
client->get("status", response);
try {
nlohmann::json json = nlohmann::json::parse(response);
std::cout << json.dump(4) << "\033[0m\n";
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "Parse error\n";
}
}
}
else if(command == "curl_version") {
@ -97,102 +100,23 @@ int main(int argc, char** argv) {
"." + std::to_string(curl_version->version_num & 0xff);
std::cout << "libcurl version " << curl_version_str << std::endl;
}
else if(command == "send") { // This is only a test command
#if !defined(NEROSHOP_USE_LIBZMQ)
if (client->is_connected()) {
nlohmann::json arguments_obj = {
{"id", ""},
};//nlohmann::json nested_array = {"item1", "item2", "item3"};
nlohmann::json j = {
{"version", std::string(NEROSHOP_DHT_VERSION)},
{"query", "ping"},
{"args", arguments_obj},
{"tid", 1234},
};
// send packed data to POSIX server
std::vector<uint8_t> packed = nlohmann::json::to_msgpack(j);
client->send(packed);//client.send("Hello, POSIX Server!");
try {
std::vector<uint8_t> response;//std::string response;
client->receive(response);
// Deserialize the response from MessagePack to a JSON object
nlohmann::json j2 = nlohmann::json::from_msgpack(response);
std::cout << "Received response: " << j2.dump() << std::endl;
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "An error occurred: " << "Server was disconnected" << std::endl;//std::cout << "Failed to parse server response: " << e.what() << std::endl;
}
} else {
std::cout << "Failed to establish connection to server\n";
}
//------------------------------------------------------------
#else
nlohmann::json j = {
{"message", "Hello, ZMQ Server!"},
{"id", 1234}
};
// send packed data to ZMQ server
std::vector<uint8_t> packed = nlohmann::json::to_msgpack(j);
client.send(packed);//client.send("Hello, ZMQ Server!");
std::vector<uint8_t> response;//std::string response;
client.receive(response);
// Deserialize the response from MessagePack to a JSON object
nlohmann::json j2 = nlohmann::json::from_msgpack(response);
std::cout << "Received response: " << j2.dump() << std::endl;//std::cout << "Received response: " << response << std::endl;
#endif
}
else if(command == "put") { // This is only a test command
if (client->is_connected()) {
nlohmann::json arguments_obj = {
{"key", "63075a22aaed744829b33ed9e16bb3aa0f06121500861bbf8fcbdfee2e708a66"},
{"value", "{\"name\": \"Jack\"}"}, // {"name": "Jack"}
};
nlohmann::json j = {
{"version", std::string(NEROSHOP_DHT_VERSION)},
{"query", "put"},
{"args", arguments_obj},
{"tid", nullptr}, // tid is not needed. DHT server will automatically deal with this
};
// send packed data to POSIX server
std::vector<uint8_t> packed = nlohmann::json::to_msgpack(j);
client->send(packed);//client.send("Hello, POSIX Server!");
try {
std::vector<uint8_t> response;//std::string response;
client->receive(response);
// Deserialize the response from MessagePack to a JSON object
nlohmann::json j2 = nlohmann::json::from_msgpack(response);
std::cout << "Received response: " << j2.dump() << std::endl;
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "An error occurred: " << "Server was disconnected" << std::endl;//std::cout << "Failed to parse server response: " << e.what() << std::endl;
}
}
}
else if(command == "get") { // This is only a test command
if (client->is_connected()) {
nlohmann::json arguments_obj = {
{"key", "63075a22aaed744829b33ed9e16bb3aa0f06121500861bbf8fcbdfee2e708a66"},
};
nlohmann::json j = {
{"version", std::string(NEROSHOP_DHT_VERSION)},
{"query", "get"},
{"args", arguments_obj},
{"tid", nullptr},
};
// send packed data to POSIX server
std::vector<uint8_t> packed = nlohmann::json::to_msgpack(j);
client->send(packed);//client.send("Hello, POSIX Server!");
try {
std::vector<uint8_t> response;//std::string response;
client->receive(response);
// Deserialize the response from MessagePack to a JSON object
nlohmann::json j2 = nlohmann::json::from_msgpack(response);
std::cout << "Received response: " << j2.dump() << std::endl;
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "An error occurred: " << "Server was disconnected" << std::endl;//std::cout << "Failed to parse server response: " << e.what() << std::endl;
else if(neroshop::string::starts_with(command, "get")) {
auto arg_count = neroshop::string::split(command, " ").size();
if(arg_count == 1) std::cout << "\033[91mexpected argument after 'get'\033[0m\n";
if(arg_count > 1) {
std::size_t arg_pos = command.find_first_of(" ");
std::string key = neroshop::string::trim(command.substr(arg_pos + 1));
if (client->is_connected()) {
std::string response;
client->get(key, response);
try {
nlohmann::json json = nlohmann::json::parse(response);
std::cout << (json.contains("error") ? "\033[91m" : "\033[32m") << json.dump(4) << "\033[0m\n";
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "Parse error\n";
}
}
}
}
@ -209,47 +133,16 @@ int main(int argc, char** argv) {
std::string put_response;
client->put(key, value, put_response);
std::cout << "Received response: " << put_response << "\n";
}
else if(command == "search") { // This is only a test command
if (client->is_connected()) {
nlohmann::json arguments_obj = {
{"what", "monero_address"},//"*"},
{"from", "user"},
//{"condition", ""},
//{"", ""},
};
nlohmann::json j = {
{"version", std::string(NEROSHOP_DHT_VERSION)},
{"query", "search"},
{"args", arguments_obj},
{"tid", nullptr},
};
// send packed data to POSIX server
std::vector<uint8_t> packed = nlohmann::json::to_msgpack(j);
client->send(packed);//client.send("Hello, POSIX Server!");
try {
std::vector<uint8_t> response;//std::string response;
client->receive(response);
// Deserialize the response from MessagePack to a JSON object
nlohmann::json j2 = nlohmann::json::from_msgpack(response);
std::cout << "Received response: " << j2.dump() << std::endl;
} catch (const nlohmann::detail::parse_error& e) {
std::cerr << "An error occurred: " << "Server was disconnected" << std::endl;//std::cout << "Failed to parse server response: " << e.what() << std::endl;
}
}
}
}
/*else if(command == "") {
}*/
else if(command == "exit") {
#if !defined(NEROSHOP_USE_LIBZMQ)
// close the connection
client->disconnect();
#endif
break;
}
else {
std::cerr << std::string("\033[0;91mUnreconized command: \033[1;37m") << command << "\033[0m" << std::endl;
std::cerr << std::string("\033[0;91mUnrecognized command: \033[1;37m") << command << "\033[0m" << std::endl;
}
linenoiseFree(line); // Or just free(line) if you use libc malloc.
}

Loading…
Cancel
Save