mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
a876fb2634
* feat(auth): passkey (WebAuthn) login — server endpoints, schema + admin toggle Add @simplewebauthn/server registration and primary (discoverable) login ceremonies under /api/auth/passkey, a webauthn_credentials + single-use webauthn_challenges schema (migration), the instance-wide passkey_login toggle (default off) enforced before auth by a guard, and require_mfa satisfaction via a verified passkey. RP ID/origin come only from server config (webauthn_rp_id/origins -> APP_URL), never request headers. * feat(auth): passkey enrolment, login button + admin settings UI PasskeysSection in account settings (add/rename/remove with a current-password step-up), a 'Sign in with a passkey' button on the login page, the admin enable + RP-ID/origins controls, and a per-user admin reset action. * i18n(auth): passkey strings across all locales Add login/settings/admin passkey keys to en and all 19 translated locales.
107 lines
7.7 KiB
TypeScript
107 lines
7.7 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const login: TranslationStrings = {
|
||
'login.error': 'Η σύνδεση απέτυχε. Παρακαλώ ελέγξτε τα στοιχεία σας.',
|
||
'login.tagline': 'Τα Ταξίδια σας.\nΤο Σχέδιό σας.',
|
||
'login.description':
|
||
'Σχεδιάστε ταξίδια συνεργατικά με διαδραστικούς χάρτες, προϋπολογισμούς και συγχρονισμό σε πραγματικό χρόνο.',
|
||
'login.features.maps': 'Διαδραστικοί Χάρτες',
|
||
'login.features.mapsDesc': 'Google Places, διαδρομές & ομαδοποίηση',
|
||
'login.features.realtime': 'Συγχρονισμός Πραγματικού Χρόνου',
|
||
'login.features.realtimeDesc': 'Σχεδιάστε μαζί μέσω WebSocket',
|
||
'login.features.budget': 'Παρακολούθηση Προϋπολογισμού',
|
||
'login.features.budgetDesc': 'Κατηγορίες, γραφήματα & κόστος ανά άτομο',
|
||
'login.features.collab': 'Συνεργασία',
|
||
'login.features.collabDesc': 'Πολλαπλοί χρήστες με κοινόχρηστα ταξίδια',
|
||
'login.features.packing': 'Λίστες Πακεταρίσματος',
|
||
'login.features.packingDesc': 'Κατηγορίες, πρόοδος & προτάσεις',
|
||
'login.features.bookings': 'Κρατήσεις',
|
||
'login.features.bookingsDesc': 'Πτήσεις, ξενοδοχεία, εστιατόρια & άλλα',
|
||
'login.features.files': 'Έγγραφα',
|
||
'login.features.filesDesc': 'Μεταφόρτωση & διαχείριση εγγράφων',
|
||
'login.features.routes': 'Έξυπνες Διαδρομές',
|
||
'login.features.routesDesc':
|
||
'Αυτόματη βελτιστοποίηση & εξαγωγή στο Google Maps',
|
||
'login.selfHosted':
|
||
'Self-hosted \u00B7 Open Source \u00B7 Τα δεδομένα σας παραμένουν δικά σας',
|
||
'login.title': 'Σύνδεση',
|
||
'login.subtitle': 'Καλώς ήρθατε πίσω',
|
||
'login.signingIn': 'Σύνδεση…',
|
||
'login.signIn': 'Σύνδεση',
|
||
'login.createAdmin': 'Δημιουργία Λογαριασμού Διαχειριστή',
|
||
'login.createAdminHint':
|
||
'Ρυθμίστε τον πρώτο λογαριασμό διαχειριστή για το TREK.',
|
||
'login.setNewPassword': 'Ορισμός Νέου Κωδικού',
|
||
'login.setNewPasswordHint':
|
||
'Πρέπει να αλλάξετε τον κωδικό σας πριν συνεχίσετε.',
|
||
'login.createAccount': 'Δημιουργία Λογαριασμού',
|
||
'login.createAccountHint': 'Καταχωρήστε έναν νέο λογαριασμό.',
|
||
'login.creating': 'Δημιουργία…',
|
||
'login.noAccount': 'Δεν έχετε λογαριασμό;',
|
||
'login.hasAccount': 'Έχετε ήδη λογαριασμό;',
|
||
'login.register': 'Εγγραφή',
|
||
'login.emailPlaceholder': 'your@email.com',
|
||
'login.username': 'Όνομα χρήστη',
|
||
'login.oidc.registrationDisabled':
|
||
'Η εγγραφή είναι απενεργοποιημένη. Επικοινωνήστε με τον διαχειριστή σας.',
|
||
'login.oidc.noEmail': 'Δεν ελήφθη email από τον πάροχο.',
|
||
'login.oidc.tokenFailed': 'Ο έλεγχος ταυτότητας απέτυχε.',
|
||
'login.oidc.invalidState': 'Μη έγκυρη συνεδρία. Παρακαλώ δοκιμάστε ξανά.',
|
||
'login.demoFailed': 'Η σύνδεση demo απέτυχε',
|
||
'login.oidcSignIn': 'Σύνδεση με {name}',
|
||
'login.oidcOnly':
|
||
'Ο έλεγχος ταυτότητας με κωδικό είναι απενεργοποιημένος. Παρακαλώ συνδεθείτε χρησιμοποιώντας τον πάροχο SSO σας.',
|
||
'login.oidcLoggedOut':
|
||
'Έχετε αποσυνδεθεί. Συνδεθείτε ξανά χρησιμοποιώντας τον πάροχο SSO σας.',
|
||
'login.demoHint': 'Δοκιμάστε το demo — δεν απαιτείται εγγραφή',
|
||
'login.mfaTitle': 'Έλεγχος ταυτότητας δύο παραγόντων',
|
||
'login.mfaSubtitle':
|
||
'Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή authenticator σας.',
|
||
'login.mfaCodeLabel': 'Κωδικός επαλήθευσης',
|
||
'login.mfaCodeRequired':
|
||
'Εισάγετε τον κωδικό από την εφαρμογή authenticator σας.',
|
||
'login.mfaHint':
|
||
'Ανοίξτε το Google Authenticator, Authy ή άλλη εφαρμογή TOTP.',
|
||
'login.mfaBack': '← Πίσω στη σύνδεση',
|
||
'login.mfaVerify': 'Επαλήθευση',
|
||
'login.invalidInviteLink': 'Μη έγκυρος ή ληγμένος σύνδεσμος πρόσκλησης',
|
||
'login.oidcFailed': 'Η σύνδεση OIDC απέτυχε',
|
||
'login.usernameRequired': 'Το όνομα χρήστη είναι υποχρεωτικό',
|
||
'login.passwordMinLength':
|
||
'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
|
||
'login.forgotPassword': 'Ξεχάσατε τον κωδικό;',
|
||
'login.forgotPasswordTitle': 'Επαναφορά του κωδικού σας',
|
||
'login.forgotPasswordBody':
|
||
'Εισάγετε το email με το οποίο εγγραφήκατε. Αν υπάρχει λογαριασμός, θα στείλουμε έναν σύνδεσμο επαναφοράς.',
|
||
'login.forgotPasswordSubmit': 'Αποστολή συνδέσμου επαναφοράς',
|
||
'login.forgotPasswordSentTitle': 'Ελέγξτε το email σας',
|
||
'login.forgotPasswordSentBody':
|
||
"Αν υπάρχει λογαριασμός για αυτό το email, ένας σύνδεσμος επαναφοράς είναι καθ'οδόν. Λήγει σε 60 λεπτά.",
|
||
'login.forgotPasswordSmtpHintOff':
|
||
'Προσοχή: ο διαχειριστής σας δεν έχει διαμορφώσει SMTP, οπότε ο σύνδεσμος επαναφοράς θα γραφτεί στην κονσόλα του server αντί να σταλεί με email.',
|
||
'login.backToLogin': 'Πίσω στη σύνδεση',
|
||
'login.newPassword': 'Νέος κωδικός',
|
||
'login.confirmPassword': 'Επιβεβαίωση νέου κωδικού',
|
||
'login.passwordsDontMatch': 'Οι κωδικοί δεν ταιριάζουν',
|
||
'login.mfaCode': 'Κωδικός 2FA',
|
||
'login.resetPasswordTitle': 'Ορίστε έναν νέο κωδικό',
|
||
'login.resetPasswordBody':
|
||
'Επιλέξτε έναν ισχυρό κωδικό που δεν έχετε χρησιμοποιήσει εδώ ξανά. Ελάχιστο 8 χαρακτήρες.',
|
||
'login.resetPasswordMfaBody':
|
||
'Εισάγετε τον κωδικό 2FA ή έναν εφεδρικό κωδικό για να ολοκληρωθεί η επαναφορά.',
|
||
'login.resetPasswordSubmit': 'Επαναφορά κωδικού',
|
||
'login.resetPasswordVerify': 'Επαλήθευση & επαναφορά',
|
||
'login.resetPasswordSuccessTitle': 'Ο κωδικός ενημερώθηκε',
|
||
'login.resetPasswordSuccessBody':
|
||
'Μπορείτε τώρα να συνδεθείτε με τον νέο σας κωδικό.',
|
||
'login.resetPasswordInvalidLink': 'Μη έγκυρος σύνδεσμος επαναφοράς',
|
||
'login.resetPasswordInvalidLinkBody':
|
||
'Αυτός ο σύνδεσμος λείπει ή έχει χαλάσει. Ζητήστε έναν νέο για να συνεχίσετε.',
|
||
'login.resetPasswordFailed':
|
||
'Η επαναφορά απέτυχε. Ο σύνδεσμος μπορεί να έχει λήξει.',
|
||
'login.passkey.signIn': 'Σύνδεση με passkey',
|
||
'login.passkey.failed':
|
||
'Η σύνδεση με passkey απέτυχε. Παρακαλώ δοκιμάστε ξανά.',
|
||
};
|
||
export default login;
|