diff --git a/plugins/admin/CHANGELOG.md b/plugins/admin/CHANGELOG.md index 5183336..a7e2136 100644 --- a/plugins/admin/CHANGELOG.md +++ b/plugins/admin/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.10.42 +## 06/14/2023 + +1. [](#new) + * Added a couple of string translations + # v1.10.41.2 ## 05/11/2023 diff --git a/plugins/admin/blueprints.yaml b/plugins/admin/blueprints.yaml index ab6f115..41dae90 100644 --- a/plugins/admin/blueprints.yaml +++ b/plugins/admin/blueprints.yaml @@ -1,7 +1,7 @@ name: Admin Panel slug: admin type: plugin -version: 1.10.41.2 +version: 1.10.42 description: Adds an advanced administration panel to manage your site icon: empire author: @@ -15,7 +15,7 @@ docs: https://github.com/getgrav/grav-plugin-admin/blob/develop/README.md license: MIT dependencies: - - { name: grav, version: '>=1.7.41' } + - { name: grav, version: '>=1.7.42' } - { name: form, version: '>=6.0.1' } - { name: login, version: '>=3.7.0' } - { name: email, version: '>=3.1.6' } diff --git a/plugins/admin/languages/en.yaml b/plugins/admin/languages/en.yaml index 288c682..1235a11 100644 --- a/plugins/admin/languages/en.yaml +++ b/plugins/admin/languages/en.yaml @@ -107,7 +107,6 @@ PLUGIN_ADMIN: BACKUP_DELETED: "Backup Successfully Deleted" BACKUP_NOT_FOUND: "Backup Not Found" BACKUP_DATE: "Backup Date" - STATISTICS: "Statistics" VIEWS_STATISTICS: "Page View Statistics" TODAY: "Today" @@ -207,11 +206,13 @@ PLUGIN_ADMIN: PASSWORD: "Password" PASSWORD_CONFIRM: "Confirm Password" TITLE: "Title" - LANGUAGE: "Language" ACCOUNT: "Account" EMAIL_VALIDATION_MESSAGE: "Must be a valid email address" PASSWORD_VALIDATION_MESSAGE: "Password must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters" + LANGUAGE: "Language" LANGUAGE_HELP: "Set the favorite language" + LANGUAGE_DEBUG: "Debug language" + LANGUAGE_DEBUG_HELP: "Enable the debug of languages which are using the |t twig filter by adding a span around them that can be styled to help diagnose issues" MEDIA: "Media" DEFAULTS: "Defaults" SITE_TITLE: "Site Title" diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index bcfb483..21f7dfc 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.7.1 +## 06/14/2023 + +1. [](#improved) + * Removed platform-config [#81](https://github.com/getgrav/grav-plugin-devtools/pull/81) + # v1.7.0 ## 02/15/2023 diff --git a/plugins/devtools/blueprints.yaml b/plugins/devtools/blueprints.yaml index 6f026d0..98eda91 100644 --- a/plugins/devtools/blueprints.yaml +++ b/plugins/devtools/blueprints.yaml @@ -1,7 +1,7 @@ name: DevTools slug: devtools type: plugin -version: 1.7.0 +version: 1.7.1 description: Plugin and Theme scaffolding utilities icon: cogs author: diff --git a/plugins/devtools/classes/DevToolsCommand.php b/plugins/devtools/classes/DevToolsCommand.php index 9d29e5a..ea036f9 100644 --- a/plugins/devtools/classes/DevToolsCommand.php +++ b/plugins/devtools/classes/DevToolsCommand.php @@ -308,11 +308,16 @@ class DevToolsCommand extends ConsoleCommand { switch ($type) { case 'name': - // Check If name + // Check if name is empty if ($value === null || trim($value) === '') { throw new \RuntimeException('Name cannot be empty'); } + // Check if name starts with a numeric character + if (is_numeric($value[0])) { + throw new \RuntimeException('Name must start with an alphabetic character (A-Z, a-z)'); + } + if (!$this->options['offline']) { // Check for name collision with online gpm. if (false !== $this->gpm->findPackage($value)) { diff --git a/plugins/devtools/components/plugin/blank/composer.json.twig b/plugins/devtools/components/plugin/blank/composer.json.twig index 14cfe4f..28d8691 100644 --- a/plugins/devtools/components/plugin/blank/composer.json.twig +++ b/plugins/devtools/components/plugin/blank/composer.json.twig @@ -21,10 +21,5 @@ "Grav\\Plugin\\{{ component.name|camelize }}\\": "classes/" }, "classmap": ["{{ component.name|hyphenize }}.php"] - }, - "config": { - "platform": { - "php": "7.1.3" - } } } diff --git a/plugins/devtools/components/plugin/flex/composer.json.twig b/plugins/devtools/components/plugin/flex/composer.json.twig index 14cfe4f..28d8691 100644 --- a/plugins/devtools/components/plugin/flex/composer.json.twig +++ b/plugins/devtools/components/plugin/flex/composer.json.twig @@ -21,10 +21,5 @@ "Grav\\Plugin\\{{ component.name|camelize }}\\": "classes/" }, "classmap": ["{{ component.name|hyphenize }}.php"] - }, - "config": { - "platform": { - "php": "7.1.3" - } } } diff --git a/plugins/login/CHANGELOG.md b/plugins/login/CHANGELOG.md index 6bc6ad4..bd230d5 100644 --- a/plugins/login/CHANGELOG.md +++ b/plugins/login/CHANGELOG.md @@ -1,3 +1,10 @@ +# v3.7.5 +## 06/14/2023 + +1. [](#bugfix) + * Sanitized `email` during the "forgot password" process to protect against XSS attacks + * Fixed an account enumeration vulneratiblity in forgot password [#293](https://github.com/getgrav/grav-plugin-login/pull/293) + # v3.7.4 ## 05/09/2023 diff --git a/plugins/login/blueprints.yaml b/plugins/login/blueprints.yaml index e6b1b20..bd7b61b 100644 --- a/plugins/login/blueprints.yaml +++ b/plugins/login/blueprints.yaml @@ -1,7 +1,7 @@ name: Login slug: login type: plugin -version: 3.7.4 +version: 3.7.5 testing: false description: Enables user authentication and login screen. icon: sign-in diff --git a/plugins/login/classes/Controller.php b/plugins/login/classes/Controller.php index e5cffda..9421cdd 100644 --- a/plugins/login/classes/Controller.php +++ b/plugins/login/classes/Controller.php @@ -351,6 +351,10 @@ class Controller $users = $this->grav['accounts']; $email = $data['email'] ?? ''; + + // Sanitize $email + $email = htmlspecialchars(strip_tags($email), ENT_QUOTES, 'UTF-8'); + $user = !empty($email) ? $users->find($email, ['email']) : null; /** @var Language $language */ @@ -364,29 +368,6 @@ class Controller return true; } - if (!$user || !$user->exists()) { - $messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_USERNAME_DOES_NOT_EXIST', $email]), 'error'); - $this->setRedirect($this->login->getRoute('forgot') ?? '/'); - - return true; - } - - if (empty($user->email)) { - $messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $email]), - 'error'); - $this->setRedirect($this->login->getRoute('forgot') ?? '/'); - - return true; - } - - if (empty($user->password) && empty($user->hashed_password)) { - $messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD', $email]), - 'error'); - $this->setRedirect($this->login->getRoute('forgot') ?? '/'); - - return true; - } - $from = $config->get('plugins.email.from'); if (empty($from)) { diff --git a/plugins/login/languages/de.yaml b/plugins/login/languages/de.yaml index 1af8a8b..c353d84 100644 --- a/plugins/login/languages/de.yaml +++ b/plugins/login/languages/de.yaml @@ -21,9 +21,6 @@ PLUGIN_LOGIN: RESET_INVALID_LINK: "Es wurde ein ungültiger Link zum Zurücksetzen verwendet. Bitte erneut versuchen." FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Die Anweisungen zum Zurücksetzen Ihres Passworts wurden per E-Mail gesendet." FORGOT_FAILED_TO_EMAIL: "Das Versenden der Anweisung per E-Mail ist fehlgeschlagen. Bitte später erneut versuchen." - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Das Passwort für %s kann nicht zurückgesetzt werden. Es ist keine E-Mail-Adresse hinterlegt." - FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Das Passwort für %s kann nicht zurückgesetzt werden. Diese E-Mail ist mit einem Remote-Account verknüpft." - FORGOT_USERNAME_DOES_NOT_EXIST: "Der Benutzer mit dem Benutzername %s existiert nicht." FORGOT_EMAIL_NOT_CONFIGURED: "Das Passwort kann nicht zurückgesetzt werden, da die Website ist nicht zum Versenden von E-Mails konfiguriert." FORGOT_EMAIL_SUBJECT: "Passwort zurückzusetzen für %s" FORGOT_EMAIL_BODY: "

