aboutsummaryrefslogtreecommitdiff
path: root/src/Channel.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-05-16 10:24:22 +0200
committerdec05eba <dec05eba@protonmail.com>2018-05-16 10:25:06 +0200
commite6331c04af99d7deeb9b15be02dd30665c3c41ce (patch)
tree7d8c1dadcdefe4579fbcc750a352f3b80879b347 /src/Channel.cpp
parent777d8053540cf94f5b2156c8e2b242efb4d07007 (diff)
Rewrite code to work with new backend
Redesigned join channel system, read README.md for more information
Diffstat (limited to 'src/Channel.cpp')
-rw-r--r--src/Channel.cpp61
1 files changed, 26 insertions, 35 deletions
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 <odhtdb/User.hpp>
#include <odhtdb/Database.hpp>
#include <odhtdb/bin2hex.hpp>
#include <cstring>
@@ -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<OnlineUser*>(localUser);
- assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL);
+ auto onlineLocalUser = static_cast<OnlineLocalUser*>(localUser);
sibs::SafeSerializer serializer;
serializer.add(ChannelDataType::ADD_MESSAGE);
serializer.add((const u8*)msg.data(), msg.size());
- database->addData(databaseNodeInfo, static_cast<const odhtdb::LocalUser*>(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<OnlineUser*>(localUser);
- assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL);
+ auto onlineLocalUser = static_cast<OnlineLocalUser*>(localUser);
sibs::SafeSerializer serializer;
serializer.add(ChannelDataType::DELETE_MESSAGE);
serializer.add((const u8*)id.getData(), odhtdb::HASH_BYTE_SIZE);
- database->addData(databaseNodeInfo, static_cast<const odhtdb::LocalUser*>(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<OnlineUser*>(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<OnlineUser*>(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<OnlineLocalUser*>(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<const odhtdb::LocalUser*>(localOnlineUser->databaseUser), "noname", userId, groupToAddUserTo);
- return true;
}
- void Channel::replaceLocalUser(User *newLocalUser)
+ void Channel::replaceLocalUser(OnlineLocalUser *newOnlineLocalUser)
{
for(vector<User*>::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<OnlineUser*>(localUser);
- assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL);
+ auto onlineLocalUser = static_cast<OnlineLocalUser*>(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<const odhtdb::LocalUser*>(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()));
}
}