Added logs tab to allow moderators the ability to review log history/details

This commit is contained in:
woogerboy21 2015-09-18 22:32:53 -04:00
parent e68b8b314a
commit 62ffcde6bd
15 changed files with 581 additions and 18 deletions

View file

@ -940,7 +940,6 @@ QList<ServerInfo_Ban> Servatrice_DatabaseInterface::getUserBanHistory(const QStr
return results;
}
//QString adminID,adminName,banTime,banLength,banReason,visibleReason;
while (query->next()){
banDetails.set_admin_id(QString(query->value(0).toString()).toStdString());
banDetails.set_admin_name(QString(query->value(5).toString()).toStdString());
@ -1000,4 +999,87 @@ QList<ServerInfo_Warning> Servatrice_DatabaseInterface::getUserWarnHistory(const
}
return results;
}
}
QList<ServerInfo_ChatMessage> Servatrice_DatabaseInterface::getMessageLogHistory(const QString &user, const QString &ipaddress, const QString &gamename, const QString &gameid, const QString &message, bool &chat, bool &game, bool &room, int &range, int &maxresults)
{
QList<ServerInfo_ChatMessage> results;
ServerInfo_ChatMessage chatMessage;
if (!checkSql())
return results;
// BUILD QUERY STRING BASED ON PASSED IN VALUES
QString queryString = "SELECT * FROM cockatrice_log WHERE `sender_ip` IS NOT NULL";
if (!user.isEmpty())
queryString.append(" AND (`sender_name` = :user_name OR `target_name` = :user_name)");
if (!ipaddress.isEmpty())
queryString.append(" AND `sender_ip` = :ip_to_find");
if (!gameid.isEmpty())
queryString.append(" AND (`target_id` = :game_id AND `target_type` = 'game')");
if (!gamename.isEmpty())
queryString.append(" AND (`target_name` = :game_name AND `target_type` = 'game')");
if (!message.isEmpty())
queryString.append(" AND `log_message` LIKE :log_message");
if (chat || game || room) {
queryString.append(" AND (");
if (chat)
queryString.append("`target_type` = 'chat'");
if (game) {
if (chat)
queryString.append(" OR `target_type` = 'game'");
else
queryString.append("`target_type` = 'game'");
}
if (room) {
if (game || chat)
queryString.append(" OR `target_type` = 'room'");
else
queryString.append("`target_type` = 'room'");
}
queryString.append(")");
}
if (range)
queryString.append(" AND log_time >= DATE_SUB(now(), INTERVAL :range_time HOUR)");
if (maxresults)
queryString.append(" LIMIT :limit_size");
QSqlQuery *query = prepareQuery(queryString);
if (!user.isEmpty()) { query->bindValue(":user_name", user); }
if (!ipaddress.isEmpty()) { query->bindValue(":ip_to_find", ipaddress); }
if (!gameid.isEmpty()) { query->bindValue(":game_id", gameid); }
if (!gamename.isEmpty()) { query->bindValue(":game_name", gamename); }
if (!message.isEmpty()) { query->bindValue(":log_message", message); }
if (range) { query->bindValue(":range_time", range); }
if (maxresults) { query->bindValue(":limit_size", maxresults); }
if (!execSqlQuery(query)) {
qDebug("Failed to collect log history information: SQL Error");
return results;
}
while (query->next()) {
chatMessage.set_time(QString(query->value(0).toString()).toStdString());
chatMessage.set_sender_id(QString(query->value(1).toString()).toStdString());
chatMessage.set_sender_name(QString(query->value(2).toString()).toStdString());
chatMessage.set_sender_ip(QString(query->value(3).toString()).toStdString());
chatMessage.set_message(QString(query->value(4).toString()).toStdString());
chatMessage.set_target_type(QString(query->value(5).toString()).toStdString());
chatMessage.set_target_id(QString(query->value(6).toString()).toStdString());
chatMessage.set_target_name(QString(query->value(7).toString()).toStdString());
results << chatMessage;
}
return results;
}

View file

@ -81,6 +81,7 @@ public:
QList<ServerInfo_Ban> getUserBanHistory(const QString userName);
bool addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID);
QList<ServerInfo_Warning> getUserWarnHistory(const QString userName);
QList<ServerInfo_ChatMessage> getMessageLogHistory(const QString &user, const QString &ipaddress, const QString &gamename, const QString &gameid, const QString &message, bool &chat, bool &game, bool &room, int &range, int &maxresults);
};
#endif

