mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-09-06 16:07:14 +08:00
feat: add daily request limit and refactor access control (#759)
- Add daily request limit per IP in blacklist settings (1-1,000,000/day) - Refactor access control logic: merge blacklist and rate limit checks - Remove RATE_LIMIT_API_DAILY_REQUESTS env var, use database config instead - Move x-custom-auth check earlier in middleware chain - Add comprehensive English documentation (31 new guide pages) - Improve code structure and error handling 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
# Enhancement via Another Worker
|
||||
|
||||
> The core capability of temporary email is email management. Other workers can enhance temporary email functionality, for example, auth-inbox AI can parse verification codes or activation links
|
||||
> This feature only triggers other workers and executes after webhook
|
||||
> [!NOTE]
|
||||
> If you want to use worker enhancement, please create a worker that can be called via RPC in advance, details below
|
||||
> References:
|
||||
> - https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/rpc/
|
||||
> - https://developers.cloudflare.com/workers/runtime-apis/rpc/
|
||||
> - auth-inbox project: https://github.com/TooonyChen/AuthInbox
|
||||
|
||||
## Create Another Worker (using auth-inbox AI verification code parsing as an example)
|
||||
|
||||
### Transform Worker to Extend WorkerEntrypoint
|
||||
|
||||
A simple worker code that acts as a callee providing RPC method calls is as follows (the rpcEmail method is an example)
|
||||
(Using the already modified project https://github.com/oneisall8955/AuthInbox-fork)
|
||||
|
||||
src/index.ts file
|
||||
```js
|
||||
import { WorkerEntrypoint } from "cloudflare:workers";
|
||||
|
||||
interface Env {
|
||||
DB: D1Database;
|
||||
// ...
|
||||
}
|
||||
|
||||
export default class extends WorkerEntrypoint<Env> {
|
||||
async fetch(request: Request): Promise<Response> {
|
||||
console.log("Original fetch interface parameter is request,env,ctx");
|
||||
console.log("After modifying to WorkerEntrypoint style, there's only one parameter request, getting environment variables and context has slight changes");
|
||||
// Environment variable and context changes see:
|
||||
// https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/rpc/#bindings-env
|
||||
// https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/rpc/#lifecycle-methods-ctx
|
||||
const env: Env = this.env;
|
||||
const ctx: ExecutionContext = this.ctx;
|
||||
console.log("Subsequent logic remains unchanged");
|
||||
return new Response('ok', { status: 200 });
|
||||
}
|
||||
|
||||
// Main functionality
|
||||
async email(message: ForwardableEmailMessage): Promise<void> {
|
||||
console.log("Original fetch interface parameter is message,env,ctx");
|
||||
console.log("After modifying to WorkerEntrypoint style, there's only one parameter message, getting environment variables and context is the same as fetch method");
|
||||
const env: Env = this.env;
|
||||
const ctx: ExecutionContext = this.ctx;
|
||||
console.log("After receiving email routing request, subsequent logic remains unchanged");
|
||||
}
|
||||
|
||||
// Expose RPC interface to handle email requests from other workers
|
||||
async rpcEmail(requestBody: string): Promise<void> {
|
||||
console.log(`Received request from another worker (temporary email service cloudflare_temp_email), request body: ${requestBody}`);
|
||||
// requestBody is in JSON format, sent by temporary email service, format as follows
|
||||
// type RPCEmailMessage = {
|
||||
// from: string | undefined | null,
|
||||
// to: string | undefined | null,
|
||||
// rawEmail: string | undefined | null,
|
||||
// headers: Map<string, string>,
|
||||
// }
|
||||
// ... todo ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Deploy Another Worker
|
||||
|
||||
After modification, or using auth-inbox as an example, deploy to Cloudflare Worker. See https://github.com/TooonyChen/AuthInbox, or use the already modified project https://github.com/oneisall8955/AuthInbox-fork
|
||||
|
||||
## Configure Temporary Email Service to Use Specified Worker Enhancement
|
||||
|
||||
## Bind Service
|
||||
|
||||
### Configure via wrangler.toml
|
||||
|
||||
```toml
|
||||
[[services]]
|
||||
binding = "AUTH_INBOX"
|
||||
service = "auth-inbox"
|
||||
```
|
||||
|
||||
Here `binding = "AUTH_INBOX"` can be customized to any string, `service = "auth-inbox"` is the name of the deployed worker that provides RPC interface calls.
|
||||
|
||||
### User Interface Configuration
|
||||
|
||||
In Settings - Bindings, add binding, select binding service.
|
||||
Fill in the variable name with a custom name, can be any string, for example `AUTH_INBOX`.
|
||||
Select the service created in the previous step for service binding, for example `auth-inbox`.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## Environment Variable Configuration
|
||||
|
||||
### Configure via wrangler.toml
|
||||
|
||||
```toml
|
||||
ENABLE_ANOTHER_WORKER = true
|
||||
ANOTHER_WORKER_LIST ="""
|
||||
[
|
||||
{
|
||||
"binding":"AUTH_INBOX",
|
||||
"method":"rpcEmail",
|
||||
"keywords":[
|
||||
"验证码","激活码","激活链接","确认链接","验证邮箱","确认邮件","账号激活","邮件验证","账户确认","安全码","认证码","安全验证","登陆码","确认码","启用账户","激活账户","账号验证","注册确认",
|
||||
"account","activation","verify","verification","activate","confirmation","email","code","validate","registration","login","code","expire","confirm"
|
||||
]
|
||||
}
|
||||
]
|
||||
"""
|
||||
```
|
||||
|
||||
Environment variable explanation:
|
||||
- ENABLE_ANOTHER_WORKER = true: Default is false, set to true to enable other workers to process emails
|
||||
- ANOTHER_WORKER_LIST is a JSON array, each object contains 3 fields
|
||||
- binding: *Required, must match the binding = "XXX" specified in the services section*, in the example it's AUTH_INBOX
|
||||
- method: Optional, default is rpcEmail, refers to which RPC method of this worker to call for processing
|
||||
- keywords: Keyword array, case-insensitive. Used for filtering, if the *parsed email text* matches these keywords, this worker is triggered and the worker's `method` method is called
|
||||
|
||||
### User Interface Configuration
|
||||
|
||||
In Settings - Environment Variables, add environment variables
|
||||
- ENABLE_ANOTHER_WORKER = true
|
||||
- ANOTHER_WORKER_LIST is the JSON array string mentioned above, no further explanation needed, see above for detailed description
|
||||
```json
|
||||
[
|
||||
{
|
||||
"binding":"AUTH_INBOX",
|
||||
"method":"rpcEmail",
|
||||
"keywords":[
|
||||
"验证码","激活码","激活链接","确认链接","验证邮箱","确认邮件","账号激活","邮件验证","账户确认","安全码","认证码","安全验证","登陆码","确认码","启用账户","激活账户","账号验证","注册确认",
|
||||
"account","activation","verify","verification","activate","confirmation","email","code","validate","registration","login","code","expire","confirm"
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||

|
||||
|
||||
## Testing
|
||||
|
||||
Send an email to the temporary mailbox, observe the worker logs, or check the verification code on the panel provided by auth-inbox
|
||||
|
||||

|
||||
Reference in New Issue
Block a user