Commit 690f13f3 authored by jan.koester's avatar jan.koester
Browse files

test

parent 6c5307fd
Loading
Loading
Loading
Loading
+25 −12
Original line number Diff line number Diff line
@@ -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;
    }

@@ -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());
@@ -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) {
@@ -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();
@@ -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);
@@ -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;
    }
+6 −4
Original line number Diff line number Diff line
@@ -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);

+26 −14
Original line number Diff line number Diff line
@@ -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,"
@@ -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) {
@@ -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()) << "',"
@@ -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);

@@ -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;
+11 −9
Original line number Diff line number Diff line
@@ -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; }