From 2ec1a616080555026c39c3ba7a7daac2e03be65a Mon Sep 17 00:00:00 2001 From: Dream Hunter Date: Mon, 15 Apr 2024 14:14:38 +0800 Subject: [PATCH] feat: add /api/new_address ratelimit (#130) --- README.md | 8 +++ vitepress-docs/docs/.vitepress/zh.ts | 2 +- vitepress-docs/docs/en/cli.md | 46 +++++++++++++----- vitepress-docs/docs/public/feature/admin.png | Bin 0 -> 20520 bytes vitepress-docs/docs/zh/guide/cli/worker.md | 8 +++ vitepress-docs/docs/zh/guide/feature/admin.md | 7 +++ worker/src/worker.js | 7 +++ worker/wrangler.toml.template | 8 +++ 8 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 vitepress-docs/docs/public/feature/admin.png create mode 100644 vitepress-docs/docs/zh/guide/feature/admin.md diff --git a/README.md b/README.md index 67a4ee79..298a93d8 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,14 @@ BLACK_LIST = "" # 黑名单,用于过滤发件人,逗号分隔 binding = "DB" database_name = "xxx" # D1 数据库名称 database_id = "xxx" # D1 数据库 ID + +# 新建地址限流配置 +# [[unsafe.bindings]] +# name = "RATE_LIMITER" +# type = "ratelimit" +# namespace_id = "1001" +# # 10 requests per minute +# simple = { limit = 10, period = 60 } ``` 部署 diff --git a/vitepress-docs/docs/.vitepress/zh.ts b/vitepress-docs/docs/.vitepress/zh.ts index 4ca67b41..524a164d 100644 --- a/vitepress-docs/docs/.vitepress/zh.ts +++ b/vitepress-docs/docs/.vitepress/zh.ts @@ -123,7 +123,7 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] { text: '功能简介', collapsed: false, items: [ - // { text: '先决条件', link: 'pre-requisite' }, + { text: 'Admin 控制台', link: 'feature/admin' }, ] }, { text: '参考', base: "/", link: 'reference' } diff --git a/vitepress-docs/docs/en/cli.md b/vitepress-docs/docs/en/cli.md index cbdd3e6d..d16c8495 100644 --- a/vitepress-docs/docs/en/cli.md +++ b/vitepress-docs/docs/en/cli.md @@ -49,21 +49,46 @@ The first deployment will prompt you to create a project. Please fill in `produc ```bash cd worker pnpm install -# copy wrangler.toml.template to wrangler.toml -# and add your d1 config and these config -# PREFIX = "tmp" - the email create will be like tmp@DOMAIN -# IF YOU WANT TO MAKE YOUR SITE PRIVATE, UNCOMMENT THE FOLLOWING LINES -# PASSWORDS = ["123", "456"] -# For admin panel, if not set will no allow to access the admin panel -# ADMIN_PASSWORDS = ["123", "456"] -# DOMAINS = ["xxx.xxx1" , "xxx.xxx2"] you domain name -# JWT_SECRET = "xxx" -# BLACK_LIST = "" cp wrangler.toml.template wrangler.toml # deploy pnpm run deploy ``` +`wrangler.toml` + +```bash +name = "cloudflare_temp_email" +main = "src/worker.js" +compatibility_date = "2023-08-14" +node_compat = true + +[vars] +PREFIX = "tmp" # The mailbox name prefix to be processed +# If you want your site to be private, uncomment below and change your password +# PASSWORDS = ["123", "456"] +# admin console password, if not configured, access to the console is not allowed +# ADMIN_PASSWORDS = ["123", "456"] +DOMAINS = ["xxx.xxx1" , "xxx.xxx2"] # your domain name +JWT_SECRET = "xxx" # Key used to generate jwt +BLACK_LIST = "" # Blacklist, used to filter senders, comma separated +# dkim config +# DKIM_SELECTOR = "mailchannels" # Refer to the DKIM section mailchannels._domainkey for mailchannels +# DKIM_PRIVATE_KEY = "" # Refer to the contents of priv_key.txt in the DKIM section + +[[d1_databases]] +binding = "DB" +database_name = "xxx" # D1 database name +database_id = "xxx" # D1 database ID + +# Create a new address current limiting configuration +# [[unsafe.bindings]] +# name = "RATE_LIMITER" +# type = "ratelimit" +# namespace_id = "1001" +# # 10 requests per minute +# simple = { limit = 10, period = 60 } +``` + you can find and test the worker's url in the workers dashboard ![worker](/readme_assets/worker.png) @@ -105,7 +130,6 @@ Create a new `_mailchannels` record, the type is `TXT`, the content is `v=mc1 cf - The worker domain name here is the domain name of the back-end api. For example, if I deploy it at `https://temp-email-api.awsl.uk/`, fill in `v=mc1 cfid=awsl.uk` - If your domain name is `https://temp-email-api.xxx.workers.dev`, fill in `v=mc1 cfid=xxx.workers.dev` - ## Configure DKIM Ref: [Adding-a-DKIM-Signature](https://support.mailchannels.com/hc/en-us/articles/7122849237389-Adding-a-DKIM-Signature) diff --git a/vitepress-docs/docs/public/feature/admin.png b/vitepress-docs/docs/public/feature/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7b9b20af821ac20c6130343aa60f15c138eb23 GIT binary patch literal 20520 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 literal 0 HcmV?d00001 diff --git a/vitepress-docs/docs/zh/guide/cli/worker.md b/vitepress-docs/docs/zh/guide/cli/worker.md index 0cc6e4a1..60b185af 100644 --- a/vitepress-docs/docs/zh/guide/cli/worker.md +++ b/vitepress-docs/docs/zh/guide/cli/worker.md @@ -38,6 +38,14 @@ BLACK_LIST = "" # 黑名单,用于过滤发件人,逗号分隔 binding = "DB" database_name = "xxx" # D1 数据库名称 database_id = "xxx" # D1 数据库 ID + +# 新建地址限流配置 /api/new_address +# [[unsafe.bindings]] +# name = "RATE_LIMITER" +# type = "ratelimit" +# namespace_id = "1001" +# # 10 requests per minute +# simple = { limit = 10, period = 60 } ``` ## 部署 diff --git a/vitepress-docs/docs/zh/guide/feature/admin.md b/vitepress-docs/docs/zh/guide/feature/admin.md new file mode 100644 index 00000000..15499424 --- /dev/null +++ b/vitepress-docs/docs/zh/guide/feature/admin.md @@ -0,0 +1,7 @@ +# Admin 控制台 + +部署前端应用之后,访问 `/admin` 路径即可进入管理控制台。 + +需要在后端配置 `admin 控制台密码`, 不配置则不允许访问控制台。 + +![admin](/feature/admin.png) diff --git a/worker/src/worker.js b/worker/src/worker.js index 258e3b1a..3a601f9f 100644 --- a/worker/src/worker.js +++ b/worker/src/worker.js @@ -21,6 +21,13 @@ app.use('/api/*', async (c, next) => { } } if (c.req.path.startsWith("/api/new_address")) { + const reqIp = c.req.raw.headers.get("cf-connecting-ip") + if (reqIp && c.env.RATE_LIMITER) { + const { success } = await c.env.RATE_LIMITER.limit({ key: reqIp }) + if (!success) { + return c.text(`IP=${reqIp} Rate limit exceeded for /api/new_address`, 429) + } + } await next(); return; }; diff --git a/worker/wrangler.toml.template b/worker/wrangler.toml.template index bebbb272..194c6bf7 100644 --- a/worker/wrangler.toml.template +++ b/worker/wrangler.toml.template @@ -24,3 +24,11 @@ BLACK_LIST = "" binding = "DB" database_name = "xxx" database_id = "xxx" + +# ratelimit config for /api/new_address +# [[unsafe.bindings]] +# name = "RATE_LIMITER" +# type = "ratelimit" +# namespace_id = "1001" +# # 10 requests per minute +# simple = { limit = 10, period = 60 }