fix: update store method till handlers
This commit is contained in:
@@ -3,6 +3,7 @@ package memorystore
|
||||
import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/memorystore/providers"
|
||||
"github.com/authorizerdev/authorizer/server/memorystore/providers/inmemory"
|
||||
"github.com/authorizerdev/authorizer/server/memorystore/providers/redis"
|
||||
@@ -15,6 +16,20 @@ var Provider providers.Provider
|
||||
func InitMemStore() error {
|
||||
var err error
|
||||
|
||||
defaultEnvs := map[string]interface{}{
|
||||
// string envs
|
||||
constants.EnvKeyJwtRoleClaim: "role",
|
||||
constants.EnvKeyOrganizationName: "Authorizer",
|
||||
constants.EnvKeyOrganizationLogo: "https://www.authorizer.dev/images/logo.png",
|
||||
|
||||
// boolean envs
|
||||
constants.EnvKeyDisableBasicAuthentication: false,
|
||||
constants.EnvKeyDisableMagicLinkLogin: false,
|
||||
constants.EnvKeyDisableEmailVerification: false,
|
||||
constants.EnvKeyDisableLoginPage: false,
|
||||
constants.EnvKeyDisableSignUp: false,
|
||||
}
|
||||
|
||||
redisURL := RequiredEnvStoreObj.GetRequiredEnv().RedisURL
|
||||
if redisURL != "" {
|
||||
log.Info("Initializing Redis memory store")
|
||||
@@ -23,6 +38,9 @@ func InitMemStore() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// set default envs in redis
|
||||
Provider.UpdateEnvStore(defaultEnvs)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -32,5 +50,7 @@ func InitMemStore() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// set default envs in local env
|
||||
Provider.UpdateEnvStore(defaultEnvs)
|
||||
return nil
|
||||
}
|
||||
|
41
server/memorystore/providers/inmemory/envstore.go
Normal file
41
server/memorystore/providers/inmemory/envstore.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package inmemory
|
||||
|
||||
import "sync"
|
||||
|
||||
// EnvStore struct to store the env variables
|
||||
type EnvStore struct {
|
||||
mutex sync.Mutex
|
||||
store map[string]interface{}
|
||||
}
|
||||
|
||||
// UpdateEnvStore to update the whole env store object
|
||||
func (e *EnvStore) UpdateStore(store map[string]interface{}) {
|
||||
e.mutex.Lock()
|
||||
defer e.mutex.Unlock()
|
||||
// just override the keys + new keys
|
||||
|
||||
for key, value := range store {
|
||||
e.store[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
// GetStore returns the env store
|
||||
func (e *EnvStore) GetStore() map[string]interface{} {
|
||||
e.mutex.Lock()
|
||||
defer e.mutex.Unlock()
|
||||
return e.store
|
||||
}
|
||||
|
||||
// Get returns the value of the key in evn store
|
||||
func (s *EnvStore) Get(key string) interface{} {
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
return s.store[key]
|
||||
}
|
||||
|
||||
// Set sets the value of the key in env store
|
||||
func (s *EnvStore) Set(key string, value interface{}) {
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
s.store[key] = value
|
||||
}
|
@@ -1,11 +1,14 @@
|
||||
package inmemory
|
||||
|
||||
import "sync"
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type provider struct {
|
||||
mutex sync.Mutex
|
||||
sessionStore map[string]map[string]string
|
||||
stateStore map[string]string
|
||||
envStore *EnvStore
|
||||
}
|
||||
|
||||
// NewInMemoryStore returns a new in-memory store.
|
||||
@@ -14,5 +17,9 @@ func NewInMemoryProvider() (*provider, error) {
|
||||
mutex: sync.Mutex{},
|
||||
sessionStore: map[string]map[string]string{},
|
||||
stateStore: map[string]string{},
|
||||
envStore: &EnvStore{
|
||||
mutex: sync.Mutex{},
|
||||
store: map[string]interface{}{},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
@@ -1,6 +1,10 @@
|
||||
package inmemory
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/utils"
|
||||
)
|
||||
|
||||
// ClearStore clears the in-memory store.
|
||||
func (c *provider) ClearStore() error {
|
||||
@@ -42,14 +46,13 @@ func (c *provider) DeleteAllUserSession(userId string) error {
|
||||
func (c *provider) SetState(key, state string) error {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
c.stateStore[key] = state
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetState gets the state from the in-memory store.
|
||||
func (c *provider) GetState(key string) string {
|
||||
func (c *provider) GetState(key string) (string, error) {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
@@ -58,15 +61,50 @@ func (c *provider) GetState(key string) string {
|
||||
state = stateVal
|
||||
}
|
||||
|
||||
return state
|
||||
return state, nil
|
||||
}
|
||||
|
||||
// RemoveState removes the state from the in-memory store.
|
||||
func (c *provider) RemoveState(key string) error {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
delete(c.stateStore, key)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateEnvStore to update the whole env store object
|
||||
func (c *provider) UpdateEnvStore(store map[string]interface{}) error {
|
||||
c.envStore.UpdateStore(store)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetEnvStore returns the env store object
|
||||
func (c *provider) GetEnvStore() (map[string]interface{}, error) {
|
||||
return c.envStore.GetStore(), nil
|
||||
}
|
||||
|
||||
// UpdateEnvVariable to update the particular env variable
|
||||
func (c *provider) UpdateEnvVariable(key string, value interface{}) error {
|
||||
c.envStore.Set(key, value)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetStringStoreEnvVariable to get the env variable from string store object
|
||||
func (c *provider) GetStringStoreEnvVariable(key string) (string, error) {
|
||||
res := c.envStore.Get(key)
|
||||
return res.(string), nil
|
||||
}
|
||||
|
||||
// GetBoolStoreEnvVariable to get the env variable from bool store object
|
||||
func (c *provider) GetBoolStoreEnvVariable(key string) (bool, error) {
|
||||
res := c.envStore.Get(key)
|
||||
return res.(bool), nil
|
||||
}
|
||||
|
||||
// GetSliceStoreEnvVariable to get the env variable from slice store object
|
||||
func (c *provider) GetSliceStoreEnvVariable(key string) ([]string, error) {
|
||||
res := c.envStore.Get(key)
|
||||
resSlice := utils.ConvertInterfaceToStringSlice(res)
|
||||
return resSlice, nil
|
||||
}
|
@@ -11,7 +11,22 @@ type Provider interface {
|
||||
// SetState sets the login state (key, value form) in the session store
|
||||
SetState(key, state string) error
|
||||
// GetState returns the state from the session store
|
||||
GetState(key string) string
|
||||
GetState(key string) (string, error)
|
||||
// RemoveState removes the social login state from the session store
|
||||
RemoveState(key string) error
|
||||
|
||||
// methods for env store
|
||||
|
||||
// UpdateEnvStore to update the whole env store object
|
||||
UpdateEnvStore(store map[string]interface{}) error
|
||||
// GetEnvStore() returns the env store object
|
||||
GetEnvStore() (map[string]interface{}, error)
|
||||
// UpdateEnvVariable to update the particular env variable
|
||||
UpdateEnvVariable(key string, value interface{}) error
|
||||
// GetStringStoreEnvVariable to get the string env variable from env store
|
||||
GetStringStoreEnvVariable(key string) (string, error)
|
||||
// GetBoolStoreEnvVariable to get the bool env variable from env store
|
||||
GetBoolStoreEnvVariable(key string) (bool, error)
|
||||
// GetSliceStoreEnvVariable to get the string slice env variable from env store
|
||||
GetSliceStoreEnvVariable(key string) ([]string, error)
|
||||
}
|
||||
|
@@ -1,85 +0,0 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// ClearStore clears the redis store for authorizer related tokens
|
||||
func (c *provider) ClearStore() error {
|
||||
err := c.store.Del(c.ctx, "authorizer_*").Err()
|
||||
if err != nil {
|
||||
log.Debug("Error clearing redis store: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetUserSessions returns all the user session token from the redis store.
|
||||
func (c *provider) GetUserSessions(userID string) map[string]string {
|
||||
data, err := c.store.HGetAll(c.ctx, "*").Result()
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
}
|
||||
|
||||
res := map[string]string{}
|
||||
for k, v := range data {
|
||||
split := strings.Split(v, "@")
|
||||
if split[1] == userID {
|
||||
res[k] = split[0]
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// DeleteAllUserSession deletes all the user session from redis
|
||||
func (c *provider) DeleteAllUserSession(userId string) error {
|
||||
sessions := c.GetUserSessions(userId)
|
||||
for k, v := range sessions {
|
||||
if k == "token" {
|
||||
err := c.store.Del(c.ctx, v).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error deleting redis token: ", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetState sets the state in redis store.
|
||||
func (c *provider) SetState(key, value string) error {
|
||||
err := c.store.Set(c.ctx, "authorizer_"+key, value, 0).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error saving redis token: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetState gets the state from redis store.
|
||||
func (c *provider) GetState(key string) string {
|
||||
state := ""
|
||||
state, err := c.store.Get(c.ctx, "authorizer_"+key).Result()
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
}
|
||||
|
||||
return state
|
||||
}
|
||||
|
||||
// RemoveState removes the state from redis store.
|
||||
func (c *provider) RemoveState(key string) error {
|
||||
err := c.store.Del(c.ctx, "authorizer_"+key).Err()
|
||||
if err != nil {
|
||||
log.Fatalln("Error deleting redis token: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
162
server/memorystore/providers/redis/store.go
Normal file
162
server/memorystore/providers/redis/store.go
Normal file
@@ -0,0 +1,162 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var (
|
||||
// session store prefix
|
||||
sessionStorePrefix = "authorizer_session_"
|
||||
// env store prefix
|
||||
envStorePrefix = "authorizer_env_"
|
||||
)
|
||||
|
||||
// ClearStore clears the redis store for authorizer related tokens
|
||||
func (c *provider) ClearStore() error {
|
||||
err := c.store.Del(c.ctx, sessionStorePrefix+"*").Err()
|
||||
if err != nil {
|
||||
log.Debug("Error clearing redis store: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetUserSessions returns all the user session token from the redis store.
|
||||
func (c *provider) GetUserSessions(userID string) map[string]string {
|
||||
data, err := c.store.HGetAll(c.ctx, "*").Result()
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
}
|
||||
|
||||
res := map[string]string{}
|
||||
for k, v := range data {
|
||||
split := strings.Split(v, "@")
|
||||
if split[1] == userID {
|
||||
res[k] = split[0]
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// DeleteAllUserSession deletes all the user session from redis
|
||||
func (c *provider) DeleteAllUserSession(userId string) error {
|
||||
sessions := c.GetUserSessions(userId)
|
||||
for k, v := range sessions {
|
||||
if k == "token" {
|
||||
err := c.store.Del(c.ctx, v).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error deleting redis token: ", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetState sets the state in redis store.
|
||||
func (c *provider) SetState(key, value string) error {
|
||||
err := c.store.Set(c.ctx, sessionStorePrefix+key, value, 0).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error saving redis token: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetState gets the state from redis store.
|
||||
func (c *provider) GetState(key string) (string, error) {
|
||||
var res string
|
||||
err := c.store.Get(c.ctx, sessionStorePrefix+key).Scan(&res)
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
}
|
||||
|
||||
return res, err
|
||||
}
|
||||
|
||||
// RemoveState removes the state from redis store.
|
||||
func (c *provider) RemoveState(key string) error {
|
||||
err := c.store.Del(c.ctx, sessionStorePrefix+key).Err()
|
||||
if err != nil {
|
||||
log.Fatalln("Error deleting redis token: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateEnvStore to update the whole env store object
|
||||
func (c *provider) UpdateEnvStore(store map[string]interface{}) error {
|
||||
for key, value := range store {
|
||||
err := c.store.Set(c.ctx, envStorePrefix+key, value, 0).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error saving redis token: ", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetEnvStore returns the whole env store object
|
||||
func (c *provider) GetEnvStore() (map[string]interface{}, error) {
|
||||
var res map[string]interface{}
|
||||
err := c.store.HGetAll(c.ctx, envStorePrefix+"*").Scan(res)
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// UpdateEnvVariable to update the particular env variable
|
||||
func (c *provider) UpdateEnvVariable(key string, value interface{}) error {
|
||||
err := c.store.Set(c.ctx, envStorePrefix+key, value, 0).Err()
|
||||
if err != nil {
|
||||
log.Debug("Error saving redis token: ", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetStringStoreEnvVariable to get the string env variable from env store
|
||||
func (c *provider) GetStringStoreEnvVariable(key string) (string, error) {
|
||||
var res string
|
||||
err := c.store.Get(c.ctx, envStorePrefix+key).Scan(&res)
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// GetBoolStoreEnvVariable to get the bool env variable from env store
|
||||
func (c *provider) GetBoolStoreEnvVariable(key string) (bool, error) {
|
||||
var res bool
|
||||
err := c.store.Get(c.ctx, envStorePrefix+key).Scan(res)
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// GetSliceStoreEnvVariable to get the string slice env variable from env store
|
||||
func (c *provider) GetSliceStoreEnvVariable(key string) ([]string, error) {
|
||||
var res []string
|
||||
err := c.store.Get(c.ctx, envStorePrefix+key).Scan(&res)
|
||||
if err != nil {
|
||||
log.Debug("error getting token from redis store: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
@@ -10,7 +10,6 @@ import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/envstore"
|
||||
"github.com/authorizerdev/authorizer/server/utils"
|
||||
)
|
||||
|
||||
@@ -96,7 +95,7 @@ func InitRequiredEnv() error {
|
||||
}
|
||||
}
|
||||
|
||||
if strings.TrimSpace(dbURL) == "" && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL) == "" {
|
||||
if strings.TrimSpace(dbURL) == "" {
|
||||
if utils.ARG_DB_URL != nil && *utils.ARG_DB_URL != "" {
|
||||
dbURL = strings.TrimSpace(*utils.ARG_DB_URL)
|
||||
}
|
||||
|
Reference in New Issue
Block a user