From 4ca9b70e4aa4a4ebb3e3a0acccf64f94d5f41a5b Mon Sep 17 00:00:00 2001 From: xmdhs Date: Tue, 12 Sep 2023 22:09:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=8A=A0=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/cache/fastcache_test.go | 20 ++++++++++++++++++++ handle/yggdrasil/session.go | 9 ++++++++- model/yggdrasil/model.go | 2 +- server/route/route.go | 2 +- service/yggdrasil/session.go | 6 +++--- 5 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 db/cache/fastcache_test.go diff --git a/db/cache/fastcache_test.go b/db/cache/fastcache_test.go new file mode 100644 index 0000000..ff0069f --- /dev/null +++ b/db/cache/fastcache_test.go @@ -0,0 +1,20 @@ +package cache + +import ( + "testing" + "time" + + "github.com/samber/lo" +) + +func TestFastCache(t *testing.T) { + f := NewFastCache(100000) + c := CacheHelp[string]{ + Cache: f, + } + c.Put([]byte("123"), "123", time.Now().Add(10*time.Second)) + + if lo.Must(c.Get([]byte("123"))) != "123" { + t.FailNow() + } +} diff --git a/handle/yggdrasil/session.go b/handle/yggdrasil/session.go index 85094b6..94152c8 100644 --- a/handle/yggdrasil/session.go +++ b/handle/yggdrasil/session.go @@ -1,10 +1,12 @@ package yggdrasil import ( + "encoding/json" "errors" "net/http" "github.com/julienschmidt/httprouter" + "github.com/samber/lo" "github.com/xmdhs/authlib-skin/model/yggdrasil" sutils "github.com/xmdhs/authlib-skin/service/utils" "github.com/xmdhs/authlib-skin/utils" @@ -47,6 +49,11 @@ func (y *Yggdrasil) HasJoined() httprouter.Handle { w.WriteHeader(204) return } - y.yggdrasilService.HasJoined(ctx, name, serverId, ip, r.Host) + u, err := y.yggdrasilService.HasJoined(ctx, name, serverId, ip, r.Host) + if err != nil { + y.logger.WarnContext(ctx, err.Error()) + w.WriteHeader(204) + } + w.Write(lo.Must(json.Marshal(u))) } } diff --git a/model/yggdrasil/model.go b/model/yggdrasil/model.go index 8edefe4..a2fcf39 100644 --- a/model/yggdrasil/model.go +++ b/model/yggdrasil/model.go @@ -60,7 +60,7 @@ type UserProperties struct { type Session struct { AccessToken string `json:"accessToken" validate:"required,jwt"` - SelectedProfile string `json:"selectedProfile" validate:"required,uuid"` + SelectedProfile string `json:"selectedProfile" validate:"required"` ServerID string `json:"serverId"` } diff --git a/server/route/route.go b/server/route/route.go index 9dcf8f7..66744d5 100644 --- a/server/route/route.go +++ b/server/route/route.go @@ -35,7 +35,7 @@ func newYggdrasil(r *httprouter.Router, handelY yggdrasil.Yggdrasil) error { r.POST("/api/yggdrasil/api/profiles/minecraft", warpHJSON(handelY.BatchProfile())) r.POST("/api/yggdrasil/sessionserver/session/minecraft/join", warpHJSON(handelY.SessionJoin())) - r.GET("/api/yggdrasil/sessionserver/session/minecraft/hasJoined", warpHJSON(handelY.SessionJoin())) + r.GET("/api/yggdrasil/sessionserver/session/minecraft/hasJoined", warpHJSON(handelY.HasJoined())) r.POST("/api/yggdrasil/minecraftservices/player/certificates", warpHJSON(handelY.PlayerCertificates())) diff --git a/service/yggdrasil/session.go b/service/yggdrasil/session.go index ad8441b..a596521 100644 --- a/service/yggdrasil/session.go +++ b/service/yggdrasil/session.go @@ -13,7 +13,7 @@ import ( ) type sessionWithIP struct { - user model.TokenClaims + User model.TokenClaims IP string } @@ -28,7 +28,7 @@ func (y *Yggdrasil) SessionJoin(ctx context.Context, s yggdrasil.Session, ip str return fmt.Errorf("SessionJoin: %w", sutils.ErrTokenInvalid) } err = cache.CacheHelp[sessionWithIP]{Cache: y.cache}.Put([]byte("session"+s.ServerID), sessionWithIP{ - user: *t, + User: *t, IP: ip, }, time.Now().Add(30*time.Second)) if err != nil { @@ -51,7 +51,7 @@ func (y *Yggdrasil) HasJoined(ctx context.Context, username, serverId string, ip return yggdrasil.UserInfo{}, fmt.Errorf("HasJoined: %w", err) } - if up.UUID != sIP.user.Subject { + if up.UUID != sIP.User.Subject { return yggdrasil.UserInfo{}, fmt.Errorf("uuid 不相同") }