From 2bc45557938be347f553550225c9d3d10274cc6c Mon Sep 17 00:00:00 2001 From: mr Date: Thu, 2 Apr 2026 10:01:26 +0200 Subject: [PATCH] entrypoint --- entrypoint.go | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/entrypoint.go b/entrypoint.go index baba381..5537f16 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -201,23 +201,39 @@ func ExtractTokenInfo(request http.Request) (string, string, []string) { reqToken = splitToken[1] } if reqToken != "" { - token := strings.Split(reqToken, ".") - if len(token) > 2 { - bytes, err := base64.RawURLEncoding.DecodeString(token[1]) - if err != nil { - return "", "", []string{} - } - var c Claims - err = json.Unmarshal(bytes, &c) - if err != nil { - return "", "", []string{} - } - return c.Session.IDToken.UserID, c.Session.IDToken.PeerID, c.Session.IDToken.Groups - } + return extractFromToken(reqToken, "user_id"), extractFromToken(reqToken, "peer_id"), strings.Split(extractFromToken(reqToken, "groups"), ",") } return "", "", []string{} } +func extractFromToken(token string, attr string) string { + parts := strings.Split(token, ".") + if len(parts) < 2 { + return "" + } + payload := parts[1] + switch len(payload) % 4 { + case 2: + payload += "==" + case 3: + payload += "=" + } + b, err := base64.URLEncoding.DecodeString(payload) + if err != nil { + return "" + } + var claims map[string]interface{} + if err := json.Unmarshal(b, &claims); err != nil { + return "" + } + ext, ok := claims["ext"].(map[string]interface{}) + if !ok { + return "" + } + peerID, _ := ext[attr].(string) + return peerID +} + func InitAPI(appName string, extraRoutes ...map[string][]string) { InitDaemon(appName) beego.BConfig.Listen.HTTPPort = config.GetConfig().APIPort