diff --git a/src/main/java/com/faforever/api/ban/BanService.java b/src/main/java/com/faforever/api/ban/BanService.java new file mode 100644 index 000000000..514d502df --- /dev/null +++ b/src/main/java/com/faforever/api/ban/BanService.java @@ -0,0 +1,22 @@ +package com.faforever.api.ban; + +import com.faforever.api.data.domain.Player; +import com.faforever.api.player.PlayerRepository; +import org.springframework.stereotype.Service; + +@Service +public class BanService { + private final PlayerRepository playerRepository; + + public BanService(PlayerRepository playerRepository) { + this.playerRepository = playerRepository; + } + + public boolean hasActiveGlobalBan(Player player) { + return player.isGlobalBanned(); + } + + public boolean hasActiveGlobalBan(String username) { + return hasActiveGlobalBan(playerRepository.findOneByLoginIgnoreCase(username)); + } +} diff --git a/src/main/java/com/faforever/api/data/domain/Player.java b/src/main/java/com/faforever/api/data/domain/Player.java index a2927dbaf..ef8a7e792 100644 --- a/src/main/java/com/faforever/api/data/domain/Player.java +++ b/src/main/java/com/faforever/api/data/domain/Player.java @@ -7,6 +7,7 @@ import lombok.Setter; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -51,7 +52,7 @@ public Clan getClan() { return null; } - @OneToMany(mappedBy = "player") + @OneToMany(mappedBy = "player", fetch = FetchType.EAGER) @UpdatePermission(any = {Role.ALL.class}) // Permission is managed by BanInfo class public List getBans() { return this.bans; diff --git a/src/main/java/com/faforever/api/player/PlayerRepository.java b/src/main/java/com/faforever/api/player/PlayerRepository.java index 346fdbba7..af37c1f3e 100644 --- a/src/main/java/com/faforever/api/player/PlayerRepository.java +++ b/src/main/java/com/faforever/api/player/PlayerRepository.java @@ -6,5 +6,5 @@ @Repository public interface PlayerRepository extends JpaRepository { - + Player findOneByLoginIgnoreCase(String login); } diff --git a/src/main/java/com/faforever/api/security/FafUserDetails.java b/src/main/java/com/faforever/api/security/FafUserDetails.java index 55af505cb..d0bfd5061 100644 --- a/src/main/java/com/faforever/api/security/FafUserDetails.java +++ b/src/main/java/com/faforever/api/security/FafUserDetails.java @@ -17,12 +17,12 @@ public class FafUserDetails extends org.springframework.security.core.userdetail private final PermissionService permissionService; private User user; - public FafUserDetails(User user) { + public FafUserDetails(User user, boolean accountNonLocked) { // TODO implement lobby_admin this(user.getId(), user.getLogin(), user.getPassword(), - true, // TODO use new ban system + accountNonLocked, singletonList(new SimpleGrantedAuthority("ROLE_USER")), null); this.user = user; diff --git a/src/main/java/com/faforever/api/security/FafUserDetailsService.java b/src/main/java/com/faforever/api/security/FafUserDetailsService.java index d8372f7f2..c46c44591 100644 --- a/src/main/java/com/faforever/api/security/FafUserDetailsService.java +++ b/src/main/java/com/faforever/api/security/FafUserDetailsService.java @@ -23,6 +23,6 @@ public FafUserDetailsService(UserRepository userRepository) { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - return new FafUserDetails(userRepository.findOneByLoginIgnoreCase(username)); + return new FafUserDetails(userRepository.findOneByLoginIgnoreCase(username), true); } } diff --git a/src/test/java/com/faforever/api/data/JsonApiBanIntegrationTest.java b/src/test/java/com/faforever/api/data/JsonApiBanIntegrationTest.java index 58192ccb0..10b9031e2 100644 --- a/src/test/java/com/faforever/api/data/JsonApiBanIntegrationTest.java +++ b/src/test/java/com/faforever/api/data/JsonApiBanIntegrationTest.java @@ -162,7 +162,7 @@ public String createUserAndGetAccessToken(String login, String password) throws public void getBansWithoutPermission() { String accessToken = createUserAndGetAccessToken("Dragonfire", "foo"); - BanInfo ban = new BanInfo().setAuthor(me).setReason("I want to ban me").setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason("I want to ban me").setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); assertEquals(1, banRepository.count()); @@ -181,14 +181,14 @@ public void getBansWithPermission() { Role role = permissionService.createRole("TestRole", permission); permissionService.assignUserToRole(userRepository.findOneByLoginIgnoreCase(me.getLogin()), role); - BanInfo ban = new BanInfo().setAuthor(me).setReason("I want to ban me").setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason("I want to ban me").setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); assertEquals(1, banRepository.count()); ResultActions action = this.mvc.perform(get("/data/banInfo") .header("Authorization", accessToken)); action - .andExpect(content().string(String.format("{\"data\":[{\"type\":\"banInfo\",\"id\":\"%s\",\"attributes\":{\"createTime\":null,\"expiresAt\":null,\"reason\":\"I want to ban me\",\"type\":\"GLOBAL\",\"updateTime\":null},\"relationships\":{\"author\":{\"data\":{\"type\":\"player\",\"id\":\"%s\"}},\"banRevokeData\":{\"data\":null},\"player\":{\"data\":{\"type\":\"player\",\"id\":\"%s\"}}}}]}", ban.getId(), me.getId(), me.getId()))) + .andExpect(content().string(String.format("{\"data\":[{\"type\":\"banInfo\",\"id\":\"%s\",\"attributes\":{\"createTime\":null,\"expiresAt\":null,\"reason\":\"I want to ban me\",\"type\":\"CHAT\",\"updateTime\":null},\"relationships\":{\"author\":{\"data\":{\"type\":\"player\",\"id\":\"%s\"}},\"banRevokeData\":{\"data\":null},\"player\":{\"data\":{\"type\":\"player\",\"id\":\"%s\"}}}}]}", ban.getId(), me.getId(), me.getId()))) .andExpect(status().is(200)); } @@ -246,7 +246,7 @@ public void updateBanWithPermission() { permissionService.assignUserToRole(userRepository.findOneByLoginIgnoreCase(me.getLogin()), role); String reason = "I want to ban him"; - BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); @@ -277,9 +277,9 @@ public void updateBanWithoutUpdatePermission() { permissionService.assignUserToRole(userRepository.findOneByLoginIgnoreCase(me.getLogin()), role); String reason = "I want to ban him"; - BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); - + assertEquals(1, banRepository.count()); assertEquals(reason, banRepository.findAll().get(0).getReason()); @@ -307,7 +307,7 @@ public void updateBanWithoutReadPermission() { permissionService.assignUserToRole(userRepository.findOneByLoginIgnoreCase(me.getLogin()), role); String reason = "I want to ban him"; - BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); assertEquals(1, banRepository.count()); @@ -334,7 +334,7 @@ public void updateBanWithoutPermission() { String accessToken = createUserAndGetAccessToken("Dragonfire", "foo"); String reason = "I want to ban him"; - BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.GLOBAL); + BanInfo ban = new BanInfo().setAuthor(me).setReason(reason).setPlayer(me).setType(BanType.CHAT); banRepository.save(ban); assertEquals(1, banRepository.count());