Files
NanoKVM-MIRROR/server/service/auth/auth.go
Vladimir Smirnov a58227910b Slightly refactor nanokvm code
* Add ability to properly configure logrus (e.x. specify output file)
 * Make the code slightly more ideomatic (sort imports, etc)
 * Replace some of the shell calls with equivalent native code
 * Fix update process
 * Improve error handling (handle 2 previously unhandled errors)
 * Add locking for HID operations and make a HID-operations struct a singleton
2024-10-13 18:41:04 +02:00

78 lines
1.6 KiB
Go

package auth
import (
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
"NanoKVM-Server/config"
"NanoKVM-Server/middleware"
"NanoKVM-Server/proto"
"NanoKVM-Server/utils"
)
func (s *Service) Login(c *gin.Context) {
var req proto.LoginReq
var rsp proto.Response
// authentication disabled
conf := config.GetInstance()
if conf.Authentication == "disable" {
rsp.OkRspWithData(c, &proto.LoginRsp{
Token: "disabled",
})
return
}
if err := proto.ParseFormRequest(c, &req); err != nil {
rsp.ErrRsp(c, -1, "invalid parameters")
return
}
passwordDecrypt, err := utils.DecodeDecrypt(req.Password)
if err != nil {
rsp.ErrRsp(c, -2, "decrypt password failed")
return
}
account, err := getAccount()
if err != nil {
rsp.ErrRsp(c, -3, "get account failed")
return
}
if req.Username != account.Username || passwordDecrypt != account.Password {
rsp.ErrRsp(c, -4, "invalid username or password")
return
}
token, err := middleware.GenerateJWT(req.Username)
if err != nil {
rsp.ErrRsp(c, -5, "generate token failed")
return
}
rsp.OkRspWithData(c, &proto.LoginRsp{
Token: token,
})
log.Debugf("login success, username: %s", req.Username)
}
func (s *Service) ChangePassword(c *gin.Context) {
var req proto.ChangePasswordReq
var rsp proto.Response
if err := proto.ParseFormRequest(c, &req); err != nil {
rsp.ErrRsp(c, -1, "invalid parameters")
return
}
if err := setAccount(req.Username, req.Password); err != nil {
rsp.ErrRsp(c, -2, "change password failed")
return
}
rsp.OkRsp(c)
log.Debugf("change password success, username: %s", req.Username)
}