From 5c738aed9c821d9ab8b5637cc1c32d0b73993420 Mon Sep 17 00:00:00 2001 From: xmdhs Date: Tue, 5 Sep 2023 01:01:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=B7=E6=96=B0=E4=BB=A4?= =?UTF-8?q?=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/yggdrasil/model.go | 2 +- server/route/route.go | 2 +- service/yggdrasil/user.go | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/model/yggdrasil/model.go b/model/yggdrasil/model.go index c12822f..08dd672 100644 --- a/model/yggdrasil/model.go +++ b/model/yggdrasil/model.go @@ -26,7 +26,7 @@ type Token struct { AccessToken string `json:"accessToken"` AvailableProfiles []TokenProfile `json:"availableProfiles,omitempty"` ClientToken string `json:"clientToken"` - SelectedProfile TokenProfile `json:"selectedProfile,omitempty"` + SelectedProfile TokenProfile `json:"selectedProfile"` User TokenUser `json:"user,omitempty"` } diff --git a/server/route/route.go b/server/route/route.go index 360a87d..4e9ac6d 100644 --- a/server/route/route.go +++ b/server/route/route.go @@ -26,7 +26,7 @@ func newYggdrasil(r *httprouter.Router, handelY yggdrasil.Yggdrasil) error { r.POST("/api/authserver/validate", warpHJSON(handelY.Validate())) r.POST("/api/authserver/signout", warpHJSON(handelY.Signout())) r.POST("/api/authserver/invalidate", handelY.Invalidate()) - // TODO /authserver/refresh + r.POST("/api/authserver/refresh", handelY.Refresh()) return nil } diff --git a/service/yggdrasil/user.go b/service/yggdrasil/user.go index b184fa4..069d281 100644 --- a/service/yggdrasil/user.go +++ b/service/yggdrasil/user.go @@ -11,6 +11,7 @@ import ( "github.com/google/uuid" "github.com/xmdhs/authlib-skin/db/ent" "github.com/xmdhs/authlib-skin/db/ent/user" + "github.com/xmdhs/authlib-skin/db/ent/userprofile" "github.com/xmdhs/authlib-skin/db/ent/usertoken" "github.com/xmdhs/authlib-skin/model/yggdrasil" sutils "github.com/xmdhs/authlib-skin/service/utils" @@ -148,11 +149,22 @@ func (y *Yggdrasil) Refresh(ctx context.Context, token yggdrasil.RefreshToken) ( if err != nil { return yggdrasil.Token{}, fmt.Errorf("Authenticate: %w", err) } + + up, err := y.client.UserProfile.Query().Where(userprofile.UUIDEQ(t.Subject)).First(ctx) + if err != nil { + return yggdrasil.Token{}, fmt.Errorf("Authenticate: %w", err) + } + return yggdrasil.Token{ AccessToken: jwts, ClientToken: t.CID, + SelectedProfile: yggdrasil.TokenProfile{ + ID: up.UUID, + Name: up.Name, + }, User: yggdrasil.TokenUser{ - ID: t.Subject, + ID: t.Subject, + Properties: []any{}, }, }, nil }