Commit Graph

239 Commits

Author SHA1 Message Date
Abhinav Raut b0c5003103 Delete drafts when there's no meaningful content in them.
- show `pencil` icon in conversations if they have draft.
- auto-delete drafts if draft has empty content
2025-12-24 02:19:46 +05:30
Abhinav Raut 364b551106 fix: add meta size validation in draft handling 2025-12-24 00:42:27 +05:30
Abhinav Raut aed1b904bb fix: reorder migration list to ensure correct upgrade path 2025-12-24 00:37:38 +05:30
Abhinav Raut 36e03c14d7 Merge branch 'main' into fix/reply-draft-persistence 2025-12-24 00:32:52 +05:30
Abhinav Raut 07457acd79 fix: skip attachments already associated with another model in message sending 2025-12-24 00:20:09 +05:30
Abhinav Raut c160210853 fix: ensure draft cleaner runs only with a positive retention period 2025-12-21 23:42:05 +05:30
Abhinav Raut 0f67df945d fix: update draft retention duration to default to 720 hours if not set 2025-12-21 23:40:00 +05:30
Abhinav Raut 6bcc16e541 feat: along with editor content also save attachments and macro actions in drafts 2025-12-21 23:37:33 +05:30
Abhinav Raut cf67b9679d add missing migrations
check if drafts are dirty before saving draft
2025-12-21 21:04:43 +05:30
Abhinav Raut 2707231f9b add draft retention policy with automatic cleanup of stale drafts 2025-12-21 19:23:01 +05:30
Abhinav Raut d80474023b remove unncessary enforceconversation access in delete and get convo draft 2025-12-21 19:11:28 +05:30
csr4422 459bcaecf6 feat: register draft API endpoints 2025-12-16 13:45:35 +05:30
csr4422 2db50b7978 feat: add HTTP handlers for draft endpoints 2025-12-16 13:44:02 +05:30
egerong 1e257fe57f Enable setting redis config via url 2025-12-14 13:42:20 +02:00
Abhinav Raut 59dd3dcda7 fix: make conversation last seen timestamp and unread counts per agent, right now its global.
adds new table `conversation_last_seen`
Migrations for v0.8.5

Remove col `assignee_last_seen_at` from schema
2025-12-13 01:22:59 +05:30
egerong 2c175a6d96 Add support for setting redis user 2025-12-11 18:02:34 +02:00
Abhinav Raut 1f3ba077e9 Fix: New conversation creation should assign the team first, then the agent, since assigning the team later clears the agent assignment. 2025-12-10 01:09:35 +05:30
egerong 4a0c57c2e2 Use double underscore for delimiter 2025-11-30 21:08:13 +02:00
egerong 3bc98bfd15 Implement parsing configuration from environment variables 2025-11-30 16:32:31 +02:00
Abhinav Raut 2331a2c970 add validation for empty file uploads with appropriate error message 2025-11-26 15:25:59 +05:30
Abhinav Raut a7ec336853 Update cmd/media.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-25 17:18:05 +05:30
Abhinav Raut f516bbfa12 fix: improve MIME type detection and content disposition handling for media uploads for s3 store. 2025-11-25 16:06:36 +05:30
Abhinav Raut 3ba93d8dd6 fix: redirect to next query param after login not working
fixes #169
2025-11-21 01:00:43 +05:30
Abhinav Raut dc14e80560 Fix media URLs not updating when root URL changes in settings 2025-11-09 21:08:59 +05:30
Abhinav Raut b8da96c1d1 fix: set Content-Disposition header for media served from filesystem
set inline for videos, images and pdfs and attachment for rest
2025-11-03 13:11:27 +05:30
Abhinav Raut a4a9a9ccd3 trim feedback length to 1000 chars 2025-09-15 23:29:57 +05:30
Abhinav Raut 6f300bb073 Fix: Contact form displays countries with the same calling code incorrectly.
For example, when a user selects the USA, the form also shows Canada, as both share the +1 calling code.

Rename column from `phone_number_calling_code` to `phone_number_country_code`.

