|
|
package DaoJoinApp
|
|
|
|
|
|
import (
|
|
|
"dsSso/Const/ErrorConst"
|
|
|
"dsSso/Dao/DaoCache"
|
|
|
"dsSso/Model"
|
|
|
"dsSso/Utils/DbUtil"
|
|
|
"dsSso/Utils/LogUtil"
|
|
|
"dsSso/Utils/RedisStorage"
|
|
|
"dsSso/Utils/RedisUtil"
|
|
|
"github.com/RangelReale/osin"
|
|
|
"github.com/oklog/ulid"
|
|
|
"github.com/rs/xid"
|
|
|
"math/rand"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
var joinModel Model.Selector
|
|
|
var tableName = "t_join_app"
|
|
|
|
|
|
var db = DbUtil.Engine
|
|
|
|
|
|
func init() {
|
|
|
_, joinModel = joinModel.Get(tableName)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取统一认证的接入系统列表
|
|
|
作者:黄海
|
|
|
时间:2020-02-05
|
|
|
*/
|
|
|
func GetJoinAppList(page int, limit int, keyword string) ([]map[string]interface{}, int32) {
|
|
|
//基础查询语句
|
|
|
baseSql := "select app_id from t_join_app where app_name like ?"
|
|
|
//使用通用方法,获取简单表的分页查询SQL语句和求总数SQL语句
|
|
|
keyword = "%" + keyword + "%"
|
|
|
//偏移量
|
|
|
var offset = (page - 1) * limit
|
|
|
//一键加载,最后两个参数:每页多少个+从哪个位置开始,中间的参数为sql语句中的查询参数
|
|
|
list, count := DaoCache.PageData(baseSql, joinModel, keyword, limit, offset)
|
|
|
return list, count
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:增加接入系统的记录
|
|
|
作者:黄海
|
|
|
时间:2020-02-21
|
|
|
*/
|
|
|
func AddJoinApp(appName string, redirectUri string) bool {
|
|
|
var appSecret string
|
|
|
//新增
|
|
|
sql := "insert into t_join_app(app_key,app_secret,app_name,redirect_uri) values(?,?,?,?)"
|
|
|
//获取主键ID
|
|
|
ak := xid.New()
|
|
|
appKey := ak.String() //新增就生成一个secret
|
|
|
t := time.Now().UTC()
|
|
|
entropy := rand.New(rand.NewSource(t.UnixNano()))
|
|
|
appSecret = strings.ToLower(ulid.MustNew(ulid.Timestamp(t), entropy).String())
|
|
|
_, err := db.Exec(sql, appKey, appSecret, appName, redirectUri)
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "插入统一认证表信息出错:"+err.Error())
|
|
|
return false
|
|
|
} else {
|
|
|
//删除redis查询缓存
|
|
|
RedisUtil.DEL(joinModel.RedisPrefix + "_" + appKey)
|
|
|
//增加OAuth2 redis缓存
|
|
|
client := &osin.DefaultClient{
|
|
|
Id: appKey,
|
|
|
Secret: appSecret,
|
|
|
RedirectUri: redirectUri,
|
|
|
}
|
|
|
RedisStorage.OAuth2RedisStorage.CreateClient(client)
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:修改接入系统的记录
|
|
|
作者:黄海
|
|
|
时间:2020-02-21
|
|
|
*/
|
|
|
func UpdateJoinApp(appId string, appName string, redirectUri string) bool {
|
|
|
var secret string
|
|
|
//获取id对应的密码
|
|
|
sql := "select app_secret from t_join_app where app_id=?"
|
|
|
_map, err :=db.QueryString(sql, appId)
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "查询统一认证表信息出错!")
|
|
|
return false
|
|
|
}
|
|
|
if len(_map) > 0 {
|
|
|
secret = _map[0]["app_secret"]
|
|
|
} else {
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "查询统一认证表信息出错,没有找到此id!")
|
|
|
return false
|
|
|
}
|
|
|
//更新语句
|
|
|
sql = "update t_join_app set app_name=?,redirect_uri=? where app_id=?"
|
|
|
_, err = db.Exec(sql, appName, redirectUri, appId)
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "更新统一认证表信息出错!")
|
|
|
return false
|
|
|
} else {
|
|
|
//更新缓存
|
|
|
client := &osin.DefaultClient{
|
|
|
Id: appId,
|
|
|
Secret: secret,
|
|
|
RedirectUri: redirectUri,
|
|
|
}
|
|
|
RedisStorage.OAuth2RedisStorage.UpdateClient(client)
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:删除主键为ID的接入第三方统一认证系统
|
|
|
作者:黄海
|
|
|
时间:2020-02-21
|
|
|
*/
|
|
|
func DeleteJoinAppById(appId string) bool {
|
|
|
//更新语句
|
|
|
sql := "delete from t_join_app where app_id=?"
|
|
|
db.Exec(sql, appId)
|
|
|
//删除缓存
|
|
|
RedisUtil.DEL(joinModel.RedisPrefix + "_" + appId)
|
|
|
//删除OAuth2的redis缓存
|
|
|
client, _ := RedisStorage.OAuth2RedisStorage.GetClient(appId)
|
|
|
if client != nil {
|
|
|
RedisStorage.OAuth2RedisStorage.DeleteClient(client)
|
|
|
return true
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:根据appId获取接入第三方统一认证系统的信息
|
|
|
作者:吴缤
|
|
|
日期:2020-03-26
|
|
|
*/
|
|
|
func GetJoinAppInfoById(appId string) map[string]interface{} {
|
|
|
ids := []string{appId}
|
|
|
list := DaoCache.GetListByIds(ids, joinModel)
|
|
|
if len(list) > 0 {
|
|
|
return list[0]
|
|
|
} else {
|
|
|
return nil
|
|
|
}
|
|
|
}
|