Loading editor/src/webedit_api.cpp +25 −12 Original line number Diff line number Diff line Loading @@ -235,27 +235,27 @@ bool webedit::Api::handleRequest(libhttppp::HttpRequest &curreq, const int tid, // Route: /api/connections (GET) if (path == "/api/connections") { handleListConnections(curreq); handleListConnections(curreq, sessionid); return true; } // Route: /api/connection/save (POST) if (path == "/api/connection/save") { handleSaveConnection(curreq); handleSaveConnection(curreq, sessionid); return true; } // Route: /api/connection/delete/{id} if (path.find("/api/connection/delete/") == 0) { std::string connId = path.substr(23); handleDeleteConnection(curreq, connId); handleDeleteConnection(curreq, sessionid, connId); return true; } // Route: /api/connection/connect/{id} (POST) - login + get publish targets if (path.find("/api/connection/connect/") == 0) { std::string connId = path.substr(24); handleConnectToConnection(curreq, connId); handleConnectToConnection(curreq, sessionid, connId); return true; } Loading Loading @@ -1481,8 +1481,11 @@ void webedit::Api::handleConnectionPublish(libhttppp::HttpRequest &curreq, // ====================== Connection Manager ====================== void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq) { std::string jsonStr = _db.listConnections(); void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq, const std::string &sessionid) { std::string uid; _session.getData(sessionid, "uid", uid); std::string jsonStr = _db.listConnections(uid); json_object *resp = json_object_new_object(); json_object *arr = json_tokener_parse(jsonStr.c_str()); json_object_object_add(resp, "connections", arr ? arr : json_object_new_array()); Loading @@ -1490,7 +1493,11 @@ void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq) { json_object_put(resp); } void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid) { std::string uid; _session.getData(sessionid, "uid", uid); std::string body = getRequestBody(curreq); json_object *req = json_tokener_parse(body.c_str()); if (!req) { Loading Loading @@ -1520,9 +1527,9 @@ void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { std::string connId; if (idObj && strlen(json_object_get_string(idObj)) > 0) { connId = json_object_get_string(idObj); _db.updateConnection(connId, name, group, url, ignoreSsl); _db.updateConnection(uid, connId, name, group, url, ignoreSsl); } else { connId = _db.saveConnection(name, group, url, ignoreSsl); connId = _db.saveConnection(uid, name, group, url, ignoreSsl); } json_object *resp = json_object_new_object(); Loading @@ -1534,8 +1541,11 @@ void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { } void webedit::Api::handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId) { _db.deleteConnection(connId); std::string uid; _session.getData(sessionid, "uid", uid); _db.deleteConnection(uid, connId); json_object *resp = json_object_new_object(); json_object_object_add(resp, "status", json_object_new_string("ok")); sendJson(curreq, resp); Loading Loading @@ -1566,11 +1576,14 @@ json_object *webedit::Api::blogApiCall(const std::string &blogUrl, json_object * } void webedit::Api::handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId) { // Get connection info // Get user uid and connection info std::string uid; _session.getData(sessionid, "uid", uid); std::string name, group, blogUrl; bool ignoreSsl = false; if (!_db.getConnection(connId, name, group, blogUrl, ignoreSsl)) { if (!_db.getConnection(uid, connId, name, group, blogUrl, ignoreSsl)) { sendJsonError(curreq, 404, "Connection not found"); return; } Loading editor/src/webedit_api.h +6 −4 Original line number Diff line number Diff line Loading @@ -108,10 +108,12 @@ namespace webedit { void handleConnectionPublish(libhttppp::HttpRequest &curreq, const std::string &sessionid); // Connection manager handlers void handleListConnections(libhttppp::HttpRequest &curreq); void handleSaveConnection(libhttppp::HttpRequest &curreq); void handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &connId); void handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &connId); void handleListConnections(libhttppp::HttpRequest &curreq, const std::string &sessionid); void handleSaveConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid); void handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); void handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); void handlePublishToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); Loading editor/src/webedit_db.cpp +26 −14 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ void webedit::Database::initTables() { sql << "CREATE TABLE IF NOT EXISTS connections(" << "id " << _db->getUUIDType(sql) << "," << "owner_uid text NOT NULL," << "name varchar(255) NOT NULL," << "group_name varchar(255) DEFAULT ''," << "url text NOT NULL," Loading Loading @@ -377,7 +378,8 @@ bool webedit::Database::restoreRevision(const std::string &docId, // --- Connection manager --- std::string webedit::Database::saveConnection(const std::string &name, std::string webedit::Database::saveConnection(const std::string &ownerUid, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl) { Loading @@ -386,10 +388,11 @@ std::string webedit::Database::saveConnection(const std::string &name, dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eName, eGroup, eUrl; std::vector<char> eOwner, eName, eGroup, eUrl; sql << "INSERT INTO connections (id, name, group_name, url, ignore_ssl) VALUES ('" sql << "INSERT INTO connections (id, owner_uid, name, group_name, url, ignore_ssl) VALUES ('" << connId.c_str() << "','" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "','" << dbpp::SQL::escaped(eName, name.c_str()) << "','" << dbpp::SQL::escaped(eGroup, groupName.c_str()) << "','" << dbpp::SQL::escaped(eUrl, url.c_str()) << "'," Loading @@ -399,44 +402,51 @@ std::string webedit::Database::saveConnection(const std::string &name, return connId.c_str(); } std::string webedit::Database::updateConnection(const std::string &id, std::string webedit::Database::updateConnection(const std::string &ownerUid, const std::string &id, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId, eName, eGroup, eUrl; std::vector<char> eId, eOwner, eName, eGroup, eUrl; sql << "UPDATE connections SET name='" << dbpp::SQL::escaped(eName, name.c_str()) << "', group_name='" << dbpp::SQL::escaped(eGroup, groupName.c_str()) << "', url='" << dbpp::SQL::escaped(eUrl, url.c_str()) << "', ignore_ssl=" << (ignoreSsl ? 1 : 0) << " WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; _db->exec(sql, res); return id; } bool webedit::Database::deleteConnection(const std::string &id) { bool webedit::Database::deleteConnection(const std::string &ownerUid, const std::string &id) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId; std::vector<char> eId, eOwner; sql << "DELETE FROM connections WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; _db->exec(sql, res); return true; } std::string webedit::Database::listConnections() { std::string webedit::Database::listConnections(const std::string &ownerUid) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eOwner; sql << "SELECT id, name, group_name, url, ignore_ssl, created " << "FROM connections ORDER BY group_name, name;"; << "FROM connections WHERE owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "' ORDER BY group_name, name;"; int rows = _db->exec(sql, res); Loading @@ -458,15 +468,17 @@ std::string webedit::Database::listConnections() { return result; } bool webedit::Database::getConnection(const std::string &id, std::string &name, bool webedit::Database::getConnection(const std::string &ownerUid, const std::string &id, std::string &name, std::string &groupName, std::string &url, bool &ignoreSsl) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId; std::vector<char> eId, eOwner; sql << "SELECT name, group_name, url, ignore_ssl FROM connections WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; int rows = _db->exec(sql, res); if (rows < 1) return false; Loading editor/src/webedit_db.h +11 −9 Original line number Diff line number Diff line Loading @@ -58,15 +58,17 @@ namespace webedit { std::string getOption(const std::string &key, const std::string &defaultVal = ""); void setOption(const std::string &key, const std::string &value); // Connection manager std::string saveConnection(const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); std::string updateConnection(const std::string &id, const std::string &name, // Connection manager (per-user) std::string saveConnection(const std::string &ownerUid, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); bool deleteConnection(const std::string &id); std::string listConnections(); // Returns JSON array bool getConnection(const std::string &id, std::string &name, std::string &groupName, std::string updateConnection(const std::string &ownerUid, const std::string &id, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); bool deleteConnection(const std::string &ownerUid, const std::string &id); std::string listConnections(const std::string &ownerUid); bool getConnection(const std::string &ownerUid, const std::string &id, std::string &name, std::string &groupName, std::string &url, bool &ignoreSsl); dbpp::ReplicatedDatabase &getDb() { return *_db; } Loading Loading
editor/src/webedit_api.cpp +25 −12 Original line number Diff line number Diff line Loading @@ -235,27 +235,27 @@ bool webedit::Api::handleRequest(libhttppp::HttpRequest &curreq, const int tid, // Route: /api/connections (GET) if (path == "/api/connections") { handleListConnections(curreq); handleListConnections(curreq, sessionid); return true; } // Route: /api/connection/save (POST) if (path == "/api/connection/save") { handleSaveConnection(curreq); handleSaveConnection(curreq, sessionid); return true; } // Route: /api/connection/delete/{id} if (path.find("/api/connection/delete/") == 0) { std::string connId = path.substr(23); handleDeleteConnection(curreq, connId); handleDeleteConnection(curreq, sessionid, connId); return true; } // Route: /api/connection/connect/{id} (POST) - login + get publish targets if (path.find("/api/connection/connect/") == 0) { std::string connId = path.substr(24); handleConnectToConnection(curreq, connId); handleConnectToConnection(curreq, sessionid, connId); return true; } Loading Loading @@ -1481,8 +1481,11 @@ void webedit::Api::handleConnectionPublish(libhttppp::HttpRequest &curreq, // ====================== Connection Manager ====================== void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq) { std::string jsonStr = _db.listConnections(); void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq, const std::string &sessionid) { std::string uid; _session.getData(sessionid, "uid", uid); std::string jsonStr = _db.listConnections(uid); json_object *resp = json_object_new_object(); json_object *arr = json_tokener_parse(jsonStr.c_str()); json_object_object_add(resp, "connections", arr ? arr : json_object_new_array()); Loading @@ -1490,7 +1493,11 @@ void webedit::Api::handleListConnections(libhttppp::HttpRequest &curreq) { json_object_put(resp); } void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid) { std::string uid; _session.getData(sessionid, "uid", uid); std::string body = getRequestBody(curreq); json_object *req = json_tokener_parse(body.c_str()); if (!req) { Loading Loading @@ -1520,9 +1527,9 @@ void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { std::string connId; if (idObj && strlen(json_object_get_string(idObj)) > 0) { connId = json_object_get_string(idObj); _db.updateConnection(connId, name, group, url, ignoreSsl); _db.updateConnection(uid, connId, name, group, url, ignoreSsl); } else { connId = _db.saveConnection(name, group, url, ignoreSsl); connId = _db.saveConnection(uid, name, group, url, ignoreSsl); } json_object *resp = json_object_new_object(); Loading @@ -1534,8 +1541,11 @@ void webedit::Api::handleSaveConnection(libhttppp::HttpRequest &curreq) { } void webedit::Api::handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId) { _db.deleteConnection(connId); std::string uid; _session.getData(sessionid, "uid", uid); _db.deleteConnection(uid, connId); json_object *resp = json_object_new_object(); json_object_object_add(resp, "status", json_object_new_string("ok")); sendJson(curreq, resp); Loading Loading @@ -1566,11 +1576,14 @@ json_object *webedit::Api::blogApiCall(const std::string &blogUrl, json_object * } void webedit::Api::handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId) { // Get connection info // Get user uid and connection info std::string uid; _session.getData(sessionid, "uid", uid); std::string name, group, blogUrl; bool ignoreSsl = false; if (!_db.getConnection(connId, name, group, blogUrl, ignoreSsl)) { if (!_db.getConnection(uid, connId, name, group, blogUrl, ignoreSsl)) { sendJsonError(curreq, 404, "Connection not found"); return; } Loading
editor/src/webedit_api.h +6 −4 Original line number Diff line number Diff line Loading @@ -108,10 +108,12 @@ namespace webedit { void handleConnectionPublish(libhttppp::HttpRequest &curreq, const std::string &sessionid); // Connection manager handlers void handleListConnections(libhttppp::HttpRequest &curreq); void handleSaveConnection(libhttppp::HttpRequest &curreq); void handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &connId); void handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &connId); void handleListConnections(libhttppp::HttpRequest &curreq, const std::string &sessionid); void handleSaveConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid); void handleDeleteConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); void handleConnectToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); void handlePublishToConnection(libhttppp::HttpRequest &curreq, const std::string &sessionid, const std::string &connId); Loading
editor/src/webedit_db.cpp +26 −14 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ void webedit::Database::initTables() { sql << "CREATE TABLE IF NOT EXISTS connections(" << "id " << _db->getUUIDType(sql) << "," << "owner_uid text NOT NULL," << "name varchar(255) NOT NULL," << "group_name varchar(255) DEFAULT ''," << "url text NOT NULL," Loading Loading @@ -377,7 +378,8 @@ bool webedit::Database::restoreRevision(const std::string &docId, // --- Connection manager --- std::string webedit::Database::saveConnection(const std::string &name, std::string webedit::Database::saveConnection(const std::string &ownerUid, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl) { Loading @@ -386,10 +388,11 @@ std::string webedit::Database::saveConnection(const std::string &name, dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eName, eGroup, eUrl; std::vector<char> eOwner, eName, eGroup, eUrl; sql << "INSERT INTO connections (id, name, group_name, url, ignore_ssl) VALUES ('" sql << "INSERT INTO connections (id, owner_uid, name, group_name, url, ignore_ssl) VALUES ('" << connId.c_str() << "','" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "','" << dbpp::SQL::escaped(eName, name.c_str()) << "','" << dbpp::SQL::escaped(eGroup, groupName.c_str()) << "','" << dbpp::SQL::escaped(eUrl, url.c_str()) << "'," Loading @@ -399,44 +402,51 @@ std::string webedit::Database::saveConnection(const std::string &name, return connId.c_str(); } std::string webedit::Database::updateConnection(const std::string &id, std::string webedit::Database::updateConnection(const std::string &ownerUid, const std::string &id, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId, eName, eGroup, eUrl; std::vector<char> eId, eOwner, eName, eGroup, eUrl; sql << "UPDATE connections SET name='" << dbpp::SQL::escaped(eName, name.c_str()) << "', group_name='" << dbpp::SQL::escaped(eGroup, groupName.c_str()) << "', url='" << dbpp::SQL::escaped(eUrl, url.c_str()) << "', ignore_ssl=" << (ignoreSsl ? 1 : 0) << " WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; _db->exec(sql, res); return id; } bool webedit::Database::deleteConnection(const std::string &id) { bool webedit::Database::deleteConnection(const std::string &ownerUid, const std::string &id) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId; std::vector<char> eId, eOwner; sql << "DELETE FROM connections WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; _db->exec(sql, res); return true; } std::string webedit::Database::listConnections() { std::string webedit::Database::listConnections(const std::string &ownerUid) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eOwner; sql << "SELECT id, name, group_name, url, ignore_ssl, created " << "FROM connections ORDER BY group_name, name;"; << "FROM connections WHERE owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "' ORDER BY group_name, name;"; int rows = _db->exec(sql, res); Loading @@ -458,15 +468,17 @@ std::string webedit::Database::listConnections() { return result; } bool webedit::Database::getConnection(const std::string &id, std::string &name, bool webedit::Database::getConnection(const std::string &ownerUid, const std::string &id, std::string &name, std::string &groupName, std::string &url, bool &ignoreSsl) { dbpp::SQL sql; dbpp::DBResult res; std::vector<char> eId; std::vector<char> eId, eOwner; sql << "SELECT name, group_name, url, ignore_ssl FROM connections WHERE id='" << dbpp::SQL::escaped(eId, id.c_str()) << "';"; << dbpp::SQL::escaped(eId, id.c_str()) << "' AND owner_uid='" << dbpp::SQL::escaped(eOwner, ownerUid.c_str()) << "';"; int rows = _db->exec(sql, res); if (rows < 1) return false; Loading
editor/src/webedit_db.h +11 −9 Original line number Diff line number Diff line Loading @@ -58,15 +58,17 @@ namespace webedit { std::string getOption(const std::string &key, const std::string &defaultVal = ""); void setOption(const std::string &key, const std::string &value); // Connection manager std::string saveConnection(const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); std::string updateConnection(const std::string &id, const std::string &name, // Connection manager (per-user) std::string saveConnection(const std::string &ownerUid, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); bool deleteConnection(const std::string &id); std::string listConnections(); // Returns JSON array bool getConnection(const std::string &id, std::string &name, std::string &groupName, std::string updateConnection(const std::string &ownerUid, const std::string &id, const std::string &name, const std::string &groupName, const std::string &url, bool ignoreSsl); bool deleteConnection(const std::string &ownerUid, const std::string &id); std::string listConnections(const std::string &ownerUid); bool getConnection(const std::string &ownerUid, const std::string &id, std::string &name, std::string &groupName, std::string &url, bool &ignoreSsl); dbpp::ReplicatedDatabase &getDb() { return *_db; } Loading