7dd834cd35
Build & Push Docker Image / build (push) Successful in 4m3s
Security: - rooms: rate-limit /invite-email (SMTP spam relay), validate share target user exists, guard timingSafeEqual against length mismatch in the presentation route (500 -> 403) - analytics: verify callback token before parsing the 5mb body so unauthenticated callers cannot buffer large payloads - caldav: rate-limit failed Basic-Auth attempts (token brute force), lowercase email lookup, case-insensitive principal check - auth: fall back to the in-memory rate-limit store when Redis is unavailable; previously every rate-limited endpoint (incl. login) returned 500 when the Redis connection was down UI/copy: - Home: factual hero copy and feature cards (6 instead of 9), fix double-rendered feature icon, remove fake stats row and pill badge; keep the background gradient and card layout - i18n: consistent informal tone, drop trailing exclamation marks from status toasts, remove emoji from transactional emails - new favicon (logo.svg), restore theme-based default brand logo Chore: - gitignore SQLite WAL/SHM files Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
2.1 KiB
JSON
51 lines
2.1 KiB
JSON
{
|
|
"email": {
|
|
"greeting": "Hello {name},",
|
|
"viewInvitation": "View Invitation",
|
|
"invitationFooter": "Open the link above to accept or decline the invitation.",
|
|
"linkHint": "Or copy this link in your browser:",
|
|
"verify": {
|
|
"subject": "{appName} - Verify your email",
|
|
"intro": "Please verify your email address by clicking the button below:",
|
|
"button": "Verify Email",
|
|
"validity": "This link is valid for 24 hours.",
|
|
"footer": "If you didn't register, please ignore this email."
|
|
},
|
|
"invite": {
|
|
"subject": "{appName} - You've been invited",
|
|
"title": "You have been invited",
|
|
"intro": "You have been invited to create an account on {appName}.",
|
|
"prompt": "Click the button below to register:",
|
|
"button": "Create Account",
|
|
"validity": "This link is valid for 7 days.",
|
|
"footer": "If you didn't expect this invitation, you can safely ignore this email."
|
|
},
|
|
"federationInvite": {
|
|
"subject": "{appName} - Meeting invitation from {fromUser}",
|
|
"intro": "You have received a meeting invitation from {fromUser}.",
|
|
"roomLabel": "Room:"
|
|
},
|
|
"guestInvite": {
|
|
"subject": "{appName} - You're invited to a meeting",
|
|
"intro": "{fromUser} has invited you to a meeting.",
|
|
"roomLabel": "Room:",
|
|
"joinButton": "Join Meeting",
|
|
"footer": "Click the button above to join the meeting."
|
|
},
|
|
"calendarInvite": {
|
|
"subject": "{appName} - Calendar invitation from {fromUser}",
|
|
"intro": "You have received a calendar invitation from {fromUser}."
|
|
},
|
|
"calendarDeleted": {
|
|
"subject": "{appName} - Calendar event cancelled: {title}",
|
|
"intro": "The following calendar event was deleted by the organiser ({fromUser}) and is no longer available:",
|
|
"note": "The event has been automatically removed from your calendar.",
|
|
"footer": "This message was sent automatically by {appName}."
|
|
}
|
|
},
|
|
"bbb": {
|
|
"defaultWelcome": "Welcome to the meeting!",
|
|
"inviteHint": "To invite other participants, share this link:"
|
|
}
|
|
}
|