Girish Ramakrishnan
36aa641cb9
migrate to "export default"
...
also, set no-use-before-define in linter
2026-02-14 15:43:24 +01:00
Girish Ramakrishnan
96dc79cfe6
Migrate codebase from CommonJS to ES Modules
...
- Convert all require()/module.exports to import/export across 260+ files
- Add "type": "module" to package.json to enable ESM by default
- Add migrations/package.json with "type": "commonjs" to keep db-migrate compatible
- Convert eslint.config.js to ESM with sourceType: "module"
- Replace __dirname/__filename with import.meta.dirname/import.meta.filename
- Replace require.main === module with process.argv[1] === import.meta.filename
- Remove 'use strict' directives (implicit in ESM)
- Convert dynamic require() in switch statements to static import lookup maps
(dns.js, domains.js, backupformats.js, backupsites.js, network.js)
- Extract self-referencing exports.CONSTANT patterns into standalone const
declarations (apps.js, services.js, locks.js, users.js, mail.js, etc.)
- Lazify SERVICES object in services.js to avoid circular dependency TDZ issues
- Add clearMailQueue() to mailer.js for ESM-safe queue clearing in tests
- Add _setMockApp() to ldapserver.js for ESM-safe test mocking
- Add _setMockResolve() wrapper to dig.js for ESM-safe DNS mocking in tests
- Convert backupupload.js to use dynamic imports so --check exits before
loading the module graph (which requires BOX_ENV)
- Update check-install to use ESM import for infra_version.js
- Convert scripts/ (hotfix, release, remote_hotfix.js, find-unused-translations)
- All 1315 tests passing
Migration stats (AI-assisted using Cursor with Claude):
- Wall clock time: ~3-4 hours
- Assistant completions: ~80-100
- Estimated token usage: ~1-2M tokens
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:11:45 +01:00
Girish Ramakrishnan
6ac0cd421a
use the @cloudron/superagent module
2025-07-10 10:56:05 +02:00
Girish Ramakrishnan
93aa4f086e
test: dns. is gone
2025-07-01 12:41:52 +02:00
Girish Ramakrishnan
9428cf0d06
mail: make status a tristate
...
status can be 'passed', 'failed' or 'skipped'. The motivation for this
change is that when using a relay, we can provide a message indicating
why the check was skipped.
2025-06-28 12:20:25 +02:00
Johannes Zellner
e6d8115e52
Allow to set enablePop3 when adding a mailbox
2025-06-13 17:38:55 +02:00
Girish Ramakrishnan
8e58349bfa
replace with custom superagent based on fetch API
2025-02-15 15:14:09 +01:00
Girish Ramakrishnan
dd5e4adc73
replace underscore with our own
...
we only need like 5 simple functions
2025-02-13 14:14:34 +01:00
Girish Ramakrishnan
6fcfa6cac0
mail: add ipv6 rdns check
2025-01-08 17:28:28 +01:00
Girish Ramakrishnan
eee49a8291
move dashboard setting into dashboard.js
2023-08-11 21:04:10 +05:30
Girish Ramakrishnan
4cdf37b060
settings: move mailFqdn/Domain into mailServer
2023-08-04 22:02:24 +05:30
Girish Ramakrishnan
4e75694ac6
mail: require catch all to be absolute
2022-09-11 12:56:58 +02:00
Girish Ramakrishnan
1591541c7f
mail: allow aliases to have wildcard
...
this came out of https://forum.cloudron.io/topic/6350/disposable-email-prefixes-for-existing-mailboxes/
2022-08-18 15:22:00 +02:00
Girish Ramakrishnan
b23189b45c
mail: quota support
2022-08-18 11:31:40 +02:00
Girish Ramakrishnan
0373fb70d5
make waitForDns async
...
cloudflare is partly broken
2022-02-03 17:35:45 -08:00
Girish Ramakrishnan
dc8ec9dcd8
mail: move dkim keys into the database
2021-10-11 20:30:42 -07:00
Girish Ramakrishnan
51d067cbe3
sysinfo: async'ify
...
in the process, provision, dyndns, mail, dns also got further asyncified
2021-09-02 16:19:46 -07:00
Girish Ramakrishnan
fa9938f50a
mailboxdb: merge into mail.js
2021-08-18 12:48:34 -07:00
Girish Ramakrishnan
5bcf1bc47b
merge domaindb.js into domains.js
2021-08-16 14:41:42 -07:00
Girish Ramakrishnan
ac484a02f2
merge maildb.js into mail.js
2021-06-29 15:59:02 -07:00
Girish Ramakrishnan
44ac406e57
admin -> dashboard
2021-05-05 12:29:04 -07:00
Girish Ramakrishnan
44027f61e6
Fix failing tests
2021-04-30 09:48:00 -07:00
Girish Ramakrishnan
176388111c
tokens: add lastUsedTime
2021-03-16 16:04:17 -07:00
Girish Ramakrishnan
05c331172a
Fix test
2021-01-07 22:21:41 -08:00
Girish Ramakrishnan
8c0bd97064
mail: owner can be a group
2020-11-13 00:31:34 -08:00
Girish Ramakrishnan
ed09c06ba4
Add option to remove mailbox data
...
Fixes #720
2020-07-27 22:55:09 -07:00
Girish Ramakrishnan
3c59a0ff31
make it clear it is exported for testing
2020-07-27 22:07:25 -07:00
Girish Ramakrishnan
77a1613107
test: fix alias routes
2020-04-22 18:16:33 -07:00
Girish Ramakrishnan
62fab7b09f
mail: allow alternate mx
2020-04-22 17:36:34 -07:00
Girish Ramakrishnan
7f666d9369
mail: implement aliases across domains
...
part of #577
2020-04-20 15:19:48 -07:00
Girish Ramakrishnan
0606b2994c
add membersOnly flag to a mailing list
2020-04-17 17:44:14 -07:00
Girish Ramakrishnan
3fec599c0c
remove mail domain add/remove API
...
merge this as a transaction into domains API
fixes #669
2020-03-31 14:48:19 -07:00
Girish Ramakrishnan
cd2e782d48
Make mail tests work
2019-09-12 13:59:31 -07:00
Girish Ramakrishnan
9b74bb73aa
config.js is dead, long live config.js
...
we use settings now
2019-07-26 14:51:51 -07:00
Girish Ramakrishnan
12eae1eff2
Make port a constant
2019-07-25 16:08:54 -07:00
Girish Ramakrishnan
9785ab82ed
Use cloudron as prefix instead of suffix
2019-06-11 09:39:45 -07:00
Girish Ramakrishnan
7e9885012d
vary dkim selector per mail domain
...
this is required for the case where the domain is added on multiple
cloudrons. initially, the plan was to just vary this as a derivation
of the dashboard domain. but this will break existing installation (wildcard
and manual domain setups cannot be re-programmed automatically).
2019-06-10 18:35:38 -07:00
Johannes Zellner
885aa8833c
Remove password requirement for destructive rest routes
2019-05-13 22:48:33 +02:00
Girish Ramakrishnan
671b5e29d0
Hide mail relay password
2019-02-15 11:25:51 -08:00
Girish Ramakrishnan
ade2b65a94
make mail test pass
2019-02-08 11:08:14 -08:00
Girish Ramakrishnan
a961407379
Fix setup and restore to have a task style API
2018-12-16 11:02:49 -08:00
Girish Ramakrishnan
dfa61f1b2d
rework how app mailboxes are allocated
...
Our current setup had a mailbox allocated for an app during app
install (into the mailboxes table). This has many issues:
* When set to a custom mailbox location, there was no way to access
this mailbox even via IMAP. Even when using app credentials, we
cannot use IMAP since the ldap logic was testing on the addon type
(most of our apps only use sendmail addon and thus cannot recvmail).
* The mailboxes table was being used to add hidden 'app' type entries.
This made it very hard for the user to understand why a mailbox conflicts.
For example, if you set an app to use custom mailbox 'blog', this is
hidden from all views.
The solution is to let an app send email as whatever mailbox name is
allocated to it (which we now track in the apps table. the default is in the
db already so that REST response contains it). When not using
Cloudron email, it will just send mail as that mailbox and the auth
checks the "app password" in the addons table. Any replies to that
mailbox will end up in the domain's mail server (not our problem).
When using cloudron email, the app can send mail like above. Any responses
will not end anywhere and bounce since there is no 'mailbox'. This is the
expected behavior. If user wants to access this mailbox name, he can
create a concrete mailbox and set himself as owner OR set this as
an alias.
For apps using the recvmail addon, the workflow is to actually create
a mailbox at some point. Currently, we have no UI for this 'flow'.
It's fine because we have only meemo using it.
Intuitive much!
2018-12-06 22:13:32 -08:00
Johannes Zellner
54c96d98d1
Remove all individual test timeouts and ignore timeouts toplevel
2018-12-03 12:24:04 +01:00
Girish Ramakrishnan
03984a811f
dnsSetup -> setup
...
It now takes a dnsConfig object. It will end up taking other config
objects for provisioning.
2018-10-30 14:01:02 -07:00
Girish Ramakrishnan
1d0a52404a
Fix tests
2018-09-10 13:45:05 -07:00
Ian Fijolek
bf1e19f8e6
Add more detailed checking of DMARC
...
Fixes #570
2018-08-12 13:47:24 -07:00
Girish Ramakrishnan
7880a2f9c3
API returns 403 for incorrect password
2018-06-20 09:27:24 -07:00
Girish Ramakrishnan
e8d9597345
Fix various error codes
...
401 - bad password/wrong password
403 - authenticated but not authorized
409 - conflict
2018-06-15 23:15:30 -07:00
Girish Ramakrishnan
c2a762cb29
Do not reserve mailbox names
...
Now that user management is split from mailboxes, we don't need to
reserve mailbox names anymore.
2018-04-25 21:14:33 -07:00
Johannes Zellner
0c728c6af5
Fix mail rest api tests
2018-04-13 12:54:40 +02:00