Feat: Show the calling code alongside the country flag in the contact form for the selected country. Previously, only the flag was displayed.
2025-09-14 19:36:30 +05:30
Abhinav Raut 210b8bb53b feat: add support for sending messages as contact
- introduce new permission `messages:write_as_contact` that needs to be set to allow this.
2025-09-13 20:55:04 +05:30
Abhinav Raut 007c332a7d remove font-medium from data table columns in all data tables
- Remove permissions requirement for GET on roles
2025-09-09 23:22:08 +05:30
Abhinav Raut 98492a1869 refactor: use team compact struct for user teams list
- Check for existing email before agent update and raise proper error
2025-09-02 02:00:35 +05:30
Abhinav Raut 12ebe32ba3 return complete contact note by refetching it using GetNote 2025-09-02 00:32:29 +05:30
Abhinav Raut 3ce3c5e0ee store public config in pinia store 2025-09-01 03:20:09 +05:30
Abhinav Raut 9ec96be959 rename AppUpdate component with AdminBanner
- show banner when app restart is required.
- UI changes to admin banner
2025-08-31 20:08:38 +05:30
Abhinav Raut 7d4e7e68c3 update user avatar upload function to accept user by value and improve error logging by logging the user id 2025-08-31 18:48:02 +05:30
Abhinav Raut 5b941fd993 Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-31 18:37:05 +05:30
Abhinav Raut 3f7d151d33 - add getting started flow for new users
- Translate web template pass i18n dependency
- Fix colors in menu card
- Show update description if avaialble in AppUpdate component
- Remvoe i18n from settings as i18n and settings depend on each other to load initial lang.
- Clear inbox password as the update SQL query now returns the config.
- Fetch agents and inboxes from the store instead of directly fetching using axios instance.
2025-08-30 21:30:24 +05:30
Abhinav Raut a516773b14 feat: add i18n support to web templates
- Add i18n object to template funcMap for direct access
  - Translate all hardcoded strings in CSAT and footer templates
  - Add reusable translation keys to globals.messages
2025-08-30 19:35:00 +05:30
Abhinav Raut f6d3bd543f refactor: consolidate public config into single endpoint, move settings behind auth
- remove OIDC enabled endpoint
2025-08-30 18:46:37 +05:30
Abhinav Raut c1c14f7f54 refactor: split converstion list item and conversation into different structs
- Add missing columns in message queries
2025-08-29 00:15:22 +05:30
Abhinav Raut 634fc66e9f Translate welcome to libredesk email subject
- Update all SQL queries to add missing columns

- Update the create conversation API to allow setting the initiator of a conversation. For example, we might want to use this API to create a conversation on behalf of a customer, with the first message coming from the customer instead of the agent. This param allows this.

- Minor refactors and clean up

- Tidy go.mod

- Rename structs to reflect purpose

- Create focus structs for scanning JSON payloads for clarity.
2025-08-28 00:34:56 +05:30
Abhinav Raut 0dec822c1c fix panic due to missing i18n dependency 2025-08-26 01:12:30 +05:30
Abhinav Raut e0dc0285a4 fix: agents availability status changing to online after doing an email password login even after being Away or in Reassinging Replies status.
This was not affecting OIDC login just email password login
2025-08-19 16:34:15 +05:30
Abhinav Raut ccc5940dd9 return created message in message fetch API 2025-07-06 19:51:44 +05:30
Abhinav Raut d2e5d85e3a fix: return created/updated objects in POST/PUT responses with masked secrets
All POST/PUT handlers now return actual database objects instead of `true`
2025-06-20 19:35:09 +05:30
Abhinav Raut 6bb5728665 check csrf only for state-changing methods 2025-06-19 01:53:19 +05:30
Abhinav Raut 9132e11458 refactor return envelope errors from handlers 2025-06-19 00:14:35 +05:30
Abhinav Raut e70f92d377 remove validation tags from loginRequest struct 2025-06-18 23:58:07 +05:30
Abhinav Raut 1b2a5e4f36 feat: standardize API requests to use JSON instead of form data 2025-06-18 01:30:38 +05:30
Abhinav Raut c37258fccb feat: API key management for agents, api keys can now be generated for any agent in libredesk allowing programmatic access.
- Added endpoints to generate and revoke API keys for agents.
- Updated user model to include API key fields.
- Update authentication middleware to support API key validation.
- Modified database schema to accommodate API key fields.
- Updated frontend to manage API keys, including generation and revocation.
- Added localization strings for API key related messages.
2025-06-16 23:45:00 +05:30
Abhinav Raut 4b0422d904 Reduce duplicate database conversation fetches by adding a new method EvaluateConversationUpdateRulesByID that accepts only a conversation ID instead of a conversation object, allowing the caller to control the behavior since the caller might already have the conversation object or might want a fresh fetch.
- Return early if user / team is already assigned to a conversation

- rename query get-pending-messages to get-outgoing-pending-messages to reflect purpose.
2025-06-15 12:43:01 +05:30