View file

@ -61,10 +61,12 @@
#include "pb/response_replay_download.pb.h"
#include "pb/response_warn_history.pb.h"
#include "pb/response_warn_list.pb.h"
#include "pb/response_viewlog_history.pb.h"
#include "pb/serverinfo_replay.pb.h"
#include "pb/serverinfo_user.pb.h"
#include "pb/serverinfo_deckstorage.pb.h"
#include "pb/serverinfo_ban.pb.h"
#include "pb/serverinfo_chat_message.pb.h"
#include "version_string.h"
#include <string>
@ -310,6 +312,7 @@ Response::ResponseCode ServerSocketInterface::processExtendedModeratorCommand(in
case ModeratorCommand::WARN_USER: return cmdWarnUser(cmd.GetExtension(Command_WarnUser::ext), rc);
case ModeratorCommand::WARN_HISTORY: return cmdGetWarnHistory(cmd.GetExtension(Command_GetWarnHistory::ext), rc);
case ModeratorCommand::WARN_LIST: return cmdGetWarnList(cmd.GetExtension(Command_GetWarnList::ext), rc);
case ModeratorCommand::VIEWLOG_HISTORY: return cmdGetLogHistory(cmd.GetExtension(Command_ViewLogHistory::ext), rc);
default: return Response::RespFunctionNotAllowed;
}
}
@ -770,6 +773,38 @@ Response::ResponseCode ServerSocketInterface::cmdReplayDeleteMatch(const Command
// MODERATOR FUNCTIONS.
// May be called by admins and moderators. Permission is checked by the calling function.
Response::ResponseCode ServerSocketInterface::cmdGetLogHistory(const Command_ViewLogHistory &cmd, ResponseContainer &rc)
{
QList<ServerInfo_ChatMessage> messageList;
QString userName = QString::fromStdString(cmd.user_name());
QString ipAddress = QString::fromStdString(cmd.ip_address());
QString gameName = QString::fromStdString(cmd.game_name());
QString gameID = QString::fromStdString(cmd.game_id());
QString message = QString::fromStdString(cmd.message());
bool chatType = false;
bool gameType = false;
bool roomType = false;
for (int i = 0; i != cmd.log_location_size(); ++i) {
if (QString::fromStdString(cmd.log_location(i)).simplified() == "room")
roomType = true;
if (QString::fromStdString(cmd.log_location(i)).simplified() == "game")
gameType = true;
if (QString::fromStdString(cmd.log_location(i)).simplified() == "chat")
chatType = true;
}
int dateRange = cmd.date_range();
int maximumResults = cmd.maximum_results();
Response_ViewLogHistory *re = new Response_ViewLogHistory;
QListIterator<ServerInfo_ChatMessage> messageIterator(sqlInterface->getMessageLogHistory(userName,ipAddress,gameName,gameID,message,chatType,gameType,roomType,dateRange,maximumResults));
while (messageIterator.hasNext())
re->add_log_message()->CopyFrom(messageIterator.next());
rc.setResponseExtension(re);
return Response::RespOk;
}
Response::ResponseCode ServerSocketInterface::cmdGetBanHistory(const Command_GetBanHistory &cmd, ResponseContainer &rc)
{

View file

@ -98,6 +98,7 @@ private:
Response::ResponseCode cmdReplayDeleteMatch(const Command_ReplayDeleteMatch &cmd, ResponseContainer &rc);
Response::ResponseCode cmdBanFromServer(const Command_BanFromServer &cmd, ResponseContainer &rc);
Response::ResponseCode cmdWarnUser(const Command_WarnUser &cmd, ResponseContainer &rc);
Response::ResponseCode cmdGetLogHistory(const Command_ViewLogHistory &cmd, ResponseContainer &rc);
Response::ResponseCode cmdGetBanHistory(const Command_GetBanHistory &cmd, ResponseContainer &rc);
Response::ResponseCode cmdGetWarnList(const Command_GetWarnList &cmd, ResponseContainer &rc);
Response::ResponseCode cmdGetWarnHistory(const Command_GetWarnHistory &cmd, ResponseContainer &rc);