mirror of https://github.com/bjdgyc/anylink.git
radius 添加 CallingStationID
This commit is contained in:
parent
8a2350eb6e
commit
bda23283ec
|
@ -340,7 +340,8 @@ func GroupAuthLogin(name, pwd string, authData map[string]interface{}) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = auth.checkUser(name, pwd, g)
|
ext := map[string]interface{}{}
|
||||||
|
err = auth.checkUser(name, pwd, g, ext)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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数据
|
// 获取登入的group数据
|
||||||
groupData := &Group{}
|
groupData := &Group{}
|
||||||
err := One("Name", group, groupData)
|
err := One("Name", group, groupData)
|
||||||
|
@ -82,7 +82,7 @@ func CheckUser(name, pwd, group string) error {
|
||||||
authType := groupData.Auth["type"].(string)
|
authType := groupData.Auth["type"].(string)
|
||||||
// 本地认证方式
|
// 本地认证方式
|
||||||
if authType == "local" {
|
if authType == "local" {
|
||||||
return checkLocalUser(name, pwd, group)
|
return checkLocalUser(name, pwd, group, ext)
|
||||||
}
|
}
|
||||||
// 其它认证方式, 支持自定义
|
// 其它认证方式, 支持自定义
|
||||||
_, ok := authRegistry[authType]
|
_, ok := authRegistry[authType]
|
||||||
|
@ -90,11 +90,11 @@ func CheckUser(name, pwd, group string) error {
|
||||||
return fmt.Errorf("%s %s", "未知的认证方式: ", authType)
|
return fmt.Errorf("%s %s", "未知的认证方式: ", authType)
|
||||||
}
|
}
|
||||||
auth := makeInstance(authType).(IUserAuth)
|
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 严重问题
|
// TODO 严重问题
|
||||||
// return nil
|
// return nil
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ var authRegistry = make(map[string]reflect.Type)
|
||||||
|
|
||||||
type IUserAuth interface {
|
type IUserAuth interface {
|
||||||
checkData(authData map[string]interface{}) error
|
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{} {
|
func makeInstance(name string) interface{} {
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (auth AuthLdap) checkData(authData map[string]interface{}) error {
|
||||||
return nil
|
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)
|
pl := len(pwd)
|
||||||
if name == "" || pl < 1 {
|
if name == "" || pl < 1 {
|
||||||
return fmt.Errorf("%s %s", name, "密码错误")
|
return fmt.Errorf("%s %s", name, "密码错误")
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (auth AuthRadius) checkData(authData map[string]interface{}) error {
|
||||||
return nil
|
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)
|
pl := len(pwd)
|
||||||
if name == "" || pl < 1 {
|
if name == "" || pl < 1 {
|
||||||
return fmt.Errorf("%s %s", name, "密码错误")
|
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 出现错误")
|
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)
|
ctx, done := context.WithTimeout(context.Background(), 3*time.Second)
|
||||||
defer done()
|
defer done()
|
||||||
response, err := radius.Exchange(ctx, packet, auth.Addr)
|
response, err := radius.Exchange(ctx, packet, auth.Addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("%s %s", name, "Radius服务器连接异常, 请检测服务器和端口")
|
return fmt.Errorf("%s %s %s", name, "Radius服务器连接异常, 请检测服务器和端口", err)
|
||||||
}
|
}
|
||||||
if response.Code != radius.CodeAccessAccept {
|
if response.Code != radius.CodeAccessAccept {
|
||||||
return fmt.Errorf("%s %s", name, "Radius:用户名或密码错误")
|
return fmt.Errorf("%s %s", name, "Radius:用户名或密码错误")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,8 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
|
||||||
UserActLog: ua,
|
UserActLog: ua,
|
||||||
}
|
}
|
||||||
// TODO 用户密码校验
|
// 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 {
|
if err != nil {
|
||||||
// lockManager.LoginStatus.Store(loginStatusKey, false) // 记录登录失败状态
|
// lockManager.LoginStatus.Store(loginStatusKey, false) // 记录登录失败状态
|
||||||
// hc := r.Context().Value(loginStatusKey).(*HttpContext)
|
// hc := r.Context().Value(loginStatusKey).(*HttpContext)
|
||||||
|
|
Loading…
Reference in New Issue