From 405bd563d8167282eec291886e9daa81ace6a3b8 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sun, 18 Sep 2016 14:46:02 +0200 Subject: [PATCH] #950 Add unregister by name to API - Add method to API - Ensure that unregistering in datasource is case-insensitive --- src/main/java/fr/xephi/authme/api/NewAPI.java | 9 ++++++ .../fr/xephi/authme/datasource/MySQL.java | 2 +- .../fr/xephi/authme/datasource/SQLite.java | 2 +- .../java/fr/xephi/authme/api/NewAPITest.java | 30 +++++++++++++++++++ .../AbstractDataSourceIntegrationTest.java | 2 +- 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/xephi/authme/api/NewAPI.java b/src/main/java/fr/xephi/authme/api/NewAPI.java index c77affa9..4ed3fd2e 100644 --- a/src/main/java/fr/xephi/authme/api/NewAPI.java +++ b/src/main/java/fr/xephi/authme/api/NewAPI.java @@ -221,6 +221,15 @@ public class NewAPI { management.performUnregisterByAdmin(null, player.getName(), player); } + /** + * Unregister a player from AuthMe by name. + * + * @param name the name of the player (case-insensitive) + */ + public void forceUnregister(String name) { + management.performUnregisterByAdmin(null, name, Bukkit.getPlayer(name)); + } + /** * Get all the registered names (lowercase) * diff --git a/src/main/java/fr/xephi/authme/datasource/MySQL.java b/src/main/java/fr/xephi/authme/datasource/MySQL.java index dc08d7b4..da0ad602 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQL.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQL.java @@ -612,7 +612,7 @@ public class MySQL implements DataSource { } } } - pst.setString(1, user); + pst.setString(1, user.toLowerCase()); pst.executeUpdate(); return true; } catch (SQLException ex) { diff --git a/src/main/java/fr/xephi/authme/datasource/SQLite.java b/src/main/java/fr/xephi/authme/datasource/SQLite.java index 8aae94c5..d9c847f4 100644 --- a/src/main/java/fr/xephi/authme/datasource/SQLite.java +++ b/src/main/java/fr/xephi/authme/datasource/SQLite.java @@ -335,7 +335,7 @@ public class SQLite implements DataSource { PreparedStatement pst = null; try { pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + col.NAME + "=?;"); - pst.setString(1, user); + pst.setString(1, user.toLowerCase()); pst.executeUpdate(); return true; } catch (SQLException ex) { diff --git a/src/test/java/fr/xephi/authme/api/NewAPITest.java b/src/test/java/fr/xephi/authme/api/NewAPITest.java index 35cc7d30..5ec009c0 100644 --- a/src/test/java/fr/xephi/authme/api/NewAPITest.java +++ b/src/test/java/fr/xephi/authme/api/NewAPITest.java @@ -212,6 +212,36 @@ public class NewAPITest { assertThat(result, contains(names)); } + @Test + public void shouldUnregisterPlayer() { + // given + Player player = mock(Player.class); + String name = "Donald"; + given(player.getName()).willReturn(name); + + // when + api.forceUnregister(player); + + // then + verify(management).performUnregisterByAdmin(null, name, player); + } + + @Test + public void shouldUnregisterPlayerByName() { + // given + Server server = mock(Server.class); + ReflectionTestUtils.setField(Bukkit.class, null, "server", server); + String name = "tristan"; + Player player = mock(Player.class); + given(server.getPlayer(name)).willReturn(player); + + // when + api.forceUnregister(name); + + // then + verify(management).performUnregisterByAdmin(null, name, player); + } + private static Player mockPlayerWithName(String name) { Player player = mock(Player.class); given(player.getName()).willReturn(name); diff --git a/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java b/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java index 1223130c..424a2320 100644 --- a/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java @@ -195,7 +195,7 @@ public abstract class AbstractDataSourceIntegrationTest { DataSource dataSource = getDataSource(); // when - boolean response1 = dataSource.removeAuth("bobby"); + boolean response1 = dataSource.removeAuth("Bobby"); boolean response2 = dataSource.removeAuth("does-not-exist"); // then