mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-11-09 10:43:44 +08:00
synchronize license every 10 secs
This commit is contained in:
@@ -13,10 +13,11 @@ import (
|
||||
)
|
||||
|
||||
type LicenseService struct {
|
||||
config types.ApiConfig
|
||||
levelDB *store.LevelDB
|
||||
license types.License
|
||||
machineId string
|
||||
config types.ApiConfig
|
||||
levelDB *store.LevelDB
|
||||
license types.License
|
||||
urlWhiteList []string
|
||||
machineId string
|
||||
}
|
||||
|
||||
func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) * LicenseService {
|
||||
@@ -28,25 +29,27 @@ func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) * License
|
||||
machineId = info.HostID
|
||||
}
|
||||
return &LicenseService{
|
||||
config: server.Config.ApiConfig,
|
||||
levelDB: levelDB,
|
||||
license: license,
|
||||
config: server.Config.ApiConfig,
|
||||
levelDB: levelDB,
|
||||
license: license,
|
||||
machineId: machineId,
|
||||
}
|
||||
}
|
||||
|
||||
type License struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"license"`
|
||||
Mid string `json:"mid"`
|
||||
ExpiredAt int64 `json:"expired_at"`
|
||||
UserNum int `json:"user_num"`
|
||||
}
|
||||
|
||||
// ActiveLicense 激活 License
|
||||
func (s *LicenseService) ActiveLicense(license string, machineId string) error {
|
||||
var res struct {
|
||||
Code types.BizCode `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
Name string `json:"name"`
|
||||
License string `json:"license"`
|
||||
Mid string `json:"mid"`
|
||||
ExpiredAt int64 `json:"expired_at"`
|
||||
UserNum int `json:"user_num"`
|
||||
}
|
||||
Data License `json:"data"`
|
||||
}
|
||||
apiURL := fmt.Sprintf("%s/%s", s.config.ApiURL, "api/license/active")
|
||||
response, err := req.C().R().
|
||||
@@ -75,10 +78,54 @@ func (s *LicenseService) ActiveLicense(license string, machineId string) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("保存许可证书失败:%v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SyncLicense 定期同步 License
|
||||
func (s *LicenseService) SyncLicense() {
|
||||
go func() {
|
||||
for {
|
||||
var res struct {
|
||||
Code types.BizCode `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
License License `json:"license"`
|
||||
Urls []string `json:"urls"`
|
||||
}
|
||||
}
|
||||
apiURL := fmt.Sprintf("%s/%s", s.config.ApiURL, "api/license/check")
|
||||
response, err := req.C().R().
|
||||
SetBody(map[string]string{"license": s.license.Key, "machine_id": s.machineId}).
|
||||
SetSuccessResult(&res).Post(apiURL)
|
||||
if err != nil {
|
||||
logger.Errorf("发送激活请求失败: %v", err)
|
||||
goto next
|
||||
}
|
||||
if response.IsErrorState() {
|
||||
logger.Errorf("激活失败:%v", response.Status)
|
||||
goto next
|
||||
}
|
||||
if res.Code != types.Success {
|
||||
logger.Errorf("激活失败:%v", res.Message)
|
||||
s.license.IsActive = false
|
||||
goto next
|
||||
}
|
||||
|
||||
s.license = types.License{
|
||||
Key: res.Data.License.Value,
|
||||
MachineId: res.Data.License.Mid,
|
||||
UserNum: res.Data.License.UserNum,
|
||||
ExpiredAt: res.Data.License.ExpiredAt,
|
||||
IsActive: true,
|
||||
}
|
||||
s.urlWhiteList = res.Data.Urls
|
||||
logger.Debugf("同步 License 成功:%v\n%v", s.license, s.urlWhiteList)
|
||||
next:
|
||||
time.Sleep(time.Second * 10)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// GetLicense 获取许可信息
|
||||
func (s *LicenseService) GetLicense() types.License {
|
||||
return s.license
|
||||
@@ -98,12 +145,10 @@ func (s *LicenseService) IsValidApiURL(uri string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(uri, "https://gpt.bemore.lol") &&
|
||||
!strings.HasPrefix(uri, "https://api.openai.com") &&
|
||||
!strings.HasPrefix(uri, "http://cdn.chat-plus.net") &&
|
||||
!strings.HasPrefix(uri, "https://api.chat-plus.net") {
|
||||
return fmt.Errorf("当前 API 地址 %s 不在白名单列表当中。",uri)
|
||||
for _, v := range s.urlWhiteList {
|
||||
if strings.HasPrefix(uri, v) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return fmt.Errorf("当前 API 地址 %s 不在白名单列表当中。", uri)
|
||||
}
|
||||
Reference in New Issue
Block a user