[Feature]: Spieler bannen #15

Open
SZUT-Dorian wants to merge 3 commits from TD-4_Admin_kann_spieler_bannen into trunk
6 changed files with 84 additions and 5 deletions

View file

@ -95,8 +95,14 @@ components:
properties:
username:
type: string
id:
type: integer
format: int64
banned:
type: boolean
required:
- username
- banned
#############################################
# PlayerFilter #
#############################################
@ -259,6 +265,40 @@ paths:
type: array
items:
$ref: "#/components/schemas/AdministratablePlayer"
Review

ihr habt beim /admin/players endpunkt kein 401, 500 und 503 mehr. sind benötigt

ihr habt beim /admin/players endpunkt kein 401, 500 und 503 mehr. sind benötigt
/admin/player/{id}/ban:
parameters:
- in: path
name: id
schema:
type: integer
format: int64
required: true
post:
operationId: "BanPlayer"
tags:
- admin
summary: "Ban player by id"
description: "Bans a player by id, making them unable to play the game."
responses:
Review

404 wenn spieler nicht gefunden

404 wenn spieler nicht gefunden
200:
description: "Successfully banned player!"
Review

401,500 & 503 fehlen

401,500 & 503 fehlen
/admin/player/{id}/unban:
parameters:
- in: path
name: id
schema:
type: integer
format: int64
required: true
post:
operationId: "UnbanPlayer"
tags:
- admin
summary: "Unban player by id"
description: "Unbans a player by id, allowing them to play the game."
responses:
Review

404 hinzufügen, fals der speiler nicht gefunden wird

404 hinzufügen, fals der speiler nicht gefunden wird
200:
description: "Successfully unbanned player!"
401:
$ref: "#/components/responses/401Unauthorized"
500:

View file

@ -8,6 +8,7 @@ import de.towerdefence.server.oas.models.AdministratablePlayer;
import de.towerdefence.server.oas.models.PlayerFilter;
import de.towerdefence.server.player.Player;
import de.towerdefence.server.player.PlayerRepository;
import de.towerdefence.server.player.PlayerService;
import de.towerdefence.server.utils.OrderToDirectionMapperService;
import de.towerdefence.server.utils.PlayerMapperService;
import jakarta.servlet.http.HttpServletRequest;
@ -36,6 +37,9 @@ public class AdminApiController implements AdminApi {
@Autowired
PlayerMapperService playerMapperService;
@Autowired
PlayerService playerService;
@Autowired
OrderToDirectionMapperService orderToDirectionMapperService;
@ -57,6 +61,12 @@ public class AdminApiController implements AdminApi {
return ResponseEntity.ok(authInfo);
}
@Override
public ResponseEntity<Void> banPlayer(Long id) {
this.playerService.banPlayer(id);
return null;
Review

ist null hier richtig? wollen wir nicht ein 200 zurückgeben?

ist null hier richtig? wollen wir nicht ein 200 zurückgeben?
}
@Override
public ResponseEntity<List<AdministratablePlayer>> getAllPlayers(PlayerFilter body) {
@ -83,4 +93,10 @@ public class AdminApiController implements AdminApi {
return ResponseEntity.ok(playersMapped);
}
@Override
public ResponseEntity<Void> unbanPlayer(Long id) {
this.playerService.unbanPlayer(id);
return null;
Review

st null hier richtig? wollen wir nicht ein 200 zurückgeben?

st null hier richtig? wollen wir nicht ein 200 zurückgeben?
}
}

View file

@ -2,11 +2,9 @@ package de.towerdefence.server.player;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Setter;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.*;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
@NoArgsConstructor
@AllArgsConstructor
@ -33,4 +31,8 @@ public class Player {
@NotNull
@Size(min = PASSWORD_SALT_BYTE_LENGTH, max = PASSWORD_SALT_BYTE_LENGTH)
private byte[] passwordSalt;
@NotNull
@ColumnDefault("false")
private boolean banned;
}

View file

@ -1,5 +1,6 @@
package de.towerdefence.server.player;
import de.towerdefence.server.oas.models.AdministratablePlayer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -49,4 +50,18 @@ public class PlayerService {
md.update(salt);
return md.digest(password);
}
public void banPlayer(Long id) {
Review

Wenn der Spieler nicht existiert, sollte diese Funktion einen PlayerNotFound Exception schmeißen

Wenn der Spieler nicht existiert, sollte diese Funktion einen PlayerNotFound Exception schmeißen
this.playerRepository.findById(id).ifPresent(player -> {
player.setBanned(true);
this.playerRepository.saveAndFlush(player);
});
}
public void unbanPlayer(Long id) {
Review

Wenn der Spieler nicht existiert, sollte diese Funktion einen PlayerNotFound Exception schmeißen

Wenn der Spieler nicht existiert, sollte diese Funktion einen PlayerNotFound Exception schmeißen
this.playerRepository.findById(id).ifPresent(player -> {
player.setBanned(false);
this.playerRepository.saveAndFlush(player);
});
}
}

View file

@ -45,7 +45,7 @@ public class ServerApiController implements ServerApi {
@Override
public ResponseEntity<Void> playerRegister(PlayerRegistrationData body) {
if(playerRepository.existsByUsername(body.getUsername())){
return new ResponseEntity<>(HttpStatus.CONFLICT);
Review

warum die änderung?

warum die änderung?
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
}
Player newPlayer = new Player();
newPlayer.setUsername(body.getUsername());
@ -61,6 +61,10 @@ public class ServerApiController implements ServerApi {
@Override
public ResponseEntity<PlayerLoginSession> playerLogin(PlayerLoginData body) {
Player player = playerRepository.findByUsername(body.getUsername());
if(player.isBanned())
{
return new ResponseEntity<>(HttpStatus.CONFLICT);
Review

403 währe hier richtig.

403 ist für wenn man sich authentiziert hat, aber keine zugriffsrechte hat

403 währe hier richtig. 403 ist für wenn man sich authentiziert hat, aber keine zugriffsrechte hat
}
if(player == null){
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}

View file

@ -15,6 +15,8 @@ public class PlayerMapperService {
for (Player player : players) {
AdministratablePlayer apiPlayer = new AdministratablePlayer();
apiPlayer.setUsername(player.getUsername());
apiPlayer.setId(player.getId());
apiPlayer.setBanned(player.isBanned());
administratablePlayers.add(apiPlayer);
}
return administratablePlayers;