mirror of
https://github.com/kennyparsons/cf-emailrouter.git
synced 2025-09-04 19:50:28 +00:00
wildcard updates
This commit is contained in:
parent
02255d73fe
commit
d13d997a51
3 changed files with 33 additions and 9 deletions
|
@ -59,6 +59,8 @@ Each alias is defined by a KV entry where the key is the email alias and the val
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> To allow all domains, you can use a wildcard (`"*"`) in the **allow.domains** field. However, wildcard matching is supported only for domains. Wildcards are **not supported** for the **allow.emails** field, and any deny statements do not support wildcards (using them would effectively disable the deny functionality).
|
||||||
|
|
||||||
Note: Currently, only the `enabled`, `forward_to`, `allow`, and `deny` fields are implemented. Other features will be added in future updates.
|
Note: Currently, only the `enabled`, `forward_to`, `allow`, and `deny` fields are implemented. Other features will be added in future updates.
|
||||||
|
|
||||||
## API Endpoints
|
## API Endpoints
|
||||||
|
@ -95,7 +97,7 @@ npx wrangler deploy
|
||||||
- **src/index.js:** Main entry point handling HTTP routes and email events
|
- **src/index.js:** Main entry point handling HTTP routes and email events
|
||||||
- **src/schema.js:** Contains default configuration and helper utilities
|
- **src/schema.js:** Contains default configuration and helper utilities
|
||||||
- **src/auth.js:** API key management and authentication
|
- **src/auth.js:** API key management and authentication
|
||||||
- **src/routes/email.js:** Handles email routing logic
|
- **src/email/main.js:** Handles email routing logic
|
||||||
- **src/routes/api.js:** API endpoints for managing configurations
|
- **src/routes/api.js:** API endpoints for managing configurations
|
||||||
- **wrangler.toml:** Configuration for Cloudflare Worker and KV namespaces
|
- **wrangler.toml:** Configuration for Cloudflare Worker and KV namespaces
|
||||||
|
|
||||||
|
|
|
@ -72,19 +72,38 @@ export async function handleEmail(message, env, ctx) {
|
||||||
// Allow list: if defined, the sender must match an allowed domain or email.
|
// Allow list: if defined, the sender must match an allowed domain or email.
|
||||||
if (config.allow) {
|
if (config.allow) {
|
||||||
let allowed = false;
|
let allowed = false;
|
||||||
if (config.allow.domains && config.allow.domains.includes(senderDomain)) {
|
|
||||||
allowed = true;
|
// Check allowed domains.
|
||||||
log('debug', `Sender domain ${senderDomain} is allowed.`);
|
if (config.allow.domains) {
|
||||||
|
for (const allowedDomain of config.allow.domains) {
|
||||||
|
// If the allowed domain contains a wildcard.
|
||||||
|
if (allowedDomain.includes('*')) {
|
||||||
|
// Convert wildcard to regex: escape non-wildcard parts then replace '*' with '.*'
|
||||||
|
const regexStr = '^' + allowedDomain.split('*')
|
||||||
|
.map(part => part.replace(/[-/\\^$+?.()|[\]{}]/g, '\\$&'))
|
||||||
|
.join('.*') + '$';
|
||||||
|
const regex = new RegExp(regexStr, 'i');
|
||||||
|
if (regex.test(senderDomain)) {
|
||||||
|
allowed = true;
|
||||||
|
log('debug', `Sender domain ${senderDomain} is allowed by wildcard ${allowedDomain}.`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (allowedDomain.toLowerCase() === senderDomain) {
|
||||||
|
allowed = true;
|
||||||
|
log('debug', `Sender domain ${senderDomain} is allowed.`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (config.allow.emails && config.allow.emails.includes(sender)) {
|
|
||||||
|
// Check allowed emails if not already allowed.
|
||||||
|
if (!allowed && config.allow.emails && config.allow.emails.includes(sender)) {
|
||||||
allowed = true;
|
allowed = true;
|
||||||
log('debug', `Sender email ${sender} is allowed.`);
|
log('debug', `Sender email ${sender} is allowed.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
log('warn', `Sender ${sender} is not allowed for ${message.to}`);
|
log('warn', `Sender ${sender} is not allowed for ${message.to}`);
|
||||||
// if (config.logging && config.logging.log_sender_domain) {
|
|
||||||
// log('warn', `Sender domain ${senderDomain} not allowed for ${message.to}`);
|
|
||||||
// }
|
|
||||||
message.setReject("Sender not allowed");
|
message.setReject("Sender not allowed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,4 +8,7 @@ kv_namespaces = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[vars]
|
[vars]
|
||||||
WORKER_NAME = "email-router"
|
WORKER_NAME = "email-router"
|
||||||
|
|
||||||
|
[observability]
|
||||||
|
enabled = true
|
Loading…
Add table
Reference in a new issue