Files
nbi_alarm/api/login.go
2023-08-21 11:00:22 +08:00

162 lines
4.8 KiB
Go

package api
import (
"encoding/hex"
"github.com/aceld/zinx/ziface"
"github.com/aceld/zinx/zlog"
"github.com/aceld/zinx/znet"
"github.com/google/uuid"
"omc/core"
"omc/omc"
"omc/service"
"strings"
)
// LoginApi 登录API
type LoginApi struct {
znet.BaseRouter
}
// Handle Login reqLoginAlarm;user=yiy;key=qw#$@;type=msg
func (*LoginApi) Handle(request ziface.IRequest) {
// 登录消息处理
msgBody := omc.MsgBody{
RawData: request.GetData(),
Msg: make(map[string]string, 0),
}
if err := msgBody.Decode(); err != nil {
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "inlaid message body"))
return
}
user, userOK := msgBody.Msg["user"]
pw, pwOK := msgBody.Msg["key"]
tp, tpOK := msgBody.Msg["type"]
if !userOK || !pwOK || !tpOK {
zlog.Ins().ErrorF("missing parameter of message body")
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "missing parameter of message body"))
return
}
m := core.GetManager(request.GetConnection().GetName())
if m == nil {
zlog.Ins().ErrorF("server internal error")
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "server internal error"))
return
}
uID, err := request.GetConnection().GetProperty("UID")
if err != nil {
zlog.Ins().ErrorF("GetProperty UID error %s", err)
request.GetConnection().Stop()
return
}
//登录信息check
if err := service.UserLogin(user, pw); err != nil {
zlog.Ins().ErrorF("LoginFail %s", err)
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "Incorrect username and password"))
isClose, _ := m.LoginFail(uID.(string)) //登录错误超过3次,断开连接
if isClose {
request.GetConnection().Stop()
return
}
return
}
//manager 更新
if err := m.LoginSuccess(uID.(string), user, tp); err != nil {
zlog.Ins().ErrorF("manager:%s", err)
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", err.Error()))
return
}
zlog.Ins().InfoF("user login loginSuccess,username:%s, type:%s, channel:%s", user, tp, request.GetConnection().GetName())
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.SuccessMsg("ackLoginAlarm", "", ""))
}
// CMCALoginSeq 登录API
type CMCALoginSeq struct {
znet.BaseRouter
}
//reqCMCALoginSeq
func (*CMCALoginSeq) Handle(request ziface.IRequest) {
uid := uuid.New()
seqNo := hex.EncodeToString(uid[0:])
seqNo = strings.ToUpper(seqNo)
//发送文件同步信息
ackBody := omc.MsgBody{
MsgName: "ackCMCALoginSeq",
Msg: make(map[string]string, 0),
}
ackBody.Msg["seqNo"] = seqNo
ackBody.Pack()
request.GetConnection().SendMsg(omc.AckCMCALoginSeq, ackBody.RawData)
}
//
type CMCALoginAlarm struct {
znet.BaseRouter
}
//reqCMCALoginSeq
//reqCMCALoginAlarm;user=yiy;key=12313121213123;cert=AAAAAAAAAA;type=msg
func (*CMCALoginAlarm) Handle(request ziface.IRequest) {
// 登录消息处理
msgBody := omc.MsgBody{
RawData: request.GetData(),
Msg: make(map[string]string, 0),
}
if err := msgBody.Decode(); err != nil {
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "inlaid message body"))
return
}
user, userOK := msgBody.Msg["user"]
pw, pwOK := msgBody.Msg["key"]
tp, tpOK := msgBody.Msg["type"]
if !userOK || !pwOK || !tpOK {
zlog.Ins().ErrorF("missing parameter of message body")
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "missing parameter of message body"))
return
}
m := core.GetManager(request.GetConnection().GetName())
if m == nil {
zlog.Ins().ErrorF("server internal error")
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "server internal error"))
return
}
uID, err := request.GetConnection().GetProperty("UID")
if err != nil {
zlog.Ins().ErrorF("GetProperty UID error %s", err)
request.GetConnection().Stop()
return
}
//登录信息check
if err := service.UserLogin(user, pw); err != nil {
zlog.Ins().ErrorF("LoginFail %s", err)
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", "Incorrect username and password"))
isClose, _ := m.LoginFail(uID.(string)) //登录错误超过3次,断开连接
if isClose {
request.GetConnection().Stop()
return
}
return
}
//manager 更新
if err := m.LoginSuccess(uID.(string), user, tp); err != nil {
zlog.Ins().ErrorF("manager:%s", err)
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.ErrorMsg("ackLoginAlarm", "", err.Error()))
return
}
zlog.Ins().InfoF("user login loginSuccess,username:%s, type:%s, channel:%s", user, tp, request.GetConnection().GetName())
request.GetConnection().SendMsg(omc.AckLoginAlarm, omc.SuccessMsg("ackLoginAlarm", "", ""))
}