commit
761d549f9a
9 changed files with 91 additions and 3 deletions
|
@ -345,6 +345,8 @@ void Server::externalRoomSay(int roomId, const QString &userName, const QString
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
room->say(userName, message, false);
|
room->say(userName, message, false);
|
||||||
|
|
||||||
|
getDatabaseInterface()->logMessage(0, userName, "ISL", message, Server_DatabaseInterface::MessageTargetIslRoom, room->getId(), room->getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::externalRoomGameListChanged(int roomId, const ServerInfo_Game &gameInfo)
|
void Server::externalRoomGameListChanged(int roomId, const ServerInfo_Game &gameInfo)
|
||||||
|
|
|
@ -35,6 +35,9 @@ public:
|
||||||
virtual bool userSessionExists(const QString & /* userName */) { return false; }
|
virtual bool userSessionExists(const QString & /* userName */) { return false; }
|
||||||
|
|
||||||
virtual bool getRequireRegistration() { return false; }
|
virtual bool getRequireRegistration() { return false; }
|
||||||
|
|
||||||
|
enum LogMessage_TargetType { MessageTargetRoom, MessageTargetGame, MessageTargetChat, MessageTargetIslRoom };
|
||||||
|
virtual void logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage, LogMessage_TargetType targetType, const int targetId, const QString &targetName) { };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -436,7 +436,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&gameMutex);
|
QMutexLocker locker(&gameMutex);
|
||||||
|
|
||||||
Server_Player *newPlayer = new Server_Player(this, nextPlayerId++, userInterface->copyUserInfo(true, true), spectator, userInterface);
|
Server_Player *newPlayer = new Server_Player(this, nextPlayerId++, userInterface->copyUserInfo(true, true, true), spectator, userInterface);
|
||||||
newPlayer->moveToThread(thread());
|
newPlayer->moveToThread(thread());
|
||||||
|
|
||||||
Event_Join joinEvent;
|
Event_Join joinEvent;
|
||||||
|
|
|
@ -767,6 +767,8 @@ Response::ResponseCode Server_Player::cmdGameSay(const Command_GameSay &cmd, Res
|
||||||
Event_GameSay event;
|
Event_GameSay event;
|
||||||
event.set_message(cmd.message());
|
event.set_message(cmd.message());
|
||||||
ges.enqueueGameEvent(event, playerId);
|
ges.enqueueGameEvent(event, playerId);
|
||||||
|
|
||||||
|
game->getRoom()->getServer()->getDatabaseInterface()->logMessage(userInfo->id(), QString::fromStdString(userInfo->name()), QString::fromStdString(userInfo->address()), QString::fromStdString(cmd.message()), Server_DatabaseInterface::MessageTargetGame, game->getGameId(), game->getDescription());
|
||||||
|
|
||||||
return Response::RespOk;
|
return Response::RespOk;
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,7 +395,9 @@ Response::ResponseCode Server_ProtocolHandler::cmdMessage(const Command_Message
|
||||||
SessionEvent *se = prepareSessionEvent(event);
|
SessionEvent *se = prepareSessionEvent(event);
|
||||||
userInterface->sendProtocolItem(*se);
|
userInterface->sendProtocolItem(*se);
|
||||||
rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, se);
|
rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, se);
|
||||||
|
|
||||||
|
databaseInterface->logMessage(userInfo->id(), QString::fromStdString(userInfo->name()), QString::fromStdString(userInfo->address()), QString::fromStdString(cmd.message()), Server_DatabaseInterface::MessageTargetChat, userInterface->getUserInfo()->id(), receiver);
|
||||||
|
|
||||||
return Response::RespOk;
|
return Response::RespOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,6 +545,9 @@ Response::ResponseCode Server_ProtocolHandler::cmdRoomSay(const Command_RoomSay
|
||||||
msg.replace(QChar('\n'), QChar(' '));
|
msg.replace(QChar('\n'), QChar(' '));
|
||||||
|
|
||||||
room->say(QString::fromStdString(userInfo->name()), msg);
|
room->say(QString::fromStdString(userInfo->name()), msg);
|
||||||
|
|
||||||
|
databaseInterface->logMessage(userInfo->id(), QString::fromStdString(userInfo->name()), QString::fromStdString(userInfo->address()), msg, Server_DatabaseInterface::MessageTargetRoom, room->getId(), room->getName());
|
||||||
|
|
||||||
return Response::RespOk;
|
return Response::RespOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ password=foobar
|
||||||
|
|
||||||
[rooms]
|
[rooms]
|
||||||
|
|
||||||
; A servtrice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
|
; A servatrice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
|
||||||
; with two different methods:
|
; with two different methods:
|
||||||
; config: rooms are defined in this configuration (see the following example)
|
; config: rooms are defined in this configuration (see the following example)
|
||||||
; sql: rooms are defined in the "rooms" table of the database
|
; sql: rooms are defined in the "rooms" table of the database
|
||||||
|
@ -144,6 +144,24 @@ max_message_count_per_interval=10
|
||||||
max_games_per_user=5
|
max_games_per_user=5
|
||||||
|
|
||||||
|
|
||||||
|
[logging]
|
||||||
|
|
||||||
|
; Servatrice can log user messages to the database table cockatrice_log.
|
||||||
|
; These messages can come from different sources; each source can be enabled separately.
|
||||||
|
|
||||||
|
; Log user messages inside chat rooms
|
||||||
|
log_user_msg_room=false
|
||||||
|
|
||||||
|
; Log user messages inside games
|
||||||
|
log_user_msg_game=false
|
||||||
|
|
||||||
|
; Log user messages in private chats
|
||||||
|
log_user_msg_chat=false
|
||||||
|
|
||||||
|
; Log user messages coming from other servers in the network
|
||||||
|
log_user_msg_isl=false
|
||||||
|
|
||||||
|
|
||||||
; EXPERIMENTAL - NOT WORKING YET
|
; EXPERIMENTAL - NOT WORKING YET
|
||||||
; The following settings are relative to the server network functionality, that is not yet complete.
|
; The following settings are relative to the server network functionality, that is not yet complete.
|
||||||
; Avoid enabling it unless you are willing to test it and help its development.
|
; Avoid enabling it unless you are willing to test it and help its development.
|
||||||
|
|
|
@ -223,3 +223,18 @@ CREATE TABLE IF NOT EXISTS `cockatrice_rooms_gametypes` (
|
||||||
PRIMARY KEY (`name`)
|
PRIMARY KEY (`name`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `cockatrice_log` (
|
||||||
|
`log_time` datetime NOT NULL,
|
||||||
|
`sender_id` int(7) unsigned NULL,
|
||||||
|
`sender_name` varchar(35) NOT NULL,
|
||||||
|
`sender_ip` varchar(255) NOT NULL,
|
||||||
|
`log_message` text NOT NULL,
|
||||||
|
`target_type` ENUM('room', 'game', 'chat'),
|
||||||
|
`target_id` int(7) NULL,
|
||||||
|
`target_name` varchar(50) NOT NULL,
|
||||||
|
KEY `sender_name` (`sender_name`),
|
||||||
|
KEY `sender_ip` (`sender_ip`),
|
||||||
|
KEY `target_type` (`target_type`),
|
||||||
|
KEY `target_id` (`target_id`),
|
||||||
|
KEY `target_name` (`target_name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
|
@ -538,3 +538,44 @@ DeckList *Servatrice_DatabaseInterface::getDeckFromDatabase(int deckId, int user
|
||||||
|
|
||||||
return deck;
|
return deck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Servatrice_DatabaseInterface::logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage, LogMessage_TargetType targetType, const int targetId, const QString &targetName)
|
||||||
|
{
|
||||||
|
QSqlQuery query(sqlDatabase);
|
||||||
|
QString targetTypeString;
|
||||||
|
switch(targetType)
|
||||||
|
{
|
||||||
|
case MessageTargetRoom:
|
||||||
|
if(!settingsCache->value("logging/log_user_msg_room", 0).toBool())
|
||||||
|
return;
|
||||||
|
targetTypeString = "room";
|
||||||
|
break;
|
||||||
|
case MessageTargetGame:
|
||||||
|
if(!settingsCache->value("logging/log_user_msg_game", 0).toBool())
|
||||||
|
return;
|
||||||
|
targetTypeString = "game";
|
||||||
|
break;
|
||||||
|
case MessageTargetChat:
|
||||||
|
if(!settingsCache->value("logging/log_user_msg_chat", 0).toBool())
|
||||||
|
return;
|
||||||
|
targetTypeString = "chat";
|
||||||
|
break;
|
||||||
|
case MessageTargetIslRoom:
|
||||||
|
if(!settingsCache->value("logging/log_user_msg_isl", 0).toBool())
|
||||||
|
return;
|
||||||
|
targetTypeString = "room";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.prepare("insert into " + server->getDbPrefix() + "_log (log_time, sender_id, sender_name, sender_ip, log_message, target_type, target_id, target_name) values (now(), :sender_id, :sender_name, :sender_ip, :log_message, :target_type, :target_id, :target_name)");
|
||||||
|
query.bindValue(":sender_id", senderId < 1 ? QVariant() : senderId);
|
||||||
|
query.bindValue(":sender_name", senderName);
|
||||||
|
query.bindValue(":sender_ip", senderIp);
|
||||||
|
query.bindValue(":log_message", logMessage);
|
||||||
|
query.bindValue(":target_type", targetTypeString);
|
||||||
|
query.bindValue(":target_id", (targetType == MessageTargetChat && targetId < 1) ? QVariant() : targetId);
|
||||||
|
query.bindValue(":target_name", targetName);
|
||||||
|
execSqlQuery(query);
|
||||||
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@ public:
|
||||||
bool userSessionExists(const QString &userName);
|
bool userSessionExists(const QString &userName);
|
||||||
|
|
||||||
bool getRequireRegistration();
|
bool getRequireRegistration();
|
||||||
|
|
||||||
|
void logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage, LogMessage_TargetType targetType, const int targetId, const QString &targetName);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue