Heart/NetworkProtocol/ratingusernode.cpp

266 lines
7.2 KiB
C++
Raw Normal View History

#include "basenodeinfo.h"
2019-11-22 22:04:00 +03:00
#include "ratingusernode.h"
#include "sqldbcache.h"
#include <badrequest.h>
#include <userdatarequest.h>
#include <quasarapp.h>
2019-11-29 16:33:35 +03:00
#include <ratingtable.h>
2019-12-06 13:37:11 +03:00
namespace NP {
2019-11-22 22:04:00 +03:00
RatingUserNode::RatingUserNode() {
}
2019-11-22 22:04:00 +03:00
ParserResult RatingUserNode::parsePackage(const Package &pkg,
2019-12-06 13:37:11 +03:00
const WP<AbstractNodeInfo> &sender) {
2019-11-22 22:04:00 +03:00
auto parentResult = BaseNode::parsePackage(pkg, sender);
if (parentResult != ParserResult::NotProcessed) {
return parentResult;
}
auto strongSender = sender.toStrongRef();
if (UserDataRequest().cmd() == pkg.hdr.command) {
2019-12-06 13:37:11 +03:00
auto cmd = SP<UserDataRequest>::create(pkg);
if (!cmd->isValid()) {
badRequest(strongSender->id(), pkg.hdr);
2019-11-22 22:04:00 +03:00
return ParserResult::Error;
}
if (!workWithUserRequest(cmd, strongSender->id(), &pkg.hdr)) {
badRequest(strongSender->id(), pkg.hdr);
2019-11-22 22:04:00 +03:00
return ParserResult::Error;
}
2019-11-23 13:39:08 +03:00
return ParserResult::Processed;
} else if (UserData().cmd() == pkg.hdr.command) {
2019-12-06 13:37:11 +03:00
auto obj = SP<UserData>::create(pkg);
if (!obj->isValid()) {
badRequest(strongSender->id(), pkg.hdr);
2019-11-22 22:04:00 +03:00
return ParserResult::Error;
}
emit incomingData(obj, strongSender->id());
2019-11-22 22:04:00 +03:00
return ParserResult::Processed;
2019-11-29 16:33:35 +03:00
} else if (RatingTable().cmd() == pkg.hdr.command) {
2019-12-06 13:37:11 +03:00
auto obj = SP<RatingTable>::create(pkg);
2019-11-29 16:33:35 +03:00
if (!obj->isValid()) {
badRequest(strongSender->id(), pkg.hdr);
return ParserResult::Error;
}
emit incomingData(obj, strongSender->id());
return ParserResult::Processed;
}
2019-11-22 22:04:00 +03:00
return ParserResult::NotProcessed;
}
2019-11-22 22:04:00 +03:00
QVariantMap RatingUserNode::defaultDbParams() const {
return BaseNode::defaultDbParams();
}
// bug : user register with id -1 it is all permision to write into all users table.
2019-12-06 13:37:11 +03:00
bool RatingUserNode::registerNewUser(const WP<AbstractData>& user,
const QHostAddress& address) {
auto strongUser = user.toStrongRef().dynamicCast<UserData>();
if (strongUser.isNull()) {
return false;
}
auto node = getInfoPtr(address).toStrongRef().dynamicCast<BaseNodeInfo>();
if (node.isNull()) {
return false;
}
AccessToken token = AccessToken(AccessToken::Day);
strongUser->setToken(token);
node->setToken(token);
node->setPermision(strongUser->tableName(), strongUser->getId(),
Permission::Read | Permission::Write);
auto _db = db().toStrongRef();
if (!_db->saveObject(user)) {
return false;
}
return true;
}
2019-12-06 13:37:11 +03:00
bool RatingUserNode::loginUser(const WP<AbstractData>& user,
const WP<AbstractData>& userdb,
const QHostAddress& address) {
auto strongUser = user.toStrongRef().dynamicCast<UserData>();
if (strongUser.isNull()) {
return false;
}
auto node = getInfoPtr(address).toStrongRef().dynamicCast<BaseNodeInfo>();
if (node.isNull()) {
return false;
}
if (node->token().isValid()) {
if (node->token() == strongUser->token()) {
node->setPermision(strongUser->tableName(), strongUser->getId(),
Permission::Read | Permission::Write);
return true;
}
}
auto strongUserDB = userdb.toStrongRef().dynamicCast<UserData>();
if (!strongUserDB.isNull() && strongUserDB->isValid() ) {
if (strongUserDB->passSHA256() == strongUser->passSHA256()) {
node->setPermision(strongUser->tableName(), strongUser->getId(),
Permission::Read | Permission::Write);
return true;
}
}
return false;
}
2019-12-06 13:37:11 +03:00
bool RatingUserNode::workWithUserRequest(const WP<AbstractData> &rec,
const QHostAddress &addere,
const Header *rHeader) {
auto request = rec.toStrongRef().dynamicCast<UserDataRequest>();
if (request.isNull())
return false;
if (!isListening()) {
return false;
}
auto _db = db().toStrongRef();
if (_db.isNull()) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("Server not inited (db is null)",
QuasarAppUtils::Error);
return false;
}
switch (static_cast<UserDataRequestCmd>(request->getRequestCmd())) {
case UserDataRequestCmd::Get: {
auto node = getInfoPtr(addere).toStrongRef().dynamicCast<BaseNodeInfo>();
if (node.isNull()) {
return false;
}
if (node->permision(request->tableName(), request->getId()) < Permission::Read) {
return false;
}
2019-12-06 13:37:11 +03:00
auto res = SP<UserData>::create().dynamicCast<DBObject>();
2019-11-26 18:13:28 +03:00
if (!_db->getObject(res)) {
return false;
}
if (!sendData(res, addere, rHeader)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("responce not sendet to" + addere.toString(),
QuasarAppUtils::Warning);
return false;
}
break;
}
case UserDataRequestCmd::Save: {
auto node = getInfoPtr(addere).toStrongRef().dynamicCast<BaseNodeInfo>();
if (node.isNull()) {
return false;
}
if (node->permision(request->tableName(), request->getId()) < Permission::Write) {
return false;
}
if(!_db->saveObject(rec)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("do not saved object in database!" + addere.toString(),
QuasarAppUtils::Error);
return false;
}
if (!sendData(rec, addere, rHeader)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("responce not sendet to" + addere.toString(),
QuasarAppUtils::Warning);
return false;
}
break;
}
// TODO
case UserDataRequestCmd::Login: {
2019-12-06 13:37:11 +03:00
auto res = SP<UserData>::create().dynamicCast<DBObject>();
2019-12-06 15:48:59 +03:00
res->copyFrom(request.data());
2019-12-06 15:48:59 +03:00
if (_db->getObject(res)) {
// login oldUser
if (!loginUser(rec, res, addere)) {
return false;
}
} else {
// register a new user;
2019-12-06 15:48:59 +03:00
if (!registerNewUser(res, addere)) {
return false;
}
2019-12-06 15:48:59 +03:00
_db->getObject(res);
}
2019-12-06 13:37:11 +03:00
if (!sendData(res, addere, rHeader)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("responce not sendet to" + addere.toString(),
QuasarAppUtils::Warning);
return false;
}
break;
}
case UserDataRequestCmd::Delete: {
if(!_db->deleteObject(rec)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("do not deleted object from database!" + addere.toString(),
QuasarAppUtils::Error);
return false;
}
if (!sendData(rec, addere, rHeader)) {
2020-04-06 00:24:48 +03:00
QuasarAppUtils::Params::log("responce not sendet to" + addere.toString(),
QuasarAppUtils::Warning);
return false;
}
break;
}
default: return false;
}
return true;
}
}