mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-07-06 14:52:09 +08:00
feat: add admin panel (#31)
* feat: add admin panel * feature: update limit
This commit is contained in:
@@ -9,7 +9,7 @@ api.get('/api/mails', async (c) => {
|
||||
return c.json({ "error": "No address" }, 400)
|
||||
}
|
||||
const { results } = await c.env.DB.prepare(
|
||||
`SELECT id, source, subject, message FROM mails where address = ? order by id desc limit 10`
|
||||
`SELECT id, source, subject, message FROM mails where address = ? order by id desc limit 100`
|
||||
).bind(address).all();
|
||||
return c.json(results);
|
||||
})
|
||||
@@ -66,4 +66,42 @@ api.get('/api/new_address', async (c) => {
|
||||
})
|
||||
})
|
||||
|
||||
api.get('/admin/addresss', async (c) => {
|
||||
const { results } = await c.env.DB.prepare(
|
||||
`SELECT * FROM address order by id desc`
|
||||
).all();
|
||||
return c.json(results.map((r) => {
|
||||
r.name = c.env.PREFIX + r.name;
|
||||
return r;
|
||||
}));
|
||||
})
|
||||
|
||||
api.delete('/admin/delete_address/:id', async (c) => {
|
||||
const { id } = c.req.param();
|
||||
const { success } = await c.env.DB.prepare(
|
||||
`DELETE FROM address WHERE id = ?`
|
||||
).bind(id).run();
|
||||
if (!success) {
|
||||
return c.text("Failed to delete address", 500)
|
||||
}
|
||||
return c.json({
|
||||
success: success
|
||||
})
|
||||
})
|
||||
|
||||
api.get('/admin/show_password/:id', async (c) => {
|
||||
const { id } = c.req.param();
|
||||
const name = await c.env.DB.prepare(
|
||||
`SELECT name FROM address WHERE id = ?`
|
||||
).bind(id).first("name");
|
||||
// compute address
|
||||
const emailAddress = c.env.PREFIX + name
|
||||
const jwt = await Jwt.sign({
|
||||
address: emailAddress
|
||||
}, c.env.JWT_SECRET)
|
||||
return c.json({
|
||||
password: jwt
|
||||
})
|
||||
})
|
||||
|
||||
export { api }
|
||||
|
||||
@@ -22,6 +22,18 @@ app.use('/api/*', async (c, next) => {
|
||||
return jwt({ secret: c.env.JWT_SECRET })(c, next);
|
||||
});
|
||||
|
||||
app.use('/admin/*', async (c, next) => {
|
||||
// check header x-admin-auth
|
||||
if (c.env.ADMIN_PASSWORDS && c.env.ADMIN_PASSWORDS.length > 0) {
|
||||
const adminAuth = c.req.headers.get("x-admin-auth");
|
||||
if (adminAuth && c.env.ADMIN_PASSWORDS.includes(adminAuth)) {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return c.text("Need Admin Password", 401)
|
||||
});
|
||||
|
||||
|
||||
app.route('/', api)
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ node_compat = true
|
||||
PREFIX = "tmp"
|
||||
# IF YOU WANT TO MAKE YOUR SITE PRIVATE, UNCOMMENT THE FOLLOWING LINES
|
||||
# PASSWORDS = ["123", "456"]
|
||||
# For admin panel
|
||||
# ADMIN_PASSWORDS = ["123", "456"]
|
||||
DOMAINS = ["xxx.xxx1" , "xxx.xxx2"]
|
||||
JWT_SECRET = "xxx"
|
||||
BLACK_LIST = ""
|
||||
|
||||
Reference in New Issue
Block a user