diff --git a/.github/Dependabot.yml b/.github/Dependabot.yml index b417983545..5f0889ce91 100644 --- a/.github/Dependabot.yml +++ b/.github/Dependabot.yml @@ -8,4 +8,4 @@ updates: - package-ecosystem: "npm" # See documentation for possible values directory: "/" # Location of package manifests schedule: - interval: "daily" + interval: "weekly" diff --git a/apps/backend/src/api/routes/auth.controller.ts b/apps/backend/src/api/routes/auth.controller.ts index 338bf962cb..7fc6fce940 100644 --- a/apps/backend/src/api/routes/auth.controller.ts +++ b/apps/backend/src/api/routes/auth.controller.ts @@ -26,7 +26,7 @@ import * as Sentry from '@sentry/nestjs'; @ApiTags('Auth') @Controller('/auth') export class AuthController { - constructor( + constructor( private _authService: AuthService, private _emailService: EmailService ) {} diff --git a/apps/backend/src/api/routes/settings.controller.ts b/apps/backend/src/api/routes/settings.controller.ts index c92537b44b..55a4f39c2e 100644 --- a/apps/backend/src/api/routes/settings.controller.ts +++ b/apps/backend/src/api/routes/settings.controller.ts @@ -1,17 +1,22 @@ import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; -import { Organization } from '@prisma/client'; +import { Organization, User } from '@prisma/client'; import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; import { AddTeamMemberDto } from '@gitroom/nestjs-libraries/dtos/settings/add.team.member.dto'; import { ApiTags } from '@nestjs/swagger'; import { AuthorizationActions, Sections } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; +import { GetUserFromRequest } from '@gitroom/nestjs-libraries/user/user.from.request'; +import { UsersService } from '@gitroom/nestjs-libraries/database/prisma/users/users.service'; +import { ChangePasswordDto } from '@gitroom/nestjs-libraries/dtos/settings/change.password.dto'; +import { AuthService as AuthChecker } from '@gitroom/helpers/auth/auth.service'; @ApiTags('Settings') @Controller('/settings') export class SettingsController { constructor( - private _organizationService: OrganizationService + private _organizationService: OrganizationService, + private _userService: UsersService ) {} @Get('/team') @@ -46,4 +51,19 @@ export class SettingsController { ) { return this._organizationService.deleteTeamMember(org, id); } + + @Post('/change-password') + async changePassword( + @GetUserFromRequest() user: User, + @Body() body: ChangePasswordDto + ) { + const userWithPassword = await this._userService.getUserById(user.id); + if(!userWithPassword || userWithPassword.providerName !== 'LOCAL') { + return false; + } + if(!AuthChecker.comparePassword(body.oldPassword, userWithPassword.password)) { + return false; + } + return this._userService.updatePassword(user.id, body.password); + } } diff --git a/apps/frontend/src/components/layout/settings.component.tsx b/apps/frontend/src/components/layout/settings.component.tsx index fc1f6a287c..fba5624062 100644 --- a/apps/frontend/src/components/layout/settings.component.tsx +++ b/apps/frontend/src/components/layout/settings.component.tsx @@ -31,6 +31,7 @@ import { Autopost } from '@gitroom/frontend/components/autopost/autopost'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { SVGLine } from '@gitroom/frontend/components/launches/launches.component'; import { GlobalSettings } from '@gitroom/frontend/components/settings/global.settings'; +import { ChangePassword } from '../settings/change-password.component'; export const SettingsPopup: FC<{ getRef?: Ref; }> = (props) => { @@ -105,6 +106,9 @@ export const SettingsPopup: FC<{ if (user?.tier?.public_api && isGeneral && showLogout) { arr.push({ tab: 'api', label: t('public_api', 'Public API') }); } + if(user.providerName == 'LOCAL' && showLogout) { + arr.push({ tab: 'change_password', label: t('change_password', 'Change Password') }); + } return arr; }, [user, isGeneral, showLogout, t]); @@ -193,6 +197,12 @@ export const SettingsPopup: FC<{ )} + {tab === 'change_password' && showLogout && ( +
+ +
+ )} + {tab === 'api' && !!user?.tier?.public_api && isGeneral && diff --git a/apps/frontend/src/components/settings/change-password.component.tsx b/apps/frontend/src/components/settings/change-password.component.tsx new file mode 100644 index 0000000000..9ae98e20a2 --- /dev/null +++ b/apps/frontend/src/components/settings/change-password.component.tsx @@ -0,0 +1,106 @@ +'use client'; + +import { useForm, SubmitHandler, FormProvider } from 'react-hook-form'; +import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; +import { Button } from '@gitroom/react/form/button'; +import { Input } from '@gitroom/react/form/input'; +import { useMemo, useState } from 'react'; +import { classValidatorResolver } from '@hookform/resolvers/class-validator'; +import { ChangePasswordDto } from '@gitroom/nestjs-libraries/dtos/settings/change.password.dto'; +import { useT } from '@gitroom/react/translation/get.transation.service.client'; +import { useToaster } from '@gitroom/react/toaster/toaster'; +type Inputs = { + oldPassword: string; + password: string; + repeatPassword: string; +}; + +export const ChangePassword = () => { + const [loading, setLoading] = useState(false); + const t = useT(); + const toaster = useToaster(); + const [state, setState] = useState(false); + const resolver = useMemo(() => { + return classValidatorResolver(ChangePasswordDto); + }, []); + const form = useForm({ + resolver, + mode: 'onChange', + }); + const fetchData = useFetch(); + const onSubmit: SubmitHandler = async (data) => { + setLoading(true); + + const response = await fetchData('/settings/change-password', { + method: 'POST', + body: JSON.stringify({ + ...data, + }), + }); + const change = await response.json(); + console.log(change); + if (!change) { + form.setError('password', { + type: 'manual', + message: t('password_change_failed', 'Your password change has failed. Please try again.'), + }); + toaster.show('Password change failed', 'warning'); + setLoading(false); + return false; + } + setState(true); + setLoading(false); + }; + return ( +
+

{t('change_password', 'Change Password')}

+ +
+ {!state ? ( + <> +
+ + + +
+
+
+ +
+
+ + ) : ( + <> +
+ {t( + 'we_successfully_changed_your_password', + 'We successfully changed your password' + )} +
+ + )} +
+
+
+ ); +}; diff --git a/libraries/nestjs-libraries/src/dtos/settings/change.password.dto.ts b/libraries/nestjs-libraries/src/dtos/settings/change.password.dto.ts new file mode 100644 index 0000000000..0102041e55 --- /dev/null +++ b/libraries/nestjs-libraries/src/dtos/settings/change.password.dto.ts @@ -0,0 +1,21 @@ +import { makeId } from "@gitroom/nestjs-libraries/services/make.is"; +import { IsDefined, IsIn, IsString, MinLength, ValidateIf } from "class-validator"; + +export class ChangePasswordDto { + @IsString() + @IsDefined() + oldPassword: string; + + @IsString() + @IsDefined() + @MinLength(3) + password: string; + + @IsString() + @IsDefined() + @IsIn([makeId(10)], { + message: 'Passwords do not match', + }) + @ValidateIf((o) => o.password !== o.repeatPassword) + repeatPassword: string; +} diff --git a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json index 54d69655bb..9a03936312 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "لقد أرسلنا لك بريدًا إلكترونيًا يحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك.", "change_password": "تغيير كلمة المرور", "we_successfully_reset_your_password_you_can_now_login_with_your": "تمت إعادة تعيين كلمة المرور بنجاح. يمكنك الآن تسجيل الدخول باستخدام", + "we_successfully_changed_your_password": "لقد قمنا بتغيير كلمة المرور الخاصة بك بنجاح.", + "password_change_failed": "فشل تغيير كلمة المرور الخاصة بك. يرجى المحاولة مرة أخرى.", "click_here_to_go_back_to_login": "انقر هنا للعودة إلى تسجيل الدخول", "activate_your_account": "فعّل حسابك", "thank_you_for_registering": "شكرًا لتسجيلك!", @@ -418,6 +420,7 @@ "label_search_channel": "ابحث عن قناة", "label_select_channel": "اختر قناة", "label_new_password": "كلمة المرور الجديدة", + "label_old_password": "كلمة المرور القديمة", "label_repeat_password": "أعد إدخال كلمة المرور", "label_platform": "المنصة", "label_price_per_post": "السعر لكل منشور", diff --git a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json index b57d2b4d8c..f842bf2664 100644 --- a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "আমরা আপনার পাসওয়ার্ড রিসেট করার জন্য একটি লিংক সহ একটি ইমেইল পাঠিয়েছি।", "change_password": "পাসওয়ার্ড পরিবর্তন করুন", "we_successfully_reset_your_password_you_can_now_login_with_your": "আমরা সফলভাবে আপনার পাসওয়ার্ড রিসেট করেছি। আপনি এখন আপনার সাথে লগইন করতে পারেন", + "we_successfully_changed_your_password": "আমরা সফলভাবে আপনার পাসওয়ার্ড পরিবর্তন করেছি।", + "password_change_failed": "পাসওয়ার্ড পরিবর্তন ব্যর্থ হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।", "click_here_to_go_back_to_login": "লগইনে ফিরে যেতে এখানে ক্লিক করুন", "activate_your_account": "আপনার অ্যাকাউন্ট সক্রিয় করুন", "thank_you_for_registering": "নিবন্ধনের জন্য ধন্যবাদ!", @@ -418,6 +420,7 @@ "label_search_channel": "চ্যানেল অনুসন্ধান", "label_select_channel": "চ্যানেল নির্বাচন করুন", "label_new_password": "নতুন পাসওয়ার্ড", + "label_old_password": "পুরানো পাসওয়ার্ড", "label_repeat_password": "পাসওয়ার্ড পুনরায় দিন", "label_platform": "প্ল্যাটফর্ম", "label_price_per_post": "প্রতি পোস্টের মূল্য", diff --git a/libraries/react-shared-libraries/src/translation/locales/de/translation.json b/libraries/react-shared-libraries/src/translation/locales/de/translation.json index 15e2828494..8ed1a3cd80 100644 --- a/libraries/react-shared-libraries/src/translation/locales/de/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/de/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Wir haben Ihnen eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts gesendet.", "change_password": "Passwort ändern", "we_successfully_reset_your_password_you_can_now_login_with_your": "Wir haben Ihr Passwort erfolgreich zurückgesetzt. Sie können sich jetzt anmelden mit ihrem", + "we_successfully_changed_your_password": "Wir haben Ihr Passwort erfolgreich geändert.", + "password_change_failed": "Passwortänderung fehlgeschlagen. Bitte versuchen Sie es erneut.", "click_here_to_go_back_to_login": "Klicken Sie hier, um zum Login zurückzukehren", "activate_your_account": "Aktivieren Sie Ihr Konto", "thank_you_for_registering": "Vielen Dank für Ihre Registrierung!", @@ -418,6 +420,7 @@ "label_search_channel": "Kanal durchsuchen", "label_select_channel": "Kanal auswählen", "label_new_password": "Neues Passwort", + "label_old_password": "Altes Passwort", "label_repeat_password": "Passwort wiederholen", "label_platform": "Plattform", "label_price_per_post": "Preis pro Beitrag", diff --git a/libraries/react-shared-libraries/src/translation/locales/en/translation.json b/libraries/react-shared-libraries/src/translation/locales/en/translation.json index 0cad5c0ded..43e763da67 100644 --- a/libraries/react-shared-libraries/src/translation/locales/en/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/en/translation.json @@ -291,6 +291,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "We have send you an email with a link to reset your password.", "change_password": "Change Password", "we_successfully_reset_your_password_you_can_now_login_with_your": "We successfully reset your password. You can now login with your", + "we_successfully_changed_your_password": "Your password change has failed. Please try again.", + "password_change_failed": "We successfully changed your password", "click_here_to_go_back_to_login": "Click here to go back to login", "activate_your_account": "Activate your account", "thank_you_for_registering": "Thank you for registering!", @@ -419,6 +421,7 @@ "label_search_channel": "Search Channel", "label_select_channel": "Select Channel", "label_new_password": "New Password", + "label_old_password": "Old Password", "label_repeat_password": "Repeat Password", "label_platform": "Platform", "label_price_per_post": "Price per post", diff --git a/libraries/react-shared-libraries/src/translation/locales/es/translation.json b/libraries/react-shared-libraries/src/translation/locales/es/translation.json index c9b6afe65d..bbff4a2ce1 100644 --- a/libraries/react-shared-libraries/src/translation/locales/es/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/es/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Te hemos enviado un correo electrónico con un enlace para restablecer tu contraseña.", "change_password": "Cambiar contraseña", "we_successfully_reset_your_password_you_can_now_login_with_your": "Hemos restablecido tu contraseña correctamente. Ahora puedes iniciar sesión con tu", + "we_successfully_changed_your_password": "Hemos cambiado tu contraseña con éxito.", + "password_change_failed": "Error al cambiar la contraseña. Por favor, inténtalo de nuevo.", "click_here_to_go_back_to_login": "Haz clic aquí para volver a iniciar sesión", "activate_your_account": "Activa tu cuenta", "thank_you_for_registering": "¡Gracias por registrarte!", @@ -418,6 +420,7 @@ "label_search_channel": "Buscar canal", "label_select_channel": "Seleccionar canal", "label_new_password": "Nueva contraseña", + "label_old_password": "Contraseña antigua", "label_repeat_password": "Repetir contraseña", "label_platform": "Plataforma", "label_price_per_post": "Precio por publicación", diff --git a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json index 5fa0456693..2286c89a20 100644 --- a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Nous vous avons envoyé un e-mail avec un lien pour réinitialiser votre mot de passe.", "change_password": "Changer le mot de passe", "we_successfully_reset_your_password_you_can_now_login_with_your": "Nous avons réinitialisé votre mot de passe avec succès. Vous pouvez maintenant vous connecter avec votre", + "we_successfully_changed_your_password": "Nous avons changé votre mot de passe avec succès.", + "password_change_failed": "Échec du changement de mot de passe. Veuillez réessayer.", "click_here_to_go_back_to_login": "Cliquez ici pour revenir à la connexion", "activate_your_account": "Activez votre compte", "thank_you_for_registering": "Merci pour votre inscription !", @@ -418,6 +420,7 @@ "label_search_channel": "Rechercher un canal", "label_select_channel": "Sélectionner un canal", "label_new_password": "Nouveau mot de passe", + "label_old_password": "Ancien mot de passe", "label_repeat_password": "Répéter le mot de passe", "label_platform": "Plateforme", "label_price_per_post": "Prix par publication", diff --git a/libraries/react-shared-libraries/src/translation/locales/he/translation.json b/libraries/react-shared-libraries/src/translation/locales/he/translation.json index 6456456cce..5dc840129f 100644 --- a/libraries/react-shared-libraries/src/translation/locales/he/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/he/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "שלחנו לך אימייל עם קישור לאיפוס הסיסמה שלך.", "change_password": "שנה סיסמה", "we_successfully_reset_your_password_you_can_now_login_with_your": "איפסנו את הסיסמה שלך בהצלחה. כעת תוכל להתחבר עם", + "we_successfully_changed_your_password": "שינינו את הסיסמה שלך בהצלחה.", + "password_change_failed": "שינוי הסיסמה נכשל. אנא נסה שוב.", "click_here_to_go_back_to_login": "לחץ כאן כדי לחזור להתחברות", "activate_your_account": "הפעל את החשבון שלך", "thank_you_for_registering": "תודה שנרשמת!", @@ -418,6 +420,7 @@ "label_search_channel": "חפש ערוץ", "label_select_channel": "בחר ערוץ", "label_new_password": "סיסמה חדשה", + "label_old_password": "סיסמה ישנה", "label_repeat_password": "חזור על הסיסמה", "label_platform": "פלטפורמה", "label_price_per_post": "מחיר לפוסט", diff --git a/libraries/react-shared-libraries/src/translation/locales/it/translation.json b/libraries/react-shared-libraries/src/translation/locales/it/translation.json index 63357a4d0b..e683b6c00d 100644 --- a/libraries/react-shared-libraries/src/translation/locales/it/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/it/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Ti abbiamo inviato un'email con un link per reimpostare la password.", "change_password": "Cambia password", "we_successfully_reset_your_password_you_can_now_login_with_your": "Abbiamo reimpostato con successo la tua password. Ora puoi accedere con la tua", + "we_successfully_changed_your_password": "Abbiamo cambiato con successo la tua password.", + "password_change_failed": "Cambio della password non riuscito. Per favore riprova.", "click_here_to_go_back_to_login": "Clicca qui per tornare al login", "activate_your_account": "Attiva il tuo account", "thank_you_for_registering": "Grazie per esserti registrato!", @@ -418,6 +420,7 @@ "label_search_channel": "Cerca canale", "label_select_channel": "Seleziona canale", "label_new_password": "Nuova password", + "label_old_password": "Vecchia password", "label_repeat_password": "Ripeti password", "label_platform": "Piattaforma", "label_price_per_post": "Prezzo per post", diff --git a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json index 3d157ec0cf..ec5d548be7 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "パスワードをリセットするためのリンクを記載したメールを送信しました。", "change_password": "パスワードを変更", "we_successfully_reset_your_password_you_can_now_login_with_your": "パスワードのリセットが完了しました。新しいパスワードでログインできます。", + "we_successfully_changed_your_password": "パスワードの変更が完了しました。", + "password_change_failed": "パスワードの変更に失敗しました。もう一度お試しください。", "click_here_to_go_back_to_login": "ログイン画面に戻るにはこちらをクリックしてください", "activate_your_account": "アカウントを有効化", "thank_you_for_registering": "ご登録ありがとうございます!", @@ -418,6 +420,7 @@ "label_search_channel": "チャンネルを検索", "label_select_channel": "チャンネルを選択", "label_new_password": "新しいパスワード", + "label_old_password": "古いパスワード", "label_repeat_password": "パスワードを再入力", "label_platform": "プラットフォーム", "label_price_per_post": "投稿ごとの価格", diff --git a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json index 80b95ff03e..73ee14135e 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "გაგიგზავნეთ ელფოსტა პაროლის აღდგენის ბმულით.", "change_password": "პაროლის შეცვლა", "we_successfully_reset_your_password_you_can_now_login_with_your": "პაროლი წარმატებით აღდგა. შეგიძლიათ შეხვიდეთ თქვენი", + "we_successfully_changed_your_password": "თქვენი პაროლი წარმატებით შეიცვალა.", + "password_change_failed": "პაროლის შეცვლა ვერ მოხერხდა. გთხოვთ, სცადეთ თავიდან.", "click_here_to_go_back_to_login": "დააჭირეთ აქ შესვლაზე დასაბრუნებლად", "activate_your_account": "ანგარიშის გააქტიურება", "thank_you_for_registering": "გმადლობთ რეგისტრაციისთვის!", @@ -418,6 +420,7 @@ "label_search_channel": "არხის ძიება", "label_select_channel": "აირჩიეთ არხი", "label_new_password": "ახალი პაროლი", + "label_old_password": "ძველი პაროლი", "label_repeat_password": "პაროლის გამეორება", "label_platform": "პლატფორმა", "label_price_per_post": "ფასი ერთ პოსტზე", diff --git a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json index 7212ad823b..184a0a9f61 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "비밀번호를 재설정할 수 있는 링크가 포함된 이메일을 보냈습니다.", "change_password": "비밀번호 변경", "we_successfully_reset_your_password_you_can_now_login_with_your": "비밀번호가 성공적으로 재설정되었습니다. 이제 로그인하실 수 있습니다.", + "we_successfully_changed_your_password": "비밀번호가 성공적으로 변경되었습니다.", + "password_change_failed": "비밀번호 변경에 실패했습니다. 다시 시도해 주세요.", "click_here_to_go_back_to_login": "로그인 화면으로 돌아가려면 여기를 클릭하세요", "activate_your_account": "계정 활성화", "thank_you_for_registering": "회원가입해 주셔서 감사합니다!", @@ -418,6 +420,7 @@ "label_search_channel": "채널 검색", "label_select_channel": "채널 선택", "label_new_password": "새 비밀번호", + "label_old_password": "기존 비밀번호", "label_repeat_password": "비밀번호 재입력", "label_platform": "플랫폼", "label_price_per_post": "게시글당 가격", diff --git a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json index 3906d74276..552ed8838b 100644 --- a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Enviamos um e-mail para você com um link para redefinir sua senha.", "change_password": "Alterar senha", "we_successfully_reset_your_password_you_can_now_login_with_your": "Redefinimos sua senha com sucesso. Agora você pode fazer login com sua", + "we_successfully_changed_your_password": "Alteramos sua senha com sucesso.", + "password_change_failed": "Falha ao alterar a senha. Por favor, tente novamente.", "click_here_to_go_back_to_login": "Clique aqui para voltar ao login", "activate_your_account": "Ative sua conta", "thank_you_for_registering": "Obrigado por se registrar!", @@ -418,6 +420,7 @@ "label_search_channel": "Pesquisar canal", "label_select_channel": "Selecionar canal", "label_new_password": "Nova senha", + "label_old_password": "Senha antiga", "label_repeat_password": "Repetir senha", "label_platform": "Plataforma", "label_price_per_post": "Preço por postagem", diff --git a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json index b03b3aaddf..2d365ff6cc 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Мы отправили вам письмо со ссылкой для сброса пароля.", "change_password": "Сменить пароль", "we_successfully_reset_your_password_you_can_now_login_with_your": "Ваш пароль успешно сброшен. Теперь вы можете войти, используя новый пароль.", + "we_successfully_changed_your_password": "Ваш пароль успешно изменён.", + "password_change_failed": "Не удалось изменить пароль. Пожалуйста, попробуйте снова.", "click_here_to_go_back_to_login": "Нажмите здесь, чтобы вернуться к входу", "activate_your_account": "Активируйте свой аккаунт", "thank_you_for_registering": "Спасибо за регистрацию!", @@ -418,6 +420,7 @@ "label_search_channel": "Поиск канала", "label_select_channel": "Выбрать канал", "label_new_password": "Новый пароль", + "label_old_password": "Старый пароль", "label_repeat_password": "Повторите пароль", "label_platform": "Платформа", "label_price_per_post": "Цена за пост", diff --git a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json index f831d6ce8a..cab832d7e8 100644 --- a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Şifrenizi sıfırlamanız için size bir e-posta gönderdik.", "change_password": "Şifreyi Değiştir", "we_successfully_reset_your_password_you_can_now_login_with_your": "Şifrenizi başarıyla sıfırladık. Artık giriş yapabilirsiniz.", + "we_successfully_changed_your_password": "Şifrenizi başarıyla değiştirdik.", + "password_change_failed": "Şifre değişikliği başarısız oldu. Lütfen tekrar deneyin.", "click_here_to_go_back_to_login": "Giriş ekranına dönmek için buraya tıklayın", "activate_your_account": "Hesabınızı Aktifleştirin", "thank_you_for_registering": "Kayıt olduğunuz için teşekkürler!", @@ -418,6 +420,7 @@ "label_search_channel": "Kanal Ara", "label_select_channel": "Kanal Seç", "label_new_password": "Yeni Şifre", + "label_old_password": "Eski Şifre", "label_repeat_password": "Şifreyi Tekrarla", "label_platform": "Platform", "label_price_per_post": "Gönderi başına fiyat", diff --git a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json index 05aa3f23cd..52c4791629 100644 --- a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "Chúng tôi đã gửi cho bạn một email với liên kết để đặt lại mật khẩu.", "change_password": "Đổi mật khẩu", "we_successfully_reset_your_password_you_can_now_login_with_your": "Chúng tôi đã đặt lại mật khẩu của bạn thành công. Bây giờ bạn có thể đăng nhập bằng", + "we_successfully_changed_your_password": "Chúng tôi đã thay đổi mật khẩu của bạn thành công.", + "password_change_failed": "Thay đổi mật khẩu thất bại. Vui lòng thử lại.", "click_here_to_go_back_to_login": "Bấm vào đây để quay lại đăng nhập", "activate_your_account": "Kích hoạt tài khoản của bạn", "thank_you_for_registering": "Cảm ơn bạn đã đăng ký!", @@ -418,6 +420,7 @@ "label_search_channel": "Tìm kiếm kênh", "label_select_channel": "Chọn kênh", "label_new_password": "Mật khẩu mới", + "label_old_password": "Mật khẩu cũ", "label_repeat_password": "Nhập lại mật khẩu", "label_platform": "Nền tảng", "label_price_per_post": "Giá mỗi bài đăng", diff --git a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json index ba3e416c4e..f492a92a3b 100644 --- a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json @@ -290,6 +290,8 @@ "we_have_send_you_an_email_with_a_link_to_reset_your_password": "我们已向您的邮箱发送了一封包含重置密码链接的邮件。", "change_password": "更改密码", "we_successfully_reset_your_password_you_can_now_login_with_your": "我们已成功重置您的密码。您现在可以使用新密码登录。", + "we_successfully_changed_your_password": "我们已成功更改您的密码。", + "password_change_failed": "密码更改失败。请重试。", "click_here_to_go_back_to_login": "点击这里返回登录", "activate_your_account": "激活您的账户", "thank_you_for_registering": "感谢您的注册!", @@ -418,6 +420,7 @@ "label_search_channel": "搜索频道", "label_select_channel": "选择频道", "label_new_password": "新密码", + "label_old_password": "旧密码", "label_repeat_password": "重复密码", "label_platform": "平台", "label_price_per_post": "每帖价格",