diff --git a/.github/ISSUE_TEMPLATE.MD b/.github/ISSUE_TEMPLATE.MD index c3a5da7a2..ca3dc1be7 100644 --- a/.github/ISSUE_TEMPLATE.MD +++ b/.github/ISSUE_TEMPLATE.MD @@ -1,4 +1,4 @@ -####Before reporting an issue make sure you are running the latest build of the plugin! +####Before reporting an issue make sure you are running the latest build of the plugin and checked for duplicate issues! ### What behaviour is observed: What happened? diff --git a/src/main/java/fr/xephi/authme/datasource/MySQL.java b/src/main/java/fr/xephi/authme/datasource/MySQL.java index 661e3fad9..dc08d7b46 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQL.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQL.java @@ -12,6 +12,7 @@ import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.SecuritySettings; +import fr.xephi.authme.util.RuntimeUtils; import fr.xephi.authme.util.StringUtils; import java.sql.Blob; @@ -100,6 +101,9 @@ public class MySQL implements DataSource { ds = new HikariDataSource(); ds.setPoolName("AuthMeMYSQLPool"); + // Pool size + ds.setMaximumPoolSize(RuntimeUtils.getCoreCount()); + // Database URL ds.setJdbcUrl("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database); @@ -118,7 +122,7 @@ public class MySQL implements DataSource { // Caching ds.addDataSourceProperty("cachePrepStmts", "true"); - ds.addDataSourceProperty("prepStmtCacheSize", "250"); + ds.addDataSourceProperty("prepStmtCacheSize", "275"); ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); ConsoleLogger.info("Connection arguments loaded, Hikari ConnectionPool ready!"); diff --git a/src/main/java/fr/xephi/authme/permission/PermissionsManager.java b/src/main/java/fr/xephi/authme/permission/PermissionsManager.java index a9533b618..1db9fbfd6 100644 --- a/src/main/java/fr/xephi/authme/permission/PermissionsManager.java +++ b/src/main/java/fr/xephi/authme/permission/PermissionsManager.java @@ -198,13 +198,13 @@ public class PermissionsManager implements Reloadable { return true; } - // Return if the player is an Op if sender is console or no permission system in use + // Return default if sender is not a player or no permission system is in use if (!(sender instanceof Player) || !isEnabled()) { return permissionNode.getDefaultPermission().evaluate(sender); } Player player = (Player) sender; - return handler.hasPermission(player, permissionNode); + return player.hasPermission(permissionNode.getNode()); } /** diff --git a/src/main/java/fr/xephi/authme/permission/handlers/BPermissionsHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/BPermissionsHandler.java index c448d7b7c..983e42e27 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/BPermissionsHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/BPermissionsHandler.java @@ -22,11 +22,6 @@ public class BPermissionsHandler implements PermissionHandler { return true; } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - return ApiLayer.hasPermission(player.getWorld().getName(), CalculableType.USER, player.getName(), node.getNode()); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { return ApiLayer.hasPermission(null, CalculableType.USER, name, node.getNode()); diff --git a/src/main/java/fr/xephi/authme/permission/handlers/GroupManagerHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/GroupManagerHandler.java index 18d813e8c..a952c124d 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/GroupManagerHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/GroupManagerHandler.java @@ -29,12 +29,6 @@ public class GroupManagerHandler implements PermissionHandler { return true; } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(player); - return handler != null && handler.has(player, node.getNode()); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissionsByPlayerName(name); diff --git a/src/main/java/fr/xephi/authme/permission/handlers/PermissionHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/PermissionHandler.java index bf294c522..71c7a2879 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/PermissionHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/PermissionHandler.java @@ -28,16 +28,6 @@ public interface PermissionHandler { */ boolean hasGroupSupport(); - /** - * Check if a player has permission. - * - * @param player The player. - * @param node The permission node. - * - * @return True if the player has permission. - */ - boolean hasPermission(Player player, PermissionNode node); - /** * Check if a player has permission by their name. * Used to check an offline player's permission. diff --git a/src/main/java/fr/xephi/authme/permission/handlers/PermissionsBukkitHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/PermissionsBukkitHandler.java index 22edea699..344e0aec5 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/PermissionsBukkitHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/PermissionsBukkitHandler.java @@ -20,11 +20,6 @@ public class PermissionsBukkitHandler implements PermissionHandler { return true; } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - return player.hasPermission(node.getNode()); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { return false; diff --git a/src/main/java/fr/xephi/authme/permission/handlers/PermissionsExHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/PermissionsExHandler.java index 7b1096f9e..e3e03ee32 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/PermissionsExHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/PermissionsExHandler.java @@ -37,12 +37,6 @@ public class PermissionsExHandler implements PermissionHandler { return true; } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - PermissionUser user = permissionManager.getUser(player); - return user.has(node.getNode()); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { PermissionUser user = permissionManager.getUser(name); diff --git a/src/main/java/fr/xephi/authme/permission/handlers/VaultHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/VaultHandler.java index f8e322d6b..8955569ec 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/VaultHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/VaultHandler.java @@ -44,11 +44,6 @@ public class VaultHandler implements PermissionHandler { return vaultProvider.hasGroupSupport(); } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - return vaultProvider.has(player, node.getNode()); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { return vaultProvider.has("", name, node.getNode()); diff --git a/src/main/java/fr/xephi/authme/permission/handlers/ZPermissionsHandler.java b/src/main/java/fr/xephi/authme/permission/handlers/ZPermissionsHandler.java index b4f3198f2..498ba4a91 100644 --- a/src/main/java/fr/xephi/authme/permission/handlers/ZPermissionsHandler.java +++ b/src/main/java/fr/xephi/authme/permission/handlers/ZPermissionsHandler.java @@ -33,15 +33,6 @@ public class ZPermissionsHandler implements PermissionHandler { return true; } - @Override - public boolean hasPermission(Player player, PermissionNode node) { - Map perms = zPermissionsService.getPlayerPermissions(player.getWorld().getName(), null, player.getName()); - if (perms.containsKey(node.getNode())) - return perms.get(node.getNode()); - else - return node.getDefaultPermission().evaluate(player); - } - @Override public boolean hasPermissionOffline(String name, PermissionNode node) { Map perms = zPermissionsService.getPlayerPermissions(null, null, name); diff --git a/src/main/java/fr/xephi/authme/util/RuntimeUtils.java b/src/main/java/fr/xephi/authme/util/RuntimeUtils.java new file mode 100644 index 000000000..af7fa3a34 --- /dev/null +++ b/src/main/java/fr/xephi/authme/util/RuntimeUtils.java @@ -0,0 +1,7 @@ +package fr.xephi.authme.util; + +public class RuntimeUtils { + public static int getCoreCount() { + return Runtime.getRuntime().availableProcessors(); + } +} diff --git a/src/main/resources/messages/messages_uk.yml b/src/main/resources/messages/messages_uk.yml index 1faefabed..9cee5ebc5 100644 --- a/src/main/resources/messages/messages_uk.yml +++ b/src/main/resources/messages/messages_uk.yml @@ -1,74 +1,72 @@ -unknown_user: '&fКористувача немає в базі даних' -unsafe_spawn: '&fМісце вашого виходу було небезпечне тому ми телепортували вас на спавн' -not_logged_in: '&cВи ще не ввійшли!' -reg_voluntarily: '&eЩоб зарєєструватися введіть команду &d"/reg Пароль Повтор_Пароля"' -usage_log: '&cВикористовуйте: &a/login Пароль &cабо &a/l Пароль' -wrong_pwd: '&cНевірний пароль' -unregistered: '&cВи успішно видалили свій акаунт!' -reg_disabled: '&cРеєстрація виключена' -valid_session: '&cСесія відкрита' +denied_command: '&cДля використання цієї команди потрібна авторизація.' +same_ip_online: 'Перевищено ліміт на авторизацію з одного IP.' +denied_chat: '&cДля доступу до чату потрібна авторизація.' +kick_antibot: 'На сервер здійснено DDoS атаку. Будь ласка, зачекайте декілька хвилин доки активність спаде.' +unknown_user: '&cТакого користувача немає в базі даних.' +unsafe_spawn: '&cВаше останнє місцезнаходження не є безпечним. Вас було переміщено на точку спавна.' +not_logged_in: '&cВи не авторизовані!' +reg_voluntarily: 'Можете зареєструватись за допомогою команди "/register <пароль> <повторПароля>"' +usage_log: '&cСинтаксис: /login <пароль>' +wrong_pwd: '&cНевірний пароль!' +unregistered: '&cДані про реєстрацію успішно видалено' +reg_disabled: '&cВнутрішньоігрову реєстрацію зараз вимкнено.' +valid_session: '&2Сесію відновлено.' login: '&2Успішна авторизація!' -vb_nonActiv: '&fВаш акаунт не активований. Перевірте свою електронну адресу!' -user_regged: '&cТакий користувач вже зареєстрований' -usage_reg: '&cВикористовуйте: /reg Пароль Повтор_Пароля' -# TODO max_reg: Missing tags %reg_count, %reg_names, %max_acc -max_reg: '&fВи перевищили максимальне число реєстрацій на ваш IP' -no_perm: '&cУ Вас недостатньо прав' -error: '&fЩось пішло не так; Будь ласка зв`яжіться з адміністратором' -login_msg: '&cДля авторизації введіть "/login Пароль"' -reg_msg: '&cДля реєстрації введіть "/reg Пароль Повтор_Пароля"' -password_error_nick: '&fВи не можете використати ваш Нікнейм у якості паролю' -password_error_unsafe: '&fВи не можете використувати ненадійний пароль' -reg_email_msg: '&cДля реєстрації введіть "/reg Email Email"' -usage_unreg: '&cВикористовуйте: /unregister Пароль' -pwd_changed: '&cПароль змінено!' -user_unknown: '&cТакий користувач не зарєєстрований' -password_error: '&fПаролі не співпадають' -invalid_session: '&fСесія некоректна. Будь ласка зачекайте коли вона закінчиться' -reg_only: '&Вхід доступний лише зареєстрованим користувачам. Зареєструватися можна за адресою &9%nl%http://сайт_серверу.com&r' -logged_in: '&2Ви уже ввійшли!' -logout: '&cВи успішно вийшли' -same_nick: '&fГравець з вашим нікнеймом вже грає на сервері' -registered: '&cВи успішно зареєстровані!' -pass_len: '&fВаш пароль занадто довгий, або занадто короткий' -reload: '&fКонфiгурацiя i база даних успiшно перезавнтажені.' -timeout: '&fЧас для входу вийшов' -usage_changepassword: '&fВикористовуйте: /changepassword СтарийПароль НовийПароль' -name_len: '&cВаш нікнейм занадто довгий, або занадто короткий' -regex: '&cВаш нікнейм містить заборонені символи. Доступні символи: REG_EX' -add_email: '&cБудь ласка додайте свою електронну скриньку: /email add ВашEmail ВашEmail' -recovery_email: '&cЗабули пароль? Введіть /email recovery ВашПароль' -usage_captcha: '&cБудь ласка введіть капчу: /captcha ' -wrong_captcha: '&cНевірне значення капчи: /captcha THE_CAPTCHA' -valid_captcha: '&cКапча введена вірно!' -kick_forvip: '&cVIP зайшов на переповнений сервер!' -kick_fullserver: '&cНажаль, сервер переповнений!' -usage_email_add: '&fВикористовуйте: /email add ВашEmail ВашEmail' -usage_email_change: '&fВикористовуйте: /email change СтарийEmail НовийEmail' -usage_email_recovery: '&fВикористовуйте: /email recovery Email' -new_email_invalid: '[AuthMe] Новий Email недійсний!' -old_email_invalid: '[AuthMe] Старий Email недійсний!' -email_invalid: '[AuthMe] Невірний Email' -email_added: '[AuthMe] &2Email додано!' -email_confirm: '[AuthMe] Підтвердіть ваш Email!' -email_changed: '[AuthMe] &2Email змінено!' -email_send: '[AuthMe] Лист для відновлення надіслано на ваш Email!' -country_banned: 'Сервер не доступний для вашої країни | Your country is banned from this server' -antibot_auto_enabled: '[AuthMe] AntiBotMod автоматично увімкнений (забагато одначасних з`єднань)!' -# TODO antibot_auto_disabled: Missing tag %m -antibot_auto_disabled: '[AuthMe] AntiBotMod автоматично вимкнувся, сподіваємось атака зупинена' -# TODO email_already_used: '&4The email address is already being used' -# TODO kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.' -# TODO invalid_name_case: 'You should join using username %valid, not %invalid.' -# TODO accounts_owned_other: 'The player %name has %count accounts:' -# TODO kicked_admin_registered: 'An admin just registered you; please log in again' -# TODO tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.' -# TODO password_error_chars: '&4Your password contains illegal characters. Allowed chars: REG_EX' -# TODO incomplete_email_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.' -# TODO denied_chat: '&cIn order to chat you must be authenticated!' -# TODO denied_command: '&cIn order to use this command you must be authenticated!' -# TODO same_ip_online: 'A player with the same IP is already in game!' -# TODO email_exists: '&cA recovery email was already sent! You can discard it and send a new one using the command below:' -# TODO two_factor_create: '&2Your secret code is %code. You can scan it from here %url' -# TODO accounts_owned_self: 'You own %count accounts:' -# TODO not_owner_error: 'You are not the owner of this account. Please choose another name!' +vb_nonActiv: '&cВаш акаунт ще не активовано. Будь ласка, провірте свою електронну пошту!' +user_regged: '&cТакий нікнейм вже зареєстровано.' +usage_reg: '&cСинтаксис: /register <пароль> <повторПароля>' +max_reg: '&cВичерпано ліміт реєстрацій (%reg_count/%max_acc %reg_names) для вашого підключення!' +no_perm: '&4У вас недостатньо прав, щоб застосувати цю команду!' +error: '&4[AuthMe] Error. Будь ласка, повідомте адміністратора!' +login_msg: '&cДля авторизації, введіть команду "/login <пароль>"' +reg_msg: '&3Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм!%nl%&3Для цього просто введіть команду "/register <пароль> <повторПароля>"' +reg_email_msg: 'Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм, використавши свою діючу електронну пошту!%nl%&3Для цього просто введіть команду "/register "' +usage_unreg: '&cСинтаксис: /unregister <пароль>' +pwd_changed: '&2Пароль успішно змінено!' +user_unknown: '&cЦей гравець не є зареєстрованим.' +password_error: '&cПаролі не співпадають!' +password_error_nick: '&cНе можна використовувати свій нікнейм у якості пароля! Будь ласка, виберіть щось інакше...' +password_error_unsafe: '&cЦей пароль надто простий! Будь ласка, придумайте інакший...' +password_error_chars: '&4Ваш пароль містить недопустимі символи. Підберіть інакший...%nl%&4(Reg-ex: REG_EX)' +invalid_session: '&cСесію було розірвано внаслідок зміни IP.' +reg_only: '&4Лише зареєстровані гравці можуть підключатись до сервера!%nl%&4Будь ласка, відвідайте http://example.com для реєстрації.' +logged_in: '&cВи вже авторизовані!' +logout: '&2Ви вийшли зі свого акаунта!' +same_nick: '&4Хтось з таким ніком зараз вже сидить на сервері!' +registered: '&2Реєстрація пройшла успішно!' +pass_len: '&cВаш пароль надто короткий або надто довгий! Спробуйте інакший...' +reload: '&2Конфігурації та базу даних було успішно перезавантажено!' +timeout: '&4Час для авторизації сплинув. Будь ласка, спробуйте ще раз!' +usage_changepassword: '&cСинтаксис: /changepassword <старийПароль> <новийПароль>' +name_len: '&4Ваш нікнейм надто короткий або надто довгий!' +regex: '&4Ваш нікнейм містить недопустимі символи! Reg-ex: REG_EX' +add_email: '&3Не забудьте прив’язати електронну пошту до свого акаунта, за допомогою команди "/email add "' +recovery_email: 'Забули пароль? Можете скористатись командою &9/email recovery &f<&9ваш e-mail&f>' +usage_captcha: '&3Для продовження доведеться ввести капчу — "/captcha "' +wrong_captcha: '&cНевірно введена капча! Спробуйте ще раз — "/captcha THE_CAPTCHA"' +valid_captcha: '&2Капчу прийнято.' +kick_forvip: '&3Вас кікнуто, внаслідок того, що VIP гравець зайшов на сервер коли небуло вільних місць.' +kick_fullserver: '&4Сервер переповнено! Доведеться зачекати доки хтось вийде.' +usage_email_add: '&cСинтаксис: /email add ' +usage_email_change: '&cСинтаксис: /email change <старий e-mail> <новий e-mail>' +usage_email_recovery: '&cСинтаксис: /email recovery ' +new_email_invalid: '&cНекоректний формат.' +old_email_invalid: '&cСтарий e-mail, що прив’язано до вашого акаунта, відрізняється від введеного вами.' +email_invalid: '&cФормат вказаного e-mail’у є некоректним, або його домен внесено до блеклисту.' +email_added: '&2Електронну пошту успішно прив’язано до вашого акаунта.' +email_confirm: '&cАдреси не співпадають.' +email_changed: '&2E-mail успішно змінено.' +email_send: '&2Лист для відновлення доступу надіслано. Будь ласка, провірте свою пошту!' +email_exists: '&cЛист для відновлення доступу вже було надіслано! Ви можете деактуалізувати його, використавши наступну команду:' +country_banned: '&4Your country is banned from this server!' +antibot_auto_enabled: '&4[AntiBotService] Ненормативне число з’єднань. Активовано антибот систему!' +antibot_auto_disabled: '&2[AntiBotService] Антибот систему деактивовано після %m хв. активності.' +email_already_used: '&4До цієї електронної пошти прив’язано забагато акаунтів!' +two_factor_create: '&2Ваш секретний код — %code %nl%&2Можете зкопіювати його за цим посиланням — %url' +not_owner_error: 'Цей акаунт вам не належить! Будь ласка, оберіть інакший нікнейм!' +invalid_name_case: 'Регістр у вашому нікнеймі відрізняється від регістру при реєстрації.%nl%Поточний регістр: &c%invalid&f. Валідний регістр: &a%valid&f.%nl%Будь ласка, перезайдіть з валідним регістром!' +tempban_max_logins: '&cВаш IP тимчасово заблоковано, із‒за багатократного введення хибного пароля.' +accounts_owned_self: 'Кількість ваших твінк‒акаунтів: %count:' +accounts_owned_other: 'Кількість твінк‒акаунтів гравця %name: %count' +kicked_admin_registered: 'Адміністратор вас зареєстрував; Будь ласка, авторизуйтесь знову!' +incomplete_email_settings: '&4[AuthMe] Error: Не всі необхідні налаштування є встановленими, щоб надсилати електронну пошту. Будь ласка, повідомте адміністратора!' \ No newline at end of file diff --git a/src/test/java/fr/xephi/authme/cache/CaptchaManagerTest.java b/src/test/java/fr/xephi/authme/cache/CaptchaManagerTest.java index e9d76cd9b..bb293ef9f 100644 --- a/src/test/java/fr/xephi/authme/cache/CaptchaManagerTest.java +++ b/src/test/java/fr/xephi/authme/cache/CaptchaManagerTest.java @@ -153,7 +153,6 @@ public class CaptchaManagerTest { } private static void assertHasCount(CaptchaManager manager, String player, Integer count) { - @SuppressWarnings("unchecked") Map playerCounts = ReflectionTestUtils .getFieldValue(CaptchaManager.class, manager, "playerCounts"); assertThat(playerCounts.get(player.toLowerCase()), equalTo(count)); diff --git a/src/test/java/fr/xephi/authme/cache/TempbanManagerTest.java b/src/test/java/fr/xephi/authme/cache/TempbanManagerTest.java index 11540ddd4..f487a97f6 100644 --- a/src/test/java/fr/xephi/authme/cache/TempbanManagerTest.java +++ b/src/test/java/fr/xephi/authme/cache/TempbanManagerTest.java @@ -244,9 +244,9 @@ public class TempbanManagerTest { } private static void assertHasNoEntries(TempbanManager manager, String address) { - Map> playerCounts = ReflectionTestUtils + Map> playerCounts = ReflectionTestUtils .getFieldValue(TempbanManager.class, manager, "ipLoginFailureCounts"); - Map map = playerCounts.get(address); + Map map = playerCounts.get(address); assertThat(map == null || map.isEmpty(), equalTo(true)); }