Files
nbi_alarm/handle/service/login.go
2023-08-24 10:56:16 +08:00

71 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package service
import (
"encoding/base64"
"errors"
"fmt"
"omc/core/db"
"omc/core/utils"
"omc/handle/model"
"github.com/aceld/zinx/zlog"
)
// UserLogin 用户登录
func UserLogin(name, passwd string) error {
// 用户名密码校验
var user model.User
err := db.Client.Model(&model.User{}).Where("account_id=?", name).First(&user).Error
if err != nil {
zlog.Ins().ErrorF("Password Login[%s]:%s", name, err)
return errors.New("incorrect username and password")
}
if err := utils.Compare(user.Password, passwd); err != nil {
zlog.Ins().ErrorF("Password Login[%s]:%s", name, err)
return errors.New("incorrect username and password")
}
return nil
}
// CMCALogin 验证随机码
// content "user:seqNo" 组合的字符
// signatureBase64 签名数据base64编码
func CMCALogin(name, publicKeyStr, content, signatureBase64 string) error {
// 用户名密码校验
var user model.User
err := db.Client.Model(&model.User{}).Where("account_id=?", name).First(&user).Error
if err != nil {
zlog.Ins().ErrorF("Password Login[%s]:%s", name, err)
return errors.New("无效用户名")
}
if user.AccountId != name {
return fmt.Errorf("用户名错误 %s", name)
}
// 公钥
publicKeyPEM := fmt.Sprintf("-----BEGIN RSA PUBLIC KEY-----\n %s \n-----END RSA PUBLIC KEY-----", publicKeyStr)
// 解析公钥
publicKey, err := utils.ParsePKCS1PublicKey(publicKeyPEM)
if err != nil {
zlog.Ins().ErrorF("publicKeyPEM Login[%s]:%s", name, err)
return fmt.Errorf("解析公钥失败")
}
// 解码base64得到签名字节串
signature, err := base64.StdEncoding.DecodeString(signatureBase64)
if err != nil {
zlog.Ins().ErrorF("signatureBase64 Login[%s]:%s", name, err)
return fmt.Errorf("解码签名数据失败")
}
// 验证签名
valid := utils.VerifySignature(publicKey, []byte(content), signature)
if valid {
return nil
}
return errors.New("随机码签名验证失败")
}