28 lines
840 B
Go
28 lines
840 B
Go
|
package authkit
|
||
|
|
||
|
import (
|
||
|
"git.solsynth.dev/hydrogen/passport/pkg/authkit/models"
|
||
|
"git.solsynth.dev/hypernet/nexus/pkg/nex/sec"
|
||
|
"github.com/goccy/go-json"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
)
|
||
|
|
||
|
// GetAccountFromUserInfo returns the account from the user info
|
||
|
// This method will not to query the database, it will parse the token and get the subject of the userinfo token
|
||
|
func GetAccountFromUserInfo(info *sec.UserInfo) models.Account {
|
||
|
raw, _ := json.Marshal(info.Metadata)
|
||
|
|
||
|
// We assume the token is signed by the same version of service
|
||
|
// So directly read the data out of the metadata
|
||
|
var out models.Account
|
||
|
_ = json.Unmarshal(raw, &out)
|
||
|
return out
|
||
|
}
|
||
|
|
||
|
func ParseAccountMiddleware(c *fiber.Ctx) error {
|
||
|
if info, ok := c.Locals("nex_user").(*sec.UserInfo); ok {
|
||
|
c.Locals("user", GetAccountFromUserInfo(info))
|
||
|
}
|
||
|
return c.Next()
|
||
|
}
|