diff --git a/CHANGELOG.md b/CHANGELOG.md index 356cfb41..58271eb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - fix: |CleanUP| 修复清理邮件时,清理时间超过 30 天报错的 bug - feat: admin 用户管理页面: 增加 用户地址查看功能 - feat: | S3 附件| 增加 S3 附件删除功能 +- feat: | Admin API| 增加 admin 绑定用户和地址的 api ## v0.9.0 diff --git a/worker/src/admin_api/admin_user_api.ts b/worker/src/admin_api/admin_user_api.ts index c234c06c..9d09f774 100644 --- a/worker/src/admin_api/admin_user_api.ts +++ b/worker/src/admin_api/admin_user_api.ts @@ -5,6 +5,7 @@ import { getJsonSetting, saveSetting, checkUserPassword, getDomains, getUserRole import { UserSettings, GeoData, UserInfo } from "../models"; import { handleListQuery } from '../common' import { HonoCustomType } from '../types'; +import UserBindAddressModule from '../user_api/bind_address'; export default { getSetting: async (c: Context) => { @@ -144,22 +145,12 @@ export default { } return c.json({ success: true }) }, + bindAddress: async (c: Context) => { + const { user_id, address_id } = await c.req.json(); + return await UserBindAddressModule.bindByID(c, user_id, address_id); + }, getBindedAddresses: async (c: Context) => { const { user_id } = c.req.param(); - if (!user_id) return c.text("Invalid user_id", 400); - // select binded address - const { results } = await c.env.DB.prepare( - `SELECT a.*,` - + ` (SELECT COUNT(*) FROM raw_mails WHERE address = a.name) AS mail_count,` - + ` (SELECT COUNT(*) FROM sendbox WHERE address = a.name) AS send_count` - + ` FROM address a ` - + ` JOIN users_address ua ` - + ` ON ua.address_id = a.id ` - + ` WHERE ua.user_id = ?` - + ` ORDER BY a.id DESC` - ).bind(user_id).all(); - return c.json({ - results: results, - }) + return await UserBindAddressModule.getBindedAddressesById(c, user_id); }, } diff --git a/worker/src/admin_api/index.ts b/worker/src/admin_api/index.ts index 79c18e28..11b7d637 100644 --- a/worker/src/admin_api/index.ts +++ b/worker/src/admin_api/index.ts @@ -328,6 +328,7 @@ api.post('/admin/users/:user_id/reset_password', admin_user_api.resetPassword) api.get('/admin/user_roles', async (c) => c.json(getUserRoles(c))) api.post('/admin/user_roles', admin_user_api.updateUserRoles) api.get('/admin/users/bind_address/:user_id', admin_user_api.getBindedAddresses) +api.post('/admin/users/bind_address', admin_user_api.bindAddress) // user oauth2 settings api.get('/admin/user_oauth2_settings', oauth2_settings.getUserOauth2Settings) diff --git a/worker/src/user_api/bind_address.ts b/worker/src/user_api/bind_address.ts index 6057c98e..a16989a9 100644 --- a/worker/src/user_api/bind_address.ts +++ b/worker/src/user_api/bind_address.ts @@ -7,10 +7,16 @@ import { getJsonSetting } from "../utils" import { CONSTANTS } from "../constants"; import { unbindTelegramByAddress } from '../telegram_api/common'; -export default { +const UserBindAddressModule = { bind: async (c: Context) => { const { user_id } = c.get("userPayload"); const { address_id } = c.get("jwtPayload"); + return await UserBindAddressModule.bindByID(c, user_id, address_id) + }, + bindByID: async ( + c: Context, + user_id: number | string, address_id: number | string + ) => { if (!address_id || !user_id) { return c.text("No address or user token", 400) } @@ -96,6 +102,11 @@ export default { }, getBindedAddresses: async (c: Context) => { const { user_id } = c.get("userPayload"); + return await UserBindAddressModule.getBindedAddressesById(c, user_id); + }, + getBindedAddressesById: async ( + c: Context, user_id: number | string + ) => { if (!user_id) { return c.text("No user token", 400) } @@ -229,3 +240,5 @@ export default { return c.json({ success: true }) } } + +export default UserBindAddressModule;