✨ User info DirectAccess™
This commit is contained in:
		| @@ -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) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user