2021-08-15 09:48:05 +08:00
|
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2021-08-16 23:08:04 +08:00
|
|
|
|
"fmt"
|
2021-08-15 09:48:05 +08:00
|
|
|
|
"math"
|
2021-08-16 23:08:04 +08:00
|
|
|
|
"os"
|
2021-08-15 09:48:05 +08:00
|
|
|
|
"strings"
|
|
|
|
|
|
"time"
|
2021-08-16 23:08:04 +08:00
|
|
|
|
|
|
|
|
|
|
"github.com/beego/beego/v2/core/logs"
|
2021-08-28 09:52:25 +08:00
|
|
|
|
"gorm.io/gorm"
|
2021-08-15 09:48:05 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func initHandle() {
|
|
|
|
|
|
//获取路径
|
|
|
|
|
|
Save = make(chan *JdCookie)
|
|
|
|
|
|
go func() {
|
|
|
|
|
|
init := true
|
|
|
|
|
|
for {
|
|
|
|
|
|
get := <-Save
|
|
|
|
|
|
if get.Pool == "s" {
|
|
|
|
|
|
initCookie()
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
2021-08-28 09:52:25 +08:00
|
|
|
|
cks := GetJdCookies(func(sb *gorm.DB) *gorm.DB {
|
|
|
|
|
|
return sb.Where(fmt.Sprintf("%s >= ? and %s != ?", Priority, Hack), 0, True)
|
|
|
|
|
|
})
|
2021-08-15 09:48:05 +08:00
|
|
|
|
tmp := []JdCookie{}
|
|
|
|
|
|
for _, ck := range cks {
|
2021-08-23 10:58:36 +08:00
|
|
|
|
if ck.Priority >= 0 && ck.Hack != True {
|
2021-08-15 09:48:05 +08:00
|
|
|
|
tmp = append(tmp, ck)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
cks = tmp
|
2021-08-16 23:08:04 +08:00
|
|
|
|
cookies := "{"
|
|
|
|
|
|
hh := []string{}
|
|
|
|
|
|
for i, ck := range cks {
|
|
|
|
|
|
hh = append(hh,
|
|
|
|
|
|
fmt.Sprintf("CookieJD%d:'pt_key=%s;pt_pin=%s;'", i+1, ck.PtKey, ck.PtPin),
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
cookies += strings.Join(hh, ",")
|
|
|
|
|
|
cookies += "}"
|
|
|
|
|
|
f, err := os.OpenFile(ExecPath+"/scripts/jdCookie.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
logs.Warn("创建jdCookie.js失败,", err)
|
|
|
|
|
|
}
|
2021-08-28 09:52:25 +08:00
|
|
|
|
|
2021-08-17 13:36:11 +08:00
|
|
|
|
f.WriteString(fmt.Sprintf(`
|
|
|
|
|
|
var cookies = %s
|
|
|
|
|
|
var pins = process.env.pins
|
|
|
|
|
|
if(pins){
|
|
|
|
|
|
pins = pins.split("&")
|
|
|
|
|
|
for (var key in cookies) {
|
|
|
|
|
|
c = false
|
|
|
|
|
|
for (var pin of pins) {
|
2021-08-17 15:35:21 +08:00
|
|
|
|
if (pin && cookies[key].indexOf(pin) != -1) {
|
2021-08-17 13:36:11 +08:00
|
|
|
|
c = true
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!c) {
|
|
|
|
|
|
delete cookies[key]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
module.exports = cookies`, cookies))
|
2021-08-16 23:08:04 +08:00
|
|
|
|
f.Close()
|
2021-08-28 09:52:25 +08:00
|
|
|
|
WriteHelpJS(cks)
|
2021-08-21 20:27:59 +08:00
|
|
|
|
go CopyConfigAll()
|
2021-08-23 10:58:36 +08:00
|
|
|
|
// tmp = []JdCookie{}
|
|
|
|
|
|
// for _, ck := range cks {
|
|
|
|
|
|
// if ck.Hack != True {
|
|
|
|
|
|
// tmp = append(tmp, ck)
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// cks = tmp
|
2021-08-15 09:48:05 +08:00
|
|
|
|
if Config.Mode == Parallel {
|
|
|
|
|
|
for i := range Config.Containers {
|
|
|
|
|
|
(&Config.Containers[i]).read()
|
|
|
|
|
|
}
|
|
|
|
|
|
for i := range Config.Containers {
|
|
|
|
|
|
(&Config.Containers[i]).write(cks)
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
resident := []JdCookie{}
|
|
|
|
|
|
if Config.Resident != "" {
|
|
|
|
|
|
tmp := cks
|
|
|
|
|
|
cks = []JdCookie{}
|
|
|
|
|
|
for _, ck := range tmp {
|
|
|
|
|
|
if strings.Contains(Config.Resident, ck.PtPin) {
|
|
|
|
|
|
resident = append(resident, ck)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cks = append(cks, ck)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type balance struct {
|
|
|
|
|
|
Container Container
|
|
|
|
|
|
Weigth float64
|
|
|
|
|
|
Ready []JdCookie
|
|
|
|
|
|
Should int
|
|
|
|
|
|
}
|
|
|
|
|
|
availables := []Container{}
|
|
|
|
|
|
parallels := []Container{}
|
|
|
|
|
|
bs := []balance{}
|
|
|
|
|
|
for i := range Config.Containers {
|
|
|
|
|
|
(&Config.Containers[i]).read()
|
|
|
|
|
|
if Config.Containers[i].Available {
|
|
|
|
|
|
if Config.Containers[i].Mode == Parallel {
|
|
|
|
|
|
parallels = append(parallels, Config.Containers[i])
|
|
|
|
|
|
} else {
|
|
|
|
|
|
availables = append(availables, Config.Containers[i])
|
|
|
|
|
|
bs = append(bs, balance{
|
|
|
|
|
|
Container: Config.Containers[i],
|
|
|
|
|
|
Weigth: float64(Config.Containers[i].Weigth),
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
bat := cks
|
|
|
|
|
|
for {
|
|
|
|
|
|
left := []JdCookie{}
|
|
|
|
|
|
l := len(cks)
|
|
|
|
|
|
total := 0.0
|
|
|
|
|
|
for i := range bs {
|
|
|
|
|
|
total += float64(bs[i].Weigth)
|
|
|
|
|
|
}
|
|
|
|
|
|
for i := range bs {
|
|
|
|
|
|
if bs[i].Weigth == 0 {
|
|
|
|
|
|
bs[i].Should = 0
|
|
|
|
|
|
} else {
|
|
|
|
|
|
bs[i].Should = int(math.Ceil(bs[i].Weigth / total * float64(l)))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
a := 0
|
|
|
|
|
|
for i := range bs {
|
|
|
|
|
|
j := bs[i].Should
|
|
|
|
|
|
if j == 0 {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
s := 0
|
|
|
|
|
|
if bs[i].Container.Limit > 0 && j > bs[i].Container.Limit {
|
|
|
|
|
|
s = a + bs[i].Container.Limit
|
|
|
|
|
|
left = append(left, cks[s:a+j]...)
|
|
|
|
|
|
bs[i].Weigth = 0
|
|
|
|
|
|
} else {
|
|
|
|
|
|
s = a + j
|
|
|
|
|
|
}
|
|
|
|
|
|
if s > l {
|
|
|
|
|
|
s = l
|
|
|
|
|
|
}
|
|
|
|
|
|
bs[i].Ready = append(bs[i].Ready, cks[a:s]...)
|
|
|
|
|
|
a += j
|
|
|
|
|
|
if a >= l-1 {
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(left) != 0 {
|
|
|
|
|
|
cks = left
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
for i := range bs {
|
|
|
|
|
|
bs[i].Container.write(append(resident, bs[i].Ready...))
|
|
|
|
|
|
}
|
|
|
|
|
|
for i := range parallels {
|
|
|
|
|
|
parallels[i].write(append(resident, bat...))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if init {
|
|
|
|
|
|
go func() {
|
|
|
|
|
|
for {
|
|
|
|
|
|
Save <- &JdCookie{
|
|
|
|
|
|
Pool: "s",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
time.Sleep(time.Minute * 30)
|
|
|
|
|
|
// time.Sleep(time.Second * 1)
|
|
|
|
|
|
}
|
|
|
|
|
|
}()
|
|
|
|
|
|
init = false
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}()
|
|
|
|
|
|
}
|