remove license code

This commit is contained in:
RockYang 2024-05-07 16:41:35 +08:00
parent be1580e949
commit c0ee2c2d8e
6 changed files with 11 additions and 192 deletions

View File

@ -4,24 +4,21 @@ import (
"chatplus/core"
"chatplus/core/types"
"chatplus/handler"
"chatplus/service"
"chatplus/store"
"chatplus/store/model"
"chatplus/utils"
"chatplus/utils/resp"
"github.com/gin-gonic/gin"
"github.com/shirou/gopsutil/host"
"gorm.io/gorm"
)
type ConfigHandler struct {
handler.BaseHandler
levelDB *store.LevelDB
licenseService *service.LicenseService
levelDB *store.LevelDB
}
func NewConfigHandler(app *core.AppServer, db *gorm.DB, levelDB *store.LevelDB, licenseService *service.LicenseService) *ConfigHandler {
return &ConfigHandler{BaseHandler: handler.BaseHandler{App: app, DB: db}, levelDB: levelDB, licenseService: licenseService}
func NewConfigHandler(app *core.AppServer, db *gorm.DB, levelDB *store.LevelDB) *ConfigHandler {
return &ConfigHandler{BaseHandler: handler.BaseHandler{App: app, DB: db}, levelDB: levelDB}
}
func (h *ConfigHandler) Update(c *gin.Context) {
@ -91,27 +88,3 @@ func (h *ConfigHandler) Get(c *gin.Context) {
resp.SUCCESS(c, value)
}
// Active 激活系统
func (h *ConfigHandler) Active(c *gin.Context) {
var data struct {
License string `json:"license"`
}
if err := c.ShouldBindJSON(&data); err != nil {
resp.ERROR(c, types.InvalidArgs)
return
}
info, err := host.Info()
if err != nil {
resp.ERROR(c, err.Error())
return
}
err = h.licenseService.ActiveLicense(data.License, info.HostID)
if err != nil {
resp.ERROR(c, err.Error())
return
}
resp.SUCCESS(c, info.HostID)
}

View File

@ -6,7 +6,6 @@ import (
"chatplus/core/types"
"chatplus/handler"
logger2 "chatplus/logger"
"chatplus/service"
"chatplus/service/oss"
"chatplus/store/model"
"chatplus/store/vo"
@ -36,17 +35,15 @@ var logger = logger2.GetLogger()
type ChatHandler struct {
handler.BaseHandler
redis *redis.Client
uploadManager *oss.UploaderManager
licenseService *service.LicenseService
redis *redis.Client
uploadManager *oss.UploaderManager
}
func NewChatHandler(app *core.AppServer, db *gorm.DB, redis *redis.Client, manager *oss.UploaderManager, licenseService *service.LicenseService) *ChatHandler {
func NewChatHandler(app *core.AppServer, db *gorm.DB, redis *redis.Client, manager *oss.UploaderManager) *ChatHandler {
return &ChatHandler{
BaseHandler: handler.BaseHandler{App: app, DB: db},
redis: redis,
uploadManager: manager,
licenseService: licenseService,
BaseHandler: handler.BaseHandler{App: app, DB: db},
redis: redis,
uploadManager: manager,
}
}
@ -482,14 +479,6 @@ func (h *ChatHandler) doRequest(ctx context.Context, req types.ApiRequest, sessi
return nil, errors.New("no available key, please import key")
}
// ONLY allow apiURL in blank list
if session.Model.Platform == types.OpenAI {
err := h.licenseService.IsValidApiURL(apiKey.ApiURL)
if err != nil {
return nil, err
}
}
var apiURL string
switch session.Model.Platform {
case types.Azure:

View File

@ -164,8 +164,6 @@ func main() {
// 邮件服务
fx.Provide(service.NewSmtpService),
// License 服务
fx.Provide(service.NewLicenseService),
// 微信机器人服务
fx.Provide(wx.NewWeChatBot),
@ -290,7 +288,6 @@ func main() {
group := s.Engine.Group("/api/admin/")
group.POST("config/update", h.Update)
group.GET("config/get", h.Get)
group.POST("active", h.Active)
}),
fx.Invoke(func(s *core.AppServer, h *admin.ManagerHandler) {
group := s.Engine.Group("/api/admin/")

View File

@ -1,108 +0,0 @@
package service
import (
"chatplus/core"
"chatplus/core/types"
"chatplus/store"
"errors"
"fmt"
"github.com/imroc/req/v3"
"github.com/shirou/gopsutil/host"
"strings"
"time"
)
type LicenseService struct {
config types.ApiConfig
levelDB *store.LevelDB
license types.License
machineId string
}
func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) * LicenseService {
var license types.License
var machineId string
_ = levelDB.Get(types.LicenseKey, &license)
info, err := host.Info()
if err == nil {
machineId = info.HostID
}
return &LicenseService{
config: server.Config.ApiConfig,
levelDB: levelDB,
license: license,
machineId: machineId,
}
}
// 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"`
}
}
apiURL := fmt.Sprintf("%s/%s", s.config.ApiURL, "api/license/active")
response, err := req.C().R().
SetBody(map[string]string{"license": license, "machine_id": machineId}).
SetSuccessResult(&res).Post(apiURL)
if err != nil {
return fmt.Errorf("发送激活请求失败: %v", err)
}
if response.IsErrorState() {
return fmt.Errorf( "发送激活请求失败:%v", response.Status)
}
if res.Code != types.Success {
return fmt.Errorf( "激活失败:%v", res.Message)
}
err = s.levelDB.Put(types.LicenseKey, types.License{
Key: license,
MachineId: machineId,
UserNum: res.Data.UserNum,
ExpiredAt: res.Data.ExpiredAt,
IsActive: true,
})
if err != nil {
return fmt.Errorf("保存许可证书失败:%v", err)
}
return nil
}
// GetLicense 获取许可信息
func (s *LicenseService) GetLicense() types.License {
return s.license
}
// IsValidApiURL 判断是否合法的中转 URL
func (s *LicenseService) IsValidApiURL(uri string) error {
// 获得许可授权的直接放行
if s.license.IsActive {
if s.license.MachineId != s.machineId {
return errors.New("系统使用了盗版的许可证书")
}
if time.Now().Unix() > s.license.ExpiredAt {
return errors.New("系统许可证书已经过期")
}
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)
}
return nil
}

View File

@ -3,7 +3,6 @@ package mj
import (
"chatplus/core/types"
logger2 "chatplus/logger"
"chatplus/service"
"chatplus/service/oss"
"chatplus/service/sd"
"chatplus/store"
@ -27,7 +26,7 @@ type ServicePool struct {
var logger = logger2.GetLogger()
func NewServicePool(db *gorm.DB, redisCli *redis.Client, manager *oss.UploaderManager, appConfig *types.AppConfig, licenseService *service.LicenseService) *ServicePool {
func NewServicePool(db *gorm.DB, redisCli *redis.Client, manager *oss.UploaderManager, appConfig *types.AppConfig) *ServicePool {
services := make([]*Service, 0)
taskQueue := store.NewRedisQueue("MidJourney_Task_Queue", redisCli)
notifyQueue := store.NewRedisQueue("MidJourney_Notify_Queue", redisCli)
@ -36,11 +35,6 @@ func NewServicePool(db *gorm.DB, redisCli *redis.Client, manager *oss.UploaderMa
if config.Enabled == false {
continue
}
err := licenseService.IsValidApiURL(config.ApiURL)
if err != nil {
logger.Error(err)
continue
}
cli := NewPlusClient(config)
name := fmt.Sprintf("mj-plus-service-%d", k)

View File

@ -258,19 +258,6 @@
<Menu/>
</el-tab-pane>
<el-tab-pane label="授权激活" name="license">
<div class="container">
<el-form :model="system" label-width="150px" label-position="right">
<el-form-item label="许可授权码" prop="license">
<el-input v-model="license"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="active">立即激活</el-button>
</el-form-item>
</el-form>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
@ -344,19 +331,6 @@ const save = function (key) {
}
}
//
const license = ref("")
const active = () => {
if (license.value === "") {
return ElMessage.error("请输入授权码")
}
httpPost("/api/admin/active", {license: license.value}).then(res => {
ElMessage.success("授权成功,机器编码为:" + res.data)
}).catch(e => {
ElMessage.error(e.message)
})
}
const configKey = ref("")
const beforeUpload = (key) => {
configKey.value = key