add user routes

This commit is contained in:
2026-09-04 23:03:50 +08:00
parent a28c1dec9b
commit e79282d8cc
13 changed files with 583 additions and 11 deletions

View File

@@ -0,0 +1,70 @@
package param_userid
import (
"bdgrp_go/db"
"bdgrp_go/pbutil"
"bdgrp_go/routes"
"bdgrp_go/utils"
"crypto/sha1"
"fmt"
"os"
"github.com/gofiber/fiber/v2"
)
func init() {
path := routes.PathOf()
routes.Register(func(app *fiber.App) {
app.Put(path, Auth)
fmt.Println("Loaded:", path)
})
}
func Auth(c *fiber.Ctx) error {
server := os.Getenv("SERVER")
userid := c.Params("userid")
decrypted, err := utils.Decrypt(c.Body())
if err != nil {
return c.Status(500).SendString("")
}
decoded, err := pbutil.Decode("UserAuthRequest", decrypted)
if err != nil {
return c.Status(500).SendString("")
}
hash := fmt.Sprintf("%x", sha1.Sum([]byte(userid+":")))
errData := map[string]any{
"httpStatus": 403,
"errorCode": "",
"errorMessage": "signature invalid.",
}
sendErr := func() error {
encoded, _ := pbutil.Encode("ClientErrorResponse", errData)
encrypted, _ := utils.Encrypt(encoded)
return c.Status(403).Send(encrypted)
}
user := db.FindUser(userid)
if hash != decoded["hash1"] || user == nil {
return sendErr()
}
if c.Get("x-signature") != user["hash"] {
return sendErr()
}
// 更新 clientVersion
for i, u := range db.DB.Users[server] {
if fmt.Sprintf("%v", u["userId"]) == userid {
db.DB.Users[server][i]["clientVersion"] = c.Get("x-clientversion")
break
}
}
db.Save()
return c.Send(nil)
}

View File

@@ -0,0 +1,21 @@
package param_userid
import (
"fmt"
"bdgrp_go/routes"
"github.com/gofiber/fiber/v2"
)
func init() {
path := routes.PathOf()
routes.Register(func(app *fiber.App) {
app.Put(path, fcm)
fmt.Println("Loaded:", path)
})
}
func fcm(c *fiber.Ctx) error {
return c.SendString("")
}

View File

@@ -0,0 +1,87 @@
package param_userid
import (
"bdgrp_go/db"
"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.Get(path, GetUser)
fmt.Println("Loaded:", path)
})
}
func GetUser(c *fiber.Ctx) error {
userid := c.Params("userid")
user := db.FindUser(userid)
if user == nil {
return c.Status(404).SendString("")
}
userId := fmt.Sprintf("%v", user["userId"])
data := map[string]any{
"userRegistration": map[string]any{
"userId": userId,
"hash": user["hash"],
"userName": user["userName"],
"clientVersion": user["clientVersion"],
"platform": user["platform"],
"deviceModel": user["deviceModel"],
"operatingSystem": user["operatingSystem"],
"birthMonth": user["birthMonth"],
"tutorialStatus": user["tutorialStatus"],
"introduction": user["introduction"],
"tutorialEndedAt": fmt.Sprintf("%v", user["tutorialEndedAt"]),
},
"userGamedata": map[string]any{
"userId": userId,
"rank": user["rank"],
"exp": user["exp"],
"coin": fmt.Sprintf("%v", user["coin"]),
"mainDeck": user["mainDeck"],
"paidStar": user["paidStar"],
"freeStar": user["freeStar"],
"seal": user["seal"],
"degree": user["degree"].([]any)[0],
"publishTotalDeckPowerFlg": user["publishTotalDeckPowerFlg"],
"publishBandRankFlg": user["publishBandRankFlg"],
"publishMusicClearedFlg": user["publishMusicClearedFlg"],
"publishMusicFullComboFlg": user["publishMusicFullComboFlg"],
"publishHighScoreRatingFlg": user["publishHighScoreRatingFlg"],
"pooledExp": fmt.Sprintf("%v", user["pooledExp"]),
"totalExp": fmt.Sprintf("%v", user["totalExp"]),
"nextExp": user["nextExp"],
"publishUpdatedAtFlg": user["publishUpdatedAtFlg"],
"userPaidStarRecallResponse": nil,
"startDashLoginBonusReceiveFlg": user["startDashLoginBonusReceiveFlg"],
"publishMusicAllPerfectFlg": user["publishMusicAllPerfectFlg"],
"publishDeckRankFlg": user["publishDeckRankFlg"],
"publishStageAchievementConditionsFlg": user["publishStageAchievementConditionsFlg"],
"publishStageFriendRankingFlg": user["publishStageFriendRankingFlg"],
"publishCharacterRankFlg": user["publishCharacterRankFlg"],
"loginDays": user["loginDays"],
},
}
encoded, err := pbutil.Encode("UserGetResponse", data)
if err != nil {
fmt.Println(err)
}
encrypted, err := utils.Encrypt(encoded)
if err != nil {
fmt.Println(err)
}
return c.Send(encrypted)
}