mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-09-05 23:47:50 +08:00
feat: add NO_LIMIT_SEND_ADDRESS_LIST_KEY in admin account settings page (#525)
This commit is contained in:
+3
-2
@@ -5,9 +5,10 @@
|
|||||||
|
|
||||||
- fix: |Doc| 修复文档中的一些错误
|
- fix: |Doc| 修复文档中的一些错误
|
||||||
- fix: |Github Action| 修复 frontend 部署分支错误的问题
|
- fix: |Github Action| 修复 frontend 部署分支错误的问题
|
||||||
- fix: admin 发送邮件功能
|
- feat: admin 发送邮件功能
|
||||||
|
- feat: admin 后台,账号配置页面添加无限发送邮件的地址列表
|
||||||
|
|
||||||
# v0.8.2
|
# v0.8.1
|
||||||
|
|
||||||
- feat: |Doc| 更新 UI 安装的文档
|
- feat: |Doc| 更新 UI 安装的文档
|
||||||
- feat: |UI| 对用户隐藏邮箱账号的 ID
|
- feat: |UI| 对用户隐藏邮箱账号的 ID
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const { t } = useI18n({
|
|||||||
address_block_list: 'Address Block Keywords for Users(Admin can skip)',
|
address_block_list: 'Address Block Keywords for Users(Admin can skip)',
|
||||||
address_block_list_placeholder: 'Please enter the keywords you want to block',
|
address_block_list_placeholder: 'Please enter the keywords you want to block',
|
||||||
send_address_block_list: 'Address Block Keywords for send email',
|
send_address_block_list: 'Address Block Keywords for send email',
|
||||||
|
noLimitSendAddressList: 'No Balance Limit Send Address List',
|
||||||
verified_address_list: 'Verified Address List(Can send email by cf internal api)',
|
verified_address_list: 'Verified Address List(Can send email by cf internal api)',
|
||||||
fromBlockList: 'Block Keywords for receive email',
|
fromBlockList: 'Block Keywords for receive email',
|
||||||
},
|
},
|
||||||
@@ -27,6 +28,7 @@ const { t } = useI18n({
|
|||||||
address_block_list: '邮件地址屏蔽关键词(管理员可跳过检查)',
|
address_block_list: '邮件地址屏蔽关键词(管理员可跳过检查)',
|
||||||
address_block_list_placeholder: '请输入您想要屏蔽的关键词',
|
address_block_list_placeholder: '请输入您想要屏蔽的关键词',
|
||||||
send_address_block_list: '发送邮件地址屏蔽关键词',
|
send_address_block_list: '发送邮件地址屏蔽关键词',
|
||||||
|
noLimitSendAddressList: '无余额限制发送地址列表',
|
||||||
verified_address_list: '已验证地址列表(可通过 cf 内部 api 发送邮件)',
|
verified_address_list: '已验证地址列表(可通过 cf 内部 api 发送邮件)',
|
||||||
fromBlockList: '接收邮件地址屏蔽关键词',
|
fromBlockList: '接收邮件地址屏蔽关键词',
|
||||||
}
|
}
|
||||||
@@ -35,6 +37,7 @@ const { t } = useI18n({
|
|||||||
|
|
||||||
const addressBlockList = ref([])
|
const addressBlockList = ref([])
|
||||||
const sendAddressBlockList = ref([])
|
const sendAddressBlockList = ref([])
|
||||||
|
const noLimitSendAddressList = ref([])
|
||||||
const verifiedAddressList = ref([])
|
const verifiedAddressList = ref([])
|
||||||
const fromBlockList = ref([])
|
const fromBlockList = ref([])
|
||||||
|
|
||||||
@@ -45,6 +48,7 @@ const fetchData = async () => {
|
|||||||
sendAddressBlockList.value = res.sendBlockList || []
|
sendAddressBlockList.value = res.sendBlockList || []
|
||||||
verifiedAddressList.value = res.verifiedAddressList || []
|
verifiedAddressList.value = res.verifiedAddressList || []
|
||||||
fromBlockList.value = res.fromBlockList || []
|
fromBlockList.value = res.fromBlockList || []
|
||||||
|
noLimitSendAddressList.value = res.noLimitSendAddressList || []
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
message.error(error.message || "error");
|
message.error(error.message || "error");
|
||||||
}
|
}
|
||||||
@@ -59,6 +63,7 @@ const save = async () => {
|
|||||||
sendBlockList: sendAddressBlockList.value || [],
|
sendBlockList: sendAddressBlockList.value || [],
|
||||||
verifiedAddressList: verifiedAddressList.value || [],
|
verifiedAddressList: verifiedAddressList.value || [],
|
||||||
fromBlockList: fromBlockList.value || [],
|
fromBlockList: fromBlockList.value || [],
|
||||||
|
noLimitSendAddressList: noLimitSendAddressList.value || [],
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
message.success(t('successTip'))
|
message.success(t('successTip'))
|
||||||
@@ -87,6 +92,10 @@ onMounted(async () => {
|
|||||||
<n-select v-model:value="sendAddressBlockList" filterable multiple tag
|
<n-select v-model:value="sendAddressBlockList" filterable multiple tag
|
||||||
:placeholder="t('address_block_list_placeholder')" />
|
:placeholder="t('address_block_list_placeholder')" />
|
||||||
</n-form-item-row>
|
</n-form-item-row>
|
||||||
|
<n-form-item-row :label="t('noLimitSendAddressList')">
|
||||||
|
<n-select v-model:value="noLimitSendAddressList" filterable multiple tag
|
||||||
|
:placeholder="t('noLimitSendAddressList')" />
|
||||||
|
</n-form-item-row>
|
||||||
<n-form-item-row :label="t('verified_address_list')">
|
<n-form-item-row :label="t('verified_address_list')">
|
||||||
<n-select v-model:value="verifiedAddressList" filterable multiple tag
|
<n-select v-model:value="verifiedAddressList" filterable multiple tag
|
||||||
:placeholder="t('verified_address_list')" />
|
:placeholder="t('verified_address_list')" />
|
||||||
|
|||||||
@@ -257,11 +257,13 @@ api.get('/admin/account_settings', async (c) => {
|
|||||||
const sendBlockList = await getJsonSetting(c, CONSTANTS.SEND_BLOCK_LIST_KEY);
|
const sendBlockList = await getJsonSetting(c, CONSTANTS.SEND_BLOCK_LIST_KEY);
|
||||||
const verifiedAddressList = await getJsonSetting(c, CONSTANTS.VERIFIED_ADDRESS_LIST_KEY);
|
const verifiedAddressList = await getJsonSetting(c, CONSTANTS.VERIFIED_ADDRESS_LIST_KEY);
|
||||||
const fromBlockList = c.env.KV ? await c.env.KV.get<string[]>(CONSTANTS.EMAIL_KV_BLACK_LIST, 'json') : [];
|
const fromBlockList = c.env.KV ? await c.env.KV.get<string[]>(CONSTANTS.EMAIL_KV_BLACK_LIST, 'json') : [];
|
||||||
|
const noLimitSendAddressList = await getJsonSetting(c, CONSTANTS.NO_LIMIT_SEND_ADDRESS_LIST_KEY);
|
||||||
return c.json({
|
return c.json({
|
||||||
blockList: blockList || [],
|
blockList: blockList || [],
|
||||||
sendBlockList: sendBlockList || [],
|
sendBlockList: sendBlockList || [],
|
||||||
verifiedAddressList: verifiedAddressList || [],
|
verifiedAddressList: verifiedAddressList || [],
|
||||||
fromBlockList: fromBlockList || []
|
fromBlockList: fromBlockList || [],
|
||||||
|
noLimitSendAddressList: noLimitSendAddressList || []
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@@ -271,7 +273,10 @@ api.get('/admin/account_settings', async (c) => {
|
|||||||
|
|
||||||
api.post('/admin/account_settings', async (c) => {
|
api.post('/admin/account_settings', async (c) => {
|
||||||
/** @type {{ blockList: Array<string>, sendBlockList: Array<string> }} */
|
/** @type {{ blockList: Array<string>, sendBlockList: Array<string> }} */
|
||||||
const { blockList, sendBlockList, verifiedAddressList, fromBlockList } = await c.req.json();
|
const {
|
||||||
|
blockList, sendBlockList, noLimitSendAddressList,
|
||||||
|
verifiedAddressList, fromBlockList
|
||||||
|
} = await c.req.json();
|
||||||
if (!blockList || !sendBlockList || !verifiedAddressList) {
|
if (!blockList || !sendBlockList || !verifiedAddressList) {
|
||||||
return c.text("Invalid blockList or sendBlockList", 400)
|
return c.text("Invalid blockList or sendBlockList", 400)
|
||||||
}
|
}
|
||||||
@@ -296,6 +301,10 @@ api.post('/admin/account_settings', async (c) => {
|
|||||||
if (fromBlockList) {
|
if (fromBlockList) {
|
||||||
await c.env.KV.put(CONSTANTS.EMAIL_KV_BLACK_LIST, JSON.stringify(fromBlockList || []))
|
await c.env.KV.put(CONSTANTS.EMAIL_KV_BLACK_LIST, JSON.stringify(fromBlockList || []))
|
||||||
}
|
}
|
||||||
|
await saveSetting(
|
||||||
|
c, CONSTANTS.NO_LIMIT_SEND_ADDRESS_LIST_KEY,
|
||||||
|
JSON.stringify(noLimitSendAddressList || [])
|
||||||
|
)
|
||||||
return c.json({
|
return c.json({
|
||||||
success: true
|
success: true
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export const CONSTANTS = {
|
|||||||
USER_SETTINGS_KEY: 'user_settings',
|
USER_SETTINGS_KEY: 'user_settings',
|
||||||
OAUTH2_SETTINGS_KEY: 'oauth2_settings',
|
OAUTH2_SETTINGS_KEY: 'oauth2_settings',
|
||||||
VERIFIED_ADDRESS_LIST_KEY: 'verified_address_list',
|
VERIFIED_ADDRESS_LIST_KEY: 'verified_address_list',
|
||||||
|
NO_LIMIT_SEND_ADDRESS_LIST_KEY: 'no_limit_send_address_list',
|
||||||
|
|
||||||
// KV
|
// KV
|
||||||
TG_KV_PREFIX: "temp-mail-telegram",
|
TG_KV_PREFIX: "temp-mail-telegram",
|
||||||
|
|||||||
@@ -110,7 +110,12 @@ export const sendMail = async (
|
|||||||
}
|
}
|
||||||
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 is_no_limit_send_balance = user_role && user_role === getStringValue(c.env.NO_LIMIT_SEND_ROLE);
|
||||||
if (!is_no_limit_send_balance && !options?.isAdmin) {
|
// no need find noLimitSendAddressList if is_no_limit_send_balance
|
||||||
|
const noLimitSendAddressList = is_no_limit_send_balance ?
|
||||||
|
[] : await getJsonSetting(c, CONSTANTS.NO_LIMIT_SEND_ADDRESS_LIST_KEY) || [];
|
||||||
|
const isNoLimitSendAddress = noLimitSendAddressList?.includes(address);
|
||||||
|
const needCheckBalance = !is_no_limit_send_balance && !options?.isAdmin && !isNoLimitSendAddress;
|
||||||
|
if (needCheckBalance) {
|
||||||
// check permission
|
// check permission
|
||||||
const balance = await c.env.DB.prepare(
|
const balance = await c.env.DB.prepare(
|
||||||
`SELECT balance FROM address_sender
|
`SELECT balance FROM address_sender
|
||||||
@@ -161,7 +166,7 @@ export const sendMail = async (
|
|||||||
throw new Error("Please enable resend or verified address list")
|
throw new Error("Please enable resend or verified address list")
|
||||||
}
|
}
|
||||||
// update balance
|
// update balance
|
||||||
if (!sendByVerifiedAddressList && !is_no_limit_send_balance && !options?.isAdmin) {
|
if (!sendByVerifiedAddressList && needCheckBalance) {
|
||||||
try {
|
try {
|
||||||
const { success } = await c.env.DB.prepare(
|
const { success } = await c.env.DB.prepare(
|
||||||
`UPDATE address_sender SET balance = balance - 1 where address = ?`
|
`UPDATE address_sender SET balance = balance - 1 where address = ?`
|
||||||
|
|||||||
Reference in New Issue
Block a user