changed param logic & add more routes
This commit is contained in:
65
master/master.go
Normal file
65
master/master.go
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package master
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bdgrp_go/pbutil"
|
||||||
|
"bdgrp_go/utils"
|
||||||
|
"bytes"
|
||||||
|
"compress/bzip2"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
cache map[string]any
|
||||||
|
mu sync.RWMutex
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetMaster() map[string]any {
|
||||||
|
mu.RLock()
|
||||||
|
defer mu.RUnlock()
|
||||||
|
if cache != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
mu.RUnlock()
|
||||||
|
return ReloadMaster()
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReloadMaster() map[string]any {
|
||||||
|
server := os.Getenv("SERVER")
|
||||||
|
filePath := filepath.Join("resp", server, "suitemaster.bz2")
|
||||||
|
|
||||||
|
fileBuffer, err := os.ReadFile(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
decrypted, err := utils.Decrypt(fileBuffer)
|
||||||
|
if err != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
// bzip2 解壓
|
||||||
|
decompressed, err := io.ReadAll(bzip2.NewReader(bytes.NewReader(decrypted)))
|
||||||
|
if err != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
// protobuf decode → JSON map
|
||||||
|
msg, err := pbutil.Decode("SuiteMasterGetResponse", decompressed)
|
||||||
|
if err != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := pbutil.ToMap(msg)
|
||||||
|
if err != nil {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
mu.Lock()
|
||||||
|
cache = result
|
||||||
|
mu.Unlock()
|
||||||
|
|
||||||
|
return cache
|
||||||
|
}
|
||||||
@@ -52,3 +52,14 @@ func Encode(message string, data map[string]any) ([]byte, error) {
|
|||||||
|
|
||||||
return proto.Marshal(msg)
|
return proto.Marshal(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ToMap(msg proto.Message) (map[string]any, error) {
|
||||||
|
jsonBytes, err := protojson.Marshal(msg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var result map[string]any
|
||||||
|
json.Unmarshal(jsonBytes, &result)
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,9 +9,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
routes.Register(func(app *fiber.App) {
|
routes.Register(func(app *fiber.App) {
|
||||||
app.Get("/api/acdm/:userid", acdm)
|
app.Post(path, acdm)
|
||||||
fmt.Println("Loaded: /api/acdm/:userid")
|
fmt.Println("Loaded:", path)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,7 +41,6 @@ func application(c *fiber.Ctx) error {
|
|||||||
url := fmt.Sprintf("%s/api/application", upstream.BaseUrl())
|
url := fmt.Sprintf("%s/api/application", upstream.BaseUrl())
|
||||||
data, err := upstream.Fetch(url, headers)
|
data, err := upstream.Fetch(url, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback 到 cache
|
|
||||||
data, err = os.ReadFile(cachePath)
|
data, err = os.ReadFile(cachePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(500).SendString("no cache available")
|
return c.Status(500).SendString("no cache available")
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ func cleanupinfo(c *fiber.Ctx) error {
|
|||||||
url := fmt.Sprintf("%s/api/application", upstream.BaseUrl())
|
url := fmt.Sprintf("%s/api/application", upstream.BaseUrl())
|
||||||
data, err := upstream.Fetch(url, headers)
|
data, err := upstream.Fetch(url, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback 到 cache
|
|
||||||
data, err = os.ReadFile(cachePath)
|
data, err = os.ReadFile(cachePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(500).SendString("no cache available")
|
return c.Status(500).SendString("no cache available")
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ func application(c *fiber.Ctx) error {
|
|||||||
url := fmt.Sprintf("%s/api/information/overview", upstream.BaseUrl())
|
url := fmt.Sprintf("%s/api/information/overview", upstream.BaseUrl())
|
||||||
data, err := upstream.Fetch(url, headers)
|
data, err := upstream.Fetch(url, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback 到 cache
|
|
||||||
data, err = os.ReadFile(cachePath)
|
data, err = os.ReadFile(cachePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(500).SendString("no cache available")
|
return c.Status(500).SendString("no cache available")
|
||||||
|
|||||||
49
routes/api/missionreward.map.go
Normal file
49
routes/api/missionreward.map.go
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"bdgrp_go/routes"
|
||||||
|
"bdgrp_go/routes/upstream"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
|
routes.Register(func(app *fiber.App) {
|
||||||
|
app.Get(path, rewardmap)
|
||||||
|
fmt.Println("Loaded:", path)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func rewardmap(c *fiber.Ctx) error {
|
||||||
|
server := os.Getenv("SERVER")
|
||||||
|
cachePath := filepath.Join("resp", server, "config.binpb")
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"User-Agent": c.Get("User-Agent"),
|
||||||
|
"Content-Type": c.Get("Content-Type"),
|
||||||
|
"Accept": c.Get("Accept"),
|
||||||
|
"Accept-Encoding": c.Get("Accept-Encoding"),
|
||||||
|
"x-clientversion": c.Get("x-clientversion"),
|
||||||
|
"x-platformid": c.Get("x-platformid"),
|
||||||
|
"x-deviceid": c.Get("x-deviceid"),
|
||||||
|
"x-channelid": c.Get("x-channelid"),
|
||||||
|
"x-clientplatform": c.Get("x-clientplatform"),
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := upstream.Fetch("https://l3-prod-all-bd.bilibiligame.net/api/missionreward.map", headers)
|
||||||
|
if err != nil {
|
||||||
|
data, err = os.ReadFile(cachePath)
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(500).SendString("no cache available")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
os.WriteFile(cachePath, data, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Send(data)
|
||||||
|
}
|
||||||
21
routes/api/multiroom.go
Normal file
21
routes/api/multiroom.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"bdgrp_go/routes"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
|
routes.Register(func(app *fiber.App) {
|
||||||
|
app.Post(path, multiroom)
|
||||||
|
fmt.Println("Loaded:", path)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func multiroom(c *fiber.Ctx) error {
|
||||||
|
return c.SendString("")
|
||||||
|
}
|
||||||
55
routes/api/suite/master.go
Normal file
55
routes/api/suite/master.go
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package suite
|
||||||
|
|
||||||
|
import (
|
||||||
|
mastermanager "bdgrp_go/master"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"bdgrp_go/routes"
|
||||||
|
"bdgrp_go/routes/upstream"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
|
routes.Register(func(app *fiber.App) {
|
||||||
|
app.Get(path, master)
|
||||||
|
fmt.Println("Loaded:", path)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func master(c *fiber.Ctx) error {
|
||||||
|
server := os.Getenv("SERVER")
|
||||||
|
cachePath := filepath.Join("resp", server, "suitemaster.bz2")
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"User-Agent": c.Get("User-Agent"),
|
||||||
|
"Content-Type": c.Get("Content-Type"),
|
||||||
|
"Accept": c.Get("Accept"),
|
||||||
|
"Accept-Encoding": c.Get("Accept-Encoding"),
|
||||||
|
"x-clientversion": c.Get("x-clientversion"),
|
||||||
|
}
|
||||||
|
|
||||||
|
if server == "CN" {
|
||||||
|
headers["x-platformid"] = c.Get("x-platformid")
|
||||||
|
headers["x-deviceid"] = c.Get("x-deviceid")
|
||||||
|
headers["x-channelid"] = c.Get("x-channelid")
|
||||||
|
headers["x-clientplatform"] = c.Get("x-clientplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
url := fmt.Sprintf("%s/api/suite/master", upstream.BaseUrl())
|
||||||
|
data, err := upstream.Fetch(url, headers)
|
||||||
|
if err != nil {
|
||||||
|
data, err = os.ReadFile(cachePath)
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(500).SendString("no cache available")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
os.WriteFile(cachePath, data, 0644)
|
||||||
|
mastermanager.ReloadMaster()
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Send(data)
|
||||||
|
}
|
||||||
@@ -37,7 +37,6 @@ func config(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
data, err := upstream.Fetch("https://l3-prod-all-bd.bilibiligame.net/api/system/config", headers)
|
data, err := upstream.Fetch("https://l3-prod-all-bd.bilibiligame.net/api/system/config", headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback 到 cache
|
|
||||||
data, err = os.ReadFile(cachePath)
|
data, err = os.ReadFile(cachePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(500).SendString("no cache available")
|
return c.Status(500).SendString("no cache available")
|
||||||
|
|||||||
21
routes/api/track.go
Normal file
21
routes/api/track.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"bdgrp_go/routes"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
|
routes.Register(func(app *fiber.App) {
|
||||||
|
app.Get(path, track)
|
||||||
|
fmt.Println("Loaded:", path)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func track(c *fiber.Ctx) error {
|
||||||
|
return c.SendString("")
|
||||||
|
}
|
||||||
38
routes/api/validation/ngword.go
Normal file
38
routes/api/validation/ngword.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package validation
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bdgrp_go/pbutil"
|
||||||
|
"bdgrp_go/routes"
|
||||||
|
"bdgrp_go/utils"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
path := routes.PathOf()
|
||||||
|
routes.Register(func(app *fiber.App) {
|
||||||
|
app.Post(path, ngword)
|
||||||
|
fmt.Println("Loaded:", path)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func ngword(c *fiber.Ctx) error {
|
||||||
|
data := map[string]any{
|
||||||
|
"isBadWord": false,
|
||||||
|
}
|
||||||
|
|
||||||
|
encoded, err := pbutil.Encode("NgWordResponse", data)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return c.Status(500).SendString("")
|
||||||
|
}
|
||||||
|
|
||||||
|
encrypted, err := utils.Encrypt(encoded)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Send(encrypted)
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package routes
|
package routes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@@ -8,15 +9,12 @@ import (
|
|||||||
func PathOf() string {
|
func PathOf() string {
|
||||||
_, file, _, _ := runtime.Caller(1)
|
_, file, _, _ := runtime.Caller(1)
|
||||||
|
|
||||||
// 取 routes/ 之後的部分
|
|
||||||
idx := strings.Index(file, "routes/")
|
idx := strings.Index(file, "routes/")
|
||||||
if idx == -1 {
|
|
||||||
return "/"
|
|
||||||
}
|
|
||||||
path := file[idx+len("routes"):]
|
path := file[idx+len("routes"):]
|
||||||
|
|
||||||
// 去掉 .go
|
|
||||||
path = strings.TrimSuffix(path, ".go")
|
path = strings.TrimSuffix(path, ".go")
|
||||||
|
|
||||||
|
re := regexp.MustCompile(`param_(\w+)`)
|
||||||
|
path = re.ReplaceAllString(path, ":$1")
|
||||||
|
|
||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user