fea: 完成添加用户,查询用户,鉴权,和添加管理员API

This commit is contained in:
cancerai committed 2026-10-11 21:58:58 +08:00
1 parent 861a689759
commit b43c31a12b
6 files changed
+236 -74

No files matched your search

+146 -51
View File
@@ -2,7 +2,8 @@ import { sql, SQL } from "bun";
import { Hono } from "hono";
import { validator } from "hono/validator";
import { checkAdmin } from "./utils/admin";
import { checkUser } from "./utils/user";
import { addUser, checkUser, getAllUser } from "./utils/user";
import { responseStr } from "./const/response_str";
const appTmp = new Hono()
const app = appTmp.basePath("/auth")
@@ -29,27 +30,28 @@ app.get(
) {
c.status(401)
return c.json({
"msg": "需要提供用户信息字段: name, passwd"
})
}
// 验证是否是合法用户
const re = await checkUser(db, name.toString(), passwd.toString())
if (re) {
return val
} else {
c.status(401)
return c.json({
"msg": "用户验证失败"
"msg": responseStr.REQ_PARAM_ERR
})
}
}),
(c) => {
async (c) => {
const req = c.req.query()
const name = req.name ?? ""
const passwd = req.passwd ?? ""
const re = await checkUser(db, name.toString(), passwd.toString())
if (!re) {
c.status(401)
return c.json({
"msg": responseStr.USER_INVALID
})
}
return c.json({
"code": 200,
"msg": "ok"
})
})
}
)
// 查询所有用户
app.get(
@@ -65,7 +67,7 @@ app.get(
) {
c.status(401)
return c.json({
"msg": "需要提供管理员信息字段: admin_name, admin_passwd"
"msg": responseStr.REQ_PARAM_ERR
})
}
@@ -76,52 +78,145 @@ app.get(
} else {
c.status(401)
return c.json({
"msg": "管理员验证失败"
"msg": responseStr.ADMIN_INVALID
})
}
}),
async (c) => {
const rows = await db`select name, token, create_time, update_time from user`
interface userDTO {
name: String,
token: String,
create_time: Date,
update_time: Date,
}
let re: userDTO[] = []
rows.forEach((ele: { [x: string]: any; }) => {
re.push({
"name": ele["name"],
"token": ele["token"],
"create_time": ele["create_time"],
"update_time": ele["update_time"],
})
});
const re = await getAllUser(db)
return c.json({
"msg": "ok",
"data": re
})
})
}
)
// 添加用户
// app.post("/user",
// validator("json", (val, c) => {
// if (val.auth_name == null || val.auth_passwd == null) {
// c.status(400)
// return c.json({
// "code": 400,
// "msg": "Parameter is invalid"
// })
// }
// }),
// async (c) => {
// const req = await c.req.json()
// const auth_name = req.auth_name
// const auth_passwd = req.auth_passwd
app.post(
"/user",
validator("json", (val, c) => {
if (
val.name == null ||
val.name == "" ||
val.passwd == null ||
val.passwd == ""
) {
c.status(400)
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.REQ_PARAM_ERR
})
} else {
return val
}
}),
async (c) => {
const reqHeader = c.req.query()
const adminName = reqHeader.admin_name ?? ""
const adminPasswd = reqHeader.admin_passwd ?? ""
if (!(await checkAdmin(db, adminName, adminPasswd))) {
c.status(401)
return c.json({
"code": 401,
"msg": responseStr.ADMIN_INVALID
})
}
// await db``
// return c.json({})
// })
const req = await c.req.json()
const name: string = req.name ?? ""
const passwd: string = req.passwd ?? ""
if (name.length <= 0 || name.length >= 11) {
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.USER_NAME_LENGTH_LIMIT
})
}
if (passwd.length <= 0 || passwd.length >= 31) {
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.USER_NAME_LENGTH_LIMIT
})
}
const re = await addUser(db, name, passwd)
if (re.state != 0) {
c.status(500)
return c.json({
"code": 500,
"msg": re.msg
})
}
return c.json({
"code": 200,
"msg": "ok"
})
}
)
// 添加管理员
app.post(
"/admin",
validator("json", (val, c) => {
if (
val.name == null ||
val.name == "" ||
val.passwd == null ||
val.passwd == ""
) {
c.status(400)
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.REQ_PARAM_ERR
})
} else {
return val
}
}),
async (c) => {
const req = await c.req.json()
const name: string = req.name ?? ""
const passwd: string = req.passwd ?? ""
if (name.length <= 0 || name.length >= 11) {
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.USER_NAME_LENGTH_LIMIT
})
}
if (passwd.length <= 0 || passwd.length >= 31) {
c.status(400)
return c.json({
"code": 400,
"msg": responseStr.USER_NAME_LENGTH_LIMIT
})
}
const encryptPasswd = await Bun.password.hash(passwd)
try {
await db`insert into admin(name, passwd) values(${name}, ${encryptPasswd})`
} catch (e) {
c.status(500)
return c.json({
"code": 500,
"msg": responseStr.SERVER_INTERNAL_ERR
})
}
return c.json({
"code": 200,
"msg": "ok"
})
}
)
export default {
port: 8080,