radius 添加 CallingStationID

This commit is contained in:
bjdgyc 2024-11-15 15:13:24 +08:00
parent 8a2350eb6e
commit bda23283ec
6 changed files with 20 additions and 10 deletions

View File

@ -340,7 +340,8 @@ func GroupAuthLogin(name, pwd string, authData map[string]interface{}) error {
if err != nil {
return err
}
err = auth.checkUser(name, pwd, g)
ext := map[string]interface{}{}
err = auth.checkUser(name, pwd, g, ext)
return err
}

View File

@ -68,7 +68,7 @@ func SetUser(v *User) error {
}
// 验证用户登录信息
func CheckUser(name, pwd, group string) error {
func CheckUser(name, pwd, group string, ext map[string]interface{}) error {
// 获取登入的group数据
groupData := &Group{}
err := One("Name", group, groupData)
@ -82,7 +82,7 @@ func CheckUser(name, pwd, group string) error {
authType := groupData.Auth["type"].(string)
// 本地认证方式
if authType == "local" {
return checkLocalUser(name, pwd, group)
return checkLocalUser(name, pwd, group, ext)
}
// 其它认证方式, 支持自定义
_, ok := authRegistry[authType]
@ -90,11 +90,11 @@ func CheckUser(name, pwd, group string) error {
return fmt.Errorf("%s %s", "未知的认证方式: ", authType)
}
auth := makeInstance(authType).(IUserAuth)
return auth.checkUser(name, pwd, groupData)
return auth.checkUser(name, pwd, groupData, ext)
}
// 验证本地用户登录信息
func checkLocalUser(name, pwd, group string) error {
func checkLocalUser(name, pwd, group string, ext map[string]interface{}) error {
// TODO 严重问题
// return nil

View File

@ -9,7 +9,7 @@ var authRegistry = make(map[string]reflect.Type)
type IUserAuth interface {
checkData(authData map[string]interface{}) error
checkUser(name, pwd string, g *Group) error
checkUser(name, pwd string, g *Group, ext map[string]interface{}) error
}
func makeInstance(name string) interface{} {

View File

@ -61,7 +61,7 @@ func (auth AuthLdap) checkData(authData map[string]interface{}) error {
return nil
}
func (auth AuthLdap) checkUser(name, pwd string, g *Group) error {
func (auth AuthLdap) checkUser(name, pwd string, g *Group, ext map[string]interface{}) error {
pl := len(pwd)
if name == "" || pl < 1 {
return fmt.Errorf("%s %s", name, "密码错误")

View File

@ -40,7 +40,7 @@ func (auth AuthRadius) checkData(authData map[string]interface{}) error {
return nil
}
func (auth AuthRadius) checkUser(name, pwd string, g *Group) error {
func (auth AuthRadius) checkUser(name, pwd string, g *Group, ext map[string]interface{}) error {
pl := len(pwd)
if name == "" || pl < 1 {
return fmt.Errorf("%s %s", name, "密码错误")
@ -74,15 +74,23 @@ func (auth AuthRadius) checkUser(name, pwd string, g *Group) error {
return fmt.Errorf("%s %s", name, "Radius set nasip 出现错误")
}
}
macAddr := ext["mac_addr"].(string)
if macAddr != "" {
err = rfc2865.CallingStationID_SetString(packet, macAddr)
if err != nil {
return fmt.Errorf("%s %s", name, "Radius set CallingStationID 出现错误")
}
}
ctx, done := context.WithTimeout(context.Background(), 3*time.Second)
defer done()
response, err := radius.Exchange(ctx, packet, auth.Addr)
if err != nil {
return fmt.Errorf("%s %s", name, "Radius服务器连接异常, 请检测服务器和端口")
return fmt.Errorf("%s %s %s", name, "Radius服务器连接异常, 请检测服务器和端口", err)
}
if response.Code != radius.CodeAccessAccept {
return fmt.Errorf("%s %s", name, "Radius用户名或密码错误")
}
return nil
}

View File

@ -99,7 +99,8 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
UserActLog: ua,
}
// TODO 用户密码校验
err = dbdata.CheckUser(cr.Auth.Username, cr.Auth.Password, cr.GroupSelect)
err = dbdata.CheckUser(cr.Auth.Username, cr.Auth.Password, cr.GroupSelect,
map[string]interface{}{"mac_addr": cr.MacAddressList.MacAddress})
if err != nil {
// lockManager.LoginStatus.Store(loginStatusKey, false) // 记录登录失败状态
// hc := r.Context().Value(loginStatusKey).(*HttpContext)