2019-11-21 21:21:15 +03:00
|
|
|
#include "basenodeinfo.h"
|
2019-11-22 22:04:00 +03:00
|
|
|
#include "ratingusernode.h"
|
2019-11-21 21:21:15 +03:00
|
|
|
#include "sqldbcache.h"
|
|
|
|
|
|
|
|
#include <badrequest.h>
|
|
|
|
#include <userdatarequest.h>
|
|
|
|
#include <quasarapp.h>
|
2019-11-29 16:33:35 +03:00
|
|
|
#include <ratingtable.h>
|
2019-11-21 21:21:15 +03:00
|
|
|
|
|
|
|
namespace NetworkProtocol {
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
RatingUserNode::RatingUserNode() {
|
2019-11-21 21:21:15 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
ParserResult RatingUserNode::parsePackage(const Package &pkg,
|
2019-11-21 21:21:15 +03:00
|
|
|
QWeakPointer<AbstractNodeInfo> sender) {
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
auto parentResult = BaseNode::parsePackage(pkg, sender);
|
|
|
|
if (parentResult != ParserResult::NotProcessed) {
|
|
|
|
return parentResult;
|
2019-11-21 21:21:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
auto strongSender = sender.toStrongRef();
|
|
|
|
|
|
|
|
if (UserDataRequest().cmd() == pkg.hdr.command) {
|
|
|
|
auto cmd = QSharedPointer<UserDataRequest>::create(pkg);
|
|
|
|
|
|
|
|
if (!cmd->isValid()) {
|
|
|
|
badRequest(strongSender->id(), pkg.hdr);
|
2019-11-22 22:04:00 +03:00
|
|
|
return ParserResult::Error;
|
2019-11-21 21:21:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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-21 21:21:15 +03:00
|
|
|
}
|
2019-11-23 13:39:08 +03:00
|
|
|
return ParserResult::Processed;
|
|
|
|
|
2019-11-21 21:21:15 +03:00
|
|
|
|
|
|
|
} else if (UserData().cmd() == pkg.hdr.command) {
|
|
|
|
auto obj = QSharedPointer<UserData>::create(pkg);
|
|
|
|
if (!obj->isValid()) {
|
|
|
|
badRequest(strongSender->id(), pkg.hdr);
|
2019-11-22 22:04:00 +03:00
|
|
|
return ParserResult::Error;
|
2019-11-21 21:21:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
emit incomingData(obj, strongSender->id());
|
2019-11-22 22:04:00 +03:00
|
|
|
return ParserResult::Processed;
|
2019-11-21 21:21:15 +03:00
|
|
|
|
2019-11-29 16:33:35 +03:00
|
|
|
} else if (RatingTable().cmd() == pkg.hdr.command) {
|
|
|
|
|
|
|
|
auto obj = QSharedPointer<RatingTable>::create(pkg);
|
|
|
|
if (!obj->isValid()) {
|
|
|
|
badRequest(strongSender->id(), pkg.hdr);
|
|
|
|
return ParserResult::Error;
|
|
|
|
}
|
|
|
|
|
|
|
|
emit incomingData(obj, strongSender->id());
|
|
|
|
return ParserResult::Processed;
|
2019-11-21 21:21:15 +03:00
|
|
|
}
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
return ParserResult::NotProcessed;
|
2019-11-21 21:21:15 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
QVariantMap RatingUserNode::defaultDbParams() const {
|
2019-11-21 21:21:15 +03:00
|
|
|
return BaseNode::defaultDbParams();
|
|
|
|
}
|
|
|
|
|
2019-11-22 22:04:00 +03:00
|
|
|
bool RatingUserNode::registerNewUser(QWeakPointer<UserDataRequest> user,
|
2019-11-21 21:21:15 +03:00
|
|
|
const QHostAddress& address) {
|
|
|
|
auto strongUser = user.toStrongRef();
|
|
|
|
|
|
|
|
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-11-22 22:04:00 +03:00
|
|
|
bool RatingUserNode::loginUser(const QWeakPointer<UserDataRequest>& user,
|
2019-11-21 21:21:15 +03:00
|
|
|
const QWeakPointer<DBObject>& userdb,
|
|
|
|
const QHostAddress& address) {
|
|
|
|
auto strongUser = user.toStrongRef();
|
|
|
|
|
|
|
|
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-11-22 22:04:00 +03:00
|
|
|
bool RatingUserNode::workWithUserRequest(QWeakPointer<UserDataRequest> rec,
|
2019-11-21 21:21:15 +03:00
|
|
|
const QHostAddress &addere,
|
|
|
|
const Header *rHeader) {
|
|
|
|
|
|
|
|
auto request = rec.toStrongRef();
|
|
|
|
|
|
|
|
if (request.isNull())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (!isListening()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
auto _db = db().toStrongRef();
|
|
|
|
|
|
|
|
if (_db.isNull()) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("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-11-26 18:13:28 +03:00
|
|
|
auto res = QSharedPointer<UserData>::create().dynamicCast<DBObject>();
|
|
|
|
if (!_db->getObject(res)) {
|
2019-11-21 21:21:15 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!sendData(res, addere, rHeader)) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("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(request)) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("do not saved object in database!" + addere.toString(),
|
|
|
|
QuasarAppUtils::Error);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!sendData(request, addere, rHeader)) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("responce not sendet to" + addere.toString(),
|
|
|
|
QuasarAppUtils::Warning);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
case UserDataRequestCmd::Login: {
|
|
|
|
|
2019-11-26 18:13:28 +03:00
|
|
|
auto res = QSharedPointer<UserData>::create().dynamicCast<DBObject>();
|
|
|
|
if (!_db->getObject(res)) {
|
2019-11-21 21:21:15 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-11-26 18:13:28 +03:00
|
|
|
if (res->isValid()) {
|
2019-11-21 21:21:15 +03:00
|
|
|
// register a new user;
|
|
|
|
if (!registerNewUser(request, addere)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else {
|
2019-11-26 18:13:28 +03:00
|
|
|
// login oldUser
|
|
|
|
if (!loginUser(request, res, addere)) {
|
2019-11-21 21:21:15 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!sendData(request, addere, rHeader)) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("responce not sendet to" + addere.toString(),
|
|
|
|
QuasarAppUtils::Warning);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case UserDataRequestCmd::Delete: {
|
|
|
|
|
2019-11-26 18:13:28 +03:00
|
|
|
if(!_db->deleteObject(request)) {
|
2019-11-21 21:21:15 +03:00
|
|
|
QuasarAppUtils::Params::verboseLog("do not deleted object from database!" + addere.toString(),
|
|
|
|
QuasarAppUtils::Error);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!sendData(request, addere, rHeader)) {
|
|
|
|
QuasarAppUtils::Params::verboseLog("responce not sendet to" + addere.toString(),
|
|
|
|
QuasarAppUtils::Warning);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default: return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|