Merge branch 'master' of https://github.com/AuthMe-Team/AuthMeReloaded into configme-integration

This commit is contained in:
ljacqu 2016-09-03 10:31:05 +02:00
commit b8153c2578
14 changed files with 88 additions and 126 deletions

View File

@ -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 behaviour is observed:
What happened? What happened?

View File

@ -12,6 +12,7 @@ import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.SecuritySettings; import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.RuntimeUtils;
import fr.xephi.authme.util.StringUtils; import fr.xephi.authme.util.StringUtils;
import java.sql.Blob; import java.sql.Blob;
@ -100,6 +101,9 @@ public class MySQL implements DataSource {
ds = new HikariDataSource(); ds = new HikariDataSource();
ds.setPoolName("AuthMeMYSQLPool"); ds.setPoolName("AuthMeMYSQLPool");
// Pool size
ds.setMaximumPoolSize(RuntimeUtils.getCoreCount());
// Database URL // Database URL
ds.setJdbcUrl("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database); ds.setJdbcUrl("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database);
@ -118,7 +122,7 @@ public class MySQL implements DataSource {
// Caching // Caching
ds.addDataSourceProperty("cachePrepStmts", "true"); ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250"); ds.addDataSourceProperty("prepStmtCacheSize", "275");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ConsoleLogger.info("Connection arguments loaded, Hikari ConnectionPool ready!"); ConsoleLogger.info("Connection arguments loaded, Hikari ConnectionPool ready!");

View File

@ -198,13 +198,13 @@ public class PermissionsManager implements Reloadable {
return true; 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()) { if (!(sender instanceof Player) || !isEnabled()) {
return permissionNode.getDefaultPermission().evaluate(sender); return permissionNode.getDefaultPermission().evaluate(sender);
} }
Player player = (Player) sender; Player player = (Player) sender;
return handler.hasPermission(player, permissionNode); return player.hasPermission(permissionNode.getNode());
} }
/** /**

View File

@ -22,11 +22,6 @@ public class BPermissionsHandler implements PermissionHandler {
return true; return true;
} }
@Override
public boolean hasPermission(Player player, PermissionNode node) {
return ApiLayer.hasPermission(player.getWorld().getName(), CalculableType.USER, player.getName(), node.getNode());
}
@Override @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
return ApiLayer.hasPermission(null, CalculableType.USER, name, node.getNode()); return ApiLayer.hasPermission(null, CalculableType.USER, name, node.getNode());

View File

@ -29,12 +29,6 @@ public class GroupManagerHandler implements PermissionHandler {
return true; 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 @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissionsByPlayerName(name); final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissionsByPlayerName(name);

View File

@ -28,16 +28,6 @@ public interface PermissionHandler {
*/ */
boolean hasGroupSupport(); 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. * Check if a player has permission by their name.
* Used to check an offline player's permission. * Used to check an offline player's permission.

View File

@ -20,11 +20,6 @@ public class PermissionsBukkitHandler implements PermissionHandler {
return true; return true;
} }
@Override
public boolean hasPermission(Player player, PermissionNode node) {
return player.hasPermission(node.getNode());
}
@Override @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
return false; return false;

View File

@ -37,12 +37,6 @@ public class PermissionsExHandler implements PermissionHandler {
return true; return true;
} }
@Override
public boolean hasPermission(Player player, PermissionNode node) {
PermissionUser user = permissionManager.getUser(player);
return user.has(node.getNode());
}
@Override @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
PermissionUser user = permissionManager.getUser(name); PermissionUser user = permissionManager.getUser(name);

View File

@ -44,11 +44,6 @@ public class VaultHandler implements PermissionHandler {
return vaultProvider.hasGroupSupport(); return vaultProvider.hasGroupSupport();
} }
@Override
public boolean hasPermission(Player player, PermissionNode node) {
return vaultProvider.has(player, node.getNode());
}
@Override @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
return vaultProvider.has("", name, node.getNode()); return vaultProvider.has("", name, node.getNode());

View File

