feat: add admin panel (#31)

* feat: add admin panel

* feature: update limit
This commit is contained in:
Dream Hunter
2023-10-09 23:03:15 +08:00
committed by GitHub
parent 0f74bde850
commit 5cfc78d70d
15 changed files with 343 additions and 10 deletions

View File

@@ -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 }

View File

@@ -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)

View File

@@ -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 = ""