增加提取接口
This commit is contained in:
parent
fa72952f15
commit
ccad4c05f7
207
controllers/api_getcard.go
Normal file
207
controllers/api_getcard.go
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"server/models"
|
||||||
|
|
||||||
|
"github.com/beego/beego/v2/client/orm"
|
||||||
|
beego "github.com/beego/beego/v2/server/web"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ApiGetCardController 对外提卡接口(无需登录)
|
||||||
|
// GET /api/getcard?type=xianyu&module=cursor
|
||||||
|
type ApiGetCardController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
// validPlatformTypes 支持的来源平台
|
||||||
|
var validPlatformTypes = map[string]bool{
|
||||||
|
"xianyu": true,
|
||||||
|
"pinduoduo": true,
|
||||||
|
"jingdong": true,
|
||||||
|
"douyin": true,
|
||||||
|
"local": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
// validModules 支持的号池模块
|
||||||
|
var validModules = map[string]bool{
|
||||||
|
"cursor": true,
|
||||||
|
"windsurf": true,
|
||||||
|
"krio": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ApiGetCardController) cardErr(httpStatus, code int, msg string) {
|
||||||
|
c.Ctx.Output.SetStatus(httpStatus)
|
||||||
|
c.Data["json"] = map[string]interface{}{"code": code, "msg": msg}
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ApiGetCardController) cardOK(data interface{}) {
|
||||||
|
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": data}
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCard 提取一张卡(不可重复提取)
|
||||||
|
// GET /api/getcard?type=xianyu&module=cursor&data_type=tk
|
||||||
|
//
|
||||||
|
// 参数:
|
||||||
|
// - type (必填) 来源平台:xianyu / taobao / pinduoduo / jingdong / local
|
||||||
|
// - module (必填) 号池模块:cursor / windsurf / krio
|
||||||
|
// - data_type (可选) 账号类型:account / tk / account_tk,不传则取任意未提取的
|
||||||
|
func (c *ApiGetCardController) GetCard() {
|
||||||
|
platform := c.GetString("type")
|
||||||
|
module := c.GetString("module")
|
||||||
|
dataType := c.GetString("data_type")
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
if platform == "" {
|
||||||
|
c.cardErr(400, 400, "缺少参数 type(来源平台)")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !validPlatformTypes[platform] {
|
||||||
|
c.cardErr(400, 400, fmt.Sprintf("不支持的平台类型: %s,支持: xianyu/taobao/pinduoduo/jingdong/local", platform))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if module == "" {
|
||||||
|
c.cardErr(400, 400, "缺少参数 module(号池模块)")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !validModules[module] {
|
||||||
|
c.cardErr(400, 400, fmt.Sprintf("不支持的模块: %s,支持: cursor/windsurf/krio", module))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if dataType != "" && !isValidPoolType(dataType) {
|
||||||
|
c.cardErr(400, 400, "data_type 不合法,支持: account/tk/account_tk")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
|
||||||
|
switch module {
|
||||||
|
case "cursor":
|
||||||
|
c.extractCursor(platform, dataType, now)
|
||||||
|
case "windsurf":
|
||||||
|
c.extractWindsurf(platform, dataType, now)
|
||||||
|
case "krio":
|
||||||
|
c.extractKrio(platform, dataType, now)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ApiGetCardController) extractCursor(platform, dataType string, now time.Time) {
|
||||||
|
var row models.PlatformAccountPoolCursor
|
||||||
|
qs := models.Orm.QueryTable(new(models.PlatformAccountPoolCursor)).
|
||||||
|
Filter("is_extracted", 0).
|
||||||
|
Filter("delete_time__isnull", true)
|
||||||
|
if dataType != "" {
|
||||||
|
qs = qs.Filter("data_type", dataType)
|
||||||
|
}
|
||||||
|
if err := qs.OrderBy("id").One(&row); err != nil {
|
||||||
|
if err == orm.ErrNoRows {
|
||||||
|
c.cardErr(404, 404, "暂无可用卡密")
|
||||||
|
} else {
|
||||||
|
c.cardErr(500, 500, "查询失败")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err := models.Orm.QueryTable(new(models.PlatformAccountPoolCursor)).
|
||||||
|
Filter("id", row.ID).
|
||||||
|
Update(map[string]interface{}{
|
||||||
|
"is_extracted": 1,
|
||||||
|
"extracted_time": now,
|
||||||
|
"extracted_platform": platform,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
c.cardErr(500, 500, "提取失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.cardOK(buildCardResult(&row.Account, &row.Password, row.Token, row.DataType))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ApiGetCardController) extractWindsurf(platform, dataType string, now time.Time) {
|
||||||
|
var row models.PlatformAccountPoolWindsurf
|
||||||
|
qs := models.Orm.QueryTable(new(models.PlatformAccountPoolWindsurf)).
|
||||||
|
Filter("is_extracted", 0).
|
||||||
|
Filter("delete_time__isnull", true)
|
||||||
|
if dataType != "" {
|
||||||
|
qs = qs.Filter("data_type", dataType)
|
||||||
|
}
|
||||||
|
if err := qs.OrderBy("id").One(&row); err != nil {
|
||||||
|
if err == orm.ErrNoRows {
|
||||||
|
c.cardErr(404, 404, "暂无可用卡密")
|
||||||
|
} else {
|
||||||
|
c.cardErr(500, 500, "查询失败")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err := models.Orm.QueryTable(new(models.PlatformAccountPoolWindsurf)).
|
||||||
|
Filter("id", row.ID).
|
||||||
|
Update(map[string]interface{}{
|
||||||
|
"is_extracted": 1,
|
||||||
|
"extracted_time": now,
|
||||||
|
"extracted_platform": platform,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
c.cardErr(500, 500, "提取失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.cardOK(buildCardResult(&row.Account, &row.Password, row.Token, row.DataType))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ApiGetCardController) extractKrio(platform, dataType string, now time.Time) {
|
||||||
|
var row models.PlatformAccountPoolKiro
|
||||||
|
qs := models.Orm.QueryTable(new(models.PlatformAccountPoolKiro)).
|
||||||
|
Filter("is_extracted", 0).
|
||||||
|
Filter("delete_time__isnull", true)
|
||||||
|
if dataType != "" {
|
||||||
|
qs = qs.Filter("data_type", dataType)
|
||||||
|
}
|
||||||
|
if err := qs.OrderBy("id").One(&row); err != nil {
|
||||||
|
if err == orm.ErrNoRows {
|
||||||
|
c.cardErr(404, 404, "暂无可用卡密")
|
||||||
|
} else {
|
||||||
|
c.cardErr(500, 500, "查询失败")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err := models.Orm.QueryTable(new(models.PlatformAccountPoolKiro)).
|
||||||
|
Filter("id", row.ID).
|
||||||
|
Update(map[string]interface{}{
|
||||||
|
"is_extracted": 1,
|
||||||
|
"extracted_time": now,
|
||||||
|
"extracted_platform": platform,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
c.cardErr(500, 500, "提取失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.cardOK(buildCardResult(&row.Account, &row.Password, row.Token, row.DataType))
|
||||||
|
}
|
||||||
|
|
||||||
|
// buildCardResult 根据账号类型组装返回数据
|
||||||
|
func buildCardResult(account, password *string, token string, dataType string) map[string]interface{} {
|
||||||
|
result := map[string]interface{}{
|
||||||
|
"type": dataType,
|
||||||
|
}
|
||||||
|
acc := ""
|
||||||
|
pwd := ""
|
||||||
|
if account != nil {
|
||||||
|
acc = *account
|
||||||
|
}
|
||||||
|
if password != nil {
|
||||||
|
pwd = *password
|
||||||
|
}
|
||||||
|
switch dataType {
|
||||||
|
case "account":
|
||||||
|
result["account"] = acc
|
||||||
|
result["password"] = pwd
|
||||||
|
case "tk":
|
||||||
|
result["token"] = token
|
||||||
|
case "account_tk":
|
||||||
|
result["account"] = acc
|
||||||
|
result["password"] = pwd
|
||||||
|
result["token"] = token
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
@ -10,4 +10,8 @@ import (
|
|||||||
func Register() {
|
func Register() {
|
||||||
// 客户端检查更新(无需登录)
|
// 客户端检查更新(无需登录)
|
||||||
beego.Router("/api/softwareupgrade/check", &controllers.ApiSoftwareUpgradeController{}, "get:Check")
|
beego.Router("/api/softwareupgrade/check", &controllers.ApiSoftwareUpgradeController{}, "get:Check")
|
||||||
|
|
||||||
|
// 对外提卡接口(无需登录)
|
||||||
|
// GET /api/getcard?type=xianyu&module=cursor&data_type=tk
|
||||||
|
beego.Router("/api/getcard", &controllers.ApiGetCardController{}, "get:GetCard")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user