Skip to content

Commit 9b23c6e

Browse files
authored
Merge pull request #16 from Innectic/cleanup
Cleanup
2 parents 01db735 + 90126a3 commit 9b23c6e

File tree

15 files changed

+294
-167
lines changed

15 files changed

+294
-167
lines changed

API/src/main/java/me/innectic/permissify/api/PermissifyAPI.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import me.innectic.permissify.api.util.DisplayUtil;
3232

3333
import java.lang.reflect.InvocationTargetException;
34+
import java.util.ArrayList;
3435
import java.util.Optional;
3536

3637
/**
@@ -60,6 +61,7 @@ public void initialize(HandlerType type, Optional<ConnectionInformation> connect
6061
boolean connected = databaseHandler.get().connect();
6162
if (connected) System.out.println("Connected to the database.");
6263
else System.out.println("Unable to connect to the database.");
64+
databaseHandler.ifPresent(handler -> handler.clear(new ArrayList<>()));
6365
}
6466

6567
public static Optional<PermissifyAPI> get() {

API/src/main/java/me/innectic/permissify/api/PermissifyConstants.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* @author Innectic
3333
* @since 6/16/2017
3434
*
35-
* Constant attributes between the different plugins.
35+
* Constant attributes between the different server implementations.
3636
*/
3737
public class PermissifyConstants {
3838
// TODO: Create a language formatter to allow for translating.
@@ -66,7 +66,7 @@ public class PermissifyConstants {
6666
public static final String GROUP_PERMISSIONS = PERMISSIFY_PREFIX + "&c&lPermissions for <GROUP>: <PERMISSIONS>";
6767
public static final String GROUP_LIST = PERMISSIFY_PREFIX + "&c&lRegistered groups: <GROUPS>";
6868
public static final String PLAYER_GROUP_LIST = PERMISSIFY_PREFIX + "&c&lGroups for <PLAYER>: <GROUPS>";
69-
public static final String CACHE_CLEARED = PERMISSIFY_PREFIX + "&e&lCache has been cleared!";
69+
public static final String CACHE_PURGED = PERMISSIFY_PREFIX + "&e&lCache has been cleared!";
7070

7171
public static final String PERMISSION_ADDED_GROUP = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been added to <GROUP>!";
7272
public static final String PERMISSION_REMOVED_GROUP = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been removed from <GROUP>!";
@@ -108,20 +108,36 @@ public class PermissifyConstants {
108108
public static final String UNABLE_OTHER = PERMISSIFY_PREFIX + "&c&lUnable to continue: <REASON>";
109109
public static final String UNABLE_TO_SET = PERMISSIFY_PREFIX + "&c&lUnable to set: <REASON>";
110110

111-
// Help response
112-
public static final List<String> PERMISSIFY_HELP = new ArrayList<>(Arrays.asList(
113-
"&e================== &a&lPermissify Help &e==================",
114-
"&a&l/permissify group create [name] [prefix] [suffix] [chat-color]",
115-
"&a&l/permissify group addpermission [name] [permission]",
116-
"&a&l/permissify group removepermission [name] [permission]",
117-
"&a&l/permissify group listpermissions [name]",
111+
public static final String PERMISSIFY_HELP_HEADER = "&e================== &a&lPermissify Help &e==================";
112+
public static final String PERMISSIFY_HELP_FOOTER = "&e=====================================================";
113+
// public static final int LINES_PER_PAGE = 10; TODO: Pagination should happen by `len(pages) / lines_per_page`.
114+
115+
public static final List<List<String>> PERMISSIFY_HELP_PAGES = new ArrayList<>(Arrays.asList(Arrays.asList(
116+
"&a&l/permissify help [page]",
117+
"&a&l/permissify superadmin [player] - &c&lWARNING: &e&lSUPERADMIN GIVES PERMISSION FOR EVERYTHING!",
118+
"&a&l/permissify cache",
119+
"&a&l/permissify cache purge",
120+
"&a&l/permissify format chat [format]",
121+
"&a&l/permissify format whisper [format]",
122+
"&a&l/permissify group create [name] [prefix] [suffix] [chatcolor]",
123+
"&a&l/permissify group remove [name]",
124+
"&a&l/permissify group addpermission [group] [permissions...]",
125+
"&a&l/permissify group removepermission [group] [permissions...]"
126+
), Arrays.asList(
127+
"&a&l/permissify group listpermissions [group]",
118128
"&a&l/permissify group list",
119-
"&e====================================================="
120-
));
129+
"&a&l/permissify player addpermission [permission] [player]",
130+
"&a&l/permissify player removepermission [permission] [player]",
131+
"&a&l/permissify player addgroup [player] [group]",
132+
"&a&l/permissify player listpermissions [player]",
133+
"&a&l/permissify player listgroups [player]",
134+
"&a&l/permissify player removegroup [player] [group]",
135+
"&a&l/permissify player setmain [player] [group]"
136+
)));
121137

122138
// Error response
123139
public static final List<String> PERMISSIFY_ERROR = new ArrayList<>(Arrays.asList(
124140
"&c&lError encountered: <ERROR_TYPE>",
125-
"&c&lShould report: <SHOULD_REPORT>"
141+
"&c&lShould this be reported?: <SHOULD_REPORT>"
126142
));
127143
}

API/src/main/java/me/innectic/permissify/api/database/DatabaseHandler.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package me.innectic.permissify.api.database;
2626

27+
import lombok.Getter;
2728
import me.innectic.permissify.api.permission.Permission;
2829
import me.innectic.permissify.api.permission.PermissionGroup;
2930

@@ -37,8 +38,8 @@
3738
*/
3839
public abstract class DatabaseHandler {
3940

40-
protected Map<UUID, Map<String, Boolean>> cachedPermissions = new HashMap<>();
41-
protected List<PermissionGroup> cachedGroups = new ArrayList<>();
41+
@Getter protected Map<UUID, Map<String, Boolean>> cachedPermissions = new HashMap<>();
42+
@Getter protected List<PermissionGroup> cachedGroups = new ArrayList<>();
4243
protected List<UUID> superAdmins = new ArrayList<>();
4344
protected final Optional<ConnectionInformation> connectionInformation;
4445
protected String chatFormat = "{group} {username}: {message}";
@@ -62,8 +63,10 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
6263

6364
/**
6465
* Clear the handler's cache and reload all needed values.
66+
*
67+
* @param onlinePlayers the current players online who will need permissions.
6568
*/
66-
public abstract void clear();
69+
public abstract void clear(List<UUID> onlinePlayers);
6770

6871
/**
6972
* Add a permission to a player
@@ -116,6 +119,14 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
116119
*/
117120
public abstract boolean deleteGroup(String name);
118121

122+
/**
123+
* Get the permission group from name.
124+
*
125+
* @param name the name of the group.
126+
* @return fulfilled if exists, empty otherwise
127+
*/
128+
public abstract Optional<PermissionGroup> getGroup(String name);
129+
119130
/**
120131
* Add a player to a permission group, and grant permissions.
121132
*

API/src/main/java/me/innectic/permissify/api/database/handlers/HandlerType.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import lombok.Getter;
2929
import me.innectic.permissify.api.database.DatabaseHandler;
3030

31+
import java.util.Arrays;
3132
import java.util.Optional;
3233

3334
/**
@@ -49,9 +50,6 @@ public enum HandlerType {
4950
* @return the handler. Filled if found, empty otherwise.
5051
*/
5152
public static Optional<HandlerType> findType(String type) {
52-
for (HandlerType handler : values()) {
53-
if (handler.getDisplayName().equalsIgnoreCase(type)) return Optional.of(handler);
54-
}
55-
return Optional.empty();
53+
return Arrays.stream(values()).filter(handler -> handler.getDisplayName().equalsIgnoreCase(type)).findFirst();
5654
}
5755
}

API/src/main/java/me/innectic/permissify/api/database/handlers/MySQLHandler.java

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,60 @@ public boolean connect() {
8282
}
8383

8484
@Override
85-
public void clear() {
85+
public void clear(List<UUID> onlinePlayers) {
8686
cachedGroups = new ArrayList<>();
8787
cachedPermissions = new HashMap<>();
8888
superAdmins = new ArrayList<>();
8989

9090
chatFormat = getChatFormat(true);
9191
whisperFormat = getWhisperFormat(true);
92+
93+
Optional<Connection> connection = getConnection();
94+
if (connection.isPresent()) {
95+
try {
96+
// Load all super admins
97+
PreparedStatement adminStatement = connection.get().prepareStatement("SELECT uuid FROM superAdmin");
98+
ResultSet adminResults = adminStatement.executeQuery();
99+
while (adminResults.next()) {
100+
superAdmins.add(UUID.fromString(adminResults.getString("uuid")));
101+
}
102+
adminResults.close();
103+
adminStatement.close();
104+
105+
// Load all group names
106+
PreparedStatement groupStatement = connection.get().prepareStatement("SELECT * from groups");
107+
ResultSet groupResults = groupStatement.executeQuery();
108+
while (groupResults.next()) {
109+
PermissionGroup group = new PermissionGroup(groupResults.getString("name"),
110+
groupResults.getString("chatcolor"),
111+
groupResults.getString("prefix"),
112+
groupResults.getString("suffix"));
113+
PreparedStatement groupPermissionsStatement = connection.get().prepareStatement("SELECT * FROM groupPermissions WHERE groupName=?");
114+
groupPermissionsStatement.setString(1, group.getName());
115+
ResultSet groupPermissionsResult = groupPermissionsStatement.executeQuery();
116+
while (groupPermissionsResult.next()) {
117+
group.addPermission(groupPermissionsResult.getString("permission"));
118+
}
119+
groupPermissionsResult.close();
120+
groupPermissionsStatement.close();
121+
122+
PreparedStatement groupMembersStatement = connection.get().prepareStatement("SELECT uuid,`primary` FROM groupMembers WHERE `group`=?");
123+
groupMembersStatement.setString(1, group.getName());
124+
ResultSet groupMembersResults = groupMembersStatement.executeQuery();
125+
while (groupMembersResults.next()) {
126+
group.addPlayer(UUID.fromString(groupMembersResults.getString("uuid")), groupMembersResults.getBoolean("primary"));
127+
}
128+
groupMembersResults.close();
129+
groupMembersStatement.close();
130+
cachedGroups.add(group);
131+
}
132+
groupStatement.close();
133+
groupResults.close();
134+
connection.get().close();
135+
} catch (SQLException e) {
136+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
137+
}
138+
} else PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
92139
}
93140

94141
@Override
@@ -189,9 +236,12 @@ public boolean hasPermission(UUID uuid, String permission) {
189236

190237
@Override
191238
public List<Permission> getPermissions(UUID uuid) {
192-
if (cachedPermissions.containsKey(uuid))
239+
if (cachedPermissions.containsKey(uuid)) {
240+
System.out.println("Found cached permissions for " + uuid);
193241
return cachedPermissions.get(uuid).entrySet().stream()
194242
.map(entry -> new Permission(entry.getKey(), entry.getValue())).collect(Collectors.toList());
243+
}
244+
System.out.println("No cache for " + uuid + " found. Getting.");
195245
Optional<Connection> connection = getConnection();
196246
List<Permission> permissions = new ArrayList<>();
197247

@@ -272,6 +322,11 @@ public boolean deleteGroup(String name) {
272322
return true;
273323
}
274324

325+
@Override
326+
public Optional<PermissionGroup> getGroup(String name) {
327+
return cachedGroups.stream().filter(group -> group.getName().equalsIgnoreCase(name)).findFirst();
328+
}
329+
275330
@Override
276331
public boolean addPlayerToGroup(UUID uuid, PermissionGroup group) {
277332
if (group.hasPlayer(uuid)) return false;
@@ -498,29 +553,7 @@ public void addSuperAdmin(UUID uuid) {
498553

499554
@Override
500555
public boolean isSuperAdmin(UUID uuid) {
501-
if (superAdmins.contains(uuid)) return true;
502-
Optional<Connection> connection = getConnection();
503-
if (!connection.isPresent()) {
504-
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
505-
return false;
506-
}
507-
508-
try {
509-
PreparedStatement statement = connection.get().prepareStatement("SELECT uuid FROM superAdmin");
510-
ResultSet results = statement.executeQuery();
511-
while (results.next()) {
512-
if (results.getString("uuid").equals(uuid.toString())) {
513-
superAdmins.add(UUID.fromString(results.getString("uuid")));
514-
return true;
515-
}
516-
}
517-
results.close();
518-
statement.close();
519-
connection.get().close();
520-
} catch (SQLException e) {
521-
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
522-
}
523-
return false;
556+
return superAdmins.contains(uuid);
524557
}
525558

526559
@Override

API/src/main/java/me/innectic/permissify/api/permission/PermissionGroup.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class PermissionGroup {
5151
public void removePermission(String permission) {
5252
Optional<Permission> perm = permissions.stream().filter(groupPermission -> groupPermission.getPermission().equals(permission)).findFirst();
5353
perm.ifPresent(groupPermission -> groupPermission.setGranted(false));
54+
// TODO: Remove permissions from the player
5455
}
5556

5657
/**
@@ -60,11 +61,9 @@ public void removePermission(String permission) {
6061
*/
6162
public void addPermission(String permission) {
6263
Optional<Permission> perm = permissions.stream().filter(groupPermission -> groupPermission.getPermission().equals(permission)).findFirst();
63-
if (perm.isPresent()) {
64-
perm.get().setGranted(true);
65-
} else {
66-
permissions.add(new Permission(permission, true));
67-
}
64+
if (perm.isPresent()) perm.get().setGranted(true);
65+
else permissions.add(new Permission(permission, true));
66+
// TODO: Add permissions to the player
6867
}
6968

7069
public boolean hasPermission(String permission) {

Spigot/src/main/java/me/innectic/permissify/spigot/PermissifyMain.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,23 +68,15 @@ public void onEnable() {
6868
Optional<FullHandler> handler = configVerifier.verifyConnectionInformation();
6969
// Initialize the API
7070
permissifyAPI = new PermissifyAPI();
71-
if (!handler.isPresent()) {
72-
System.out.println("No handler");
73-
return;
74-
}
75-
if (!handler.get().getHandlerType().isPresent()) {
76-
System.out.println("No handler type");
71+
if (!handler.isPresent() || !handler.get().getHandlerType().isPresent()) {
72+
System.out.println("Internal Permission Error: No handler / type present!");
7773
return;
7874
}
7975
try {
8076
permissifyAPI.initialize(handler.get().getHandlerType().get(), handler.get().getConnectionInformation(), new DisplayUtil());
8177
} catch (Exception e) {
8278
e.printStackTrace();
8379
}
84-
groupCommand = new GroupCommand();
85-
playerCommand = new PlayerCommand();
86-
formatCommand = new FormatCommand();
87-
cacheCommand = new CacheCommand();
8880
// Register commands
8981
registerCommands();
9082
// Register listeners
@@ -121,6 +113,10 @@ public static PermissifyMain getInstance() {
121113
}
122114

123115
private void registerCommands() {
116+
groupCommand = new GroupCommand();
117+
playerCommand = new PlayerCommand();
118+
formatCommand = new FormatCommand();
119+
cacheCommand = new CacheCommand();
124120
getCommand("permissify").setExecutor(new PermissifyCommand());
125121
}
126122

0 commit comments

Comments
 (0)