diff --git a/commafeed-client/src/App.tsx b/commafeed-client/src/App.tsx index cc5f4cae..7ee58767 100644 --- a/commafeed-client/src/App.tsx +++ b/commafeed-client/src/App.tsx @@ -34,6 +34,7 @@ import { TagDetailsPage } from "@/pages/app/TagDetailsPage" import { InitialSetupPage } from "@/pages/auth/InitialSetupPage" import { LoginPage } from "@/pages/auth/LoginPage" import { PasswordRecoveryPage } from "@/pages/auth/PasswordRecoveryPage" +import { PasswordResetPage } from "@/pages/auth/PasswordResetPage" import { RegistrationPage } from "@/pages/auth/RegistrationPage" import { WelcomePage } from "@/pages/WelcomePage" @@ -88,6 +89,7 @@ function AppRoutes() { } /> } /> } /> + } /> } sidebar={} sidebarVisible={sidebarVisible} />}> } /> diff --git a/commafeed-client/src/app/client.ts b/commafeed-client/src/app/client.ts index 46ebc5a6..4ec112a0 100644 --- a/commafeed-client/src/app/client.ts +++ b/commafeed-client/src/app/client.ts @@ -17,6 +17,7 @@ import type { MarkRequest, Metrics, MultipleMarkRequest, + PasswordResetConfirmationRequest, PasswordResetRequest, ProfileModificationRequest, RegistrationRequest, @@ -97,6 +98,7 @@ export const client = { register: async (req: RegistrationRequest) => await axiosInstance.post("user/register", req), initialSetup: async (req: InitialSetupRequest) => await axiosInstance.post("user/initialSetup", req), passwordReset: async (req: PasswordResetRequest) => await axiosInstance.post("user/passwordReset", req), + passwordResetCallback: async (req: PasswordResetConfirmationRequest) => await axiosInstance.post("user/passwordResetCallback", req), getSettings: async () => await axiosInstance.get("user/settings"), saveSettings: async (settings: Settings) => await axiosInstance.post("user/settings", settings), getProfile: async () => await axiosInstance.get("user/profile"), diff --git a/commafeed-client/src/app/types.ts b/commafeed-client/src/app/types.ts index 41ac32d5..2b48e5aa 100644 --- a/commafeed-client/src/app/types.ts +++ b/commafeed-client/src/app/types.ts @@ -196,6 +196,12 @@ export interface PasswordResetRequest { email: string } +export interface PasswordResetConfirmationRequest { + email: string + token: string + password: string +} + export interface ProfileModificationRequest { currentPassword: string email: string diff --git a/commafeed-client/src/locales/ar/messages.po b/commafeed-client/src/locales/ar/messages.po index 5715637b..b60859ed 100644 --- a/commafeed-client/src/locales/ar/messages.po +++ b/commafeed-client/src/locales/ar/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "العودة" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "العودة لتسجيل الدخول" @@ -226,6 +227,11 @@ msgstr "تأكيد" msgid "Confirm password" msgstr "تأكيد كلمة المرور" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "دافئ" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "كلمة مرور جديدة" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "الأحدث أولاً" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "استعادة كلمة المرور" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -821,6 +837,11 @@ msgstr "تحديث" msgid "Registrations are closed on this CommaFeed instance" msgstr "تم إغلاق التسجيلات في مثيل CommaFeed هذا" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "ليس لديك أي اشتراكات حتى الآن. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/ca/messages.po b/commafeed-client/src/locales/ca/messages.po index aac7273d..2f3abe42 100644 --- a/commafeed-client/src/locales/ca/messages.po +++ b/commafeed-client/src/locales/ca/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Enrere" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Torna a iniciar sessió" @@ -226,6 +227,11 @@ msgstr "Confirma" msgid "Confirm password" msgstr "Confirmeu la contrasenya" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Acollidor" @@ -491,6 +497,10 @@ msgstr "Indi" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Mai" msgid "New password" msgstr "Contrasenya nova" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "El més nou primer" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Recuperació de contrasenya" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Les contrasenyes no coincideixen" @@ -821,6 +837,11 @@ msgstr "Actualitzar" msgid "Registrations are closed on this CommaFeed instance" msgstr "Els registres estan tancats en aquesta instància de CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1096,3 +1117,7 @@ msgstr "Encara no teniu cap subscripció. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Els vostres feeds s'han posat a la cua per actualitzar-los." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/cs/messages.po b/commafeed-client/src/locales/cs/messages.po index 20eee3a0..9c704047 100644 --- a/commafeed-client/src/locales/cs/messages.po +++ b/commafeed-client/src/locales/cs/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Zpět" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Zpět k přihlášení" @@ -226,6 +227,11 @@ msgstr "Potvrdit" msgid "Confirm password" msgstr "Potvrďte heslo" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Útulný" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nové heslo" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nejnovější jako první" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Obnovení hesla" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Hesla se neshodují" @@ -821,6 +837,11 @@ msgstr "Obnovit" msgid "Registrations are closed on this CommaFeed instance" msgstr "V této instanci CommaFeed jsou registrace uzavřeny" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Zatím nemáte žádné předplatné. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/cy/messages.po b/commafeed-client/src/locales/cy/messages.po index 7e08acf5..45232ad8 100644 --- a/commafeed-client/src/locales/cy/messages.po +++ b/commafeed-client/src/locales/cy/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Yn ôl" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Yn ôl i fewngofnodi" @@ -226,6 +227,11 @@ msgstr "Cadarnhau" msgid "Confirm password" msgstr "Cadarnhau'r cyfrinair" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "clyd" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Cyfrinair newydd" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Y diweddaraf yn gyntaf" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Adfer Cyfrinair" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Nid yw cyfrineiriau yn cyfateb" @@ -821,6 +837,11 @@ msgstr "Adnewyddu" msgid "Registrations are closed on this CommaFeed instance" msgstr "Mae cofrestriadau ar gau ar yr achos CommaFeed hwn" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Nid oes gennych unrhyw danysgrifiadau eto. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/da/messages.po b/commafeed-client/src/locales/da/messages.po index c081c834..49083bad 100644 --- a/commafeed-client/src/locales/da/messages.po +++ b/commafeed-client/src/locales/da/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Tilbage" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Tilbage for at logge ind" @@ -226,6 +227,11 @@ msgstr "Bekræft" msgid "Confirm password" msgstr "Bekræft adgangskode" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Hyggeligt" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Ny adgangskode" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nyeste først" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Gendannelse af adgangskode" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Adgangskoder stemmer ikke overens" @@ -821,6 +837,11 @@ msgstr "Opdater" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registreringer er lukket på denne CommaFeed-instans" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Du har ingen abonnementer endnu. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/de/messages.po b/commafeed-client/src/locales/de/messages.po index 979c72c7..346bb2a2 100644 --- a/commafeed-client/src/locales/de/messages.po +++ b/commafeed-client/src/locales/de/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Zurück" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Zurück zum Login" @@ -226,6 +227,11 @@ msgstr "Bestätigen" msgid "Confirm password" msgstr "Passwort bestätigen" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Gemütlich" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Niemals" msgid "New password" msgstr "Neues Passwort" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Neueste zuerst" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Passwortwiederherstellung" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -821,6 +837,11 @@ msgstr "Aktualisieren" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registrierungen sind für diese CommaFeed-Instanz geschlossen" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST-API" @@ -1096,3 +1117,7 @@ msgstr "Sie haben noch keine Abonnements." #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Ihr Feed wurde für die Aktualisierung eingereiht." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/en/messages.po b/commafeed-client/src/locales/en/messages.po index d1db8de4..bb9501f0 100644 --- a/commafeed-client/src/locales/en/messages.po +++ b/commafeed-client/src/locales/en/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Back" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Back to log in" @@ -226,6 +227,11 @@ msgstr "Confirm" msgid "Confirm password" msgstr "Confirm password" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "Confirm Password" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Cozy" @@ -491,6 +497,10 @@ msgstr "Indigo" msgid "Initial Setup" msgstr "Initial Setup" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "Invalid password reset link. Please request a new one." + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Never" msgid "New password" msgstr "New password" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "New Password" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Newest first" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Password Recovery" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Passwords do not match" @@ -821,6 +837,11 @@ msgstr "Refresh" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registrations are closed on this CommaFeed instance" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "Reset Password" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST API" @@ -1096,3 +1117,7 @@ msgstr "You don't have any subscriptions yet. Why not try adding one by clicking #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Your feeds have been queued for refresh." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "Your password has been changed. You can now log in with your new password." diff --git a/commafeed-client/src/locales/es/messages.po b/commafeed-client/src/locales/es/messages.po index c7d03801..df8fda92 100644 --- a/commafeed-client/src/locales/es/messages.po +++ b/commafeed-client/src/locales/es/messages.po @@ -136,6 +136,7 @@ msgid "Back" msgstr "Atrás" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Volver a iniciar sesión" @@ -227,6 +228,11 @@ msgstr "Confirmar" msgid "Confirm password" msgstr "Confirmar contraseña" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Acogedor" @@ -492,6 +498,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -635,6 +645,11 @@ msgstr "Nunca" msgid "New password" msgstr "Nueva contraseña" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Las más recientes primero" @@ -781,6 +796,7 @@ msgid "Password Recovery" msgstr "Recuperación de contraseña" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Las contraseñas no coinciden" @@ -822,6 +838,11 @@ msgstr "Actualizar" msgid "Registrations are closed on this CommaFeed instance" msgstr "Los registros están cerrados en esta instancia de CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1097,3 +1118,7 @@ msgstr "Aún no tienes ninguna suscripción. ¿Por qué no intentas agregar una #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Tus feeds se han puesto en cola para actualizarse." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/fa/messages.po b/commafeed-client/src/locales/fa/messages.po index 1a06ada9..d9356170 100644 --- a/commafeed-client/src/locales/fa/messages.po +++ b/commafeed-client/src/locales/fa/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "برگشت" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "بازگشت برای ورود به سیستم" @@ -226,6 +227,11 @@ msgstr "تأیید کنید" msgid "Confirm password" msgstr "رمز عبور را تأیید کنید" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "دنج" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "رمز عبور جدید" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "ابتدا جدیدترین" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "بازیابی رمز عبور" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "گذرواژه ها مطابقت ندارند" @@ -821,6 +837,11 @@ msgstr "تازه کردن" msgid "Registrations are closed on this CommaFeed instance" msgstr "ثبت نام در این نمونه CommaFeed بسته شده است" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "شما هنوز هیچ اشتراکی ندارید. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/fi/messages.po b/commafeed-client/src/locales/fi/messages.po index ce7405e0..7badba9a 100644 --- a/commafeed-client/src/locales/fi/messages.po +++ b/commafeed-client/src/locales/fi/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Takaisin" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Takaisin sisäänkirjautumiseen" @@ -226,6 +227,11 @@ msgstr "Vahvista" msgid "Confirm password" msgstr "Vahvista salasana" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Viihtyisä" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Uusi salasana" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Uusin ensin" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Salasanan palautus" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Salasanat eivät täsmää" @@ -821,6 +837,11 @@ msgstr "Päivitä" msgid "Registrations are closed on this CommaFeed instance" msgstr "Tämän CommaFeed-esiintymän rekisteröinnit on suljettu" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Sinulla ei ole vielä tilauksia. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/fr/messages.po b/commafeed-client/src/locales/fr/messages.po index ecd22f87..c72f977d 100644 --- a/commafeed-client/src/locales/fr/messages.po +++ b/commafeed-client/src/locales/fr/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Retour" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Retour à la connexion" @@ -226,6 +227,11 @@ msgstr "Confirmer" msgid "Confirm password" msgstr "Confirmer le mot de passe" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Cozy" @@ -491,6 +497,10 @@ msgstr "Indigo" msgid "Initial Setup" msgstr "Configuration initiale" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Jamais" msgid "New password" msgstr "Nouveau mot de passe" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Plus récent en premier" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Récupération de mot de passe" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -821,6 +837,11 @@ msgstr "Rafraîchir" msgid "Registrations are closed on this CommaFeed instance" msgstr "Les inscriptions sont fermées sur cette instance de CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1096,3 +1117,7 @@ msgstr "Vous n'avez pas encore d'abonnements. Pourquoi ne pas essayer d'en ajout #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Vos flux sont en cours de rafraîchissement" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/gl/messages.po b/commafeed-client/src/locales/gl/messages.po index f456a46d..29ec2c1f 100644 --- a/commafeed-client/src/locales/gl/messages.po +++ b/commafeed-client/src/locales/gl/messages.po @@ -136,6 +136,7 @@ msgid "Back" msgstr "Volver" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Volver para iniciar sesión" @@ -227,6 +228,11 @@ msgstr "Confirmar" msgid "Confirm password" msgstr "Confirmar contrasinal" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Acolledor" @@ -492,6 +498,10 @@ msgstr "Índigo" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -635,6 +645,11 @@ msgstr "Nunca" msgid "New password" msgstr "Novo contrasinal" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Primeiro o máis recente" @@ -781,6 +796,7 @@ msgid "Password Recovery" msgstr "Recuperación do contrasinal" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Os contrasinais non coinciden" @@ -822,6 +838,11 @@ msgstr "Actualizar" msgid "Registrations are closed on this CommaFeed instance" msgstr "Non se admiten novas contas nesta instancia de CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1097,3 +1118,7 @@ msgstr "Aínda non tes ningunha subscrición. Por que non engades unha premendo #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "As túas canles están na cola para ser actualizadas." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/hu/messages.po b/commafeed-client/src/locales/hu/messages.po index 4a7429ef..214e28f2 100644 --- a/commafeed-client/src/locales/hu/messages.po +++ b/commafeed-client/src/locales/hu/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Vissza" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Vissza a bejelentkezéshez" @@ -226,6 +227,11 @@ msgstr "Erősítse meg" msgid "Confirm password" msgstr "Erősítse meg a jelszót" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Hangulatos" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Új jelszó" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "A legújabbak először" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Jelszó helyreállítás" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "A jelszavak nem egyeznek" @@ -821,6 +837,11 @@ msgstr "Frissítés" msgid "Registrations are closed on this CommaFeed instance" msgstr "A regisztrációk le vannak zárva ezen a CommaFeed példányon" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Még nincs előfizetése. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/id/messages.po b/commafeed-client/src/locales/id/messages.po index 3aae967d..d4232421 100644 --- a/commafeed-client/src/locales/id/messages.po +++ b/commafeed-client/src/locales/id/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Kembali" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Kembali untuk masuk" @@ -226,6 +227,11 @@ msgstr "Konfirmasi" msgid "Confirm password" msgstr "Konfirmasi kata sandi" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Nyaman" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Kata sandi baru" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Terbaru dulu" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Pemulihan Kata Sandi" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Kata sandi tidak cocok" @@ -821,6 +837,11 @@ msgstr "Segarkan" msgid "Registrations are closed on this CommaFeed instance" msgstr "Pendaftaran ditutup pada instans CommaFeed ini" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Anda belum memiliki langganan. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/it/messages.po b/commafeed-client/src/locales/it/messages.po index f5643d1a..03d1fee7 100644 --- a/commafeed-client/src/locales/it/messages.po +++ b/commafeed-client/src/locales/it/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Indietro" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Torna per accedere" @@ -226,6 +227,11 @@ msgstr "Conferma" msgid "Confirm password" msgstr "Conferma password" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Accogliente" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nuova password" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Il più recente prima" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Recupero password" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Le password non corrispondono" @@ -821,6 +837,11 @@ msgstr "Aggiorna" msgid "Registrations are closed on this CommaFeed instance" msgstr "Le registrazioni sono chiuse su questa istanza CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1096,3 +1117,7 @@ msgstr "Non hai ancora abbonamenti. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/ja/messages.po b/commafeed-client/src/locales/ja/messages.po index f28bbd31..688ca278 100644 --- a/commafeed-client/src/locales/ja/messages.po +++ b/commafeed-client/src/locales/ja/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "戻る" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "ログインに戻る" @@ -226,6 +227,11 @@ msgstr "確認" msgid "Confirm password" msgstr "パスワード確認" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Cozy" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "しない" msgid "New password" msgstr "新しいパスワード" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "最新順" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "パスワード回復" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "パスワードが一致しません" @@ -821,6 +837,11 @@ msgstr "リフレッシュ" msgid "Registrations are closed on this CommaFeed instance" msgstr "このCommaFeedインスタンスの登録は終了しています" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST API" @@ -1096,3 +1117,7 @@ msgstr "まだサブスクリプションがありません。上部の + 記号 #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "フィードの更新がキューに登録されました。" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/ko/messages.po b/commafeed-client/src/locales/ko/messages.po index 1f76e680..ed421d10 100644 --- a/commafeed-client/src/locales/ko/messages.po +++ b/commafeed-client/src/locales/ko/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "뒤로" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "로그인으로 돌아가기" @@ -226,6 +227,11 @@ msgstr "확인" msgid "Confirm password" msgstr "비밀번호 확인" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "코지" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "새 비밀번호" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "최신순" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "비밀번호 복구" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "비밀번호가 일치하지 않습니다" @@ -821,6 +837,11 @@ msgstr "새로 고침" msgid "Registrations are closed on this CommaFeed instance" msgstr "이 CommaFeed 인스턴스에 대한 등록이 마감되었습니다." +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "아직 구독이 없습니다. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/ms/messages.po b/commafeed-client/src/locales/ms/messages.po index 1020ac47..bf73d4e4 100644 --- a/commafeed-client/src/locales/ms/messages.po +++ b/commafeed-client/src/locales/ms/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Kembali" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Kembali untuk log masuk" @@ -226,6 +227,11 @@ msgstr "Sahkan" msgid "Confirm password" msgstr "Sahkan kata laluan" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Nyaman" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Kata laluan baharu" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Terbaharu dahulu" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Pemulihan Kata Laluan" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Kata laluan tidak sepadan" @@ -821,6 +837,11 @@ msgstr "Muat semula" msgid "Registrations are closed on this CommaFeed instance" msgstr "Pendaftaran ditutup pada contoh CommaFeed ini" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REHAT API" @@ -1096,3 +1117,7 @@ msgstr "Anda belum mempunyai sebarang langganan lagi. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/nb/messages.po b/commafeed-client/src/locales/nb/messages.po index b23be151..60b25ad1 100644 --- a/commafeed-client/src/locales/nb/messages.po +++ b/commafeed-client/src/locales/nb/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Tilbake" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Tilbake for å logge inn" @@ -226,6 +227,11 @@ msgstr "Bekreft" msgid "Confirm password" msgstr "Bekreft passord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Koselig" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nytt passord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nyeste først" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Passordgjenoppretting" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Passordene samsvarer ikke" @@ -821,6 +837,11 @@ msgstr "Oppdater" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registreringer er stengt på denne CommaFeed-forekomsten" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Du har ingen abonnementer ennå. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/nl/messages.po b/commafeed-client/src/locales/nl/messages.po index e3fa3290..6ab6fa07 100644 --- a/commafeed-client/src/locales/nl/messages.po +++ b/commafeed-client/src/locales/nl/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Terug" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Terug naar inloggen" @@ -226,6 +227,11 @@ msgstr "Bevestigen" msgid "Confirm password" msgstr "Bevestig wachtwoord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Gezellig" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nieuw wachtwoord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nieuwste eerst" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Wachtwoordherstel" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -821,6 +837,11 @@ msgstr "Vernieuwen" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registraties zijn gesloten op deze CommaFeed-instantie" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST-API" @@ -1096,3 +1117,7 @@ msgstr "Je hebt nog geen abonnementen. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/nn/messages.po b/commafeed-client/src/locales/nn/messages.po index fd3c06dc..d64bd953 100644 --- a/commafeed-client/src/locales/nn/messages.po +++ b/commafeed-client/src/locales/nn/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Tilbake" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Tilbake for å logge inn" @@ -226,6 +227,11 @@ msgstr "Bekreft" msgid "Confirm password" msgstr "Bekreft passord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Koselig" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nytt passord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nyeste først" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Passordgjenoppretting" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Passordene samsvarer ikke" @@ -821,6 +837,11 @@ msgstr "Oppdater" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registreringer er stengt på denne CommaFeed-forekomsten" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Du har ingen abonnementer ennå. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/pl/messages.po b/commafeed-client/src/locales/pl/messages.po index 2d21886f..66c7750c 100644 --- a/commafeed-client/src/locales/pl/messages.po +++ b/commafeed-client/src/locales/pl/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Powrót" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Powrót do logowania" @@ -226,6 +227,11 @@ msgstr "Potwierdź" msgid "Confirm password" msgstr "Potwierdź hasło" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Przytulny" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nowe hasło" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Najnowsze jako pierwsze" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Odzyskiwanie hasła" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Hasła nie pasują" @@ -821,6 +837,11 @@ msgstr "Odśwież" msgid "Registrations are closed on this CommaFeed instance" msgstr "Rejestracje są zamknięte w tej instancji CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Nie masz jeszcze żadnych subskrypcji. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/pt/messages.po b/commafeed-client/src/locales/pt/messages.po index a4100f3b..7992222f 100644 --- a/commafeed-client/src/locales/pt/messages.po +++ b/commafeed-client/src/locales/pt/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Voltar" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Voltar para logar" @@ -226,6 +227,11 @@ msgstr "Confirmar" msgid "Confirm password" msgstr "Confirmar senha" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Aconchegante" @@ -491,6 +497,10 @@ msgstr "Índigo" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Nunca" msgid "New password" msgstr "Nova senha" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Mais novo primeiro" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Recuperação de Senha" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Senhas não coincidem" @@ -821,6 +837,11 @@ msgstr "Atualizar" msgid "Registrations are closed on this CommaFeed instance" msgstr "Os registros estão fechados nesta instância do CommaFeed" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "API REST" @@ -1096,3 +1117,7 @@ msgstr "Você ainda não tem nenhuma assinatura. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Seus feed foram enfileirados para atualização" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/ru/messages.po b/commafeed-client/src/locales/ru/messages.po index d35dca3d..3c7cfcdb 100644 --- a/commafeed-client/src/locales/ru/messages.po +++ b/commafeed-client/src/locales/ru/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Назад" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Вернуться к входу" @@ -226,6 +227,11 @@ msgstr "Подтвердить" msgid "Confirm password" msgstr "Подтвердить пароль" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Уютно" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "Никогда" msgid "New password" msgstr "Новый пароль" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Сначала новые" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Восстановление пароля" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Пароли не совпадают" @@ -821,6 +837,11 @@ msgstr "Обновить" msgid "Registrations are closed on this CommaFeed instance" msgstr "Регистрация закрыта для этого экземпляра CommaFeed." +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST API" @@ -1096,3 +1117,7 @@ msgstr "У вас еще нет подписок. Почему бы не поп #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Ваши каналы были поставлены в очередь на обновление." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/sk/messages.po b/commafeed-client/src/locales/sk/messages.po index 3076dfb6..bd824793 100644 --- a/commafeed-client/src/locales/sk/messages.po +++ b/commafeed-client/src/locales/sk/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Späť" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Späť na prihlásenie" @@ -226,6 +227,11 @@ msgstr "Potvrdiť" msgid "Confirm password" msgstr "Potvrďte heslo" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Útulný" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nové heslo" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Najnovšie ako prvé" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Obnovenie hesla" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Heslá sa nezhodujú" @@ -821,6 +837,11 @@ msgstr "Obnoviť" msgid "Registrations are closed on this CommaFeed instance" msgstr "V tejto inštancii CommaFeed sú registrácie uzavreté" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Zatiaľ nemáte žiadne odbery. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/sv/messages.po b/commafeed-client/src/locales/sv/messages.po index a57a1d96..0caa7ff9 100644 --- a/commafeed-client/src/locales/sv/messages.po +++ b/commafeed-client/src/locales/sv/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Tillbaka" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Tillbaka för att logga in" @@ -226,6 +227,11 @@ msgstr "Bekräfta" msgid "Confirm password" msgstr "Bekräfta lösenord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Mysigt" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Nytt lösenord" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Nyast först" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Lösenordsåterställning" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Lösenorden matchar inte" @@ -821,6 +837,11 @@ msgstr "Uppdatera" msgid "Registrations are closed on this CommaFeed instance" msgstr "Registreringar är stängda på denna CommaFeed-instans" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "" @@ -1096,3 +1117,7 @@ msgstr "Du har inga prenumerationer än. " #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/tr/messages.po b/commafeed-client/src/locales/tr/messages.po index 26eba758..663b6733 100644 --- a/commafeed-client/src/locales/tr/messages.po +++ b/commafeed-client/src/locales/tr/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "Geri" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "Giriş yapmak için geri dön" @@ -226,6 +227,11 @@ msgstr "Onayla" msgid "Confirm password" msgstr "Şifreyi onayla" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "Rahat" @@ -491,6 +497,10 @@ msgstr "" msgid "Initial Setup" msgstr "" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "" msgid "New password" msgstr "Yeni şifre" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "Önce en yenisi" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "Parola Kurtarma" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "Parolalar eşleşmiyor" @@ -821,6 +837,11 @@ msgstr "Yenile" msgid "Registrations are closed on this CommaFeed instance" msgstr "Bu CommaFeed örneğinde kayıtlar kapalı" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST API" @@ -1096,3 +1117,7 @@ msgstr "Henüz aboneliğiniz yok. Sayfanın üstündeki + işaretiyle feed ekley #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "Feed'leriniz yenileme için sıraya alındı." + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/locales/zh/messages.po b/commafeed-client/src/locales/zh/messages.po index 79c8c0a6..0b0d361c 100644 --- a/commafeed-client/src/locales/zh/messages.po +++ b/commafeed-client/src/locales/zh/messages.po @@ -135,6 +135,7 @@ msgid "Back" msgstr "返回" #: src/pages/auth/PasswordRecoveryPage.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Back to log in" msgstr "返回登录" @@ -226,6 +227,11 @@ msgstr "确认" msgid "Confirm password" msgstr "确认密码" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Confirm Password" +msgstr "" + #: src/components/header/ProfileMenu.tsx msgid "Cozy" msgstr "宽松" @@ -491,6 +497,10 @@ msgstr "靛蓝" msgid "Initial Setup" msgstr "初始化设置" +#: src/pages/auth/PasswordResetPage.tsx +msgid "Invalid password reset link. Please request a new one." +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -634,6 +644,11 @@ msgstr "从不" msgid "New password" msgstr "新密码" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "New Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "Newest first" msgstr "最新的优先" @@ -780,6 +795,7 @@ msgid "Password Recovery" msgstr "密码恢复" #: src/components/settings/ProfileSettings.tsx +#: src/pages/auth/PasswordResetPage.tsx msgid "Passwords do not match" msgstr "密码不匹配" @@ -821,6 +837,11 @@ msgstr "刷新" msgid "Registrations are closed on this CommaFeed instance" msgstr "此 CommaFeed 实例上的注册已关闭" +#: src/pages/auth/PasswordResetPage.tsx +#: src/pages/auth/PasswordResetPage.tsx +msgid "Reset Password" +msgstr "" + #: src/pages/app/AboutPage.tsx msgid "REST API" msgstr "REST API" @@ -1096,3 +1117,7 @@ msgstr "您还没有任何订阅。" #: src/components/header/ProfileMenu.tsx msgid "Your feeds have been queued for refresh." msgstr "您的订阅已经进入刷新队列。" + +#: src/pages/auth/PasswordResetPage.tsx +msgid "Your password has been changed. You can now log in with your new password." +msgstr "" diff --git a/commafeed-client/src/pages/auth/PasswordResetPage.tsx b/commafeed-client/src/pages/auth/PasswordResetPage.tsx new file mode 100644 index 00000000..258c95af --- /dev/null +++ b/commafeed-client/src/pages/auth/PasswordResetPage.tsx @@ -0,0 +1,119 @@ +import { msg } from "@lingui/core/macro" +import { useLingui } from "@lingui/react" +import { Trans } from "@lingui/react/macro" +import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, Title } from "@mantine/core" +import { useForm } from "@mantine/form" +import { useState } from "react" +import { useAsyncCallback } from "react-async-hook" +import { Link, useSearchParams } from "react-router-dom" +import { client, errorToStrings } from "@/app/client" +import { Alert } from "@/components/Alert" +import { useValidationRules } from "@/hooks/useValidationRules" +import { PageTitle } from "@/pages/PageTitle" + +interface PasswordResetFormValues { + password: string + passwordConfirmation: string +} + +export function PasswordResetPage() { + const [message, setMessage] = useState("") + const [searchParams] = useSearchParams() + const { _ } = useLingui() + const validationRules = useValidationRules() + + const email = searchParams.get("email") ?? "" + const token = searchParams.get("token") ?? "" + + const form = useForm({ + initialValues: { + password: "", + passwordConfirmation: "", + }, + validate: { + password: validationRules.password, + passwordConfirmation: (value, values) => (value === values.password ? null : _(msg`Passwords do not match`)), + }, + validateInputOnChange: true, + }) + + const resetPassword = useAsyncCallback(client.user.passwordResetCallback, { + onSuccess: () => { + setMessage(_(msg`Your password has been changed. You can now log in with your new password.`)) + form.reset() + }, + }) + + const isMissingParams = !email || !token + + return ( + + + + + <Trans>Reset Password</Trans> + + + {resetPassword.error && ( + + + + )} + + {isMissingParams && ( + + + + )} + + {message && ( + + + + )} + + {!isMissingParams && !message && ( +
{ + resetPassword.execute({ + email, + token, + password: values.password, + }) + })} + > + + New Password} + placeholder={_(msg`New Password`)} + {...form.getInputProps("password")} + size="md" + required + /> + + Confirm Password} + placeholder={_(msg`Confirm Password`)} + {...form.getInputProps("passwordConfirmation")} + size="md" + required + /> + + + +
+ )} + +
+ + + Back to log in + + +
+
+
+ ) +} diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetConfirmationRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetConfirmationRequest.java new file mode 100644 index 00000000..d8ed5965 --- /dev/null +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetConfirmationRequest.java @@ -0,0 +1,34 @@ +package com.commafeed.frontend.model.request; + +import java.io.Serializable; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import com.commafeed.security.password.ValidPassword; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +@Schema +public class PasswordResetConfirmationRequest implements Serializable { + + @Schema(description = "email address for password recovery", required = true) + @Email + @NotEmpty + @Size(max = 255) + private String email; + + @Schema(description = "password recovery token", required = true) + @NotEmpty + private String token; + + @Schema(description = "new password", required = true) + @NotEmpty + @ValidPassword + private String password; +} diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java index 41e3a4b0..71f28b28 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -1,6 +1,5 @@ package com.commafeed.frontend.resource; -import java.net.MalformedURLException; import java.net.URISyntaxException; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -21,13 +20,11 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; import jakarta.ws.rs.core.UriInfo; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hc.core5.net.URIBuilder; import org.eclipse.microprofile.openapi.annotations.Operation; @@ -38,7 +35,6 @@ import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConstants; import com.commafeed.backend.Digests; import com.commafeed.backend.Urls; -import com.commafeed.backend.dao.UnitOfWork; import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserRoleDAO; import com.commafeed.backend.dao.UserSettingsDAO; @@ -57,6 +53,7 @@ import com.commafeed.backend.service.db.DatabaseStartupService; import com.commafeed.frontend.model.Settings; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.InitialSetupRequest; +import com.commafeed.frontend.model.request.PasswordResetConfirmationRequest; import com.commafeed.frontend.model.request.PasswordResetRequest; import com.commafeed.frontend.model.request.ProfileModificationRequest; import com.commafeed.frontend.model.request.RegistrationRequest; @@ -87,7 +84,6 @@ public class UserREST { private final MailService mailService; private final CommaFeedConfiguration config; private final UriInfo uri; - private final UnitOfWork unitOfWork; @Path("/settings") @GET @@ -334,45 +330,44 @@ public class UserREST { } } - private String buildEmailContent(User user) throws URISyntaxException, MalformedURLException { + private String buildEmailContent(User user) throws URISyntaxException { String publicUrl = Urls.removeTrailingSlash(uri.getBaseUri().toString()); - publicUrl += "/rest/user/passwordResetCallback"; return String.format( "You asked for password recovery for account '%s', follow this link to change your password. Ignore this if you didn't request a password recovery.", user.getName(), callbackUrl(user, publicUrl)); } - private String callbackUrl(User user, String publicUrl) throws URISyntaxException, MalformedURLException { - return new URIBuilder(publicUrl).addParameter("email", user.getEmail()) - .addParameter("token", user.getRecoverPasswordToken()) - .build() - .toURL() - .toString(); + private String callbackUrl(User user, String publicUrl) throws URISyntaxException { + URIBuilder queryBuilder = new URIBuilder(); + queryBuilder.addParameter("email", user.getEmail()); + queryBuilder.addParameter("token", user.getRecoverPasswordToken()); + String queryString = queryBuilder.build().getRawQuery(); + return publicUrl + "/#/passwordReset?" + queryString; } @Path("/passwordResetCallback") @PermitAll - @GET + @POST @Transactional - @Produces(MediaType.TEXT_HTML) - public Response passwordRecoveryCallback(@Parameter(required = true) @QueryParam("email") String email, - @Parameter(required = true) @QueryParam("token") String token) { + @Operation(summary = "confirm password reset with new password") + public Response passwordRecoveryCallback(@Valid @Parameter(required = true) PasswordResetConfirmationRequest req) { + String email = req.getEmail(); + String token = req.getToken(); + String password = req.getPassword(); + Preconditions.checkNotNull(email); Preconditions.checkNotNull(token); + Preconditions.checkNotNull(password); User user = userDAO.findByEmail(email); - if (user == null) { - return Response.status(Status.UNAUTHORIZED).entity("Email not found.").build(); + if (user == null || user.getRecoverPasswordToken() == null || !user.getRecoverPasswordToken().equals(token)) { + return Response.status(Status.UNAUTHORIZED).entity("Email not found or invalid token.").build(); } - if (user.getRecoverPasswordToken() == null || !user.getRecoverPasswordToken().equals(token)) { - return Response.status(Status.UNAUTHORIZED).entity("Invalid token.").build(); - } - if (ChronoUnit.DAYS.between(user.getRecoverPasswordTokenDate(), Instant.now()) >= 2) { - return Response.status(Status.UNAUTHORIZED).entity("token expired.").build(); + if (ChronoUnit.MINUTES.between(user.getRecoverPasswordTokenDate(), Instant.now()) >= 30) { + return Response.status(Status.UNAUTHORIZED).entity("Token expired.").build(); } - String passwd = RandomStringUtils.secure().nextAlphanumeric(10); - byte[] encryptedPassword = encryptionService.getEncryptedPassword(passwd, user.getSalt()); + byte[] encryptedPassword = encryptionService.getEncryptedPassword(password, user.getSalt()); user.setPassword(encryptedPassword); if (StringUtils.isNotBlank(user.getApiKey())) { user.setApiKey(userService.generateApiKey(user)); @@ -380,10 +375,7 @@ public class UserREST { user.setRecoverPasswordToken(null); user.setRecoverPasswordTokenDate(null); - String message = "Your new password is: " + passwd; - message += "
"; - message += String.format("Back to Homepage", uri.getBaseUri()); - return Response.ok(message).build(); + return Response.ok().build(); } @Path("/profile/deleteAccount") diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java index aa3d266e..320fd883 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java @@ -1,5 +1,7 @@ package com.commafeed.integration.rest; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.List; import jakarta.inject.Inject; @@ -13,6 +15,7 @@ import org.junit.jupiter.api.Test; import com.commafeed.TestConstants; import com.commafeed.frontend.model.Settings; +import com.commafeed.frontend.model.request.PasswordResetConfirmationRequest; import com.commafeed.frontend.model.request.PasswordResetRequest; import com.commafeed.integration.BaseIT; @@ -57,8 +60,32 @@ class UserIT extends BaseIT { Element a = Jsoup.parse(message.getHtml()).select("a").getFirst(); String link = a.attr("href"); - String newPasswordResponse = RestAssured.given().urlEncodingEnabled(false).get(link).then().statusCode(200).extract().asString(); - Assertions.assertTrue(newPasswordResponse.contains("Your new password is:")); + + String email = null; + String token = null; + String queryString = link.substring(link.indexOf('?') + 1); + for (String param : queryString.split("&")) { + String[] keyValue = param.split("="); + if ("email".equals(keyValue[0])) { + email = URLDecoder.decode(keyValue[1], StandardCharsets.UTF_8); + } else if ("token".equals(keyValue[0])) { + token = URLDecoder.decode(keyValue[1], StandardCharsets.UTF_8); + } + } + + Assertions.assertNotNull(email); + Assertions.assertNotNull(token); + Assertions.assertTrue(link.contains("#/passwordReset?")); + + String newPassword = "MyNewPassword123!"; + PasswordResetConfirmationRequest confirmReq = new PasswordResetConfirmationRequest(); + confirmReq.setEmail(email); + confirmReq.setToken(token); + confirmReq.setPassword(newPassword); + RestAssured.given().body(confirmReq).contentType(ContentType.JSON).post("rest/user/passwordResetCallback").then().statusCode(200); + + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, newPassword); + RestAssured.given().get("rest/user/settings").then().statusCode(200); } @Test