mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-09-07 00:17:12 +08:00
feat: |Worker| NO_LIMIT_SEND_ROLE support multi role splited by ',' (#588)
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
## main(v0.9.0)
|
## main(v0.9.0)
|
||||||
|
|
||||||
- feat: | Worker | 支持多语言
|
- feat: | Worker | 支持多语言
|
||||||
|
- feat: | Worker | `NO_LIMIT_SEND_ROLE` 配置支持多角色, 逗号分割
|
||||||
|
|
||||||
## v0.8.7
|
## v0.8.7
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# DISABLE_SHOW_GITHUB = true # Disable Show GitHub link
|
# DISABLE_SHOW_GITHUB = true # Disable Show GitHub link
|
||||||
# default send balance, if not set, it will be 0
|
# default send balance, if not set, it will be 0
|
||||||
# DEFAULT_SEND_BALANCE = 1
|
# DEFAULT_SEND_BALANCE = 1
|
||||||
# NO_LIMIT_SEND_ROLE = "vip" # the role which can send emails without limit
|
# the role which can send emails without limit, multiple roles can be separated by ,
|
||||||
|
# NO_LIMIT_SEND_ROLE = "vip"
|
||||||
# Turnstile verification configuration
|
# Turnstile verification configuration
|
||||||
# CF_TURNSTILE_SITE_KEY = ""
|
# CF_TURNSTILE_SITE_KEY = ""
|
||||||
# CF_TURNSTILE_SECRET_KEY = ""
|
# CF_TURNSTILE_SECRET_KEY = ""
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
| `ADMIN_USER_ROLE` | 文本 | admin 角色配置, 如果用户角色等于 ADMIN_USER_ROLE 则可以访问 admin 控制台 | `admin` |
|
| `ADMIN_USER_ROLE` | 文本 | admin 角色配置, 如果用户角色等于 ADMIN_USER_ROLE 则可以访问 admin 控制台 | `admin` |
|
||||||
| `USER_ROLES` | JSON | - | 见下方 |
|
| `USER_ROLES` | JSON | - | 见下方 |
|
||||||
| `DISABLE_ANONYMOUS_USER_CREATE_EMAIL` | 文本/JSON | 禁用匿名用户创建邮箱,如果设置为 true,则用户只能在登录后创建邮箱地址 | `true` |
|
| `DISABLE_ANONYMOUS_USER_CREATE_EMAIL` | 文本/JSON | 禁用匿名用户创建邮箱,如果设置为 true,则用户只能在登录后创建邮箱地址 | `true` |
|
||||||
| `NO_LIMIT_SEND_ROLE` | 文本 | 可以无限发送邮件的角色 | `vip` |
|
| `NO_LIMIT_SEND_ROLE` | 文本 | 可以无限发送邮件的角色, 多个角色使用逗号分割 `vip,admin` | `vip` |
|
||||||
|
|
||||||
> [!NOTE] USER_ROLES 用户角色配置说明
|
> [!NOTE] USER_ROLES 用户角色配置说明
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Context } from 'hono';
|
import { Context } from 'hono';
|
||||||
|
|
||||||
import { HonoCustomType } from '../types';
|
import { HonoCustomType } from '../types';
|
||||||
import { getAdminPasswords, getBooleanValue, getDefaultDomains, getDomains, getIntValue, getPasswords, getStringArray, getStringValue, getUserRoles, getAnotherWorkerList } from '../utils';
|
import { getAdminPasswords, getBooleanValue, getDefaultDomains, getDomains, getIntValue, getPasswords, getStringArray, getStringValue, getUserRoles, getAnotherWorkerList, getSplitStringListValue } from '../utils';
|
||||||
import { CONSTANTS } from '../constants';
|
import { CONSTANTS } from '../constants';
|
||||||
import { isS3Enabled } from '../mails_api/s3_attachment';
|
import { isS3Enabled } from '../mails_api/s3_attachment';
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ export default {
|
|||||||
"ADMIN_USER_ROLE": getStringValue(c.env.ADMIN_USER_ROLE),
|
"ADMIN_USER_ROLE": getStringValue(c.env.ADMIN_USER_ROLE),
|
||||||
"USER_DEFAULT_ROLE": getStringValue(c.env.USER_DEFAULT_ROLE),
|
"USER_DEFAULT_ROLE": getStringValue(c.env.USER_DEFAULT_ROLE),
|
||||||
"USER_ROLES": getUserRoles(c),
|
"USER_ROLES": getUserRoles(c),
|
||||||
"NO_LIMIT_SEND_ROLE": getStringValue(c.env.NO_LIMIT_SEND_ROLE),
|
"NO_LIMIT_SEND_ROLE": getSplitStringListValue(c.env.NO_LIMIT_SEND_ROLE),
|
||||||
|
|
||||||
"ADMIN_CONTACT": c.env.ADMIN_CONTACT,
|
"ADMIN_CONTACT": c.env.ADMIN_CONTACT,
|
||||||
"ENABLE_USER_CREATE_EMAIL": getBooleanValue(c.env.ENABLE_USER_CREATE_EMAIL),
|
"ENABLE_USER_CREATE_EMAIL": getBooleanValue(c.env.ENABLE_USER_CREATE_EMAIL),
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Hono } from 'hono'
|
|||||||
|
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
import { HonoCustomType } from "../types";
|
import { HonoCustomType } from "../types";
|
||||||
import { getBooleanValue, getJsonSetting, checkCfTurnstile, getStringValue } from '../utils';
|
import { getBooleanValue, getJsonSetting, checkCfTurnstile, getStringValue, getSplitStringListValue } from '../utils';
|
||||||
import { newAddress, handleListQuery, deleteAddressWithData, getAddressPrefix, getAllowDomains } from '../common'
|
import { newAddress, handleListQuery, deleteAddressWithData, getAddressPrefix, getAllowDomains } from '../common'
|
||||||
import { CONSTANTS } from '../constants'
|
import { CONSTANTS } from '../constants'
|
||||||
import auto_reply from './auto_reply'
|
import auto_reply from './auto_reply'
|
||||||
@@ -97,7 +97,8 @@ api.get('/api/settings', async (c) => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn("Failed to update address")
|
console.warn("Failed to update address")
|
||||||
}
|
}
|
||||||
const is_no_limit_send_balance = user_role && user_role === getStringValue(c.env.NO_LIMIT_SEND_ROLE);
|
const no_limit_roles = getSplitStringListValue(c.env.NO_LIMIT_SEND_ROLE);
|
||||||
|
const is_no_limit_send_balance = user_role && no_limit_roles.includes(user_role);
|
||||||
const balance = is_no_limit_send_balance ? 99999 : await c.env.DB.prepare(
|
const balance = is_no_limit_send_balance ? 99999 : await c.env.DB.prepare(
|
||||||
`SELECT balance FROM address_sender where address = ? and enabled = 1`
|
`SELECT balance FROM address_sender where address = ? and enabled = 1`
|
||||||
).bind(address).first("balance");
|
).bind(address).first("balance");
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { WorkerMailer, WorkerMailerOptions } from 'worker-mailer';
|
|||||||
|
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
import { CONSTANTS } from '../constants'
|
import { CONSTANTS } from '../constants'
|
||||||
import { getJsonSetting, getDomains, getIntValue, getBooleanValue, getStringValue, getJsonObjectValue } from '../utils';
|
import { getJsonSetting, getDomains, getIntValue, getBooleanValue, getStringValue, getJsonObjectValue, getSplitStringListValue } from '../utils';
|
||||||
import { GeoData } from '../models'
|
import { GeoData } from '../models'
|
||||||
import { handleListQuery } from '../common'
|
import { handleListQuery } from '../common'
|
||||||
import { HonoCustomType } from '../types';
|
import { HonoCustomType } from '../types';
|
||||||
@@ -137,7 +137,8 @@ export const sendMail = async (
|
|||||||
throw new Error("Invalid domain")
|
throw new Error("Invalid domain")
|
||||||
}
|
}
|
||||||
const user_role = c.get("userRolePayload");
|
const user_role = c.get("userRolePayload");
|
||||||
const is_no_limit_send_balance = user_role && user_role === getStringValue(c.env.NO_LIMIT_SEND_ROLE);
|
const no_limit_roles = getSplitStringListValue(c.env.NO_LIMIT_SEND_ROLE);
|
||||||
|
const is_no_limit_send_balance = user_role && no_limit_roles.includes(user_role);
|
||||||
// no need find noLimitSendAddressList if is_no_limit_send_balance
|
// no need find noLimitSendAddressList if is_no_limit_send_balance
|
||||||
const noLimitSendAddressList = is_no_limit_send_balance ?
|
const noLimitSendAddressList = is_no_limit_send_balance ?
|
||||||
[] : await getJsonSetting(c, CONSTANTS.NO_LIMIT_SEND_ADDRESS_LIST_KEY) || [];
|
[] : await getJsonSetting(c, CONSTANTS.NO_LIMIT_SEND_ADDRESS_LIST_KEY) || [];
|
||||||
|
|||||||
+10
-1
@@ -1,6 +1,6 @@
|
|||||||
import { Context } from "hono";
|
import { Context } from "hono";
|
||||||
import { createMimeMessage } from "mimetext";
|
import { createMimeMessage } from "mimetext";
|
||||||
import { HonoCustomType, UserRole,AnotherWorker } from "./types";
|
import { HonoCustomType, UserRole, AnotherWorker } from "./types";
|
||||||
|
|
||||||
export const getJsonObjectValue = <T = any>(
|
export const getJsonObjectValue = <T = any>(
|
||||||
value: string | any
|
value: string | any
|
||||||
@@ -69,6 +69,15 @@ export const getStringValue = (value: any): string => {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getSplitStringListValue = (
|
||||||
|
value: any, demiliter: string = ","
|
||||||
|
): string[] => {
|
||||||
|
const valueToSplit = getStringValue(value);
|
||||||
|
return valueToSplit.split(demiliter)
|
||||||
|
.map((item: string) => item.trim())
|
||||||
|
.filter((item: string) => item.length > 0);
|
||||||
|
}
|
||||||
|
|
||||||
export const getBooleanValue = (
|
export const getBooleanValue = (
|
||||||
value: boolean | string | any
|
value: boolean | string | any
|
||||||
): boolean => {
|
): boolean => {
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# DISABLE_SHOW_GITHUB = true
|
# DISABLE_SHOW_GITHUB = true
|
||||||
# default send balance, if not set, it will be 0
|
# default send balance, if not set, it will be 0
|
||||||
# DEFAULT_SEND_BALANCE = 1
|
# DEFAULT_SEND_BALANCE = 1
|
||||||
# NO_LIMIT_SEND_ROLE = "vip" # the role which can send emails without limit
|
# the role which can send emails without limit, multiple roles can be separated by ,
|
||||||
|
# NO_LIMIT_SEND_ROLE = "vip"
|
||||||
# Turnstile verification
|
# Turnstile verification
|
||||||
# CF_TURNSTILE_SITE_KEY = ""
|
# CF_TURNSTILE_SITE_KEY = ""
|
||||||
# CF_TURNSTILE_SECRET_KEY = ""
|
# CF_TURNSTILE_SECRET_KEY = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user