diff --git a/.env.sample b/.env.sample
index c3ca441..6f9874b 100644
--- a/.env.sample
+++ b/.env.sample
@@ -1,3 +1,4 @@
+ENV=production
DATABASE_URL=data.db
DATABASE_TYPE=sqlite
CUSTOM_ACCESS_TOKEN_SCRIPT="function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"
\ No newline at end of file
diff --git a/.env.test b/.env.test
new file mode 100644
index 0000000..0df0238
--- /dev/null
+++ b/.env.test
@@ -0,0 +1,9 @@
+ENV=test
+DATABASE_URL=test.db
+DATABASE_TYPE=sqlite
+CUSTOM_ACCESS_TOKEN_SCRIPT="function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"
+SMTP_HOST=smtp.mailtrap.io
+SMTP_PORT=2525
+SMTP_USERNAME=test
+SMTP_PASSWORD=test
+SENDER_EMAIL="info@authorizer.dev"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 8b70df4..7fdb338 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ dashboard/build
build
.env
data.db
+test.db
.DS_Store
.env.local
*.tar.gz
diff --git a/Makefile b/Makefile
index 635edec..c883a9c 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ build-dashboard:
clean:
rm -rf build
test:
- cd server && go clean --testcache && go test -v ./test
+ rm -rf server/test/test.db && rm -rf test.db && cd server && go clean --testcache && go test -p 1 -v ./test
generate:
cd server && go get github.com/99designs/gqlgen/cmd@v0.14.0 && go run github.com/99designs/gqlgen generate
\ No newline at end of file
diff --git a/dashboard/src/components/EnvComponents/DatabaseCredentials.tsx b/dashboard/src/components/EnvComponents/DatabaseCredentials.tsx
index 12c85e1..510b43c 100644
--- a/dashboard/src/components/EnvComponents/DatabaseCredentials.tsx
+++ b/dashboard/src/components/EnvComponents/DatabaseCredentials.tsx
@@ -1,88 +1,89 @@
-import React from "react";
-import { Flex, Stack, Center, Text, useMediaQuery } from "@chakra-ui/react";
+import React from 'react';
+import { Flex, Stack, Center, Text, useMediaQuery } from '@chakra-ui/react';
-import InputField from "../../components/InputField";
-import { TextInputType } from "../../constants";
+import InputField from '../../components/InputField';
+import { TextInputType } from '../../constants';
const DatabaseCredentials = ({ variables, setVariables }: any) => {
- const [isNotSmallerScreen] = useMediaQuery("(min-width:600px)");
- return (
-
- {" "}
-
- Database Credentials
-
-
-
- Note: Database related environment variables cannot be updated from
- dashboard :(
-
-
-
- DataBase Name:
-
-
-
-
-
-
-
- DataBase Type:
-
-
-
-
-
-
-
- DataBase URL:
-
-
-
-
-
-
-
- );
+ const [isNotSmallerScreen] = useMediaQuery('(min-width:600px)');
+ return (
+
+ {' '}
+
+ Database Credentials
+
+
+
+ Note: Database related environment variables cannot be updated from
+ dashboard. Please use .env file or OS environment variables to update
+ it.
+
+
+
+ DataBase Name:
+
+
+
+
+
+
+
+ DataBase Type:
+
+
+
+
+
+
+
+ DataBase URL:
+
+
+
+
+
+
+
+ );
};
-export default DatabaseCredentials;
\ No newline at end of file
+export default DatabaseCredentials;
diff --git a/dashboard/src/components/EnvComponents/UICustomization.tsx b/dashboard/src/components/EnvComponents/Features.tsx
similarity index 95%
rename from dashboard/src/components/EnvComponents/UICustomization.tsx
rename to dashboard/src/components/EnvComponents/Features.tsx
index 756c739..aa5ed33 100644
--- a/dashboard/src/components/EnvComponents/UICustomization.tsx
+++ b/dashboard/src/components/EnvComponents/Features.tsx
@@ -3,7 +3,7 @@ import { Flex, Stack, Text } from '@chakra-ui/react';
import InputField from '../InputField';
import { SwitchInputType } from '../../constants';
-const UICustomization = ({ variables, setVariables }: any) => {
+const Features = ({ variables, setVariables }: any) => {
return (
{' '}
@@ -76,4 +76,4 @@ const UICustomization = ({ variables, setVariables }: any) => {
);
};
-export default UICustomization;
+export default Features;
diff --git a/dashboard/src/components/EnvComponents/SessionStorage.tsx b/dashboard/src/components/EnvComponents/SessionStorage.tsx
index 8570f47..1aee4e2 100644
--- a/dashboard/src/components/EnvComponents/SessionStorage.tsx
+++ b/dashboard/src/components/EnvComponents/SessionStorage.tsx
@@ -1,36 +1,42 @@
-import React from "react";
-import { Flex, Stack, Center, Text, useMediaQuery } from "@chakra-ui/react";
-import InputField from "../InputField";
+import React from 'react';
+import { Flex, Stack, Center, Text, useMediaQuery } from '@chakra-ui/react';
+import InputField from '../InputField';
const SessionStorage = ({ variables, setVariables, RedisURL }: any) => {
- const [isNotSmallerScreen] = useMediaQuery("(min-width:600px)");
- return (
-
- {" "}
-
- Session Storage
-
-
-
-
- Redis URL:
-
-
-
-
-
-
-
- );
+ const [isNotSmallerScreen] = useMediaQuery('(min-width:600px)');
+ return (
+
+ {' '}
+
+ Session Storage
+
+
+ Note: Redis related environment variables cannot be updated from
+ dashboard. Please use .env file or OS environment variables to update
+ it.
+
+
+
+
+ Redis URL:
+
+
+
+
+
+
+
+ );
};
-export default SessionStorage;
\ No newline at end of file
+export default SessionStorage;
diff --git a/dashboard/src/components/InviteMembersModal.tsx b/dashboard/src/components/InviteMembersModal.tsx
index 2878722..9ede01b 100644
--- a/dashboard/src/components/InviteMembersModal.tsx
+++ b/dashboard/src/components/InviteMembersModal.tsx
@@ -22,7 +22,7 @@ import {
InputRightElement,
Text,
Link,
- Tooltip
+ Tooltip,
} from '@chakra-ui/react';
import { useClient } from 'urql';
import { FaUserPlus, FaMinusCircle, FaPlus, FaUpload } from 'react-icons/fa';
@@ -187,22 +187,22 @@ const InviteMembersModal = ({
isDisabled={disabled}
size="sm"
>
-
- {disabled ? (
-
- Invite Members
-
- ) : (
- "Invite Members"
- )}
- {" "}
+
+ {disabled ? (
+
+ Invite Members
+
+ ) : (
+ 'Invite Members'
+ )}
+ {' '}
diff --git a/dashboard/src/components/Menu.tsx b/dashboard/src/components/Menu.tsx
index 7822062..8593bb0 100644
--- a/dashboard/src/components/Menu.tsx
+++ b/dashboard/src/components/Menu.tsx
@@ -98,9 +98,9 @@ const LinkItems: Array = [
},
{ name: 'Access Token', icon: SiOpenaccess, route: '/access-token' },
{
- name: 'UI Customization',
+ name: 'Features',
icon: BiCustomize,
- route: '/ui-customization',
+ route: '/features',
},
{ name: 'Database', icon: RiDatabase2Line, route: '/db-cred' },
{
diff --git a/dashboard/src/constants.ts b/dashboard/src/constants.ts
index 3b9986f..e0f9d3d 100644
--- a/dashboard/src/constants.ts
+++ b/dashboard/src/constants.ts
@@ -62,6 +62,7 @@ export const SwitchInputType = {
DISABLE_EMAIL_VERIFICATION: 'DISABLE_EMAIL_VERIFICATION',
DISABLE_BASIC_AUTHENTICATION: 'DISABLE_BASIC_AUTHENTICATION',
DISABLE_SIGN_UP: 'DISABLE_SIGN_UP',
+ DISABLE_REDIS_FOR_ENV: 'DISABLE_REDIS_FOR_ENV',
};
export const DateInputType = {
@@ -138,7 +139,7 @@ export const envSubViews = {
WHITELIST_VARIABLES: 'whitelist-variables',
ORGANIZATION_INFO: 'organization-info',
ACCESS_TOKEN: 'access-token',
- UI_CUSTOMIZATION: 'ui-customization',
+ FEATURES: 'features',
ADMIN_SECRET: 'admin-secret',
DB_CRED: 'db-cred',
};
diff --git a/dashboard/src/graphql/queries/index.ts b/dashboard/src/graphql/queries/index.ts
index 1adf02c..cd55475 100644
--- a/dashboard/src/graphql/queries/index.ts
+++ b/dashboard/src/graphql/queries/index.ts
@@ -49,6 +49,7 @@ export const EnvVariablesQuery = `
DISABLE_EMAIL_VERIFICATION,
DISABLE_BASIC_AUTHENTICATION,
DISABLE_SIGN_UP,
+ DISABLE_REDIS_FOR_ENV,
CUSTOM_ACCESS_TOKEN_SCRIPT,
DATABASE_NAME,
DATABASE_TYPE,
diff --git a/dashboard/src/pages/Environment.tsx b/dashboard/src/pages/Environment.tsx
index 78f79c4..169c62f 100644
--- a/dashboard/src/pages/Environment.tsx
+++ b/dashboard/src/pages/Environment.tsx
@@ -25,7 +25,7 @@ import EmailConfigurations from '../components/EnvComponents/EmailConfiguration'
import DomainWhiteListing from '../components/EnvComponents/DomainWhitelisting';
import OrganizationInfo from '../components/EnvComponents/OrganizationInfo';
import AccessToken from '../components/EnvComponents/AccessToken';
-import UICustomization from '../components/EnvComponents/UICustomization';
+import Features from '../components/EnvComponents/Features';
import SecurityAdminSecret from '../components/EnvComponents/SecurityAdminSecret';
import DatabaseCredentials from '../components/EnvComponents/DatabaseCredentials';
@@ -259,12 +259,9 @@ const Environment = () => {
setVariables={setEnvVariables}
/>
);
- case envSubViews.UI_CUSTOMIZATION:
+ case envSubViews.FEATURES:
return (
-
+
);
case envSubViews.ADMIN_SECRET:
return (
diff --git a/server/cli/cli.go b/server/cli/cli.go
new file mode 100644
index 0000000..391d632
--- /dev/null
+++ b/server/cli/cli.go
@@ -0,0 +1,14 @@
+package cli
+
+var (
+ // ARG_DB_URL is the cli arg variable for the database url
+ ARG_DB_URL *string
+ // ARG_DB_TYPE is the cli arg variable for the database type
+ ARG_DB_TYPE *string
+ // ARG_ENV_FILE is the cli arg variable for the env file
+ ARG_ENV_FILE *string
+ // ARG_LOG_LEVEL is the cli arg variable for the log level
+ ARG_LOG_LEVEL *string
+ // ARG_REDIS_URL is the cli arg variable for the redis url
+ ARG_REDIS_URL *string
+)
diff --git a/server/constants/cookie.go b/server/constants/cookie.go
new file mode 100644
index 0000000..71320a9
--- /dev/null
+++ b/server/constants/cookie.go
@@ -0,0 +1,8 @@
+package constants
+
+const (
+ // AppCookieName is the name of the cookie that is used to store the application token
+ AppCookieName = "cookie"
+ // AdminCookieName is the name of the cookie that is used to store the admin token
+ AdminCookieName = "authorizer-admin"
+)
diff --git a/server/constants/env.go b/server/constants/env.go
index b73048b..4f02e64 100644
--- a/server/constants/env.go
+++ b/server/constants/env.go
@@ -5,11 +5,11 @@ var VERSION = "0.0.1"
const (
// Envstore identifier
// StringStore string store identifier
- StringStoreIdentifier = "stringStore"
- // BoolStore bool store identifier
- BoolStoreIdentifier = "boolStore"
- // SliceStore slice store identifier
- SliceStoreIdentifier = "sliceStore"
+ // StringStoreIdentifier = "stringStore"
+ // // BoolStore bool store identifier
+ // BoolStoreIdentifier = "boolStore"
+ // // SliceStore slice store identifier
+ // SliceStoreIdentifier = "sliceStore"
// EnvKeyEnv key for env variable ENV
EnvKeyEnv = "ENV"
@@ -19,7 +19,6 @@ const (
EnvKeyAuthorizerURL = "AUTHORIZER_URL"
// EnvKeyPort key for env variable PORT
EnvKeyPort = "PORT"
-
// EnvKeyAccessTokenExpiryTime key for env variable ACCESS_TOKEN_EXPIRY_TIME
EnvKeyAccessTokenExpiryTime = "ACCESS_TOKEN_EXPIRY_TIME"
// EnvKeyAdminSecret key for env variable ADMIN_SECRET
@@ -62,34 +61,12 @@ const (
EnvKeyJwtPrivateKey = "JWT_PRIVATE_KEY"
// EnvKeyJwtPublicKey key for env variable JWT_PUBLIC_KEY
EnvKeyJwtPublicKey = "JWT_PUBLIC_KEY"
- // EnvKeyAllowedOrigins key for env variable ALLOWED_ORIGINS
- EnvKeyAllowedOrigins = "ALLOWED_ORIGINS"
// EnvKeyAppURL key for env variable APP_URL
EnvKeyAppURL = "APP_URL"
// EnvKeyRedisURL key for env variable REDIS_URL
EnvKeyRedisURL = "REDIS_URL"
- // EnvKeyCookieName key for env variable COOKIE_NAME
- EnvKeyCookieName = "COOKIE_NAME"
- // EnvKeyAdminCookieName key for env variable ADMIN_COOKIE_NAME
- EnvKeyAdminCookieName = "ADMIN_COOKIE_NAME"
// EnvKeyResetPasswordURL key for env variable RESET_PASSWORD_URL
EnvKeyResetPasswordURL = "RESET_PASSWORD_URL"
- // EnvKeyDisableEmailVerification key for env variable DISABLE_EMAIL_VERIFICATION
- EnvKeyDisableEmailVerification = "DISABLE_EMAIL_VERIFICATION"
- // EnvKeyDisableBasicAuthentication key for env variable DISABLE_BASIC_AUTH
- EnvKeyDisableBasicAuthentication = "DISABLE_BASIC_AUTHENTICATION"
- // EnvKeyDisableMagicLinkLogin key for env variable DISABLE_MAGIC_LINK_LOGIN
- EnvKeyDisableMagicLinkLogin = "DISABLE_MAGIC_LINK_LOGIN"
- // EnvKeyDisableLoginPage key for env variable DISABLE_LOGIN_PAGE
- EnvKeyDisableLoginPage = "DISABLE_LOGIN_PAGE"
- // EnvKeyDisableSignUp key for env variable DISABLE_SIGN_UP
- EnvKeyDisableSignUp = "DISABLE_SIGN_UP"
- // EnvKeyRoles key for env variable ROLES
- EnvKeyRoles = "ROLES"
- // EnvKeyProtectedRoles key for env variable PROTECTED_ROLES
- EnvKeyProtectedRoles = "PROTECTED_ROLES"
- // EnvKeyDefaultRoles key for env variable DEFAULT_ROLES
- EnvKeyDefaultRoles = "DEFAULT_ROLES"
// EnvKeyJwtRoleClaim key for env variable JWT_ROLE_CLAIM
EnvKeyJwtRoleClaim = "JWT_ROLE_CLAIM"
// EnvKeyGoogleClientID key for env variable GOOGLE_CLIENT_ID
@@ -120,6 +97,30 @@ const (
EnvKeyEncryptionKey = "ENCRYPTION_KEY"
// EnvKeyJWK key for env variable JWK
EnvKeyJWK = "JWK"
+
+ // Boolean variables
// EnvKeyIsProd key for env variable IS_PROD
EnvKeyIsProd = "IS_PROD"
+ // EnvKeyDisableEmailVerification key for env variable DISABLE_EMAIL_VERIFICATION
+ EnvKeyDisableEmailVerification = "DISABLE_EMAIL_VERIFICATION"
+ // EnvKeyDisableBasicAuthentication key for env variable DISABLE_BASIC_AUTH
+ EnvKeyDisableBasicAuthentication = "DISABLE_BASIC_AUTHENTICATION"
+ // EnvKeyDisableMagicLinkLogin key for env variable DISABLE_MAGIC_LINK_LOGIN
+ EnvKeyDisableMagicLinkLogin = "DISABLE_MAGIC_LINK_LOGIN"
+ // EnvKeyDisableLoginPage key for env variable DISABLE_LOGIN_PAGE
+ EnvKeyDisableLoginPage = "DISABLE_LOGIN_PAGE"
+ // EnvKeyDisableSignUp key for env variable DISABLE_SIGN_UP
+ EnvKeyDisableSignUp = "DISABLE_SIGN_UP"
+ // EnvKeyDisableRedisForEnv key for env variable DISABLE_REDIS_FOR_ENV
+ EnvKeyDisableRedisForEnv = "DISABLE_REDIS_FOR_ENV"
+
+ // Slice variables
+ // EnvKeyRoles key for env variable ROLES
+ EnvKeyRoles = "ROLES"
+ // EnvKeyProtectedRoles key for env variable PROTECTED_ROLES
+ EnvKeyProtectedRoles = "PROTECTED_ROLES"
+ // EnvKeyDefaultRoles key for env variable DEFAULT_ROLES
+ EnvKeyDefaultRoles = "DEFAULT_ROLES"
+ // EnvKeyAllowedOrigins key for env variable ALLOWED_ORIGINS
+ EnvKeyAllowedOrigins = "ALLOWED_ORIGINS"
)
diff --git a/server/cookie/admin_cookie.go b/server/cookie/admin_cookie.go
index 58f2c56..6b64767 100644
--- a/server/cookie/admin_cookie.go
+++ b/server/cookie/admin_cookie.go
@@ -4,8 +4,7 @@ import (
"net/url"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
- "github.com/authorizerdev/authorizer/server/utils"
+ "github.com/authorizerdev/authorizer/server/parsers"
"github.com/gin-gonic/gin"
)
@@ -13,15 +12,14 @@ import (
func SetAdminCookie(gc *gin.Context, token string) {
secure := true
httpOnly := true
- hostname := utils.GetHost(gc)
- host, _ := utils.GetHostParts(hostname)
-
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), token, 3600, "/", host, secure, httpOnly)
+ hostname := parsers.GetHost(gc)
+ host, _ := parsers.GetHostParts(hostname)
+ gc.SetCookie(constants.AdminCookieName, token, 3600, "/", host, secure, httpOnly)
}
// GetAdminCookie gets the admin cookie from the request
func GetAdminCookie(gc *gin.Context) (string, error) {
- cookie, err := gc.Request.Cookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName))
+ cookie, err := gc.Request.Cookie(constants.AdminCookieName)
if err != nil {
return "", err
}
@@ -39,8 +37,7 @@ func GetAdminCookie(gc *gin.Context) (string, error) {
func DeleteAdminCookie(gc *gin.Context) {
secure := true
httpOnly := true
- hostname := utils.GetHost(gc)
- host, _ := utils.GetHostParts(hostname)
-
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), "", -1, "/", host, secure, httpOnly)
+ hostname := parsers.GetHost(gc)
+ host, _ := parsers.GetHostParts(hostname)
+ gc.SetCookie(constants.AdminCookieName, "", -1, "/", host, secure, httpOnly)
}
diff --git a/server/cookie/cookie.go b/server/cookie/cookie.go
index 54600af..73c60ea 100644
--- a/server/cookie/cookie.go
+++ b/server/cookie/cookie.go
@@ -5,8 +5,7 @@ import (
"net/url"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
- "github.com/authorizerdev/authorizer/server/utils"
+ "github.com/authorizerdev/authorizer/server/parsers"
"github.com/gin-gonic/gin"
)
@@ -14,9 +13,9 @@ import (
func SetSession(gc *gin.Context, sessionID string) {
secure := true
httpOnly := true
- hostname := utils.GetHost(gc)
- host, _ := utils.GetHostParts(hostname)
- domain := utils.GetDomainName(hostname)
+ hostname := parsers.GetHost(gc)
+ host, _ := parsers.GetHostParts(hostname)
+ domain := parsers.GetDomainName(hostname)
if domain != "localhost" {
domain = "." + domain
}
@@ -25,33 +24,33 @@ func SetSession(gc *gin.Context, sessionID string) {
year := 60 * 60 * 24 * 365
gc.SetSameSite(http.SameSiteNoneMode)
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"_session", sessionID, year, "/", host, secure, httpOnly)
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"_session_domain", sessionID, year, "/", domain, secure, httpOnly)
+ gc.SetCookie(constants.AppCookieName+"_session", sessionID, year, "/", host, secure, httpOnly)
+ gc.SetCookie(constants.AppCookieName+"_session_domain", sessionID, year, "/", domain, secure, httpOnly)
}
// DeleteSession sets session cookies to expire
func DeleteSession(gc *gin.Context) {
secure := true
httpOnly := true
- hostname := utils.GetHost(gc)
- host, _ := utils.GetHostParts(hostname)
- domain := utils.GetDomainName(hostname)
+ hostname := parsers.GetHost(gc)
+ host, _ := parsers.GetHostParts(hostname)
+ domain := parsers.GetDomainName(hostname)
if domain != "localhost" {
domain = "." + domain
}
gc.SetSameSite(http.SameSiteNoneMode)
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"_session", "", -1, "/", host, secure, httpOnly)
- gc.SetCookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"_session_domain", "", -1, "/", domain, secure, httpOnly)
+ gc.SetCookie(constants.AppCookieName+"_session", "", -1, "/", host, secure, httpOnly)
+ gc.SetCookie(constants.AppCookieName+"_session_domain", "", -1, "/", domain, secure, httpOnly)
}
// GetSession gets the session cookie from context
func GetSession(gc *gin.Context) (string, error) {
var cookie *http.Cookie
var err error
- cookie, err = gc.Request.Cookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName) + "_session")
+ cookie, err = gc.Request.Cookie(constants.AppCookieName + "_session")
if err != nil {
- cookie, err = gc.Request.Cookie(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName) + "_session_domain")
+ cookie, err = gc.Request.Cookie(constants.AppCookieName + "_session_domain")
if err != nil {
return "", err
}
diff --git a/server/crypto/aes.go b/server/crypto/aes.go
index 8d06ffb..422f694 100644
--- a/server/crypto/aes.go
+++ b/server/crypto/aes.go
@@ -7,14 +7,18 @@ import (
"io"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
var bytes = []byte{35, 46, 57, 24, 85, 35, 24, 74, 87, 35, 88, 98, 66, 32, 14, 0o5}
// EncryptAES method is to encrypt or hide any classified text
func EncryptAES(text string) (string, error) {
- key := []byte(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
+ k, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey)
+ if err != nil {
+ return "", err
+ }
+ key := []byte(k)
block, err := aes.NewCipher(key)
if err != nil {
return "", err
@@ -28,7 +32,11 @@ func EncryptAES(text string) (string, error) {
// DecryptAES method is to extract back the encrypted text
func DecryptAES(text string) (string, error) {
- key := []byte(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
+ k, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey)
+ if err != nil {
+ return "", err
+ }
+ key := []byte(k)
block, err := aes.NewCipher(key)
if err != nil {
return "", err
@@ -46,9 +54,13 @@ func DecryptAES(text string) (string, error) {
// EncryptAESEnv encrypts data using AES algorithm
// kept for the backward compatibility of env data encryption
func EncryptAESEnv(text []byte) ([]byte, error) {
- key := []byte(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
- c, err := aes.NewCipher(key)
var res []byte
+ k, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey)
+ if err != nil {
+ return res, err
+ }
+ key := []byte(k)
+ c, err := aes.NewCipher(key)
if err != nil {
return res, err
}
@@ -81,9 +93,13 @@ func EncryptAESEnv(text []byte) ([]byte, error) {
// DecryptAES decrypts data using AES algorithm
// Kept for the backward compatibility of env data decryption
func DecryptAESEnv(ciphertext []byte) ([]byte, error) {
- key := []byte(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
- c, err := aes.NewCipher(key)
var res []byte
+ k, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey)
+ if err != nil {
+ return res, err
+ }
+ key := []byte(k)
+ c, err := aes.NewCipher(key)
if err != nil {
return res, err
}
diff --git a/server/crypto/common.go b/server/crypto/common.go
index 35af515..91aed06 100644
--- a/server/crypto/common.go
+++ b/server/crypto/common.go
@@ -5,7 +5,7 @@ import (
"encoding/json"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"golang.org/x/crypto/bcrypt"
"gopkg.in/square/go-jose.v2"
)
@@ -37,20 +37,35 @@ func GetPubJWK(algo, keyID string, publicKey interface{}) (string, error) {
// this is called while initializing app / when env is updated
func GenerateJWKBasedOnEnv() (string, error) {
jwk := ""
- algo := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtType)
- clientID := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyClientID)
+ algo, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyJwtType)
+ if err != nil {
+ return jwk, err
+ }
+ clientID, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyClientID)
+ if err != nil {
+ return jwk, err
+ }
+
+ jwtSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)
+ if err != nil {
+ return jwk, err
+ }
- var err error
// check if jwt secret is provided
if IsHMACA(algo) {
- jwk, err = GetPubJWK(algo, clientID, []byte(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)))
+ jwk, err = GetPubJWK(algo, clientID, []byte(jwtSecret))
if err != nil {
return "", err
}
}
+ jwtPublicKey, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyJwtPublicKey)
+ if err != nil {
+ return jwk, err
+ }
+
if IsRSA(algo) {
- publicKeyInstance, err := ParseRsaPublicKeyFromPemStr(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtPublicKey))
+ publicKeyInstance, err := ParseRsaPublicKeyFromPemStr(jwtPublicKey)
if err != nil {
return "", err
}
@@ -62,7 +77,11 @@ func GenerateJWKBasedOnEnv() (string, error) {
}
if IsECDSA(algo) {
- publicKeyInstance, err := ParseEcdsaPublicKeyFromPemStr(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtPublicKey))
+ jwtPublicKey, err = memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyJwtPublicKey)
+ if err != nil {
+ return jwk, err
+ }
+ publicKeyInstance, err := ParseEcdsaPublicKeyFromPemStr(jwtPublicKey)
if err != nil {
return "", err
}
@@ -77,13 +96,16 @@ func GenerateJWKBasedOnEnv() (string, error) {
}
// EncryptEnvData is used to encrypt the env data
-func EncryptEnvData(data envstore.Store) (string, error) {
+func EncryptEnvData(data map[string]interface{}) (string, error) {
jsonBytes, err := json.Marshal(data)
if err != nil {
return "", err
}
- storeData := envstore.EnvStoreObj.GetEnvStoreClone()
+ storeData, err := memorystore.Provider.GetEnvStore()
+ if err != nil {
+ return "", err
+ }
err = json.Unmarshal(jsonBytes, &storeData)
if err != nil {
diff --git a/server/db/db.go b/server/db/db.go
index a93cc01..d41469f 100644
--- a/server/db/db.go
+++ b/server/db/db.go
@@ -9,7 +9,7 @@ import (
"github.com/authorizerdev/authorizer/server/db/providers/cassandradb"
"github.com/authorizerdev/authorizer/server/db/providers/mongodb"
"github.com/authorizerdev/authorizer/server/db/providers/sql"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
// Provider returns the current database provider
@@ -18,13 +18,15 @@ var Provider providers.Provider
func InitDB() error {
var err error
- isSQL := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeCassandraDB
- isArangoDB := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeArangodb
- isMongoDB := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeMongodb
- isCassandra := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeCassandraDB
+ envs := memorystore.RequiredEnvStoreObj.GetRequiredEnv()
+
+ isSQL := envs.DatabaseType != constants.DbTypeArangodb && envs.DatabaseType != constants.DbTypeMongodb && envs.DatabaseType != constants.DbTypeCassandraDB
+ isArangoDB := envs.DatabaseType == constants.DbTypeArangodb
+ isMongoDB := envs.DatabaseType == constants.DbTypeMongodb
+ isCassandra := envs.DatabaseType == constants.DbTypeCassandraDB
if isSQL {
- log.Info("Initializing SQL Driver for: ", envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType))
+ log.Info("Initializing SQL Driver for: ", envs.DatabaseType)
Provider, err = sql.NewProvider()
if err != nil {
log.Fatal("Failed to initialize SQL driver: ", err)
diff --git a/server/db/providers/arangodb/provider.go b/server/db/providers/arangodb/provider.go
index 92c007c..a9a8432 100644
--- a/server/db/providers/arangodb/provider.go
+++ b/server/db/providers/arangodb/provider.go
@@ -6,9 +6,8 @@ import (
"github.com/arangodb/go-driver"
arangoDriver "github.com/arangodb/go-driver"
"github.com/arangodb/go-driver/http"
- "github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
type provider struct {
@@ -22,8 +21,9 @@ type provider struct {
// NewProvider to initialize arangodb connection
func NewProvider() (*provider, error) {
ctx := context.Background()
+ dbURL := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseURL
conn, err := http.NewConnection(http.ConnectionConfig{
- Endpoints: []string{envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)},
+ Endpoints: []string{dbURL},
})
if err != nil {
return nil, err
@@ -37,16 +37,16 @@ func NewProvider() (*provider, error) {
}
var arangodb driver.Database
-
- arangodb_exists, err := arangoClient.DatabaseExists(nil, envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName))
+ dbName := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseName
+ arangodb_exists, err := arangoClient.DatabaseExists(nil, dbName)
if arangodb_exists {
- arangodb, err = arangoClient.Database(nil, envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName))
+ arangodb, err = arangoClient.Database(nil, dbName)
if err != nil {
return nil, err
}
} else {
- arangodb, err = arangoClient.CreateDatabase(nil, envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName), nil)
+ arangodb, err = arangoClient.CreateDatabase(nil, dbName, nil)
if err != nil {
return nil, err
}
diff --git a/server/db/providers/arangodb/user.go b/server/db/providers/arangodb/user.go
index fc466a4..315a827 100644
--- a/server/db/providers/arangodb/user.go
+++ b/server/db/providers/arangodb/user.go
@@ -3,15 +3,14 @@ package arangodb
import (
"context"
"fmt"
- "strings"
"time"
"github.com/arangodb/go-driver"
arangoDriver "github.com/arangodb/go-driver"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
"github.com/authorizerdev/authorizer/server/graph/model"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/google/uuid"
)
@@ -22,7 +21,11 @@ func (p *provider) AddUser(user models.User) (models.User, error) {
}
if user.Roles == "" {
- user.Roles = strings.Join(envstore.EnvStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
+ defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles)
+ if err != nil {
+ return user, err
+ }
+ user.Roles = defaultRoles
}
user.CreatedAt = time.Now().Unix()
diff --git a/server/db/providers/cassandradb/provider.go b/server/db/providers/cassandradb/provider.go
index e7bf3b0..0a5f4a5 100644
--- a/server/db/providers/cassandradb/provider.go
+++ b/server/db/providers/cassandradb/provider.go
@@ -9,7 +9,7 @@ import (
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/crypto"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/gocql/gocql"
cansandraDriver "github.com/gocql/gocql"
)
@@ -23,15 +23,19 @@ var KeySpace string
// NewProvider to initialize arangodb connection
func NewProvider() (*provider, error) {
- dbURL := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)
+ dbURL := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseURL
if dbURL == "" {
- dbURL = envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseHost)
- if envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabasePort) != "" {
- dbURL = fmt.Sprintf("%s:%s", dbURL, envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabasePort))
+ dbHost := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseHost
+ dbPort := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabasePort
+ if dbPort != "" && dbHost != "" {
+ dbURL = fmt.Sprintf("%s:%s", dbHost, dbPort)
}
}
- KeySpace = envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName)
+ KeySpace = memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseName
+ if KeySpace == "" {
+ KeySpace = constants.EnvKeyDatabaseName
+ }
clusterURL := []string{}
if strings.Contains(dbURL, ",") {
clusterURL = strings.Split(dbURL, ",")
@@ -39,25 +43,31 @@ func NewProvider() (*provider, error) {
clusterURL = append(clusterURL, dbURL)
}
cassandraClient := cansandraDriver.NewCluster(clusterURL...)
- if envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseUsername) != "" && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabasePassword) != "" {
+ dbUsername := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseUsername
+ dbPassword := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabasePassword
+
+ if dbUsername != "" && dbPassword != "" {
cassandraClient.Authenticator = &cansandraDriver.PasswordAuthenticator{
- Username: envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseUsername),
- Password: envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabasePassword),
+ Username: dbUsername,
+ Password: dbPassword,
}
}
- if envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCert) != "" && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCACert) != "" && envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCertKey) != "" {
- certString, err := crypto.DecryptB64(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCert))
+ dbCert := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseCert
+ dbCACert := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseCACert
+ dbCertKey := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseCertKey
+ if dbCert != "" && dbCACert != "" && dbCertKey != "" {
+ certString, err := crypto.DecryptB64(dbCert)
if err != nil {
return nil, err
}
- keyString, err := crypto.DecryptB64(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCertKey))
+ keyString, err := crypto.DecryptB64(dbCertKey)
if err != nil {
return nil, err
}
- caString, err := crypto.DecryptB64(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseCACert))
+ caString, err := crypto.DecryptB64(dbCACert)
if err != nil {
return nil, err
}
diff --git a/server/db/providers/cassandradb/user.go b/server/db/providers/cassandradb/user.go
index 09b7476..d1305da 100644
--- a/server/db/providers/cassandradb/user.go
+++ b/server/db/providers/cassandradb/user.go
@@ -9,8 +9,8 @@ import (
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
"github.com/authorizerdev/authorizer/server/graph/model"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/gocql/gocql"
"github.com/google/uuid"
)
@@ -22,7 +22,11 @@ func (p *provider) AddUser(user models.User) (models.User, error) {
}
if user.Roles == "" {
- user.Roles = strings.Join(envstore.EnvStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
+ defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles)
+ if err != nil {
+ return user, err
+ }
+ user.Roles = defaultRoles
}
user.CreatedAt = time.Now().Unix()
diff --git a/server/db/providers/mongodb/provider.go b/server/db/providers/mongodb/provider.go
index d29fca1..8909406 100644
--- a/server/db/providers/mongodb/provider.go
+++ b/server/db/providers/mongodb/provider.go
@@ -4,9 +4,8 @@ import (
"context"
"time"
- "github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
@@ -19,7 +18,8 @@ type provider struct {
// NewProvider to initialize mongodb connection
func NewProvider() (*provider, error) {
- mongodbOptions := options.Client().ApplyURI(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL))
+ dbURL := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseURL
+ mongodbOptions := options.Client().ApplyURI(dbURL)
maxWait := time.Duration(5 * time.Second)
mongodbOptions.ConnectTimeout = &maxWait
mongoClient, err := mongo.NewClient(mongodbOptions)
@@ -37,18 +37,19 @@ func NewProvider() (*provider, error) {
return nil, err
}
- mongodb := mongoClient.Database(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName), options.Database())
+ dbName := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseName
+ mongodb := mongoClient.Database(dbName, options.Database())
mongodb.CreateCollection(ctx, models.Collections.User, options.CreateCollection())
userCollection := mongodb.Collection(models.Collections.User, options.Collection())
userCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{
- mongo.IndexModel{
+ {
Keys: bson.M{"email": 1},
Options: options.Index().SetUnique(true).SetSparse(true),
},
}, options.CreateIndexes())
userCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{
- mongo.IndexModel{
+ {
Keys: bson.M{"phone_number": 1},
Options: options.Index().SetUnique(true).SetSparse(true).SetPartialFilterExpression(map[string]interface{}{
"phone_number": map[string]string{"$type": "string"},
@@ -59,13 +60,13 @@ func NewProvider() (*provider, error) {
mongodb.CreateCollection(ctx, models.Collections.VerificationRequest, options.CreateCollection())
verificationRequestCollection := mongodb.Collection(models.Collections.VerificationRequest, options.Collection())
verificationRequestCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{
- mongo.IndexModel{
+ {
Keys: bson.M{"email": 1, "identifier": 1},
Options: options.Index().SetUnique(true).SetSparse(true),
},
}, options.CreateIndexes())
verificationRequestCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{
- mongo.IndexModel{
+ {
Keys: bson.M{"token": 1},
Options: options.Index().SetSparse(true),
},
@@ -74,7 +75,7 @@ func NewProvider() (*provider, error) {
mongodb.CreateCollection(ctx, models.Collections.Session, options.CreateCollection())
sessionCollection := mongodb.Collection(models.Collections.Session, options.Collection())
sessionCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{
- mongo.IndexModel{
+ {
Keys: bson.M{"user_id": 1},
Options: options.Index().SetSparse(true),
},
diff --git a/server/db/providers/mongodb/user.go b/server/db/providers/mongodb/user.go
index af6c799..4f60349 100644
--- a/server/db/providers/mongodb/user.go
+++ b/server/db/providers/mongodb/user.go
@@ -1,13 +1,12 @@
package mongodb
import (
- "strings"
"time"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
"github.com/authorizerdev/authorizer/server/graph/model"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/google/uuid"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
@@ -20,7 +19,11 @@ func (p *provider) AddUser(user models.User) (models.User, error) {
}
if user.Roles == "" {
- user.Roles = strings.Join(envstore.EnvStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
+ defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles)
+ if err != nil {
+ return user, err
+ }
+ user.Roles = defaultRoles
}
user.CreatedAt = time.Now().Unix()
user.UpdatedAt = time.Now().Unix()
diff --git a/server/db/providers/provider_template/user.go b/server/db/providers/provider_template/user.go
index 07f6a06..cb1069f 100644
--- a/server/db/providers/provider_template/user.go
+++ b/server/db/providers/provider_template/user.go
@@ -1,13 +1,12 @@
package provider_template
import (
- "strings"
"time"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
"github.com/authorizerdev/authorizer/server/graph/model"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/google/uuid"
)
@@ -18,7 +17,11 @@ func (p *provider) AddUser(user models.User) (models.User, error) {
}
if user.Roles == "" {
- user.Roles = strings.Join(envstore.EnvStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
+ defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles)
+ if err != nil {
+ return user, err
+ }
+ user.Roles = defaultRoles
}
user.CreatedAt = time.Now().Unix()
diff --git a/server/db/providers/sql/provider.go b/server/db/providers/sql/provider.go
index 279b707..68910e5 100644
--- a/server/db/providers/sql/provider.go
+++ b/server/db/providers/sql/provider.go
@@ -7,7 +7,7 @@ import (
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
@@ -41,15 +41,19 @@ func NewProvider() (*provider, error) {
TablePrefix: models.Prefix,
},
}
- switch envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) {
+
+ dbType := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseType
+ dbURL := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseURL
+
+ switch dbType {
case constants.DbTypePostgres, constants.DbTypeYugabyte:
- sqlDB, err = gorm.Open(postgres.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
+ sqlDB, err = gorm.Open(postgres.Open(dbURL), ormConfig)
case constants.DbTypeSqlite:
- sqlDB, err = gorm.Open(sqlite.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
+ sqlDB, err = gorm.Open(sqlite.Open(dbURL), ormConfig)
case constants.DbTypeMysql, constants.DbTypeMariaDB:
- sqlDB, err = gorm.Open(mysql.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
+ sqlDB, err = gorm.Open(mysql.Open(dbURL), ormConfig)
case constants.DbTypeSqlserver:
- sqlDB, err = gorm.Open(sqlserver.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
+ sqlDB, err = gorm.Open(sqlserver.Open(dbURL), ormConfig)
}
if err != nil {
diff --git a/server/db/providers/sql/user.go b/server/db/providers/sql/user.go
index ef295c6..e7e999e 100644
--- a/server/db/providers/sql/user.go
+++ b/server/db/providers/sql/user.go
@@ -1,13 +1,12 @@
package sql
import (
- "strings"
"time"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
- "github.com/authorizerdev/authorizer/server/envstore"
"github.com/authorizerdev/authorizer/server/graph/model"
+ "github.com/authorizerdev/authorizer/server/memorystore"
"github.com/google/uuid"
"gorm.io/gorm/clause"
)
@@ -19,7 +18,11 @@ func (p *provider) AddUser(user models.User) (models.User, error) {
}
if user.Roles == "" {
- user.Roles = strings.Join(envstore.EnvStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
+ defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles)
+ if err != nil {
+ return user, err
+ }
+ user.Roles = defaultRoles
}
user.CreatedAt = time.Now().Unix()
diff --git a/server/email/email.go b/server/email/email.go
index b8e6d80..4234eff 100644
--- a/server/email/email.go
+++ b/server/email/email.go
@@ -11,7 +11,7 @@ import (
gomail "gopkg.in/mail.v2"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
// addEmailTemplate is used to add html template in email body
@@ -33,17 +33,57 @@ func addEmailTemplate(a string, b map[string]interface{}, templateName string) s
// SendMail function to send mail
func SendMail(to []string, Subject, bodyMessage string) error {
// dont trigger email sending in case of test
- if envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEnv) == "test" {
+ envKey, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEnv)
+ if err != nil {
+ return err
+ }
+ if envKey == "test" {
return nil
}
m := gomail.NewMessage()
- m.SetHeader("From", envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeySenderEmail))
+ senderEmail, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeySenderEmail)
+ if err != nil {
+ log.Errorf("Error while getting sender email from env variable: %v", err)
+ return err
+ }
+
+ smtpPort, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeySmtpPort)
+ if err != nil {
+ log.Errorf("Error while getting smtp port from env variable: %v", err)
+ return err
+ }
+
+ smtpHost, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeySmtpHost)
+ if err != nil {
+ log.Errorf("Error while getting smtp host from env variable: %v", err)
+ return err
+ }
+
+ smtpUsername, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeySmtpUsername)
+ if err != nil {
+ log.Errorf("Error while getting smtp username from env variable: %v", err)
+ return err
+ }
+
+ smtpPassword, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeySmtpPassword)
+ if err != nil {
+ log.Errorf("Error while getting smtp password from env variable: %v", err)
+ return err
+ }
+
+ isProd, err := memorystore.Provider.GetBoolStoreEnvVariable(constants.EnvKeyIsProd)
+ if err != nil {
+ log.Errorf("Error while getting env variable: %v", err)
+ return err
+ }
+
+ m.SetHeader("From", senderEmail)
m.SetHeader("To", to...)
m.SetHeader("Subject", Subject)
m.SetBody("text/html", bodyMessage)
- port, _ := strconv.Atoi(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpPort))
- d := gomail.NewDialer(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpHost), port, envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpUsername), envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpPassword))
- if envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEnv) == "development" {
+ port, _ := strconv.Atoi(smtpPort)
+ d := gomail.NewDialer(smtpHost, port, smtpUsername, smtpPassword)
+ if !isProd {
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
}
if err := d.DialAndSend(m); err != nil {
diff --git a/server/email/forgot_password_email.go b/server/email/forgot_password_email.go
index 1e06437..aabd6a9 100644
--- a/server/email/forgot_password_email.go
+++ b/server/email/forgot_password_email.go
@@ -2,14 +2,19 @@ package email
import (
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
// SendForgotPasswordMail to send forgot password email
func SendForgotPasswordMail(toEmail, token, hostname string) error {
- resetPasswordUrl := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyResetPasswordURL)
+ resetPasswordUrl, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyResetPasswordURL)
+ if err != nil {
+ return err
+ }
if resetPasswordUrl == "" {
- envstore.EnvStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyResetPasswordURL, hostname+"/app/reset-password")
+ if err := memorystore.Provider.UpdateEnvVariable(constants.EnvKeyResetPasswordURL, hostname+"/app/reset-password"); err != nil {
+ return err
+ }
}
// The receiver needs to be in slice as the receive supports multiple receiver
@@ -103,8 +108,14 @@ func SendForgotPasswordMail(toEmail, token, hostname string) error {
`
data := make(map[string]interface{}, 3)
- data["org_logo"] = envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationLogo)
- data["org_name"] = envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationName)
+ data["org_logo"], err = memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyOrganizationLogo)
+ if err != nil {
+ return err
+ }
+ data["org_name"], err = memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyOrganizationName)
+ if err != nil {
+ return err
+ }
data["verification_url"] = resetPasswordUrl + "?token=" + token
message = addEmailTemplate(message, data, "reset_password_email.tmpl")
diff --git a/server/email/invite_email.go b/server/email/invite_email.go
index 8689353..ef561a6 100644
--- a/server/email/invite_email.go
+++ b/server/email/invite_email.go
@@ -4,7 +4,7 @@ import (
log "github.com/sirupsen/logrus"
"github.com/authorizerdev/authorizer/server/constants"
- "github.com/authorizerdev/authorizer/server/envstore"
+ "github.com/authorizerdev/authorizer/server/memorystore"
)
// InviteEmail to send invite email
@@ -99,13 +99,20 @@ func InviteEmail(toEmail, token, verificationURL, redirectURI string) error {