From e6331c04af99d7deeb9b15be02dd30665c3c41ce Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 16 May 2018 10:24:22 +0200 Subject: Rewrite code to work with new backend Redesigned join channel system, read README.md for more information --- src/Channel.cpp | 61 ++++++++++++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 35 deletions(-) (limited to 'src/Channel.cpp') diff --git a/src/Channel.cpp b/src/Channel.cpp index ed037a4..a63fcc4 100644 --- a/src/Channel.cpp +++ b/src/Channel.cpp @@ -1,5 +1,4 @@ #include "../include/Channel.hpp" -#include #include #include #include @@ -95,17 +94,15 @@ namespace dchat void Channel::addMessage(const std::string &msg) { - if(database && localUser->type == User::Type::ONLINE) + if(database && localUser->type == User::Type::ONLINE_LOCAL_USER) { - auto localOnlineUser = static_cast(localUser); - assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); + auto onlineLocalUser = static_cast(localUser); sibs::SafeSerializer serializer; serializer.add(ChannelDataType::ADD_MESSAGE); serializer.add((const u8*)msg.data(), msg.size()); - database->addData(databaseNodeInfo, static_cast(localOnlineUser->databaseUser), odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); - database->commit(); + database->addData(databaseNodeInfo, onlineLocalUser->keyPair, odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); } else addLocalMessage(msg, localUser, 0, odhtdb::Hash()); @@ -118,17 +115,15 @@ namespace dchat void Channel::deleteMessage(const odhtdb::Hash &id, const odhtdb::Signature::PublicKey &requestedByUser) { - if(database && localUser->type == User::Type::ONLINE) + if(database && localUser->type == User::Type::ONLINE_LOCAL_USER) { - auto localOnlineUser = static_cast(localUser); - assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); + auto onlineLocalUser = static_cast(localUser); sibs::SafeSerializer serializer; serializer.add(ChannelDataType::DELETE_MESSAGE); serializer.add((const u8*)id.getData(), odhtdb::HASH_BYTE_SIZE); - database->addData(databaseNodeInfo, static_cast(localOnlineUser->databaseUser), odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); - database->commit(); + database->addData(databaseNodeInfo, onlineLocalUser->keyPair, odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); } else deleteLocalMessage(id, requestedByUser); @@ -137,41 +132,39 @@ namespace dchat void Channel::addUserLocally(User *user) { users.push_back(user); - if(user->type == User::Type::ONLINE) + if(user->isOnlineUser()) { auto onlineUser = static_cast(user); - publicKeyOnlineUsersMap[onlineUser->databaseUser->getPublicKey()] = onlineUser; + publicKeyOnlineUsersMap[onlineUser->getPublicKey()] = onlineUser; } } - bool Channel::addUser(const odhtdb::Signature::PublicKey &userId, const string &groupId) + bool Channel::addUser(const odhtdb::Signature::PublicKey &userId, const odhtdb::DataView &groupId) { assert(database); - if(!database || localUser->type != User::Type::ONLINE) + if(!database || localUser->type != User::Type::ONLINE_LOCAL_USER) return false; - if(groupId.size() != odhtdb::GROUP_ID_LENGTH) + if(groupId.size != odhtdb::GROUP_ID_LENGTH) { - fprintf(stderr, "Group id is wrong size. Expected to be %u bytes, was %u byte(s)\n", odhtdb::GROUP_ID_LENGTH, groupId.size()); + fprintf(stderr, "Group id is wrong size. Expected to be %u bytes, was %u byte(s)\n", odhtdb::GROUP_ID_LENGTH, groupId.size); return false; } - auto localOnlineUser = static_cast(localUser); - assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); - - uint8_t groupIdRaw[odhtdb::GROUP_ID_LENGTH]; - memcpy(groupIdRaw, groupId.data(), groupId.size()); - auto groupToAddUserTo = database->getStorage().getGroupById(*databaseNodeInfo.getRequestHash(), groupIdRaw); - if(!groupToAddUserTo) + auto onlineLocalUser = static_cast(localUser); + try + { + database->addUser(databaseNodeInfo, onlineLocalUser->keyPair, userId, groupId); + return true; + } + catch(std::exception &e) { - fprintf(stderr, "Group with id %s does not exist in channel %s\n", odhtdb::bin2hex(groupId.c_str(), groupId.size()).c_str(), databaseNodeInfo.getRequestHash()->toString().c_str()); + fprintf(stderr, "Group with id %s does not exist in channel %s or you do not have permission to add user to that group\nError: %s\n", odhtdb::bin2hex((const char*)groupId.data, groupId.size).c_str(), databaseNodeInfo.getRequestHash()->toString().c_str(), e.what()); return false; } - database->addUser(databaseNodeInfo, static_cast(localOnlineUser->databaseUser), "noname", userId, groupToAddUserTo); - return true; } - void Channel::replaceLocalUser(User *newLocalUser) + void Channel::replaceLocalUser(OnlineLocalUser *newOnlineLocalUser) { for(vector::iterator it = users.begin(); it != users.end(); ++it) { @@ -183,24 +176,22 @@ namespace dchat } } - localUser = newLocalUser; - addUserLocally(newLocalUser); + localUser = newOnlineLocalUser; + addUserLocally(newOnlineLocalUser); } void Channel::changeNick(const std::string &newNick) { - if(database && localUser->type == User::Type::ONLINE) + if(database && localUser->type == User::Type::ONLINE_LOCAL_USER) { - auto localOnlineUser = static_cast(localUser); - assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); + auto onlineLocalUser = static_cast(localUser); sibs::SafeSerializer serializer; serializer.add(ChannelDataType::NICKNAME_CHANGE); serializer.add((u8)newNick.size()); serializer.add((const u8*)newNick.data(), newNick.size()); - database->addData(databaseNodeInfo, static_cast(localOnlineUser->databaseUser), odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); - database->commit(); + database->addData(databaseNodeInfo, onlineLocalUser->keyPair, odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); } } -- cgit v1.2.3