Passwort Zurücksetzen

Hallo %1$s,

Es wurde ein Anfrage auf %4$s gestellt, um Ihr Passwort zu ändern.


Klicken Sie hier, um Ihr Passwort zurückzusetzen

Alternativ kopieren Sie die folgende URL in die Adresszeile Ihres Browsers:

%2$s


Mit freundlichen Grüßen,

%3$s

" diff --git a/plugins/login/languages/en.yaml b/plugins/login/languages/en.yaml index 895ba26..c3eb1f1 100644 --- a/plugins/login/languages/en.yaml +++ b/plugins/login/languages/en.yaml @@ -18,11 +18,8 @@ PLUGIN_LOGIN: RESET_LINK_EXPIRED: "Reset link has expired, please try again" RESET_PASSWORD_RESET: "Password has been reset" RESET_INVALID_LINK: "Invalid reset link used, please try again" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instructions to reset your password have been sent via email" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "If an account exists, instructions on resetting your password have been sent via email" FORGOT_FAILED_TO_EMAIL: "Failed to email instructions, please try again later" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Cannot reset password for %s, no email address is set" - FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Cannot reset password for %s, this email is associated with a remote account" - FORGOT_USERNAME_DOES_NOT_EXIST: "User with username %s does not exist" FORGOT_EMAIL_NOT_CONFIGURED: "Cannot reset password. This site is not configured to send emails" FORGOT_EMAIL_SUBJECT: "%s Password Reset Request" FORGOT_EMAIL_BODY: "

