diff --git a/registration/src/lib/components/buttons/DeleteAccountButton.svelte b/registration/src/lib/components/buttons/DeleteAccountButton.svelte new file mode 100644 index 0000000..08a6587 --- /dev/null +++ b/registration/src/lib/components/buttons/DeleteAccountButton.svelte @@ -0,0 +1,19 @@ + + + diff --git a/registration/src/lib/components/icons/DeleteAccountIcon.svelte b/registration/src/lib/components/icons/DeleteAccountIcon.svelte new file mode 100644 index 0000000..a150017 --- /dev/null +++ b/registration/src/lib/components/icons/DeleteAccountIcon.svelte @@ -0,0 +1,5 @@ + + diff --git a/registration/src/lib/components/user/LoggedUser.svelte b/registration/src/lib/components/user/LoggedUser.svelte index b230653..7e66f6a 100644 --- a/registration/src/lib/components/user/LoggedUser.svelte +++ b/registration/src/lib/components/user/LoggedUser.svelte @@ -3,6 +3,7 @@ import Avatar from '$components/icons/AvatarIcon.svelte'; import { t } from 'svelte-i18n'; import { clickOutside } from '$utils/html'; + import DeleteAccountButton from '../buttons/DeleteAccountButton.svelte'; export let username: string; export let firstName: string; @@ -37,16 +38,22 @@ > -
+
-
diff --git a/registration/src/lib/components/user/MobileSuccessInfo.svelte b/registration/src/lib/components/user/MobileSuccessInfo.svelte index 52317bc..81d0c0a 100644 --- a/registration/src/lib/components/user/MobileSuccessInfo.svelte +++ b/registration/src/lib/components/user/MobileSuccessInfo.svelte @@ -5,6 +5,7 @@ import CopyIcon from '../icons/CopyIcon.svelte'; import { copyToClipboard } from '$utils/clipboard'; import Toast from '../display/Toast.svelte'; + import DeleteAccountButton from '../buttons/DeleteAccountButton.svelte'; export let firstName: string; export let lastName: string; @@ -76,6 +77,11 @@ >
{/if} +
+ +
-{ $t('matrix-id-copied') } +{$t('matrix-id-copied')} diff --git a/registration/src/lib/i18n/ar.json b/registration/src/lib/i18n/ar.json index 57b7660..f8d9d40 100644 --- a/registration/src/lib/i18n/ar.json +++ b/registration/src/lib/i18n/ar.json @@ -1,83 +1,84 @@ { - "welcome": "معرف توايك هو مدخلك الوحيد إلى جميع خدمات الدردشة والبريد و الملفات", - "Sign up": "التسجيل", - "Sign in": "تسجيل الدخول", - "First Name": "الاسم", - "Last Name": "اسم العائلة", - "Username": "اسم المستخدم", - "Password": "كلمة المرور", - "Confirm password": "تأكيد كلمة المرور", - "Phone number": "رقم الهاتف", - "uela": "أوافق على اتفاقية المستخدم و استخدام البيانات الشخصية الشروط بموجب الشروط المنصوص عليها في اتفاقية سياسة الخصوصية .", - "Cellphone / Username / Email": "رقم الهاتف / اسم المستخدم / البريد الإلكتروني", - "logged_hero": "معرف تويك هو إدخالك الوحيد الوصول إلى جميع خدماتنا الدردشة والبريد الملفات", - "Congratulations": "تهانينا", - "You are all set up": "لقد تم إعداد كل شيء.", - "logged_twakeid_choose": "قم بتسجيل الدخول إلى الدردشة و الملفات و البريد باستخدام معرف تويك الخاص بك", - "logged_twakeid_choose_mobile": "قم بتسجيل الدخول إلى الملفات و البريد باستخدام بيانات اعتماد تويك", - "twake_chat_description": "الاتصالات المؤسسية اللامركزية تبدأ من هنا", - "tdrive_description": "شارك الملفات وتعاون عليها بشكل آمن، في أي مكان", - "tmail_description": "جرب التواصل عبر البريد الإلكتروني كما لم يحدث من قبل", - "Logout": "تسجيل خروج", - "Matrix ID/Email": "معرف ماتريكس/البريد الإلكتروني", - "username_info_tooltip": "سيتم استخدام اسم المستخدم الذي تدخله لتشكيل معرف ماتريكس الخاص بك بالإضافة إلى عنوان بريد تويك الخاص بك.", - "Ok-got-it": "حسنا ، فهمت", - "username_taken": "عذرا، اسم المستخدم مستعمل", - "weak_password": "كلمة مرور ضعيفة. يجب أن يكون طولها 8 أحرف على الأقل وتحتوي على حرف كبير وحرف صغير ورقم", - "password_mismatch": "كلمات المرور غير متطابقة", - "Number is already registered": "الرقم مسجل سابقا", - "instead": "بدلا", - "6-digit": "أدخل الرمز المكون من 6 أرقام الذي أرسلناه إلى", - "Confirm": "أكد", - "Start your journey": "ابدأ رحلتك", - "Your phone number successfully confirmed": "تم تأكيد رقم هاتفك بنجاح.", - "Error": "خطأ", - "Invalid credentials": "بيانات الاعتماد غير صالحة", - "invalid Username": "اسم المستخدم غير صالح", - "accept terms and conditions": "قبول الشروط والأحكام", - "invalid phone number": "الرقم الذي أدخلته غير صالح. حاول ثانية.", - "login": "تسجيل الدخول", - "hide or show": "إخفاء أو إظهار", - "sign-in-instead": "تسجيل الدخول بدلا من ذلك", - "this-number-is-already-registered-sign-in-instead": "هذا الرقم مسجل سابقا. سجل الدخول بدلا من ذلك.", - "too-many-wrong-attempts-has-been-made-try-again-later": "لقد تم إجراء الكثير من المحاولات الخاطئة. حاول مرة أخرى لاحقا.", - "matrix-id-copied": "تم نسخ معرف متريكس إلى الحافظة", - "mobile-app": "تطبيق الجوال", - "open-twake": "افتح تويك", - "available-usernames": "أسماء المستخدمين المتاحة", - "twake-phone-number": "رقم هاتف تويك", - "twake-matrix-id": "معرف مصفوفة تويك", - "sorry-something-went-wrong-please-try-again": "عذرًا، حدث خطأ ما، يرجى المحاولة مرة أخرى.", - "entered-code-is-incorrect-try-again": "الرمز الذي تم إدخاله غير صحيح. حاول ثانية.", - "twake-mail": "بريد تويك", - "Choose-a-country": "اختر بلدا", - "Search": "بحث", - "Your-phone-number": "رقم الهاتف", - "please-confirm": "يرجى تأكيد رمز البلد الخاص بك وإدخال رقم هاتفك.", - "Next": "التالي", - "Confirm-your-code": "قم بتأكيد الرمز الخاص بك", - "Resend": "إعادة إرسال", - "Resend-in": "إعادة الإرسال في", - "continue-sign-up": "متابعة التسجيل", - "Set-your-password": "عين كلمة المرور الخاصة بك", - "Create-Twake-ID": "إنشاء معرف تويك", - "end-to-end-encryption-collaborative-features-for-secure-and-efficient-teamwork": "تشفير شامل وميزات تعاونية للعمل الجماعي الآمن والفعال", - "set-a-strong-password-with-letters-numbers-and-symbols": "قم بتعيين كلمة مرور قوية مكونة من أحرف وأرقام ورموز", - "Faster-and-more-convenient": "أسرع وأكثر ملاءمة", - "download-app": "قم بتنزيل تطبيق {name} الجديد", - "Download": "تحميل", - "failed-to-send-otp": "فشل إرسال كلمة المرور، يرجى المحاولة مرة أخرى لاحقًا", - "otp-check-failed": "فشل التحقق من كلمة المرور، يرجى محاولة إرسال رمز جديد", - "recover-password": "إستعادة كلمة المرور", - "recovery-phone-prompt": "الرجاء إدخال رقم الهاتف المرتبط\n\nمع حسابك. \nسنرسل لك رمز التحقق لإعادة تعيين كلمة المرور الخاصة بك", - "phone-not-found": "رقم الهاتف هذا غير مرتبط بأي حساب", - "no-code-received": "لم تحصل على الرمز؟", - "set-new-password": "قم بتعيين كلمة المرور الجديدة الخاصة بك", - "new-password-policy": "كلمات المرور القوية تبقيك آمنًا! \nمزج الحروف الكبيرة والصغيرة والأرقام والرموز", - "set-password": "ضبط كلمة السر", - "go-sign-in": "اذهب لتسجيل الدخول", - "password-updated": "تم الآن تحديث كلمة المرور الخاصة بك. \nيمكنك الآن تسجيل الدخول باستخدام كلمة المرور الجديدة الخاصة بك", - "forgot-password": "هل نسيت كلمة المرور الخاصة بك؟", - "not-found": "غير موجود", - "404-error-message": "عذرا! لم نتمكن من العثور على ما تبحث عنه." + "welcome": "معرف توايك هو مدخلك الوحيد إلى جميع خدمات الدردشة والبريد و الملفات", + "Sign up": "التسجيل", + "Sign in": "تسجيل الدخول", + "First Name": "الاسم", + "Last Name": "اسم العائلة", + "Username": "اسم المستخدم", + "Password": "كلمة المرور", + "Confirm password": "تأكيد كلمة المرور", + "Phone number": "رقم الهاتف", + "uela": "أوافق على اتفاقية المستخدم و استخدام البيانات الشخصية الشروط بموجب الشروط المنصوص عليها في اتفاقية سياسة الخصوصية .", + "Cellphone / Username / Email": "رقم الهاتف / اسم المستخدم / البريد الإلكتروني", + "logged_hero": "معرف تويك هو إدخالك الوحيد الوصول إلى جميع خدماتنا الدردشة والبريد الملفات", + "Congratulations": "تهانينا", + "You are all set up": "لقد تم إعداد كل شيء.", + "logged_twakeid_choose": "قم بتسجيل الدخول إلى الدردشة و الملفات و البريد باستخدام معرف تويك الخاص بك", + "logged_twakeid_choose_mobile": "قم بتسجيل الدخول إلى الملفات و البريد باستخدام بيانات اعتماد تويك", + "twake_chat_description": "الاتصالات المؤسسية اللامركزية تبدأ من هنا", + "tdrive_description": "شارك الملفات وتعاون عليها بشكل آمن، في أي مكان", + "tmail_description": "جرب التواصل عبر البريد الإلكتروني كما لم يحدث من قبل", + "Logout": "تسجيل خروج", + "Matrix ID/Email": "معرف ماتريكس/البريد الإلكتروني", + "username_info_tooltip": "سيتم استخدام اسم المستخدم الذي تدخله لتشكيل معرف ماتريكس الخاص بك بالإضافة إلى عنوان بريد تويك الخاص بك.", + "Ok-got-it": "حسنا ، فهمت", + "username_taken": "عذرا، اسم المستخدم مستعمل", + "weak_password": "كلمة مرور ضعيفة. يجب أن يكون طولها 8 أحرف على الأقل وتحتوي على حرف كبير وحرف صغير ورقم", + "password_mismatch": "كلمات المرور غير متطابقة", + "Number is already registered": "الرقم مسجل سابقا", + "instead": "بدلا", + "6-digit": "أدخل الرمز المكون من 6 أرقام الذي أرسلناه إلى", + "Confirm": "أكد", + "Start your journey": "ابدأ رحلتك", + "Your phone number successfully confirmed": "تم تأكيد رقم هاتفك بنجاح.", + "Error": "خطأ", + "Invalid credentials": "بيانات الاعتماد غير صالحة", + "invalid Username": "اسم المستخدم غير صالح", + "accept terms and conditions": "قبول الشروط والأحكام", + "invalid phone number": "الرقم الذي أدخلته غير صالح. حاول ثانية.", + "login": "تسجيل الدخول", + "hide or show": "إخفاء أو إظهار", + "sign-in-instead": "تسجيل الدخول بدلا من ذلك", + "this-number-is-already-registered-sign-in-instead": "هذا الرقم مسجل سابقا. سجل الدخول بدلا من ذلك.", + "too-many-wrong-attempts-has-been-made-try-again-later": "لقد تم إجراء الكثير من المحاولات الخاطئة. حاول مرة أخرى لاحقا.", + "matrix-id-copied": "تم نسخ معرف متريكس إلى الحافظة", + "mobile-app": "تطبيق الجوال", + "open-twake": "افتح تويك", + "available-usernames": "أسماء المستخدمين المتاحة", + "twake-phone-number": "رقم هاتف تويك", + "twake-matrix-id": "معرف مصفوفة تويك", + "sorry-something-went-wrong-please-try-again": "عذرًا، حدث خطأ ما، يرجى المحاولة مرة أخرى.", + "entered-code-is-incorrect-try-again": "الرمز الذي تم إدخاله غير صحيح. حاول ثانية.", + "twake-mail": "بريد تويك", + "Choose-a-country": "اختر بلدا", + "Search": "بحث", + "Your-phone-number": "رقم الهاتف", + "please-confirm": "يرجى تأكيد رمز البلد الخاص بك وإدخال رقم هاتفك.", + "Next": "التالي", + "Confirm-your-code": "قم بتأكيد الرمز الخاص بك", + "Resend": "إعادة إرسال", + "Resend-in": "إعادة الإرسال في", + "continue-sign-up": "متابعة التسجيل", + "Set-your-password": "عين كلمة المرور الخاصة بك", + "Create-Twake-ID": "إنشاء معرف تويك", + "end-to-end-encryption-collaborative-features-for-secure-and-efficient-teamwork": "تشفير شامل وميزات تعاونية للعمل الجماعي الآمن والفعال", + "set-a-strong-password-with-letters-numbers-and-symbols": "قم بتعيين كلمة مرور قوية مكونة من أحرف وأرقام ورموز", + "Faster-and-more-convenient": "أسرع وأكثر ملاءمة", + "download-app": "قم بتنزيل تطبيق {name} الجديد", + "Download": "تحميل", + "failed-to-send-otp": "فشل إرسال كلمة المرور، يرجى المحاولة مرة أخرى لاحقًا", + "otp-check-failed": "فشل التحقق من كلمة المرور، يرجى محاولة إرسال رمز جديد", + "recover-password": "إستعادة كلمة المرور", + "recovery-phone-prompt": "الرجاء إدخال رقم الهاتف المرتبط\n\nمع حسابك. \nسنرسل لك رمز التحقق لإعادة تعيين كلمة المرور الخاصة بك", + "phone-not-found": "رقم الهاتف هذا غير مرتبط بأي حساب", + "no-code-received": "لم تحصل على الرمز؟", + "set-new-password": "قم بتعيين كلمة المرور الجديدة الخاصة بك", + "new-password-policy": "كلمات المرور القوية تبقيك آمنًا! \nمزج الحروف الكبيرة والصغيرة والأرقام والرموز", + "set-password": "ضبط كلمة السر", + "go-sign-in": "اذهب لتسجيل الدخول", + "password-updated": "تم الآن تحديث كلمة المرور الخاصة بك. \nيمكنك الآن تسجيل الدخول باستخدام كلمة المرور الجديدة الخاصة بك", + "forgot-password": "هل نسيت كلمة المرور الخاصة بك؟", + "not-found": "غير موجود", + "404-error-message": "عذرا! لم نتمكن من العثور على ما تبحث عنه.", + "delete-account": "حذف حسابك" } diff --git a/registration/src/lib/i18n/en.json b/registration/src/lib/i18n/en.json index 2c079c4..bdafd18 100644 --- a/registration/src/lib/i18n/en.json +++ b/registration/src/lib/i18n/en.json @@ -79,5 +79,6 @@ "forgot-password": "Forgot your pasword?", "not-found": "Not found", "404-error-message": "Oops! We couldn't find what you're looking for.", - "matrix-id-copied": "Matrix Id copied to clipboard" + "matrix-id-copied": "Matrix Id copied to clipboard", + "delete-account": "Delete account" } diff --git a/registration/src/lib/i18n/fr.json b/registration/src/lib/i18n/fr.json index 0cd34a1..8cbfd8e 100644 --- a/registration/src/lib/i18n/fr.json +++ b/registration/src/lib/i18n/fr.json @@ -79,5 +79,6 @@ "forgot-password": "Vous avez oublié votre mot de passe ?", "not-found": "Pas trouvé", "404-error-message": "Oops! Nous n'avons pas trouvé ce que vous cherchez.", - "matrix-id-copied": "Identifiant Matrix copié dans le presse-papiers" + "matrix-id-copied": "Identifiant Matrix copié dans le presse-papiers", + "delete-account": "Supprimer votre compte" } diff --git a/registration/src/lib/i18n/ru.json b/registration/src/lib/i18n/ru.json index 78d42ec..cea8354 100644 --- a/registration/src/lib/i18n/ru.json +++ b/registration/src/lib/i18n/ru.json @@ -79,5 +79,6 @@ "forgot-password": "Забыли свое пасеновое слово?", "not-found": "Не найдено", "404-error-message": "Упс! Мы не смогли найти то, что вы ищете.", - "matrix-id-copied": "Идентификатор Matrix скопирован в буфер обмена." + "matrix-id-copied": "Идентификатор Matrix скопирован в буфер обмена.", + "delete-account": "Удалить свой аккаунт" } diff --git a/registration/src/lib/i18n/vi.json b/registration/src/lib/i18n/vi.json index f5eaa67..82291f4 100644 --- a/registration/src/lib/i18n/vi.json +++ b/registration/src/lib/i18n/vi.json @@ -79,5 +79,6 @@ "forgot-password": "Bạn quên mật khẩu?", "not-found": "Không tìm thấy", "404-error-message": "Ối! Chúng tôi không thể tìm thấy những gì bạn đang tìm kiếm.", - "matrix-id-copied": "Đã sao chép Id Matrix vào bảng nhớ tạm" + "matrix-id-copied": "Đã sao chép Id Matrix vào bảng nhớ tạm", + "delete-account": "Xóa tài khoản của bạn" } diff --git a/registration/src/lib/utils/account.ts b/registration/src/lib/utils/account.ts new file mode 100644 index 0000000..34260f7 --- /dev/null +++ b/registration/src/lib/utils/account.ts @@ -0,0 +1,24 @@ +import { browser } from '$app/environment'; +import { goto } from '$app/navigation'; +import { env } from '$env/dynamic/public'; +import logger from '$services/logger'; + +/** + * Send a support mail to request account deletion. + * + * @param {string} user - User to request account deletion. + */ +export const sendAccountDeletionMail = (user: string) => { + if (!browser) return; + + const email = env.PUBLIC_SUPPORT_EMAIL ?? 'software@linagora.com'; + + try { + const subject = `${user} account deletion request`; + const url = `mailto:${email}?subject=${subject}`; + + goto(url); + } catch (error) { + logger.error('Failed to send account deletion email to support', { error }); + } +};