@ -33,15 +33,6 @@ public class ZPermissionsHandler implements PermissionHandler {
return true; return true;
} }
@Override
public boolean hasPermission(Player player, PermissionNode node) {
Map<String, Boolean> 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 @Override
public boolean hasPermissionOffline(String name, PermissionNode node) { public boolean hasPermissionOffline(String name, PermissionNode node) {
Map<String, Boolean> perms = zPermissionsService.getPlayerPermissions(null, null, name); Map<String, Boolean> perms = zPermissionsService.getPlayerPermissions(null, null, name);

View File

@ -0,0 +1,7 @@
package fr.xephi.authme.util;
public class RuntimeUtils {
public static int getCoreCount() {
return Runtime.getRuntime().availableProcessors();
}
}

View File

@ -1,74 +1,72 @@
unknown_user: '&fКористувача немає в базі даних' denied_command: '&cДля використання цієї команди потрібна авторизація.'
unsafe_spawn: '&fМісце вашого виходу було небезпечне тому ми телепортували вас на спавн' same_ip_online: 'Перевищено ліміт на авторизацію з одного IP.'
not_logged_in: '&cВи ще не ввійшли!' denied_chat: '&cДля доступу до чату потрібна авторизація.'
reg_voluntarily: '&eЩоб зарєєструватися введіть команду &d"/reg Пароль Повторароля"' kick_antibot: 'На сервер здійснено DDoS атаку. Будь ласка, зачекайте декілька хвилин доки активність спаде.'
usage_log: '&cВикористовуйте: &a/login Пароль &cабо &a/l Пароль' unknown_user: '&cТакого користувача немає в базі даних.'
wrong_pwd: '&cНевірний пароль' unsafe_spawn: '&cВаше останнє місцезнаходження не є безпечним. Вас було переміщено на точку спавна.'
unregistered: '&cВи успішно видалили свій акаунт!' not_logged_in: '&cВи не авторизовані!'
reg_disabled: '&cРеєстрація виключена' reg_voluntarily: 'Можете зареєструватись за допомогою команди "/register <пароль> <повторПароля>"'
valid_session: '&cСесія відкрита' usage_log: '&cСинтаксис: /login <пароль>'
wrong_pwd: '&cНевірний пароль!'
unregistered: '&cДані про реєстрацію успішно видалено'
reg_disabled: '&cВнутрішньоігрову реєстрацію зараз вимкнено.'
valid_session: '&2Сесію відновлено.'
login: '&2Успішна авторизація!' login: '&2Успішна авторизація!'
vb_nonActiv: '&fВаш акаунт не активований. Перевірте свою електронну адресу!' vb_nonActiv: '&cВаш акаунт ще не активовано. Будь ласка, провірте свою електронну пошту!'
user_regged: '&cТакий користувач вже зареєстрований' user_regged: '&cТакий нікнейм вже зареєстровано.'
usage_reg: '&cВикористовуйте: /reg Пароль Повторароля' usage_reg: '&cСинтаксис: /register <пароль> <повторПароля>'
# TODO max_reg: Missing tags %reg_count, %reg_names, %max_acc max_reg: '&cВичерпано ліміт реєстрацій (%reg_count/%max_acc %reg_names) для вашого підключення!'
max_reg: '&fВи перевищили максимальне число реєстрацій на ваш IP' no_perm: '&4У вас недостатньо прав, щоб застосувати цю команду!'
no_perm: '&cУ Вас недостатньо прав' error: '&4[AuthMe] Error. Будь ласка, повідомте адміністратора!'
error: '&fЩось пішло не так; Будь ласка зв`яжіться з адміністратором' login_msg: '&cДля авторизації, введіть команду "/login <пароль>"'
login_msg: '&cДля авторизації введіть "/login Пароль"' reg_msg: '&3Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм!%nl%&3Для цього просто введіть команду "/register <пароль> <повторПароля>"'
reg_msg: '&cДля реєстрації введіть "/reg Пароль Повторароля"' reg_email_msg: 'Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм, використавши свою діючу електронну пошту!%nl%&3Для цього просто введіть команду "/register <e-mail> <e-mail повторно>"'
password_error_nick: '&fВи не можете використати ваш Нікнейм у якості паролю' usage_unreg: '&cСинтаксис: /unregister <пароль>'
password_error_unsafe: '&fВи не можете використувати ненадійний пароль' pwd_changed: '&2Пароль успішно змінено!'
reg_email_msg: '&cДля реєстрації введіть "/reg Email Email"' user_unknown: '&cЦей гравець не є зареєстрованим.'
usage_unreg: '&cВикористовуйте: /unregister Пароль' password_error: '&cПаролі не співпадають!'
pwd_changed: '&cПароль змінено!' password_error_nick: '&cНе можна використовувати свій нікнейм у якості пароля! Будь ласка, виберіть щось інакше...'
user_unknown: '&cТакий користувач не зарєєстрований' password_error_unsafe: '&cЦей пароль надто простий! Будь ласка, придумайте інакший...'
password_error: '&fПаролі не співпадають' password_error_chars: '&4Ваш пароль містить недопустимі символи. Підберіть інакший...%nl%&4(Reg-ex: REG_EX)'
invalid_session: '&fСесія некоректна. Будь ласка зачекайте коли вона закінчиться' invalid_session: '&cСесію було розірвано внаслідок зміни IP.'
reg_only: '&Вхід доступний лише зареєстрованим користувачам. Зареєструватися можна за адресою &9%nl%http://сайт_серверу.com&r' reg_only: '&4Лише зареєстровані гравці можуть підключатись до сервера!%nl%&4Будь ласка, відвідайте http://example.com для реєстрації.'
logged_in: '&2Ви уже ввійшли!' logged_in: '&cВи вже авторизовані!'
logout: '&cВи успішно вийшли' logout: '&2Ви вийшли зі свого акаунта!'
same_nick: '&fГравець з вашим нікнеймом вже грає на сервері' same_nick: '&4Хтось з таким ніком зараз вже сидить на сервері!'
registered: '&cВи успішно зареєстровані!' registered: '&2Реєстрація пройшла успішно!'
pass_len: '&fВаш пароль занадто довгий, або занадто короткий' pass_len: '&cВаш пароль надто короткий або надто довгий! Спробуйте інакший...'
reload: '&fКонфiгурацiя i база даних успiшно перезавнтажені.' reload: '&2Конфігурації та базу даних було успішно перезавантажено!'
timeout: '&fЧас для входу вийшов' timeout: '&4Час для авторизації сплинув. Будь ласка, спробуйте ще раз!'
usage_changepassword: '&fВикористовуйте: /changepassword СтарийПароль НовийПароль' usage_changepassword: '&cСинтаксис: /changepassword <старийПароль> <новийПароль>'
name_len: '&cВаш нікнейм занадто довгий, або занадто короткий' name_len: '&4Ваш нікнейм надто короткий або надто довгий!'
regex: '&cВаш нікнейм містить заборонені символи. Доступні символи: REG_EX' regex: '&4Ваш нікнейм містить недопустимі символи! Reg-ex: REG_EX'
add_email: '&cБудь ласка додайте свою електронну скриньку: /email add ВашEmail ВашEmail' add_email: '&3Не забудьте прив’язати електронну пошту до свого акаунта, за допомогою команди "/email add <e-mail> <e-mail повторно>"'
recovery_email: '&cЗабули пароль? Введіть /email recovery ВашПароль' recovery_email: 'Забули пароль? Можете скористатись командою &9/email recovery &f<&9ваш e-mail&f>'
usage_captcha: '&cБудь ласка введіть капчу: /captcha <theCaptcha>' usage_captcha: '&3Для продовження доведеться ввести капчу — "/captcha <theCaptcha>"'
wrong_captcha: '&cНевірне значення капчи: /captcha THE_CAPTCHA' wrong_captcha: '&cНевірно введена капча! Спробуйте ще раз — "/captcha THE_CAPTCHA"'
valid_captcha: '&cКапча введена вірно!' valid_captcha: '&2Капчу прийнято.'
kick_forvip: '&cVIP зайшов на переповнений сервер!' kick_forvip: '&3Вас кікнуто, внаслідок того, що VIP гравець зайшов на сервер коли небуло вільних місць.'
kick_fullserver: '&cНажаль, сервер переповнений!' kick_fullserver: '&4Сервер переповнено! Доведеться зачекати доки хтось вийде.'
usage_email_add: '&fВикористовуйте: /email add ВашEmail ВашEmail' usage_email_add: '&cСинтаксис: /email add <e-mail> <e-mail повторно>'
usage_email_change: '&fВикористовуйте: /email change СтарийEmail НовийEmail' usage_email_change: '&cСинтаксис: /email change <старий e-mail> <новий e-mail>'
usage_email_recovery: '&fВикористовуйте: /email recovery Email' usage_email_recovery: '&cСинтаксис: /email recovery <e-mail>'
new_email_invalid: '[AuthMe] Новий Email недійсний!' new_email_invalid: '&cНекоректний формат.'
old_email_invalid: '[AuthMe] Старий Email недійсний!' old_email_invalid: '&cСтарий e-mail, що прив’язано до вашого акаунта, відрізняється від введеного вами.'
email_invalid: '[AuthMe] Невірний Email' email_invalid: '&cФормат вказаного e-mailу є некоректним, або його домен внесено до блеклисту.'
email_added: '[AuthMe] &2Email додано!' email_added: '&2Електронну пошту успішно прив’язано до вашого акаунта.'
email_confirm: '[AuthMe] Підтвердіть ваш Email!' email_confirm: '&cАдреси не співпадають.'
email_changed: '[AuthMe] &2Email змінено!' email_changed: '&2E-mail успішно змінено.'
email_send: '[AuthMe] Лист для відновлення надіслано на ваш Email!' email_send: '&2Лист для відновлення доступу надіслано. Будь ласка, провірте свою пошту!'
country_banned: 'Сервер не доступний для вашої країни | Your country is banned from this server' email_exists: '&cЛист для відновлення доступу вже було надіслано! Ви можете деактуалізувати його, використавши наступну команду:'
antibot_auto_enabled: '[AuthMe] AntiBotMod автоматично увімкнений (забагато одначасних з`єднань)!' country_banned: '&4Your country is banned from this server!'
# TODO antibot_auto_disabled: Missing tag %m antibot_auto_enabled: '&4[AntiBotService] Ненормативне число з’єднань. Активовано антибот систему!'
antibot_auto_disabled: '[AuthMe] AntiBotMod автоматично вимкнувся, сподіваємось атака зупинена' antibot_auto_disabled: '&2[AntiBotService] Антибот систему деактивовано після %m хв. активності.'
# TODO email_already_used: '&4The email address is already being used' email_already_used: '&4До цієї електронної пошти прив’язано забагато акаунтів!'
# TODO kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.' two_factor_create: '&2Ваш секретний код — %code %nl%&2Можете зкопіювати його за цим посиланням — %url'
# TODO invalid_name_case: 'You should join using username %valid, not %invalid.' not_owner_error: 'Цей акаунт вам не належить! Будь ласка, оберіть інакший нікнейм!'
# TODO accounts_owned_other: 'The player %name has %count accounts:' invalid_name_case: 'Регістр у вашому нікнеймі відрізняється від регістру при реєстрації.%nl%Поточний регістр: &c%invalid&f. Валідний регістр: &a%valid&f.%nl%Будь ласка, перезайдіть з валідним регістром!'
# TODO kicked_admin_registered: 'An admin just registered you; please log in again' tempban_max_logins: '&cВаш IP тимчасово заблоковано, із‒за багатократного введення хибного пароля.'
# TODO tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.' accounts_owned_self: 'Кількість ваших твінк‒акаунтів: %count:'
# TODO password_error_chars: '&4Your password contains illegal characters. Allowed chars: REG_EX' accounts_owned_other: 'Кількість твінк‒акаунтів гравця %name: %count'
# TODO incomplete_email_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.' kicked_admin_registered: 'Адміністратор вас зареєстрував; Будь ласка, авторизуйтесь знову!'
# TODO denied_chat: '&cIn order to chat you must be authenticated!' incomplete_email_settings: '&4[AuthMe] Error: Не всі необхідні налаштування є встановленими, щоб надсилати електронну пошту. Будь ласка, повідомте адміністратора!'
# 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!'

View File

@ -153,7 +153,6 @@ public class CaptchaManagerTest {
} }
private static void assertHasCount(CaptchaManager manager, String player, Integer count) { private static void assertHasCount(CaptchaManager manager, String player, Integer count) {
@SuppressWarnings("unchecked")
Map<String, Integer> playerCounts = ReflectionTestUtils Map<String, Integer> playerCounts = ReflectionTestUtils
.getFieldValue(CaptchaManager.class, manager, "playerCounts"); .getFieldValue(CaptchaManager.class, manager, "playerCounts");
assertThat(playerCounts.get(player.toLowerCase()), equalTo(count)); assertThat(playerCounts.get(player.toLowerCase()), equalTo(count));

View File

@ -244,9 +244,9 @@ public class TempbanManagerTest {
} }
private static void assertHasNoEntries(TempbanManager manager, String address) { private static void assertHasNoEntries(TempbanManager manager, String address) {
Map<String, Map<?, ?>> playerCounts = ReflectionTestUtils Map<String, Map<String, TimedCounter>> playerCounts = ReflectionTestUtils
.getFieldValue(TempbanManager.class, manager, "ipLoginFailureCounts"); .getFieldValue(TempbanManager.class, manager, "ipLoginFailureCounts");
Map map = playerCounts.get(address); Map<String, TimedCounter> map = playerCounts.get(address);
assertThat(map == null || map.isEmpty(), equalTo(true)); assertThat(map == null || map.isEmpty(), equalTo(true));
} }