✨ User info DirectAccess™
This commit is contained in:
parent
1ea5aea6b3
commit
f113ae6cba
@ -6,8 +6,10 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.solsynth.dev/hypernet/nexus/pkg/internal/cache"
|
||||||
"git.solsynth.dev/hypernet/nexus/pkg/internal/directory"
|
"git.solsynth.dev/hypernet/nexus/pkg/internal/directory"
|
||||||
"git.solsynth.dev/hypernet/nexus/pkg/nex"
|
"git.solsynth.dev/hypernet/nexus/pkg/nex"
|
||||||
|
"git.solsynth.dev/hypernet/nexus/pkg/nex/cachekit"
|
||||||
"git.solsynth.dev/hypernet/nexus/pkg/nex/sec"
|
"git.solsynth.dev/hypernet/nexus/pkg/nex/sec"
|
||||||
"git.solsynth.dev/hypernet/nexus/pkg/proto"
|
"git.solsynth.dev/hypernet/nexus/pkg/proto"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
@ -20,6 +22,19 @@ func userinfoFetch(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusUnauthorized, "user principal data was not found")
|
return fiber.NewError(fiber.StatusUnauthorized, "user principal data was not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if val, err := cachekit.Get[sec.UserInfo](
|
||||||
|
cache.Kcc,
|
||||||
|
cachekit.FKey(cachekit.DAUserInfoPrefix, claims.Session),
|
||||||
|
); err == nil {
|
||||||
|
c.Locals("nex_user", &val)
|
||||||
|
tk, err := IWriter.WriteUserInfoJwt(val)
|
||||||
|
if err != nil {
|
||||||
|
return fiber.NewError(fiber.StatusInternalServerError, fmt.Sprintf("unable to sign userinfo: %v", err))
|
||||||
|
}
|
||||||
|
c.Locals("nex_token", tk)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
service := directory.GetServiceInstanceByType(nex.ServiceTypeAuth)
|
service := directory.GetServiceInstanceByType(nex.ServiceTypeAuth)
|
||||||
if service != nil {
|
if service != nil {
|
||||||
conn, err := service.GetGrpcConn()
|
conn, err := service.GetGrpcConn()
|
||||||
|
16
pkg/internal/cache/redis.go
vendored
16
pkg/internal/cache/redis.go
vendored
@ -1,8 +1,16 @@
|
|||||||
package cache
|
package cache
|
||||||
|
|
||||||
import "github.com/redis/go-redis/v9"
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
var Rdb *redis.Client
|
"git.solsynth.dev/hypernet/nexus/pkg/nex/cachekit"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Rdb *redis.Client
|
||||||
|
Kcc *cachekit.Conn
|
||||||
|
)
|
||||||
|
|
||||||
func ConnectRedis(addr, password string, db int) error {
|
func ConnectRedis(addr, password string, db int) error {
|
||||||
Rdb = redis.NewClient(&redis.Options{
|
Rdb = redis.NewClient(&redis.Options{
|
||||||
@ -10,5 +18,9 @@ func ConnectRedis(addr, password string, db int) error {
|
|||||||
Password: password,
|
Password: password,
|
||||||
DB: db,
|
DB: db,
|
||||||
})
|
})
|
||||||
|
Kcc = &cachekit.Conn{
|
||||||
|
Rd: Rdb,
|
||||||
|
Timeout: 3 * time.Second,
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
13
pkg/nex/cachekit/direct_const.go
Normal file
13
pkg/nex/cachekit/direct_const.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package cachekit
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
// Those constants are used to directly get the cached data from redis
|
||||||
|
// Formatted like {prefix}#{key}
|
||||||
|
const (
|
||||||
|
DAUserInfoPrefix = "userinfo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FKey(prefix string, key any) string {
|
||||||
|
return fmt.Sprintf("%s#%v", prefix, key)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user