continue-puzzle-progress #6
@@ -11,4 +11,5 @@ enum SessionSettingType: string
|
||||
case RIGHTS_FOR_PLAYER2 = 'RightsForPlayer2';
|
||||
case RIGHTS_FOR_PLAYER3 = 'RightsForPlayer3';
|
||||
case INVITE_CODE = 'InviteCode';
|
||||
case SET_OF_DELETED_FILES = 'SetOfDeletedFiles';
|
||||
}
|
||||
|
||||
@@ -116,8 +116,13 @@ class GameResponseService
|
||||
case 'help':
|
||||
return ['result' => $this->getHelpCommand($rechten)];
|
||||
case 'ls':
|
||||
if(!in_array('ls', $rechten))
|
||||
return ['result' => ['Unknown command']];
|
||||
break;
|
||||
case 'cd':
|
||||
if(!in_array('cd', $rechten))
|
||||
return ['result' => ['Unknown command']];
|
||||
|
||||
$pwd = $this->playerService->getCurrentPwdOfPlayer($player);
|
||||
if(!$pwd)
|
||||
return ['result' => ['Unknown command']];
|
||||
@@ -129,12 +134,39 @@ class GameResponseService
|
||||
$this->playerService->saveCurrentPwdOfPlayer($player, $newLocation);
|
||||
return ['result' => ['Path: ' . $newLocation]];
|
||||
case 'pwd':
|
||||
if(!in_array('pwd', $rechten))
|
||||
return ['result' => ['Unknown command']];
|
||||
|
||||
$pwd = $this->playerService->getCurrentPwdOfPlayer($player);
|
||||
return ['result' => ['Path: ' . $pwd]];
|
||||
case 'rm':
|
||||
break;
|
||||
if(!in_array('rm', $rechten))
|
||||
return ['result' => ['Unknown command']];
|
||||
|
||||
$pwd = $this->playerService->getCurrentPwdOfPlayer($player);
|
||||
if(!$pwd)
|
||||
return ['result' => ['Unknown command']];
|
||||
|
||||
if (!isset($messagePart[1])) {
|
||||
return ['result' => ['Usage: rm {filename}']];
|
||||
}
|
||||
|
||||
$filename = $messagePart[1];
|
||||
$fullPath = ($pwd === '/' ? '' : $pwd) . '/' . $filename;
|
||||
|
||||
if(!$this->isAllowedToRemove($fullPath, $player, $sudo))
|
||||
return ['result' => ['You are not allowed to remove this file.']];
|
||||
|
||||
$this->playerService->addDeletedFileToSession($player, $fullPath);
|
||||
return ['result' => ['File removed: ' . $filename]];
|
||||
case 'sudo':
|
||||
break;
|
||||
if(!in_array('sudo', $rechten))
|
||||
return ['result' => ['Unknown command']];
|
||||
|
||||
$sudo = array_shift($messagePart);
|
||||
$message = implode(' ', $messagePart);
|
||||
|
||||
return $this->checkConsoleCommando($message, $player, true);
|
||||
default:
|
||||
return ['result' => ['Unknown command']];
|
||||
}
|
||||
@@ -376,4 +408,69 @@ class GameResponseService
|
||||
|
||||
return $paths;
|
||||
}
|
||||
|
||||
private function isAllowedToRemove(string $file, Player $player, bool $sudo) : bool
|
||||
{
|
||||
if(!$this->fileExists($file))
|
||||
return false;
|
||||
|
||||
if(str_starts_with($file, '/var/rapports/'))
|
||||
return false;
|
||||
|
||||
$rights = $this->getRechten($player);
|
||||
|
||||
if(in_array('sudo', $rights) || $sudo)
|
||||
return true;
|
||||
|
||||
$sudoFiles = [
|
||||
'/var/arrest/handle.sh',
|
||||
'/var/arrest/cell.sh',
|
||||
'/var/marriage/divorce.sh',
|
||||
];
|
||||
|
||||
return !in_array($file, $sudoFiles);
|
||||
}
|
||||
|
||||
private function fileExists(string $file)
|
||||
{
|
||||
$files = $this->getAllPossibleFiles();
|
||||
|
||||
if(in_array($file, $files))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function getAllPossibleFiles()
|
||||
{
|
||||
$files = [];
|
||||
|
||||
$files[] = '/var/arrest/handle.sh';
|
||||
$files[] = '/var/arrest/bars.sh';
|
||||
$files[] = '/var/arrest/cell.sh';
|
||||
$files[] = '/var/marriage/share.sh';
|
||||
$files[] = '/var/marriage/divorce.sh';
|
||||
$files[] = '/var/rapports/095_07-14.txt';
|
||||
$files[] = '/var/rapports/007_19-52.txt';
|
||||
$files[] = '/var/rapports/083_25-39.txt';
|
||||
$files[] = '/var/rapports/019_31-11.txt';
|
||||
$files[] = '/var/rapports/075_46-77.txt';
|
||||
$files[] = '/var/rapports/031_53-28.txt';
|
||||
$files[] = '/var/rapports/072_61-05.txt';
|
||||
$files[] = '/var/rapports/064_72-90.txt';
|
||||
$files[] = '/var/rapports/091_81-33.txt';
|
||||
$files[] = '/var/rapports/079_89-47.txt';
|
||||
$files[] = '/var/rapports/098_92-14.txt';
|
||||
$files[] = '/var/rapports/012_94-31.txt';
|
||||
$files[] = '/var/rapports/016_98-07.txt';
|
||||
$files[] = '/var/rapports/087_102-45.txt';
|
||||
$files[] = '/var/rapports/094_110-19.txt';
|
||||
$files[] = '/var/rapports/063_117-56.txt';
|
||||
$files[] = '/var/rapports/017_123-88.txt';
|
||||
$files[] = '/var/rapports/093_138-24.txt';
|
||||
$files[] = '/var/rapports/001_145-93.txt';
|
||||
$files[] = '/var/rapports/index.txt';
|
||||
|
||||
return $files;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Game\Service;
|
||||
|
||||
use App\Game\Entity\Game;
|
||||
use App\Game\Entity\Player;
|
||||
use App\Game\Entity\SessionSetting;
|
||||
use App\Game\Enum\SessionSettingType;
|
||||
use App\Game\Enum\SessionStatus;
|
||||
use App\Game\Repository\PlayerRepository;
|
||||
@@ -73,4 +74,33 @@ class PlayerService
|
||||
$this->entityManager->persist($setting);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
|
||||
public function getDeletedFilesOfSession(Player $player): array
|
||||
{
|
||||
$setting = $this->sessionSettingRepository->getSetting($player->getSession(), SessionSettingType::SET_OF_DELETED_FILES);
|
||||
if (!$setting || !$setting->getValue()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return json_decode($setting->getValue(), true) ?? [];
|
||||
}
|
||||
|
||||
public function addDeletedFileToSession(Player $player, string $filename): void
|
||||
{
|
||||
$setting = $this->sessionSettingRepository->getSetting($player->getSession(), SessionSettingType::SET_OF_DELETED_FILES);
|
||||
if (!$setting) {
|
||||
$setting = new SessionSetting();
|
||||
$setting->setSession($player->getSession());
|
||||
$setting->setName(SessionSettingType::SET_OF_DELETED_FILES);
|
||||
}
|
||||
|
||||
$deletedFiles = json_decode($setting->getValue() ?? '[]', true) ?? [];
|
||||
if (!in_array($filename, $deletedFiles)) {
|
||||
$deletedFiles[] = $filename;
|
||||
$setting->setValue(json_encode($deletedFiles));
|
||||
|
||||
$this->entityManager->persist($setting);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user