Password Reset

Dear %1$s,

A request was made on %4$s to reset your password.


Click this to reset your password

Alternatively, copy the following URL into your browser's address bar:

%2$s


Kind regards,

%3$s

" diff --git a/plugins/login/languages/es.yaml b/plugins/login/languages/es.yaml index eb9a27d..ed4aa95 100644 --- a/plugins/login/languages/es.yaml +++ b/plugins/login/languages/es.yaml @@ -19,10 +19,8 @@ PLUGIN_LOGIN: RESET_LINK_EXPIRED: "El enlace para la restauración ha caducado, inténtelo de nuevo." RESET_PASSWORD_RESET: "La contraseña ha sido restaurada" RESET_INVALID_LINK: "Ha utilizado un enlace de restauración inválido, inténtelo de nuevo." - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instructions to reset your password have been sent via email" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "If an account exists, instructions on resetting your password have been sent via email" FORGOT_FAILED_TO_EMAIL: "No se ha podido enviar el email con instrucciones, inténtelo de nuevo." - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "No se puede restaurar la contraseña para %s, no hay dirección de email." - FORGOT_USERNAME_DOES_NOT_EXIST: "No existe ningún usuario con el nombre %s." FORGOT_EMAIL_NOT_CONFIGURED: "No se puede restaurar la contraseña. Este sitio no está configurado para enviar emails." FORGOT_EMAIL_SUBJECT: "%s solicitud de restauración de contraseña" FORGOT_EMAIL_BODY: "

Restauración de contraseña

Estimado/a %1$s,

Se ha realizado una petición de restauración de contraseña en %4$s.


Pulse aquí para restaurar su contraseña

Como alternativa puede copiar la siguiente URL en la barra de direcciones de su navegador:

%2$s


Saludos cordiales,

%3$s

