Files
nbi_alarm/handle/service/login.go
2023-08-23 17:22:22 +08:00

63 lines
1.5 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/conf"
"omc/core/db"
"omc/core/utils"
"omc/handle/model"
"os"
"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 {
return err
}
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(content, signatureBase64 string) error {
// 读取文件内容
strByte, err := os.ReadFile(conf.OmcConf.PublicKey)
if err != nil {
return fmt.Errorf("无法读取文件 %v", err)
}
// 公钥
publicKeyPEM := fmt.Sprintf("-----BEGIN RSA PUBLIC KEY-----\n %s \n-----END RSA PUBLIC KEY-----", strByte)
// 解析公钥
publicKey, err := utils.ParsePKCS1PublicKey(publicKeyPEM)
if err != nil {
fmt.Println("解析公钥失败:", err)
}
// 解码base64得到签名字节串
signature, err := base64.StdEncoding.DecodeString(signatureBase64)
if err != nil {
fmt.Println("解码签名数据失败:", err)
}
// 验证签名
valid := utils.VerifySignature(publicKey, []byte(content), signature)
if valid {
return nil
}
return errors.New("随机码签名验证失败")
}