mirror of
https://github.com/gowvp/gb28181.git
synced 2025-10-03 06:42:20 +08:00
81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
package api
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gowvp/gb28181/internal/conf"
|
|
"github.com/ixugo/goddd/pkg/reason"
|
|
"github.com/ixugo/goddd/pkg/web"
|
|
)
|
|
|
|
type UserAPI struct {
|
|
conf *conf.Bootstrap
|
|
}
|
|
|
|
func NewUserAPI(conf *conf.Bootstrap) UserAPI {
|
|
return UserAPI{
|
|
conf: conf,
|
|
}
|
|
}
|
|
|
|
func RegisterUser(r gin.IRouter, api UserAPI, mid ...gin.HandlerFunc) {
|
|
group := r.Group("/user")
|
|
group.POST("/login", web.WarpH(api.login))
|
|
group.PUT("/user", web.WarpHs(api.updateCredentials, mid...)...)
|
|
}
|
|
|
|
// 登录请求结构体
|
|
type loginInput struct {
|
|
Username string `json:"username" binding:"required"`
|
|
Password string `json:"password" binding:"required"`
|
|
}
|
|
|
|
// 登录响应结构体
|
|
type loginOutput struct {
|
|
Token string `json:"token"`
|
|
User string `json:"user"`
|
|
}
|
|
|
|
// 登录接口
|
|
func (api UserAPI) login(_ *gin.Context, in *loginInput) (*loginOutput, error) {
|
|
// 验证用户名和密码
|
|
if in.Username != api.conf.Server.Username || in.Password != api.conf.Server.Password {
|
|
return nil, reason.ErrNameOrPasswd
|
|
}
|
|
|
|
token, err := web.NewToken(web.TokenInput{
|
|
Secret: api.conf.Server.HTTP.JwtSecret,
|
|
Expires: 3 * 24 * time.Hour,
|
|
Username: in.Username,
|
|
})
|
|
if err != nil {
|
|
return nil, reason.ErrServer.SetMsg("生成token失败: " + err.Error())
|
|
}
|
|
|
|
return &loginOutput{
|
|
Token: token,
|
|
User: in.Username,
|
|
}, nil
|
|
}
|
|
|
|
// 修改凭据请求结构体
|
|
type updateCredentialsInput struct {
|
|
Username string `json:"username" binding:"required"`
|
|
Password string `json:"password" binding:"required"`
|
|
}
|
|
|
|
// 修改凭据接口
|
|
func (api UserAPI) updateCredentials(c *gin.Context, in *updateCredentialsInput) (gin.H, error) {
|
|
// 更新配置中的用户名和密码
|
|
api.conf.Server.Username = in.Username
|
|
api.conf.Server.Password = in.Password
|
|
|
|
// 写入配置文件
|
|
if err := conf.WriteConfig(api.conf, api.conf.ConfigPath); err != nil {
|
|
return nil, reason.ErrServer.SetMsg("保存配置失败: " + err.Error())
|
|
}
|
|
|
|
return gin.H{"msg": "凭据更新成功"}, nil
|
|
}
|