From 9774075eb071869fa46e9d3c9c676ca82044a606 Mon Sep 17 00:00:00 2001 From: Edgar Mendoza Date: Sun, 10 Feb 2019 19:54:32 -0600 Subject: [PATCH 1/7] Correct sendNotificationEmail to use plugins.email.to (#188) --- classes/Login.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Login.php b/classes/Login.php index c968627..e3f15fe 100755 --- a/classes/Login.php +++ b/classes/Login.php @@ -338,7 +338,7 @@ public function sendNotificationEmail(User $user) $user->email, $this->grav['base_url_absolute'], ]); - $to = $this->config->get('plugins.email.from'); + $to = $this->config->get('plugins.email.to'); if (empty($to)) { throw new \RuntimeException($this->language->translate('PLUGIN_LOGIN.EMAIL_NOT_CONFIGURED')); From 02053a36ea88ca63688969e681e37e2a801a961f Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Mon, 11 Feb 2019 02:57:23 +0100 Subject: [PATCH 2/7] enable bruteforce protection by default (#195) --- README.md | 6 +++--- classes/Login.php | 4 ++-- login.yaml | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8b1b4f0..0e7d227 100644 --- a/README.md +++ b/README.md @@ -161,10 +161,10 @@ rememberme: timeout: 604800 # Timeout in seconds. Defaults to 1 week name: grav-rememberme # Name prefix of the session cookie -max_pw_resets_count: 0 # Number of password resets in a specific time frame (0 = unlimited) +max_pw_resets_count: 2 # Number of password resets in a specific time frame (0 = unlimited) max_pw_resets_interval: 60 # Time in minutes to track password resets -max_login_count: 0 # Number of failed login attempts in a specific time frame (0 = unlimited) -max_login_interval: 2 # Time in minutes to track login attempts +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 user_registration: enabled: false # Enable User Registration Process diff --git a/classes/Login.php b/classes/Login.php index e3f15fe..6f03c3d 100755 --- a/classes/Login.php +++ b/classes/Login.php @@ -508,8 +508,8 @@ public function getRateLimiter($context, $maxCount = null, $interval = null) $interval = $this->grav['config']->get('plugins.login.max_login_interval', 10); break; case 'pw_resets': - $maxCount = $this->grav['config']->get('plugins.login.max_pw_resets_count', 0); - $interval = $this->grav['config']->get('plugins.login.max_pw_resets_interval', 2); + $maxCount = $this->grav['config']->get('plugins.login.max_pw_resets_count', 2); + $interval = $this->grav['config']->get('plugins.login.max_pw_resets_interval', 60); break; } $this->rateLimiters[$context] = new RateLimiter($context, $maxCount, $interval); diff --git a/login.yaml b/login.yaml index 50da400..cdddab3 100644 --- a/login.yaml +++ b/login.yaml @@ -20,10 +20,10 @@ rememberme: timeout: 604800 # Timeout in seconds. Defaults to 1 week name: grav-rememberme # Name prefix of the session cookie -max_pw_resets_count: 0 # Number of password resets in a specific time frame (0 = unlimited) +max_pw_resets_count: 2 # Number of password resets in a specific time frame (0 = unlimited) max_pw_resets_interval: 60 # Time in minutes to track password resets -max_login_count: 0 # Number of failed login attempts in a specific time frame (0 = unlimited) -max_login_interval: 2 # Time in minutes to track login attempts +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 user_registration: enabled: false # Enable User Registration Process From d39b2363b7e6877cd767f7e326555f678d27e3af Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 10 Feb 2019 19:02:06 -0700 Subject: [PATCH 3/7] set blueprints to use minutes #194 --- CHANGELOG.md | 9 +++++++++ blueprints.yaml | 4 ++-- languages/en.yaml | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b74659..7b6e143 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# v2.8.4 +## mm/dd/2018 + +1. [](#improved) + * Enable "brute force" protection by default [#195](https://github.com/getgrav/grav-plugin-login/pulls/195) +1. [](#bugfix) + * Set security timeouts in blueprints to use `minutes` rather than `seconds` [#194](https://github.com/getgrav/grav-plugin-login/issues/194) + * Send "notification" email to `to` address rather than `from` [#188](https://github.com/getgrav/grav-plugin-login/pulls/188) + # v2.8.3 ## 01/25/2018 diff --git a/blueprints.yaml b/blueprints.yaml index e7a965f..0120645 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -372,7 +372,7 @@ form: size: x-small label: PLUGIN_LOGIN.MAX_RESETS_INTERVAL help: PLUGIN_LOGIN.MAX_RESETS_INTERVAL_HELP - append: PLUGIN_LOGIN.SECONDS + append: PLUGIN_LOGIN.MINUTES validate: type: number min: 1 @@ -392,7 +392,7 @@ form: size: x-small label: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL help: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL_HELP - append: PLUGIN_LOGIN.SECONDS + append: PLUGIN_LOGIN.MINUTES validate: type: number min: 1 diff --git a/languages/en.yaml b/languages/en.yaml index d922e26..583e4ce 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -106,6 +106,7 @@ PLUGIN_LOGIN: MAX_LOGINS_INTERVAL_HELP: "The time interval for the login count value" TOO_MANY_LOGIN_ATTEMPTS: "Too many failed login attempted in the configured time (%s minutes)" SECONDS: "seconds" + MINUTES: "minutes" RESETS: "resets" ATTEMPTS: "attempts" ROUTES: "Routes" From 5e524354a041675ee509fb5df9a9b59d2d8fc48f Mon Sep 17 00:00:00 2001 From: Aleksey Smirnov Date: Wed, 20 Feb 2019 08:13:51 +0300 Subject: [PATCH 4/7] Update Russian translation (#184) * Update Russian translation Added missing lines. * Update ru.yaml --- languages/ru.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/ru.yaml b/languages/ru.yaml index 7ceb1ee..fed863a 100644 --- a/languages/ru.yaml +++ b/languages/ru.yaml @@ -51,6 +51,7 @@ PLUGIN_LOGIN: EMAIL_FOOTER: "GetGrav.org" ACTIVATION_LINK_EXPIRED: "Время ссылки для активации истекло" USER_ACTIVATED_SUCCESSFULLY: "Пользователь успешно активирован" + USER_ACTIVATED_SUCCESSFULLY_NOT_ENABLED: "Аккаунт пользователя активирован, но учетная запись просматривается" INVALID_REQUEST: "Неверный запрос" USER_REGISTRATION: "Регистрация пользователя" USER_REGISTRATION_ENABLED_HELP: "Включить регистрацию пользователя" @@ -127,3 +128,5 @@ PLUGIN_LOGIN: 2FA_SECRET_HELP: "Сканируйте этот QR-код в свое [Приложение аутентификации](https://learn.getgrav.org/admin-panel/2fa#apps). Также рекомендуется сохранить секрет в безопасном месте, если вам прийдется переустановить приложение. Проверьте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для дополнительной информации " 2FA_REGENERATE: "Сгенерировать повторно" BTN_CANCEL: "Отмена" + MANUALLY_ENABLE: "Вручную включить" + MANUALLY_ENABLE_HELP: "При использовании «активации по электронной почте» и «уведомление по электронной почте» вы можете убедиться, что пользователь может самостоятельно активироваться, но пользователь требует ручного включения для входа в систему" From 8f6a9a11f90f16f05e38060db33637dde3b6c30c Mon Sep 17 00:00:00 2001 From: Aleksey Smirnov Date: Wed, 20 Feb 2019 08:14:06 +0300 Subject: [PATCH 5/7] Added Ukrainian translation (#185) --- languages/uk.yaml | 132 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 languages/uk.yaml diff --git a/languages/uk.yaml b/languages/uk.yaml new file mode 100644 index 0000000..fe29a38 --- /dev/null +++ b/languages/uk.yaml @@ -0,0 +1,132 @@ +PLUGIN_LOGIN: + USERNAME: "Логін" + EMAIL: "Email" + USERNAME_EMAIL: "Логін/Email" + PASSWORD: "Пароль" + ACCESS_DENIED: "Доступ заборонено..." + LOGIN_FAILED: "Помилка входу..." + LOGIN_SUCCESSFUL: "Ви успішно увійшли в систему." + BTN_LOGIN: "Увійти" + BTN_LOGOUT: "Вийти" + BTN_FORGOT: "Забув" + BTN_REGISTER: "Реєстрація" + BTN_RESET: "Скидання пароля" + BTN_SEND_INSTRUCTIONS: "Надіслати інструкції по скиданню" + RESET_LINK_EXPIRED: "Час посилання для скидання минув, спробуйте ще раз" + RESET_PASSWORD_RESET: "Пароль був скинутий" + RESET_INVALID_LINK: "Невірне посилання скидання, спробуйте ще раз" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Інструкції щодо скидання пароля були надіслані по електронній пошті" + FORGOT_FAILED_TO_EMAIL: "Не вдалося надіслати інструкції електронною поштою, повторіть спробу пізніше" + FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Не вдається скинути пароль для %s, адреса електронної пошти не встановлена" + FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Неможливо скинути пароль для %s, цей email пов'язаний з віддаленим обліковим записом" + FORGOT_USERNAME_DOES_NOT_EXIST: "Користувач з ім'ям %s не існує" + FORGOT_EMAIL_NOT_CONFIGURED: "Неможливо скинути пароль. Цей сайт не налаштований для надіслання листів" + FORGOT_EMAIL_SUBJECT: "%s Запит на скидання пароля" + FORGOT_EMAIL_BODY: "

Відновлення паролю

Шановний %1$s,

Був зроблений запит для скидання пароля від %4$s.


Нажмите, чтобы сбросить пароль

Или скопируйте следующий URL-адрес в адресную строку браузера:

%2$s


С уважением,

%3$s

" + SESSION: "“Запам'ятати мене”-Сесія" + REMEMBER_ME: "Запам'ятати мене" + REMEMBER_ME_HELP: "Встановлює постійний файл cookie у вашому браузері, щоб дозволити постійну аутентифікацію входу між сеансами." + REMEMBER_ME_STOLEN_COOKIE: "Хтось ще використовував вашу реєстраційну інформацію для доступу до цієї сторінки! Всі сеанси були відключені. Увійдіть до свого облікового запису та перевірте свої дані." + BUILTIN_CSS: "Використовувати вбудований CSS" + BUILTIN_CSS_HELP: "Використовувати CSS, наданий плагіном адміністратора." + ROUTE: "Шлях сторінки входу" + ROUTE_HELP: "Шлях до користувальницької сторінці входу, яку надає ваша тема" + ROUTE_REGISTER: "Шлях реєстрації" + ROUTE_REGISTER_HELP: "Шлях до користувальницької сторінці реєстрації. Заповніть, якщо ви хочете використовувати вбудовану сторінку реєстрації. Залиште його порожнім, якщо у вас є власна реєстраційна форма" + USERNAME_NOT_VALID: "Ім'я користувача має бути від 3 до 16 символів, включаючи малі літери, цифри, символи підкреслення та дефіси. Великі літери, пробіли та спеціальні символи не допускаються" + USERNAME_NOT_AVAILABLE: "Ім'я користувача %s вже існує, виберіть інше ім'я користувача" + EMAIL_NOT_AVAILABLE: "Адреса електронної пошти %s вже існує, виберіть іншу адресу електронної пошти" + PASSWORD_NOT_VALID: "Пароль повинен містити як мінімум одне число, одну прописну і малу літеру, і бути не менше 8 символів" + PASSWORDS_DO_NOT_MATCH: "Паролі не співпадають. Двічі перевірте, що ви двічі ввели той же пароль" + USER_NEEDS_EMAIL_FIELD: "Користувачеві потрібно поле електронної пошти" + EMAIL_SENDING_FAILURE: "Помилка під час надіслання листа" + ACTIVATION_EMAIL_SUBJECT: "Активуйте свій обліковий запис %s" + ACTIVATION_EMAIL_BODY: "Привіт %s, перейдіть сюди для активації вашого облікового запису %s" + ACTIVATION_NOTICE_MSG: "Привіт %s, ваш обліковий запис створено, будь ласка перевірте електронну пошту, щоб повністю його активувати" + WELCOME_EMAIL_SUBJECT: "Ласкаво просимо в %s" + WELCOME_EMAIL_BODY: "Привіт %s, ласкаво просимо в %s!" + WELCOME_NOTICE_MSG: "Привіт %s, ваш обліковий запис був успішно створений" + NOTIFICATION_EMAIL_SUBJECT: "Новий користувач %s" + NOTIFICATION_EMAIL_BODY: "Привіт, новий користувач, зареєстрований на %s. Ім'я користувача: %s, email: %s" + EMAIL_FOOTER: "GetGrav.org" + ACTIVATION_LINK_EXPIRED: "Час посилання для активації минув" + USER_ACTIVATED_SUCCESSFULLY: "Користувач успішно активований" + USER_ACTIVATED_SUCCESSFULLY_NOT_ENABLED: "Аккаунт користувача активований, але обліковий запис проглядається" + INVALID_REQUEST: "Невірний запит" + USER_REGISTRATION: "Реєстрація користувача" + USER_REGISTRATION_ENABLED_HELP: "Включити реєстрацію користувача" + VALIDATE_PASSWORD1_AND_PASSWORD2: "Подвійна перевірка введеного пароля" + VALIDATE_PASSWORD1_AND_PASSWORD2_HELP: "Підтвердити і порівняти два різних поля для паролів з іменами `password1` і` password2`. Увімкніть це, якщо у вас є два поля пароля в реєстраційній формі" + SET_USER_DISABLED: "Встановити користувача як відключений" + SET_USER_DISABLED_HELP: "Найкраще використовувати електронну пошту «Надіслати електронну пошту активації». Додає користувача в Grav, але встановлює його як відключений" + LOGIN_AFTER_REGISTRATION: "Вхід в систему після реєстрації" + LOGIN_AFTER_REGISTRATION_HELP: "Автоматичний вхід в систему після реєстрації. Якщо потрібна активація електронної пошти, користувач буде входити в систему відразу після активації облікового запису" + SEND_ACTIVATION_EMAIL: "Надіслати лист активації" + SEND_ACTIVATION_EMAIL_HELP: "Надіслати електронного листа користувачу для активації облікового запису. Увімкніть параметр «Встановити користувача як відключений» при використанні цієї функції, щоб користувач був відключений, і для активації облікового запису буде надіслано повідомлення електронної пошти" + SEND_NOTIFICATION_EMAIL: "Надіслати повідомлення по електронній пошті" + SEND_NOTIFICATION_EMAIL_HELP: "Повідомляє адміністратору сайту про реєстрацію нового користувача. Електронна пошта буде відправлена в поле «Кому» в конфігурації плагіна електронної пошти" + SEND_WELCOME_EMAIL: "Надіслати вітальний лист" + SEND_WELCOME_EMAIL_HELP: "Надсилає електронного листа знову зареєстрованому користувачу" + DEFAULT_VALUES: "Значення за замовчуванням" + DEFAULT_VALUES_HELP: "Список назв полів і пов'язаних значень, які будуть додані в профіль користувача (файл yaml) за замовчуванням, без налаштування користувачем. Розділіть декілька значень комою, без пробілів між значеннями" + ADDITIONAL_PARAM_KEY: "Параметр" + ADDITIONAL_PARAM_VALUE: "Значення" + REGISTRATION_FIELDS: "Реєстраційні поля" + REGISTRATION_FIELDS_HELP: "Додайте поля, які будуть додані в файл yaml користувача. Поля, не перераховані тут, не будуть додані, навіть якщо вони присутні в реєстраційній формі" + REGISTRATION_FIELD_KEY: "Ім'я поля" + REDIRECT_AFTER_LOGIN: "Перенаправлення після входу в систему" + REDIRECT_AFTER_LOGIN_HELP: "Призначений для користувача маршрут для перенаправлення після входу в систему" + REDIRECT_AFTER_LOGOUT: "Перенаправлення після виходу з системи" + REDIRECT_AFTER_LOGOUT_HELP: "Призначений для користувача маршрут для перенаправлення після виходу з системи" + REDIRECT_AFTER_REGISTRATION: "Перенаправлення після реєстрації" + REDIRECT_AFTER_REGISTRATION_HELP: "Призначений для користувача маршрут для перенаправлення після реєстрації" + OPTIONS: "Опції" + EMAIL_VALIDATION_MESSAGE: "Адреса ел. пошти повинна бути дійсною" + PASSWORD_VALIDATION_MESSAGE: "Пароль повинен містити як мінімум одне число, одну прописну і малу літеру і бути не менше 8 символів" + TIMEOUT_HELP: "Встановлює тайм-аут сеансу в секундах, коли функція «Запам'ятати мене» включена і встановлена користувачем. Мінімум 604800, що означає 1 тиждень" + GROUPS_HELP: "Список груп, в які увійде новий зареєстрований користувач" + SITE_ACCESS_HELP: "Список рівнів доступу до сайту, зареєстрованих користувачів. Приклад: `login` ->` true`" + WELCOME: "Ласкаво просимо" + REDIRECT_AFTER_ACTIVATION: "Перенаправлення після активації користувача" + REDIRECT_AFTER_ACTIVATION_HELP: "Використовується, якщо користувачеві потрібно активувати обліковий запис по електронній пошті. Після активації цей маршрут буде показаний" + REGISTRATION_DISABLED: "Реєстрація відключена" + USE_PARENT_ACL_LABEL: "Використовувати батьківські правила доступу" + USE_PARENT_ACL_HELP: "Перевірте правила доступу до батьків, якщо правила не визначені" + PROTECT_PROTECTED_PAGE_MEDIA_LABEL: "Захист захищених сторінок." + PROTECT_PROTECTED_PAGE_MEDIA_HELP: "Якщо цей параметр включений, то доступ до захищеної сторінці для входу в систему також захищений паролем, і його не можна побачити, якщо він не зареєстрований" + SECURITY_TAB: "Безпека" + MAX_RESETS_COUNT: "Максимальна кількість скидання пароля" + MAX_RESETS_COUNT_HELP: "Налаштування захисту пароля від флуду (0 - не обмежена)" + MAX_RESETS_INTERVAL: "Максимальний інтервал скидання пароля" + MAX_RESETS_INTERVAL_HELP: "Інтервал часу для максимальної кількості скидання пароля" + FORGOT_CANNOT_RESET_IT_IS_BLOCKED: "Неможливо скинути пароль для %s, функція скидання пароля тимчасово відключена, спробуйте пізніше (максимум %s хвилин)" + MAX_LOGINS_COUNT: "Максимальна кількість входів" + MAX_LOGINS_COUNT_HELP: "Налаштування захисту від флуду (0 - не обмежена)" + MAX_LOGINS_INTERVAL: "Максимальний інтервал входу" + MAX_LOGINS_INTERVAL_HELP: "Часовий інтервал для значення лічильника входу" + TOO_MANY_LOGIN_ATTEMPTS: "Занадто багато невдалих спроб входу в налаштований час (%s хвилин)" + SECONDS: "секунд" + RESETS: "скидань" + ATTEMPTS: "спроб" + ROUTES: "Маршрути" + ROUTE_FORGOT: "Забули пароль" + ROUTE_RESET: "Скидання пароля" + ROUTE_PROFILE: "Профілю користувача" + ROUTE_ACTIVATE: "Активації користувача" + LOGGED_OUT: "Ви успішно вийшли з системи..." + PAGE_RESTRICTED: "Доступ обмежений, увійдіть в систему..." + DYNAMIC_VISIBILITY: "Динамічна видимість сторінки" + DYNAMIC_VISIBILITY_HELP: "Дозволяє динамічно обробляти видимість сторінки на основі правил доступу, якщо для параметра login.visibility_requires_access встановлено значення true на сторінці" + USER_IS_REMOTE_ONLY: "Цей користувач аутентифікований за допомогою віддаленого сервісу, тому профіль не може бути збережений" + 2FA_TITLE: "2-факторна аутентифікація" + 2FA_INSTRUCTIONS: "##### 2-факторна аутентифікація\nУ вашому обліковому запису включена **2FA**. Будь ласка, використовуйте свою **2FA** програму для введення цього **6-значного коду** для завершення процесу входу в систему." + 2FA_REGEN_HINT: "Щоб відновити секрет, вам буде потрібно оновити програму для аутентифікації" + 2FA_FAILED: "Неприпустимий код перевірки справжності 2-факторної аутентифікації, спробуйте ще раз...." + 2FA_ENABLED: "2FA Включена" + 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) для додаткової інформації " + 2FA_REGENERATE: "Згенерувати повторно" + BTN_CANCEL: "Скасування" + MANUALLY_ENABLE: "Вручну включити" + MANUALLY_ENABLE_HELP: "При використанні «активації по електронній пошті» і «повідомлення по електронній пошті» ви можете переконатися, що користувач може самостійно активуватися, але користувач вимагає ручного включення для входу в систему" From 3d157d9162e35a01aea980f22fcc213f90b91dec Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 20 Mar 2019 11:52:16 -0600 Subject: [PATCH 6/7] updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b6e143..36f70a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ 1. [](#improved) * Enable "brute force" protection by default [#195](https://github.com/getgrav/grav-plugin-login/pulls/195) + * UPdated various language translations 1. [](#bugfix) * Set security timeouts in blueprints to use `minutes` rather than `seconds` [#194](https://github.com/getgrav/grav-plugin-login/issues/194) * Send "notification" email to `to` address rather than `from` [#188](https://github.com/getgrav/grav-plugin-login/pulls/188) From f0bf71497615054393026f4b7ca077f13dbd34e6 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 20 Mar 2019 11:53:14 -0600 Subject: [PATCH 7/7] prepare for release --- CHANGELOG.md | 4 ++-- blueprints.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36f70a7..b28fa66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # v2.8.4 -## mm/dd/2018 +## 03/20/2019 1. [](#improved) * Enable "brute force" protection by default [#195](https://github.com/getgrav/grav-plugin-login/pulls/195) @@ -9,7 +9,7 @@ * Send "notification" email to `to` address rather than `from` [#188](https://github.com/getgrav/grav-plugin-login/pulls/188) # v2.8.3 -## 01/25/2018 +## 01/25/2019 1. [](#new) * Wrap data in `onUserLoginRegisterData` event in object to allow reference diff --git a/blueprints.yaml b/blueprints.yaml index 0120645..15356fa 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,5 +1,5 @@ name: Login -version: 2.8.3 +version: 2.8.4 description: Enables user authentication and login screen. icon: sign-in author: