Compare commits

..

5 Commits

Author SHA1 Message Date
Lakhan Samani
aff9d3af20 Merge pull request #187 from authorizerdev/fix-parallel-access
fix: parallel access of env vars
2022-06-09 23:13:34 +05:30
Lakhan Samani
02eb1d6677 fix: add const for test env 2022-06-09 23:13:22 +05:30
Lakhan Samani
78a673e4ad fix: fix parallel access of env vars 2022-06-08 09:50:30 +05:30
Lakhan Samani
e0d8644264 fix: role validation while signup 2022-06-07 08:00:30 +05:30
Lakhan Samani
d8c662eaad fix: dashboard roles 2022-06-07 07:30:01 +05:30
8 changed files with 87 additions and 90 deletions

View File

@@ -1,67 +1,68 @@
import React from "react"; import React from 'react';
import { Flex, Stack, Center, Text, useMediaQuery } from "@chakra-ui/react"; import { Flex, Stack, Center, Text, useMediaQuery } from '@chakra-ui/react';
import { ArrayInputType } from "../../constants"; import { ArrayInputType } from '../../constants';
import InputField from "../InputField"; import InputField from '../InputField';
const Roles = ({ variables, setVariables }: any) => { const Roles = ({ variables, setVariables }: any) => {
const [isNotSmallerScreen] = useMediaQuery("(min-width:600px)"); const [isNotSmallerScreen] = useMediaQuery('(min-width:600px)');
return (
<div> return (
{" "} <div>
<Text fontSize="md" paddingTop="2%" fontWeight="bold" mb={5}> {' '}
Roles <Text fontSize="md" paddingTop="2%" fontWeight="bold" mb={5}>
</Text> Roles
<Stack spacing={6} padding="2% 0%"> </Text>
<Flex direction={isNotSmallerScreen ? "row" : "column"}> <Stack spacing={6} padding="2% 0%">
<Flex w="30%" justifyContent="start" alignItems="center"> <Flex direction={isNotSmallerScreen ? 'row' : 'column'}>
<Text fontSize="sm">Roles:</Text> <Flex w="30%" justifyContent="start" alignItems="center">
</Flex> <Text fontSize="sm">Roles:</Text>
<Center </Flex>
w={isNotSmallerScreen ? "70%" : "100%"} <Center
mt={isNotSmallerScreen ? "0" : "2"} w={isNotSmallerScreen ? '70%' : '100%'}
overflow="hidden" mt={isNotSmallerScreen ? '0' : '2'}
> overflow="hidden"
<InputField >
borderRadius={7} <InputField
variables={variables} borderRadius={7}
setVariables={setVariables} variables={variables}
inputType={ArrayInputType.ROLES} setVariables={setVariables}
/> inputType={ArrayInputType.ROLES}
</Center> />
</Flex> </Center>
<Flex direction={isNotSmallerScreen ? "row" : "column"}> </Flex>
<Flex w="30%" justifyContent="start" alignItems="center"> <Flex direction={isNotSmallerScreen ? 'row' : 'column'}>
<Text fontSize="sm">Default Roles:</Text> <Flex w="30%" justifyContent="start" alignItems="center">
</Flex> <Text fontSize="sm">Default Roles:</Text>
<Center </Flex>
w={isNotSmallerScreen ? "70%" : "100%"} <Center
mt={isNotSmallerScreen ? "0" : "2"} w={isNotSmallerScreen ? '70%' : '100%'}
> mt={isNotSmallerScreen ? '0' : '2'}
<InputField >
variables={variables} <InputField
setVariables={setVariables} variables={variables}
inputType={ArrayInputType.DEFAULT_ROLES} setVariables={setVariables}
/> inputType={ArrayInputType.DEFAULT_ROLES}
</Center> />
</Flex> </Center>
<Flex direction={isNotSmallerScreen ? "row" : "column"}> </Flex>
<Flex w="30%" justifyContent="start" alignItems="center"> <Flex direction={isNotSmallerScreen ? 'row' : 'column'}>
<Text fontSize="sm">Protected Roles:</Text> <Flex w="30%" justifyContent="start" alignItems="center">
</Flex> <Text fontSize="sm">Protected Roles:</Text>
<Center </Flex>
w={isNotSmallerScreen ? "70%" : "100%"} <Center
mt={isNotSmallerScreen ? "0" : "2"} w={isNotSmallerScreen ? '70%' : '100%'}
> mt={isNotSmallerScreen ? '0' : '2'}
<InputField >
variables={variables} <InputField
setVariables={setVariables} variables={variables}
inputType={ArrayInputType.PROTECTED_ROLES} setVariables={setVariables}
/> inputType={ArrayInputType.PROTECTED_ROLES}
</Center> />
</Flex> </Center>
</Stack> </Flex>
</div> </Stack>
); </div>
);
}; };
export default Roles; export default Roles;

View File

@@ -30,6 +30,7 @@ export const EnvVariablesQuery = `
LINKEDIN_CLIENT_SECRET, LINKEDIN_CLIENT_SECRET,
DEFAULT_ROLES, DEFAULT_ROLES,
PROTECTED_ROLES, PROTECTED_ROLES,
ROLES,
JWT_TYPE, JWT_TYPE,
JWT_SECRET, JWT_SECRET,
JWT_ROLE_CLAIM, JWT_ROLE_CLAIM,

View File

@@ -3,6 +3,8 @@ package constants
var VERSION = "0.0.1" var VERSION = "0.0.1"
const ( const (
// TestEnv is used for testing
TestEnv = "test"
// EnvKeyEnv key for env variable ENV // EnvKeyEnv key for env variable ENV
EnvKeyEnv = "ENV" EnvKeyEnv = "ENV"
// EnvKeyEnvPath key for cli arg variable ENV_PATH // EnvKeyEnvPath key for cli arg variable ENV_PATH

View File

@@ -37,7 +37,7 @@ func SendMail(to []string, Subject, bodyMessage string) error {
if err != nil { if err != nil {
return err return err
} }
if envKey == "test" { if envKey == constants.TestEnv {
return nil return nil
} }
m := gomail.NewMessage() m := gomail.NewMessage()

View File

@@ -3,6 +3,8 @@ package inmemory
import ( import (
"os" "os"
"sync" "sync"
"github.com/authorizerdev/authorizer/server/constants"
) )
// EnvStore struct to store the env variables // EnvStore struct to store the env variables
@@ -13,7 +15,7 @@ type EnvStore struct {
// UpdateEnvStore to update the whole env store object // UpdateEnvStore to update the whole env store object
func (e *EnvStore) UpdateStore(store map[string]interface{}) { func (e *EnvStore) UpdateStore(store map[string]interface{}) {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
e.mutex.Lock() e.mutex.Lock()
defer e.mutex.Unlock() defer e.mutex.Unlock()
} }
@@ -26,26 +28,17 @@ func (e *EnvStore) UpdateStore(store map[string]interface{}) {
// GetStore returns the env store // GetStore returns the env store
func (e *EnvStore) GetStore() map[string]interface{} { func (e *EnvStore) GetStore() map[string]interface{} {
if os.Getenv("ENV") != "test" {
e.mutex.Lock()
defer e.mutex.Unlock()
}
return e.store return e.store
} }
// Get returns the value of the key in evn store // Get returns the value of the key in evn store
func (e *EnvStore) Get(key string) interface{} { func (e *EnvStore) Get(key string) interface{} {
if os.Getenv("ENV") != "test" {
e.mutex.Lock()
defer e.mutex.Unlock()
}
return e.store[key] return e.store[key]
} }
// Set sets the value of the key in env store // Set sets the value of the key in env store
func (e *EnvStore) Set(key string, value interface{}) { func (e *EnvStore) Set(key string, value interface{}) {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
e.mutex.Lock() e.mutex.Lock()
defer e.mutex.Unlock() defer e.mutex.Unlock()
} }

View File

@@ -4,11 +4,13 @@ import (
"fmt" "fmt"
"os" "os"
"strings" "strings"
"github.com/authorizerdev/authorizer/server/constants"
) )
// ClearStore clears the in-memory store. // ClearStore clears the in-memory store.
func (c *provider) ClearStore() error { func (c *provider) ClearStore() error {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
c.mutex.Lock() c.mutex.Lock()
defer c.mutex.Unlock() defer c.mutex.Unlock()
} }
@@ -19,10 +21,6 @@ func (c *provider) ClearStore() error {
// GetUserSessions returns all the user session token from the in-memory store. // GetUserSessions returns all the user session token from the in-memory store.
func (c *provider) GetUserSessions(userId string) map[string]string { func (c *provider) GetUserSessions(userId string) map[string]string {
if os.Getenv("ENV") != "test" {
c.mutex.Lock()
defer c.mutex.Unlock()
}
res := map[string]string{} res := map[string]string{}
for k, v := range c.stateStore { for k, v := range c.stateStore {
split := strings.Split(v, "@") split := strings.Split(v, "@")
@@ -36,7 +34,7 @@ func (c *provider) GetUserSessions(userId string) map[string]string {
// DeleteAllUserSession deletes all the user sessions from in-memory store. // DeleteAllUserSession deletes all the user sessions from in-memory store.
func (c *provider) DeleteAllUserSession(userId string) error { func (c *provider) DeleteAllUserSession(userId string) error {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
c.mutex.Lock() c.mutex.Lock()
defer c.mutex.Unlock() defer c.mutex.Unlock()
} }
@@ -50,7 +48,7 @@ func (c *provider) DeleteAllUserSession(userId string) error {
// SetState sets the state in the in-memory store. // SetState sets the state in the in-memory store.
func (c *provider) SetState(key, state string) error { func (c *provider) SetState(key, state string) error {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
c.mutex.Lock() c.mutex.Lock()
defer c.mutex.Unlock() defer c.mutex.Unlock()
} }
@@ -61,11 +59,6 @@ func (c *provider) SetState(key, state string) error {
// GetState gets the state from the in-memory store. // GetState gets the state from the in-memory store.
func (c *provider) GetState(key string) (string, error) { func (c *provider) GetState(key string) (string, error) {
if os.Getenv("ENV") != "test" {
c.mutex.Lock()
defer c.mutex.Unlock()
}
state := "" state := ""
if stateVal, ok := c.stateStore[key]; ok { if stateVal, ok := c.stateStore[key]; ok {
state = stateVal state = stateVal
@@ -76,7 +69,7 @@ func (c *provider) GetState(key string) (string, error) {
// RemoveState removes the state from the in-memory store. // RemoveState removes the state from the in-memory store.
func (c *provider) RemoveState(key string) error { func (c *provider) RemoveState(key string) error {
if os.Getenv("ENV") != "test" { if os.Getenv("ENV") != constants.TestEnv {
c.mutex.Lock() c.mutex.Lock()
defer c.mutex.Unlock() defer c.mutex.Unlock()
} }

View File

@@ -147,7 +147,14 @@ func EnvResolver(ctx context.Context) (*model.Env, error) {
res.AllowedOrigins = strings.Split(store[constants.EnvKeyAllowedOrigins].(string), ",") res.AllowedOrigins = strings.Split(store[constants.EnvKeyAllowedOrigins].(string), ",")
res.Roles = strings.Split(store[constants.EnvKeyRoles].(string), ",") res.Roles = strings.Split(store[constants.EnvKeyRoles].(string), ",")
res.DefaultRoles = strings.Split(store[constants.EnvKeyDefaultRoles].(string), ",") res.DefaultRoles = strings.Split(store[constants.EnvKeyDefaultRoles].(string), ",")
res.ProtectedRoles = strings.Split(store[constants.EnvKeyProtectedRoles].(string), ",") // since protected role is optional default split gives array with empty string
protectedRoles := strings.Split(store[constants.EnvKeyProtectedRoles].(string), ",")
res.ProtectedRoles = []string{}
for _, role := range protectedRoles {
if strings.Trim(role, " ") != "" {
res.ProtectedRoles = append(res.ProtectedRoles, strings.Trim(role, " "))
}
}
// bool vars // bool vars
res.DisableEmailVerification = store[constants.EnvKeyDisableEmailVerification].(bool) res.DisableEmailVerification = store[constants.EnvKeyDisableEmailVerification].(bool)

View File

@@ -100,7 +100,7 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR
} else { } else {
roles = strings.Split(rolesString, ",") roles = strings.Split(rolesString, ",")
} }
if !validators.IsValidRoles(roles, params.Roles) { if !validators.IsValidRoles(params.Roles, roles) {
log.Debug("Invalid roles: ", params.Roles) log.Debug("Invalid roles: ", params.Roles)
return res, fmt.Errorf(`invalid roles`) return res, fmt.Errorf(`invalid roles`)
} else { } else {