" diff --git a/plugins/login/languages/fr.yaml b/plugins/login/languages/fr.yaml index f98c5ac..8ee745f 100644 --- a/plugins/login/languages/fr.yaml +++ b/plugins/login/languages/fr.yaml @@ -19,8 +19,6 @@ PLUGIN_LOGIN: RESET_INVALID_LINK: "Le lien de réinitialisation utilisé n’est pas valide, veuillez réessayer" FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Les instructions pour la réinitialisation de votre mot de passe ont été envoyées par e-mail" FORGOT_FAILED_TO_EMAIL: "Impossible d’envoyer les instructions, veuillez réessayer ultérieurement" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Impossible de réinitialiser le mot de passe pour %s, aucune adresse e-mail n’a été paramétrée" - FORGOT_USERNAME_DOES_NOT_EXIST: "L’utilisateur avec le nom d’utilisateur %s n’existe pas" FORGOT_EMAIL_NOT_CONFIGURED: "Impossible de réinitialiser le mot de passe. Ce site n’est pas configuré pour envoyer des e-mails" FORGOT_EMAIL_SUBJECT: "Demande de réinitialisation de mot de passe %s" FORGOT_EMAIL_BODY: "

Réinitialisation de mot de passe

%1$s,

Une demande a été faite sur %4$s pour la réinitialisation de votre mot de passe.


Cliquez ici pour réinitialiser votre mot de passe

Vous pouvez également copier l’URL suivante dans la barre d’adresse de votre navigateur :

%2$s


Cordialement,

%3$s

" diff --git a/plugins/login/languages/lt.yaml b/plugins/login/languages/lt.yaml index 12be54a..b29415e 100644 --- a/plugins/login/languages/lt.yaml +++ b/plugins/login/languages/lt.yaml @@ -18,12 +18,9 @@ PLUGIN_LOGIN: RESET_LINK_EXPIRED: "Atstatymo nuoroda nebegalioja, bandykite dar kartą" RESET_PASSWORD_RESET: "Slaptažodis atstatytas" RESET_INVALID_LINK: "Panaudota neteisinga atstatymo nuoroda, bandykite dar kartą" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Slaptažodžio atstatymo instrukcijos buvo išsiųstos el. paštu" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Jeigu vartotojo paskyra egzistuoja, slaptažodžio atstatymo instrukcijos buvo išsiųstos el. paštu" FORGOT_FAILED_TO_EMAIL: "Instrukcijų išsiuntimas nepavyko, bandykite dar kartą" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Negalima atstatyti %s slaptažodžio, nenurodytas el. paštas" - FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Negalima atstatyti %s slaptažodžio, šis el. paštas susietas su nuotoline paskyra" - FORGOT_USERNAME_DOES_NOT_EXIST: "Vartotojas vardu %s neegzistuoja" - FORGOT_EMAIL_NOT_CONFIGURED: "Negalima tastatyti slaptažodžio. Ši svetainė nenustatyta siųsti el. laiškus" + FORGOT_EMAIL_NOT_CONFIGURED: "Negalima atstatyti slaptažodžio. Ši svetainė nenustatyta siųsti el. laiškus" FORGOT_EMAIL_SUBJECT: "%s slaptažodžio atstatymo užklausa" FORGOT_EMAIL_BODY: "

Slaptažodis atstatytas

Miela(s) %1$s,

%4$s buvo gauta užklausa jūsų slaptažodžio atstatymui.


Paspauskite čia norėdami atstatyti slaptažodį

Taip pat galite nukopijuoti sekančią nuorodą į savo naršyklės adreso juostą:

%2$s


Linkėjimai,

%3$s

" SESSION: "“Prisiminti mane”-sesija" diff --git a/plugins/login/languages/no.yaml b/plugins/login/languages/no.yaml index a8ca03a..098a361 100644 --- a/plugins/login/languages/no.yaml +++ b/plugins/login/languages/no.yaml @@ -21,8 +21,6 @@ PLUGIN_LOGIN: RESET_INVALID_LINK: "Ugyldig ilbakestillingslenke, vennligst prøv igjen" FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instruksjoner for å tilbakestille passordet ditt er sendt via e-post" FORGOT_FAILED_TO_EMAIL: "Kunne ikke sende instruksjoner, prøv igjen senere" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Kan ikke tilbakestille passord for %s, ingen e-postadresse er angitt" - FORGOT_USERNAME_DOES_NOT_EXIST: "Bruker med brukernavn %s eksisterer ikke" FORGOT_EMAIL_NOT_CONFIGURED: "Kan ikke tilbakestille passord. Dette nettstedet er ikke konfigurert til å sende e-post" FORGOT_EMAIL_SUBJECT: "Forespørsel om tilbakestilling av passord for %s" FORGOT_EMAIL_BODY: "

