Commit graph

221 commits

Author SHA1 Message Date
Bowrna 16f4dfd3e9
Fix incorrect bulk blocklisting behaviour (#2041). Fixes #1841 2024-09-19 10:56:56 +05:30
Vinoth Kumar d7fe13c4b9
Fix typo and formatting (#2028) 2024-08-30 13:24:45 +05:30
Abhinav Raut 679457cb12
Ensure unique upload filenames by adding a suffix (#1963)
Fixes #1957.

Co-authored-by: Abhinav Raut <abhinav.raut@zerodha.com>
2024-08-08 15:42:29 +05:30
Bowrna 1e6e97e750
Add validation for filename with non-ASCII chars in media upload (#1973) 2024-08-05 20:08:33 +05:30
Keshav Gupta c334d2e6e1
fix #1950:Export of unsubscribed users exports all users (#1965)
Co-authored-by: keshav <keshav.gupta@jarvis.consulting>
2024-08-02 00:05:33 +05:30
Kailash Nadh c2e7c713ca Increase campaign subject char limit. Closes #1909. 2024-07-17 19:38:11 +05:30
largemouth c3f4379b17
chore: fix function name in comment (#1836)
Signed-off-by: largemouth <largemouth@aliyun.com>
2024-04-22 18:43:23 +05:30
Jonas Sulzer 1d32d4c368
👌 IMPROVE: make RootURL available in email templates (#1812)
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2024-04-04 22:57:52 +05:30
Kailash Nadh 124af1ee29 Make static e-mail template subjects scriptable. Closes #1727.
This commit introduces optional, custom `<title>` tags that can be
added to `static/email-templates/*.html` so as to make the subjectlines
fully scriptable for system e-mails and notifications.

The tag must look like this.

```
<title data-i18n>Stuff {{ .Subscriber.Name }} here!</title>
```
2024-03-25 15:49:40 +05:30
Muhammed Kadir Tan 2afac2469e
fix: check errors.Is instead of strings.Contains for http: Server closed error (#1779) 2024-03-12 11:06:35 +05:30
tgolang 860009b866
chore: remove repetitive words (#1778)
Signed-off-by: tgolang <seekseat@aliyun.com>
2024-03-11 13:33:50 +05:30
Shivam Mishra d7b55cd147
fix: trim config before use (#1756)
* feat: ensure hosts are trimmed before saving

* feat: trim host before saving bounces
2024-02-26 15:12:50 +05:30
Kailash Nadh d70236c379 Fix incorrect error message in tx template preview. 2024-01-28 11:04:47 +05:30
Kailash Nadh 6cb9982aac Add .IndividualTracking to public templates. Closes #1663. 2024-01-27 22:38:26 +05:30
Kailash Nadh f14df890a4 Update Go deps. 2024-01-27 20:55:50 +05:30
Kailash Nadh f0a3cbd563 Remove redundant SMTP test error toast on the admin UI. 2024-01-27 20:41:07 +05:30
Kailash Nadh 5a3664aee2 Add support for caching slow queries on large databases.
- Add materialized views for list -> subscriber counts, dashboard chart,
  and dashboard aggregate stats that slow down significantly on large
  databases (with millions or tens of millions of subscribers). These
  slow queries involve full table scan COUNTS().

- Add a toggle to enable caching slow results in Settings -> Performance.

- Add support for setting a cron string that crons and periodically
  refreshes aggregated stats in materialized views.

Closes #1019.
2024-01-27 15:51:12 +05:30
Kailash Nadh 2f487de9f7 Log subscriber id/uuid on failed opt-in message push. Closes #1333. 2024-01-10 22:10:27 +05:30
Kailash Nadh 86771512ce Merge branch 'slug' 2024-01-09 23:34:25 +05:30
Kailash Nadh 0d319ad9fd Add 'slug' (permalink) support for campaign archives. Closes #1394. 2024-01-09 23:34:08 +05:30
mpilnan 78caa35e42
fix: add copying campaign object before sending test message (#1659) 2024-01-09 23:22:01 +05:30
Kailash Nadh fa2c840ddb Rename v2.6.0 migration to v3.0.0, the next major release. 2024-01-06 11:56:08 +05:30
Kailash Nadh 772476c0df Add accurate sent count, last sent subscriber tracking on campaigns.
- Sent count is no longer the batch size fetched from the DB but is
  the actual count of messages sent.
- Pausing and resuming now accurately tracks the last subscriber that
  was processed and resumes from there.
- Fix multiple concurrent campaigns blocking.

Closes #1616. Closes #905. Closes #1496. Closes #1250. Closes #1010.
2024-01-02 14:57:04 +05:30
Kailash Nadh 414c5c0c99 Refactor the core concurrent campaign manager logic.
This commit fully refactors the core campaign manager logic.
It applies a whole new approach to campaign state and lifecycle management.

- Create a new "pipeline" abstraction on top of campaign
  for state management.
- Account for every message processed and end campaigns
  based on the actual count.
- Discard in-queue messages in the pipeline of a paused
  or cancelled campaign.
2024-01-02 14:57:04 +05:30
Kailash Nadh 0c9dc07479 Add a ?v=hash cache breaker (that changes on restart) to static assets. 2023-12-31 22:20:37 +05:30
Kailash Nadh 2feb1b0fb8 Make the name part in from e-mails optional. Closes #1602. 2023-12-30 21:48:12 +05:30
Kailash Nadh b2a5e37ccb Fix incorrect form messages on public re-subscription to double opt-in lists. Closes #1638. 2023-12-30 21:29:34 +05:30
Kailash Nadh bce675870c Fix preconfirm option not working on bulk 'select all' subscriber list management. Closes #1646. 2023-12-30 20:52:14 +05:30
Kailash Nadh 0d74619cac Make providing name in subscriber creation optional and assign internally. Closes #1630. 2023-12-30 15:51:42 +05:30
Kailash Nadh 51af75cfef Add subscription status filter to subscriber list query and admin UI. 2023-12-23 16:43:28 +05:30
Kailash Nadh 01acd386f6 Add tag/type/optin filter options to lists and campaigns APIs. Closes #1631. 2023-12-23 14:45:55 +05:30
Kailash Nadh 5d635744c0 Skip non-existent dirs in --static-dir mode to use default stuffed dirs. Closes #1599. 2023-12-23 10:55:46 +05:30
Kailash Nadh aba71119c3 Fix default non-stuffed frontend dir path. 2023-12-23 10:30:37 +05:30
Kailash Nadh 53eb71a83b Add 404 HTTP handlers to prevent those requests going to BasicAuth endpoints. 2023-11-25 11:53:56 +05:30
guangwu 4577868567
chore: remove refs to deprecated io/ioutil (#1593)
Signed-off-by: guoguangwu <guoguangwu@magic-shield.com>
2023-11-16 13:57:00 +05:30
Kailash Nadh a61a9d8c04 Fix preference management logic to avoid unnecessary DB calls. 2023-09-25 11:14:29 +05:30
Kailash Nadh 82c3c6878b Clean root URL of trailing slashes when updating settings. 2023-09-19 15:23:32 +05:30
Kailash Nadh 8f2a08b8db Fix invalid suffix 'd' in timestring string in s3 expiry config. 2023-09-19 14:45:51 +05:30
Kailash Nadh 717a6362d2 Add Sprig and other tpl functions to static templates as well. Closes #1527. 2023-09-19 11:19:34 +05:30
Kailash Nadh 2b95c88188
Add Postmark bounce webhook support (refactor #1385) (#1485)
Co-authored-by: Thomas Siebers <tom@tsiebers.de>
2023-08-31 21:27:34 +05:30
Kailash Nadh a6a2b69820 Make public subscription API follow the 'enable public' setting. 2023-08-15 21:05:29 +05:30
Kailash Nadh 1164afac5e Fix private lists being unsubscribed from public form and re-factor subscription status view in admin. 2023-08-06 21:09:16 +05:30
Kailash Nadh eafae46409 Fix incorrect unsubscription behaviour in the public 'Manage' flow. Closes #1407. 2023-08-06 11:38:13 +05:30
Kailash Nadh 104c4fc993 Remove non-crossplatform syscalls from /api/about.
The only way to get precise OS information cross platform is to have
a separate file for each platform with a build tag that returns the
info, which seems excessive for this usecase.
2023-08-06 10:49:20 +05:30
Kailash Nadh 2215511f2c Increase the arbitrarily low max-input-length limit. Closes #1416. 2023-08-03 23:52:20 +05:30
Kailash Nadh dcb87a39b7 Removed unused syscall in /about API. Closes #1421, closes #1422.
Co-authored-by: Gabriel Vasile <gabriel.vasile@email.com>
2023-08-03 23:46:46 +05:30
Kailash Nadh e89b9ffb30 Remove dead media cleanup flag. Closes #1423. 2023-08-03 23:35:21 +05:30
Kailash Nadh ad80c716f9 Add new privacy option 'Record opt-in IP' to record IP address of optin confirmation.
- Add new 'Subscriptions' table on the subscriber list form that shows subs,
  IP, and other data.
- Add new `meta` JSONB field to `subscriber_lsts` table.

Closes #1329.
2023-07-26 23:00:32 +05:30
Kailash Nadh a62851915c Mask passwords on the UI accurately with the actual passwords length.
This PR masks all the password fields in the UI with a pseudo dot character
retaining the rune length of the original password so that the password
fields on the UI appear to be containing the entered value as-is.

The earlier implementation would revert to a fixed length dummy password
confusing certain users and making it look like the password they entered
wasn't being saved.
2023-07-21 23:46:46 +05:30
Kailash Nadh c581fe2f3a Add GET /api/about that returns useful system info. Closes #1354. 2023-06-24 13:07:13 +05:30