diff --git a/CHANGELOG.md b/CHANGELOG.md index 6536c8d..886f12f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# 3.0.2 +## 05/09/2019 + +1. [](#new) + * Added `ru` and `uk` translations [#208](https://github.com/getgrav/grav-plugin-login/pulls/208) +1. [](#improved) + * Fixed typo in README.md + * Added support for IPv6 addresses for login rate limiting @Vivalldi [#204](https://github.com/getgrav/grav-plugin-login/issues/204) + # 3.0.1 ## 04/17/2019 diff --git a/README.md b/README.md index 0e7d227..7e7a592 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ A good location is probably to add this right above where your content is going # Creating Users -You can either use the built-in CLI capabilities, or you create a user manually by creating a new YAML file in your `user/acounts` folder. +You can either use the built-in CLI capabilities, or you create a user manually by creating a new YAML file in your `user/accounts` folder. # CLI Usage diff --git a/blueprints.yaml b/blueprints.yaml index 9b958e4..29cc038 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,5 +1,5 @@ name: Login -version: 3.0.1 +version: 3.0.2 testing: false description: Enables user authentication and login screen. icon: sign-in @@ -13,7 +13,7 @@ bugs: https://github.com/getgrav/grav-plugin-login/issues license: MIT dependencies: - - { name: grav, version: '>=1.6.0' } + - { name: grav, version: '>=1.6.7' } - { name: form, version: '>=3.0.0' } - { name: email, version: '>=3.0.0' } @@ -409,3 +409,13 @@ form: validate: type: number min: 1 + + ipv6_subnet_size: + type: number + size: x-small + label: PLUGIN_LOGIN.IPV6_SUBNET_SIZE + help: PLUGIN_LOGIN.IPV6_SUBNET_SIZE_HELP + append: PLUGIN_LOGIN.MINUTES + validate: + type: number + min: 1 diff --git a/classes/Controller.php b/classes/Controller.php index 16aeabc..fd9fd78 100644 --- a/classes/Controller.php +++ b/classes/Controller.php @@ -129,7 +129,9 @@ public function taskLogin() $messages = $this->grav['messages']; $userKey = (string)($this->post['username'] ?? ''); - $ipKey = Uri::ip(); + $ip = Uri::ip(); + $isIPv4 = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); + $ipKey = $isIPv4 ? $ip : Utils::getSubnet($ip, $this->grav['config']->get('plugins.login.ipv6_subnet_size')); // Is twofa enabled? $twofa = $this->grav['config']->get('plugins.login.twofa_enabled', false); diff --git a/languages/en.yaml b/languages/en.yaml index 7163657..95bfa31 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -131,4 +131,6 @@ PLUGIN_LOGIN: 2FA_REGENERATE: "Regenerate" BTN_CANCEL: "Cancel" MANUALLY_ENABLE: "Manually Enable" - MANUALLY_ENABLE_HELP: "When using 'activation email' and 'notification email', you can ensure the user can self activate, but requires manually enabling the user to login" \ No newline at end of file + MANUALLY_ENABLE_HELP: "When using 'activation email' and 'notification email', you can ensure the user can self activate, but requires manually enabling the user to login" + IPV6_SUBNET_SIZE: "IPv6 Subnet Size" + IPV6_SUBNET_SIZE_HELP: "The number of IPv6 addresses typically assigned to a machine" \ No newline at end of file diff --git a/languages/ru.yaml b/languages/ru.yaml index fed863a..9e35ee2 100644 --- a/languages/ru.yaml +++ b/languages/ru.yaml @@ -106,6 +106,7 @@ PLUGIN_LOGIN: MAX_LOGINS_INTERVAL_HELP: "Временной интервал для значения счетчика входа" TOO_MANY_LOGIN_ATTEMPTS: "Слишком много неудачных попыток входа в настроенное время (%s минут)" SECONDS: "секунд" + MINUTES: "минут" RESETS: "сбросов" ATTEMPTS: "попыток" ROUTES: "Маршруты" @@ -123,6 +124,7 @@ PLUGIN_LOGIN: 2FA_REGEN_HINT: "Чтобы восстановить секрет, вам потребуется обновить приложение для аутентификации" 2FA_FAILED: "Недопустимый код проверки подлинности 2-факторной аутентификации, повторите попытку...." 2FA_ENABLED: "2FA Включена" + 2FA_ENABLED_HELP: "Включает двухфакторную аутентификацию для всех пользователей" 2FA_CODE_INPUT: "000000" 2FA_SECRET: "2FA Секрет" 2FA_SECRET_HELP: "Сканируйте этот QR-код в свое [Приложение аутентификации](https://learn.getgrav.org/admin-panel/2fa#apps). Также рекомендуется сохранить секрет в безопасном месте, если вам прийдется переустановить приложение. Проверьте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для дополнительной информации " diff --git a/languages/uk.yaml b/languages/uk.yaml index fe29a38..67a6bdd 100644 --- a/languages/uk.yaml +++ b/languages/uk.yaml @@ -106,6 +106,7 @@ PLUGIN_LOGIN: MAX_LOGINS_INTERVAL_HELP: "Часовий інтервал для значення лічильника входу" TOO_MANY_LOGIN_ATTEMPTS: "Занадто багато невдалих спроб входу в налаштований час (%s хвилин)" SECONDS: "секунд" + MINUTES: "хвилин" RESETS: "скидань" ATTEMPTS: "спроб" ROUTES: "Маршрути" @@ -122,7 +123,8 @@ PLUGIN_LOGIN: 2FA_INSTRUCTIONS: "##### 2-факторна аутентифікація\nУ вашому обліковому запису включена **2FA**. Будь ласка, використовуйте свою **2FA** програму для введення цього **6-значного коду** для завершення процесу входу в систему." 2FA_REGEN_HINT: "Щоб відновити секрет, вам буде потрібно оновити програму для аутентифікації" 2FA_FAILED: "Неприпустимий код перевірки справжності 2-факторної аутентифікації, спробуйте ще раз...." - 2FA_ENABLED: "2FA Включена" + 2FA_ENABLED: "2FA Увімкнено" + 2FA_ENABLED_HELP: "Вмикає двухфакторную аутентифікацію для всіх користувачів" 2FA_CODE_INPUT: "000000" 2FA_SECRET: "2FA Секрет" 2FA_SECRET_HELP: "Відскануйте цей QR-код у свою [Програму аутентифікації](https://learn.getgrav.org/admin-panel/2fa#apps). Також рекомендується зберегти секрет в безпечному місці, якщо вам доведеться перевстановити програму. Перевірте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для додаткової інформації " diff --git a/login.yaml b/login.yaml index 6409c00..2a97989 100644 --- a/login.yaml +++ b/login.yaml @@ -25,6 +25,7 @@ max_pw_resets_count: 2 # Number of password resets in a spe max_pw_resets_interval: 60 # Time in minutes to track password resets max_login_count: 5 # Number of failed login attempts in a specific time frame (0 = unlimited) max_login_interval: 10 # Time in minutes to track login attempts +ipv6_subnet_size: 64 # Size of IPv6 block to track login attempts user_registration: enabled: false # Enable User Registration Process