Tilbekestilling av passord

%1$s,

En forespørsel om tilbakestilling av passord ble gjort på %4$s.


Klikk her for å tilbakestille passordet ditt

Du kan også kopiere følgende nettadresse til nettleserens adressefelt:

%2$s


Vennlig hilsen,

%3$s

" diff --git a/plugins/login/languages/pt-BR.yaml b/plugins/login/languages/pt-BR.yaml index c5ee63b..2aca491 100644 --- a/plugins/login/languages/pt-BR.yaml +++ b/plugins/login/languages/pt-BR.yaml @@ -17,9 +17,6 @@ PLUGIN_LOGIN: RESET_INVALID_LINK: "Link de recuperação de senha inválido, tente novamente!" FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "As instruções para recuperar sua senha foram enviadas para seu e-mail!" FORGOT_FAILED_TO_EMAIL: "Falha ao tentar recuperar a senha, tente novamente mais tarde!" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Não é possível recuperar a senha para %s, nenhum e-mail inserido!" - FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Não é possível recuperar a senha para %s, este e-mail já está em uso!" - FORGOT_USERNAME_DOES_NOT_EXIST: "O usuário %s não existe!" FORGOT_EMAIL_NOT_CONFIGURED: "Não é possível recuperar a senha. Este site não está configurado para enviar e-mails!" FORGOT_EMAIL_SUBJECT: "%s requer recuperação da senha" FORGOT_EMAIL_BODY: "

Recuperação da Senha

Olá %1$s,

Foi feito um pedido no %4$s para recuperar sua senha.


Clique aqui para recuperar sua senha

Como alternativa, copie a seguinte URL na barra de endereços do navegador:

%2$s


Atenciosamente,

%3$s

" diff --git a/plugins/login/languages/ru.yaml b/plugins/login/languages/ru.yaml index 3ee8b61..528674c 100644 --- a/plugins/login/languages/ru.yaml +++ b/plugins/login/languages/ru.yaml @@ -19,11 +19,8 @@ PLUGIN_LOGIN: RESET_LINK_EXPIRED: "Время ссылки для сброса истекло, повторите попытку" RESET_PASSWORD_RESET: "Пароль был сброшен" RESET_INVALID_LINK: "Неверная ссылка сброса, повторите попытку" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Инструкции по сбросу пароля были отправлены по электронной почте" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Eсли имя пользователя существует, инструкции по сбросу пароля были отправлены по электронной почте" 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

" diff --git a/plugins/login/languages/uk.yaml b/plugins/login/languages/uk.yaml index e0a0393..66be594 100644 --- a/plugins/login/languages/uk.yaml +++ b/plugins/login/languages/uk.yaml @@ -19,11 +19,8 @@ PLUGIN_LOGIN: RESET_LINK_EXPIRED: "Час посилання для скидання минув, спробуйте ще раз" RESET_PASSWORD_RESET: "Пароль був скинутий" RESET_INVALID_LINK: "Невірне посилання скидання, спробуйте ще раз" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Інструкції щодо скидання пароля були надіслані по електронній пошті" + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Якщо ім'я користувача існує, iнструкції щодо скидання пароля були надіслані по електронній пошті" 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

" diff --git a/plugins/login/languages/zh.yaml b/plugins/login/languages/zh.yaml index bfca18f..e8f2691 100644 --- a/plugins/login/languages/zh.yaml +++ b/plugins/login/languages/zh.yaml @@ -17,9 +17,6 @@ PLUGIN_LOGIN: 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 重置密码。" - FORGOT_USERNAME_DOES_NOT_EXIST: "用户 %s 不存在。" FORGOT_EMAIL_NOT_CONFIGURED: "无法重置密码,本站点尚未配置邮件系统。" FORGOT_EMAIL_SUBJECT: "%s 的密码重置请求" FORGOT_EMAIL_BODY: "

密码充值

尊敬的 %1$s,

我们收到一个重置您的 %4$s 密码的请求。


点击这里进行重置密码

另外,您也可以复制下面的链接到浏览器地址栏中访问:

%2$s


此致

%3$s

"