fix: UDM鉴权用户去除Msisdn字段

This commit is contained in:
TsMask
2023-09-19 15:30:48 +08:00
parent ab1c93fee2
commit 3308b0e9df
4 changed files with 58 additions and 60 deletions

View File

@@ -3,7 +3,6 @@ package model
// UdmAuthUser UDM鉴权用户 // UdmAuthUser UDM鉴权用户
type UdmAuthUser struct { type UdmAuthUser struct {
ID string `json:"id" xorm:"pk 'id' autoincr"` ID string `json:"id" xorm:"pk 'id' autoincr"`
Msisdn string `json:"msisdn" xorm:"msisdn"` // 相当手机号
Imsi string `json:"imsi" xorm:"imsi"` // SIM卡号 Imsi string `json:"imsi" xorm:"imsi"` // SIM卡号
Amf string `json:"amf" xorm:"amf"` // ANF Amf string `json:"amf" xorm:"amf"` // ANF
Status string `json:"status" xorm:"status"` // 状态 Status string `json:"status" xorm:"status"` // 状态

View File

@@ -14,12 +14,11 @@ import (
// 实例化数据层 RepoUdmAuthUser 结构体 // 实例化数据层 RepoUdmAuthUser 结构体
var NewRepoUdmAuthUser = &RepoUdmAuthUser{ var NewRepoUdmAuthUser = &RepoUdmAuthUser{
selectSql: `select selectSql: `select
id, msisdn, imsi, amf, status, ki, algo_index, opc, ne_id id, imsi, amf, status, ki, algo_index, opc, ne_id
from u_auth_user`, from u_auth_user`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
"msisdn": "Msisdn",
"imsi": "Imsi", "imsi": "Imsi",
"amf": "Amf", "amf": "Amf",
"status": "Status", "status": "Status",
@@ -58,10 +57,6 @@ func (r *RepoUdmAuthUser) SelectPage(query map[string]any) map[string]any {
// 查询条件拼接 // 查询条件拼接
var conditions []string var conditions []string
var params []any var params []any
if v, ok := query["msisdn"]; ok && v != "" {
conditions = append(conditions, "msisdn like concat(concat('%', ?), '%')")
params = append(params, v)
}
if v, ok := query["imsi"]; ok && v != "" { if v, ok := query["imsi"]; ok && v != "" {
conditions = append(conditions, "imsi like concat(concat('%', ?), '%')") conditions = append(conditions, "imsi like concat(concat('%', ?), '%')")
params = append(params, v) params = append(params, v)
@@ -77,18 +72,23 @@ func (r *RepoUdmAuthUser) SelectPage(query map[string]any) map[string]any {
whereSql += " where " + strings.Join(conditions, " and ") whereSql += " where " + strings.Join(conditions, " and ")
} }
result := map[string]any{
"total": 0,
"rows": []model.UdmAuthUser{},
}
// 查询数量 长度为0直接返回 // 查询数量 长度为0直接返回
totalSql := "select count(1) as 'total' from u_auth_user" totalSql := "select count(1) as 'total' from u_auth_user"
totalRows, err := datasource.RawDB("", totalSql+whereSql, params) totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
if err != nil { if err != nil {
log.Errorf("total err => %v", err) log.Errorf("total err => %v", err)
return result
} }
total := parse.Number(totalRows[0]["total"]) total := parse.Number(totalRows[0]["total"])
if total == 0 { if total == 0 {
return map[string]any{ return result
"total": total, } else {
"rows": nil, result["total"] = total
}
} }
// 分页 // 分页
@@ -120,11 +120,8 @@ func (r *RepoUdmAuthUser) SelectPage(query map[string]any) map[string]any {
} }
// 转换实体 // 转换实体
rows := r.convertResultRows(results) result["rows"] = r.convertResultRows(results)
return map[string]any{ return result
"total": total,
"rows": rows,
}
} }
// SelectList 根据实体查询 // SelectList 根据实体查询

View File

@@ -89,22 +89,23 @@ func (r *RepoUdmSubUser) SelectPage(query map[string]any) map[string]any {
whereSql += " where " + strings.Join(conditions, " and ") whereSql += " where " + strings.Join(conditions, " and ")
} }
result := map[string]any{
"total": 0,
"rows": []model.UdmAuthUser{},
}
// 查询数量 长度为0直接返回 // 查询数量 长度为0直接返回
totalSql := "select count(1) as 'total' from u_sub_user" totalSql := "select count(1) as 'total' from u_sub_user"
totalRows, err := datasource.RawDB("", totalSql+whereSql, params) totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
if err != nil { if err != nil {
log.Errorf("total err => %v", err) log.Errorf("total err => %v", err)
return map[string]any{ return result
"total": 0,
"rows": nil,
}
} }
total := parse.Number(totalRows[0]["total"]) total := parse.Number(totalRows[0]["total"])
if total == 0 { if total == 0 {
return map[string]any{ return result
"total": total, } else {
"rows": nil, result["total"] = total
}
} }
// 分页 // 分页
@@ -133,14 +134,12 @@ func (r *RepoUdmSubUser) SelectPage(query map[string]any) map[string]any {
results, err := datasource.RawDB("", querySql, params) results, err := datasource.RawDB("", querySql, params)
if err != nil { if err != nil {
log.Errorf("query err => %v", err) log.Errorf("query err => %v", err)
return result
} }
// 转换实体 // 转换实体
rows := r.convertResultRows(results) result["rows"] = r.convertResultRows(results)
return map[string]any{ return result
"total": total,
"rows": rows,
}
} }
// SelectList 根据实体查询 // SelectList 根据实体查询

View File

@@ -1,7 +1,6 @@
package service package service
import ( import (
"fmt"
"strings" "strings"
"ems.agt/features/udm_user/model" "ems.agt/features/udm_user/model"
@@ -9,28 +8,30 @@ import (
) )
// phoneImsiList 获取所有imsi // phoneImsiList 获取所有imsi
func phoneImsiList() map[string]string { // func phoneImsiList() map[string]string {
phoneAndImsiArr := make(map[string]string, 0) // phoneAndImsiArr := make(map[string]string, 0)
phoneKeys, err := redis.GetKeys("udmuser", "1*********") // phoneKeys, err := redis.GetKeys("udmuser", "1*********")
if err != nil { // if err != nil {
return phoneAndImsiArr // return phoneAndImsiArr
} // }
for _, phone := range phoneKeys { // for _, phone := range phoneKeys {
imsi, err := redis.Get("udmuser", phone) // imsi, err := redis.Get("udmuser", phone)
if err != nil { // if err != nil {
continue // continue
} // }
phoneAndImsiArr[phone] = imsi // phoneAndImsiArr[phone] = imsi
} // }
return phoneAndImsiArr // return phoneAndImsiArr
} // }
// redisUdmAuthUserList UDM鉴权用户 // redisUdmAuthUserList UDM鉴权用户
func redisUdmAuthUserList() []model.UdmAuthUser { func redisUdmAuthUserList() []model.UdmAuthUser {
phoneAndImsiArr := phoneImsiList()
user := []model.UdmAuthUser{} user := []model.UdmAuthUser{}
for phone, imsi := range phoneAndImsiArr { ausfArr, err := redis.GetKeys("udmuser", "ausf:*")
key := fmt.Sprintf("ausf:%s", imsi) if err != nil {
return user
}
for _, key := range ausfArr {
m, err := redis.GetHash("udmuser", key) m, err := redis.GetHash("udmuser", key)
if err != nil { if err != nil {
continue continue
@@ -40,10 +41,13 @@ func redisUdmAuthUserList() []model.UdmAuthUser {
if _, ok := m["auth_success"]; ok { if _, ok := m["auth_success"]; ok {
status = "1" status = "1"
} }
amf := ""
if v, ok := m["amf"]; ok {
amf = strings.Replace(v, "\r\n", "", 1)
}
a := model.UdmAuthUser{ a := model.UdmAuthUser{
Msisdn: phone, Imsi: key[5:],
Imsi: imsi, Amf: amf,
Amf: m["amf"],
Status: status, Status: status,
Ki: m["ki"], Ki: m["ki"],
AlgoIndex: m["algo"], AlgoIndex: m["algo"],
@@ -56,26 +60,25 @@ func redisUdmAuthUserList() []model.UdmAuthUser {
// redisUdmSubUserList UDM签约用户 // redisUdmSubUserList UDM签约用户
func redisUdmSubUserList() []model.UdmSubUser { func redisUdmSubUserList() []model.UdmSubUser {
phoneAndImsiArr := phoneImsiList() // phoneAndImsiArr := phoneImsiList()
user := []model.UdmSubUser{} user := []model.UdmSubUser{}
for phone, imsi := range phoneAndImsiArr { udmsdArr, err := redis.GetKeys("udmuser", "udm-sd:*")
key := fmt.Sprintf("udm-sd:%s", imsi) if err != nil {
return user
}
for _, key := range udmsdArr {
m, err := redis.GetHash("udmuser", key) m, err := redis.GetHash("udmuser", key)
if err != nil { if err != nil {
continue continue
} }
a := model.UdmSubUser{ a := model.UdmSubUser{
Imsi: imsi, Imsi: key[7:],
Msisdn: m["gpsi"], Msisdn: strings.TrimPrefix(m["gpsi"], "86"),
SmfSel: m["smf-sel"], SmfSel: m["smf-sel"],
SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet
} }
if a.Msisdn == "" {
a.Msisdn = phone
}
// def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,- // def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,-
if v, ok := m["am-dat"]; ok { if v, ok := m["am-dat"]; ok {
arr := strings.Split(v, ",") arr := strings.Split(v, ",")