242 lines
5.8 KiB
Go
242 lines
5.8 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
"xiawan/wx/api/req"
|
|
"xiawan/wx/api/vo"
|
|
"xiawan/wx/db"
|
|
"xiawan/wx/srv/wxface"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/lunny/log"
|
|
)
|
|
|
|
// 检查请求参数 key 对应的 license 是否可用
|
|
func CheckKey(queryKey string) (string, error) {
|
|
errMsg := fmt.Sprintf("%s 该 key 无效! 请 检查正确性 或 联系管理员生成", queryKey)
|
|
if len(strings.TrimSpace(queryKey)) == 0 {
|
|
// 请求参数中没有携带 license 或者 license 为空
|
|
return "", errors.New(errMsg)
|
|
}
|
|
has, err := db.HasLicense(queryKey)
|
|
if has == nil || err != nil {
|
|
// MySQL 数据库没有该 license
|
|
return "", errors.New(errMsg)
|
|
}
|
|
if db.CheckExpiry(has.ExpiryDate, has.Type) {
|
|
// MySQL 数据库中的该 license 已过期
|
|
return "", fmt.Errorf("%s 该 key 已过期!", queryKey)
|
|
}
|
|
|
|
// license 可用
|
|
return queryKey, nil
|
|
}
|
|
|
|
// GenAuthKeyService 生成授权码(新设备)
|
|
func GenAuthKeyService(count, days int) vo.DTO {
|
|
if count < 1 {
|
|
count = 1
|
|
}
|
|
if days < 1 {
|
|
days = 30
|
|
}
|
|
|
|
res := db.CreateLicense(count, days)
|
|
authKeys := strings.Split(res, "\n\t")
|
|
if len(res) == 0 {
|
|
authKeys = []string{}
|
|
}
|
|
return vo.NewSuccessObj(authKeys, "AuthKey生成成功")
|
|
}
|
|
|
|
// 按类型生成(不使用不计算时间)
|
|
func GenAuthKeyService3(count int, itype int) vo.DTO {
|
|
//1日 7 周 30月 90季 180 半年 365年 30000
|
|
types := []int{1, 7, 30, 90, 180, 365, 30000}
|
|
// 判断 itype 在 types 中
|
|
isType := false
|
|
for _, t := range types {
|
|
if t == itype {
|
|
isType = true
|
|
break
|
|
}
|
|
}
|
|
log.Println("isType", isType)
|
|
log.Println("Type", itype)
|
|
log.Println("types", types)
|
|
if !isType {
|
|
return vo.NewFail("type 参数错误")
|
|
}
|
|
|
|
res := db.CreateLicense3(count, itype)
|
|
authKeys := strings.Split(res, "\n\t")
|
|
if len(res) == 0 {
|
|
authKeys = []string{}
|
|
}
|
|
return vo.NewSuccessObj(authKeys, "AuthKey生成成功")
|
|
}
|
|
|
|
// 授权码延期 西柚云
|
|
func DelayAuthKeyServiceNew(key string, m req.DelayAuthKeyModelNew) vo.DTO {
|
|
if m.KeyUse == "" || key == "" {
|
|
return vo.NewFail("keyuse 参数错误")
|
|
}
|
|
|
|
// 计算被使用key的剩余天数
|
|
keyuse_expirydata, err := db.HasLicense(m.KeyUse)
|
|
if err != nil || keyuse_expirydata == nil {
|
|
return vo.NewFail("查询失败")
|
|
}
|
|
key_use_days := keyuse_expirydata.Type
|
|
|
|
ms := req.DelayAuthKeyModel{
|
|
Key: key,
|
|
Days: key_use_days,
|
|
ExpiryDate: "",
|
|
}
|
|
|
|
db.DeleteLicense(m.KeyUse, 2)
|
|
|
|
return DelayAuthKeyService(ms)
|
|
}
|
|
|
|
// 授权码解绑 西柚云
|
|
func UnbindAuthKeyService(key string) vo.DTO {
|
|
if key == "" {
|
|
return vo.NewFail("key 参数错误")
|
|
}
|
|
ms := req.DeleteAuthKeyModel{
|
|
Key: key,
|
|
Opt: 3,
|
|
}
|
|
return checkExIdPerformNoCreateConnect(key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
|
|
wxAccount := connect.GetWXAccount()
|
|
wxAccount.GetUserInfo().SetLoginState(0)
|
|
if wxAccount.GetUserInfo().GetLoginState() == 0 {
|
|
return DeleteAuthKeyService(ms)
|
|
} else {
|
|
return vo.NewFail("解绑失败")
|
|
}
|
|
})
|
|
}
|
|
|
|
// 查看配置
|
|
func GetConfigService(key string) vo.DTO {
|
|
if key == "" {
|
|
return vo.NewFail("key 参数错误")
|
|
}
|
|
query, err := db.QueryCommand(key)
|
|
if err != nil {
|
|
return vo.NewFail("操作失败!")
|
|
}
|
|
return vo.NewSuccessObj(query, "操作成功!")
|
|
}
|
|
|
|
// DelayAuthKeyService 授权码延期
|
|
func DelayAuthKeyService(m req.DelayAuthKeyModel) vo.DTO {
|
|
if m.Days < 1 {
|
|
m.Days = 30
|
|
}
|
|
|
|
if len(strings.TrimSpace(m.ExpiryDate)) > 0 {
|
|
// 获取当前的过期日期
|
|
expiryDate, err := time.Parse("2006-01-02", m.ExpiryDate)
|
|
if err != nil {
|
|
return vo.NewFail("ExpiryDate 参数解析错误")
|
|
}
|
|
|
|
now := time.Now()
|
|
if expiryDate.Before(now) {
|
|
return vo.NewFail("ExpiryDate 参数设置错误")
|
|
}
|
|
|
|
// ExpiryDate 参数可用
|
|
m.ExpiryDate = strings.TrimSpace(m.ExpiryDate)
|
|
m.Days = 0
|
|
}
|
|
|
|
expiryDateStr, err := db.DelayLicense(m)
|
|
if err != nil {
|
|
return vo.NewFail("延期失败: " + err.Error())
|
|
}
|
|
|
|
// 延期成功; 更新已建立链接的授权码的过期时间
|
|
return getExistWxConnect(m.Key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
|
|
if connect != nil {
|
|
connect.GetWXServer().UpdateExpiryDate(m.Key, expiryDateStr)
|
|
}
|
|
|
|
return vo.NewSuccess(gin.H{
|
|
"expiryDate": expiryDateStr,
|
|
}, "延期成功")
|
|
})
|
|
}
|
|
|
|
// 更新禁用状态
|
|
func BannedAuthKeyService(m req.BannedAuthKeyModel) vo.DTO {
|
|
bannedStr := "启用:0"
|
|
|
|
if m.IsBanned != 0 {
|
|
m.IsBanned = 1
|
|
bannedStr = "禁用:1"
|
|
}
|
|
|
|
err := db.DisableLicense(m.Key, m.IsBanned)
|
|
if err != nil {
|
|
return vo.NewFail("设置失败: " + err.Error())
|
|
}
|
|
|
|
// 延期成功; 更新已建立链接的授权码的过期时间
|
|
return getExistWxConnect(m.Key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
|
|
if connect != nil {
|
|
connect.GetWXServer().UpdateDisable(m.Key, m.IsBanned)
|
|
}
|
|
|
|
return vo.NewSuccess(gin.H{
|
|
"isBanned": bannedStr,
|
|
}, "设置成功")
|
|
})
|
|
}
|
|
|
|
// HttpSyncLicenseKeyService HTTP-激活状态
|
|
func HttpSyncLicenseKeyService() vo.DTO {
|
|
results, err := db.HttpSyncLicenseKey()
|
|
if err != nil {
|
|
return vo.NewFail("发生错误: " + err.Error())
|
|
}
|
|
return vo.NewSuccessObj(results, "")
|
|
}
|
|
|
|
// DeleteAuthKeyService 删除授权码
|
|
func DeleteAuthKeyService(m req.DeleteAuthKeyModel) vo.DTO {
|
|
err := db.DeleteLicense(m.Key, m.Opt)
|
|
if err != nil {
|
|
return vo.NewFail("删除授权码失败: " + err.Error())
|
|
}
|
|
return vo.NewSuccess(gin.H{}, "删除成功")
|
|
}
|
|
|
|
// GetLicenseKeyService 查询卡密有效期
|
|
func GetLicenseKeyService(queryKey string) vo.DTO {
|
|
has, err := db.HasLicense(queryKey)
|
|
if err != nil {
|
|
return vo.NewFail("查询失败")
|
|
}
|
|
if has == nil {
|
|
return vo.NewFail("卡密不存在")
|
|
}
|
|
return vo.NewSuccessObj(has, "查询成功")
|
|
}
|
|
|
|
// GetActiveLicenseKeysService 获取所有激活状态的卡密
|
|
func GetActiveLicenseKeysService() vo.DTO {
|
|
results, err := db.GetActiveLicenseKeys()
|
|
if err != nil {
|
|
return vo.NewFail("查询失败: " + err.Error())
|
|
}
|
|
return vo.NewSuccessObj(results, "查询成功")
|
|
}
|