[Feature]: Spieler bannen #15
6 changed files with 84 additions and 5 deletions
40
api/api.yml
40
api/api.yml
|
@ -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"
|
||||
|
||||
/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:
|
||||
snoweuph
commented
404 wenn spieler nicht gefunden 404 wenn spieler nicht gefunden
|
||||
200:
|
||||
description: "Successfully banned player!"
|
||||
snoweuph
commented
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:
|
||||
snoweuph
commented
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:
|
||||
|
|
|
@ -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;
|
||||
snoweuph
commented
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;
|
||||
snoweuph
commented
st null hier richtig? wollen wir nicht ein 200 zurückgeben? st null hier richtig? wollen wir nicht ein 200 zurückgeben?
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
snoweuph
commented
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) {
|
||||
snoweuph
commented
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
snoweuph
commented
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);
|
||||
snoweuph
commented
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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue
ihr habt beim /admin/players endpunkt kein 401, 500 und 503 mehr. sind benötigt