some minor bug fixes; disallow deck storage commands to unauthenticated users

This commit is contained in:
Max-Wilhelm Bruker 2009-12-19 22:40:34 +01:00
parent 226837e98a
commit 06de6b1a6c
5 changed files with 23 additions and 3 deletions

View file

@ -157,7 +157,7 @@ void CardZone::moveAllToZone()
// Cards need to be moved in reverse order so that the other // Cards need to be moved in reverse order so that the other
// cards' list index doesn't change // cards' list index doesn't change
for (int i = cards.size() - 1; i >= 0; i--) for (int i = cards.size() - 1; i >= 0; i--)
player->sendGameCommand(new Command_MoveCard(-1, getName(), cards.at(i)->getId(), getName(), targetX)); player->sendGameCommand(new Command_MoveCard(-1, getName(), cards.at(i)->getId(), targetZone, targetX));
} }
QPointF CardZone::closestGridPoint(const QPointF &point) QPointF CardZone::closestGridPoint(const QPointF &point)

View file

@ -142,6 +142,7 @@ void ProtocolResponse::initializeHash()
responseHash.insert("invalid_command", RespInvalidCommand); responseHash.insert("invalid_command", RespInvalidCommand);
responseHash.insert("name_not_found", RespNameNotFound); responseHash.insert("name_not_found", RespNameNotFound);
responseHash.insert("login_needed", RespLoginNeeded); responseHash.insert("login_needed", RespLoginNeeded);
responseHash.insert("function_not_allowed", RespFunctionNotAllowed);
responseHash.insert("context_error", RespContextError); responseHash.insert("context_error", RespContextError);
responseHash.insert("wrong_password", RespWrongPassword); responseHash.insert("wrong_password", RespWrongPassword);
responseHash.insert("spectators_not_allowed", RespSpectatorsNotAllowed); responseHash.insert("spectators_not_allowed", RespSpectatorsNotAllowed);

View file

@ -8,7 +8,7 @@
class DeckList; class DeckList;
enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed }; enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespFunctionNotAllowed, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed };
// PrivateZone: Contents of the zone are always visible to the owner, // PrivateZone: Contents of the zone are always visible to the owner,
// but not to anyone else. // but not to anyone else.

View file

@ -146,7 +146,6 @@ void Server_Game::stopGameIfFinished()
Server_Player *player = playerIterator.next().value(); Server_Player *player = playerIterator.next().value();
player->sendProtocolItem(new Event_GameStateChanged(gameId, gameStarted, -1, -1, getGameState(player))); player->sendProtocolItem(new Event_GameStateChanged(gameId, gameStarted, -1, -1, getGameState(player)));
} }
} }
ResponseCode Server_Game::checkJoin(const QString &_password, bool spectator) ResponseCode Server_Game::checkJoin(const QString &_password, bool spectator)
@ -185,6 +184,8 @@ void Server_Game::removePlayer(Server_Player *player)
if (!getPlayerCount()) if (!getPlayerCount())
deleteLater(); deleteLater();
else
stopGameIfFinished();
qobject_cast<Server *>(parent())->broadcastGameListUpdate(this); qobject_cast<Server *>(parent())->broadcastGameListUpdate(this);
} }

View file

@ -161,6 +161,9 @@ bool ServerSocketInterface::deckListHelper(DeckList_Directory *folder)
ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd) ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
servatrice->checkSql(); servatrice->checkSql();
DeckList_Directory *root = new DeckList_Directory(QString()); DeckList_Directory *root = new DeckList_Directory(QString());
@ -175,6 +178,9 @@ ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd) ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
servatrice->checkSql(); servatrice->checkSql();
int folderId = getDeckPathId(cmd->getPath()); int folderId = getDeckPathId(cmd->getPath());
@ -214,6 +220,9 @@ void ServerSocketInterface::deckDelDirHelper(int basePathId)
ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd) ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
servatrice->checkSql(); servatrice->checkSql();
int basePathId = getDeckPathId(cmd->getPath()); int basePathId = getDeckPathId(cmd->getPath());
@ -225,6 +234,9 @@ ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd)
ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd) ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
servatrice->checkSql(); servatrice->checkSql();
QSqlQuery query; QSqlQuery query;
@ -245,6 +257,9 @@ ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd)
ResponseCode ServerSocketInterface::cmdDeckUpload(Command_DeckUpload *cmd) ResponseCode ServerSocketInterface::cmdDeckUpload(Command_DeckUpload *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
servatrice->checkSql(); servatrice->checkSql();
if (!cmd->getDeck()) if (!cmd->getDeck())
@ -297,6 +312,9 @@ DeckList *ServerSocketInterface::getDeckFromDatabase(int deckId)
ResponseCode ServerSocketInterface::cmdDeckDownload(Command_DeckDownload *cmd) ResponseCode ServerSocketInterface::cmdDeckDownload(Command_DeckDownload *cmd)
{ {
if (authState != PasswordRight)
return RespFunctionNotAllowed;
DeckList *deck; DeckList *deck;
try { try {
deck = getDeckFromDatabase(cmd->getDeckId()); deck = getDeckFromDatabase(cmd->getDeckId());