feat: add api for getting configurations

This commit is contained in:
Lakhan Samani 2021-12-31 17:24:22 +05:30
parent 9c8e9baa39
commit f7f1a3e4b3
8 changed files with 95 additions and 61 deletions

View File

@ -0,0 +1,28 @@
package test
import (
"log"
"testing"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/resolvers"
"github.com/authorizerdev/authorizer/server/utils"
"github.com/stretchr/testify/assert"
)
func configTests(s TestSetup, t *testing.T) {
t.Run(`should get config`, func(t *testing.T) {
req, ctx := createContext(s)
_, err := resolvers.ConfigResolver(ctx)
log.Println("error:", err)
assert.NotNil(t, err)
h, err := utils.HashPassword(constants.EnvData.ADMIN_SECRET)
assert.Nil(t, err)
req.Header.Add("Authorization", "Bearer "+h)
res, err := resolvers.ConfigResolver(ctx)
assert.Nil(t, err)
assert.Equal(t, *res.AdminSecret, constants.EnvData.ADMIN_SECRET)
})
}

View File

@ -47,6 +47,7 @@ func TestResolvers(t *testing.T) {
adminLoginTests(s, t)
adminSessionTests(s, t)
updateConfigTests(s, t)
configTests(s, t)
})
}
}

View File

@ -88,7 +88,6 @@ type ComplexityRoot struct {
SMTPPort func(childComplexity int) int
SenderEmail func(childComplexity int) int
SenderPassword func(childComplexity int) int
Version func(childComplexity int) int
}
Error struct {
@ -473,13 +472,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return e.complexity.Config.SenderPassword(childComplexity), true
case "Config.VERSION":
if e.complexity.Config.Version == nil {
break
}
return e.complexity.Config.Version(childComplexity), true
case "Error.message":
if e.complexity.Error.Message == nil {
break
@ -1058,7 +1050,6 @@ type AdminLoginResponse {
type Config {
ADMIN_SECRET: String
VERSION: String
DATABASE_TYPE: String
DATABASE_URL: String
DATABASE_NAME: String
@ -1094,7 +1085,6 @@ type Config {
input UpdateConfigInput {
ADMIN_SECRET: String
VERSION: String
DATABASE_TYPE: String
DATABASE_URL: String
DATABASE_NAME: String
@ -1726,38 +1716,6 @@ func (ec *executionContext) _Config_ADMIN_SECRET(ctx context.Context, field grap
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) _Config_VERSION(ctx context.Context, field graphql.CollectedField, obj *model.Config) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Config",
Field: field,
Args: nil,
IsMethod: false,
IsResolver: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Version, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) _Config_DATABASE_TYPE(ctx context.Context, field graphql.CollectedField, obj *model.Config) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
@ -6207,14 +6165,6 @@ func (ec *executionContext) unmarshalInputUpdateConfigInput(ctx context.Context,
if err != nil {
return it, err
}
case "VERSION":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("VERSION"))
it.Version, err = ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
case "DATABASE_TYPE":
var err error
@ -6792,8 +6742,6 @@ func (ec *executionContext) _Config(ctx context.Context, sel ast.SelectionSet, o
out.Values[i] = graphql.MarshalString("Config")
case "ADMIN_SECRET":
out.Values[i] = ec._Config_ADMIN_SECRET(ctx, field, obj)
case "VERSION":
out.Values[i] = ec._Config_VERSION(ctx, field, obj)
case "DATABASE_TYPE":
out.Values[i] = ec._Config_DATABASE_TYPE(ctx, field, obj)
case "DATABASE_URL":

View File

@ -20,7 +20,6 @@ type AuthResponse struct {
type Config struct {
AdminSecret *string `json:"ADMIN_SECRET"`
Version *string `json:"VERSION"`
DatabaseType *string `json:"DATABASE_TYPE"`
DatabaseURL *string `json:"DATABASE_URL"`
DatabaseName *string `json:"DATABASE_NAME"`
@ -120,7 +119,6 @@ type SignUpInput struct {
type UpdateConfigInput struct {
AdminSecret *string `json:"ADMIN_SECRET"`
Version *string `json:"VERSION"`
DatabaseType *string `json:"DATABASE_TYPE"`
DatabaseURL *string `json:"DATABASE_URL"`
DatabaseName *string `json:"DATABASE_NAME"`

View File

@ -69,7 +69,6 @@ type AdminLoginResponse {
type Config {
ADMIN_SECRET: String
VERSION: String
DATABASE_TYPE: String
DATABASE_URL: String
DATABASE_NAME: String
@ -105,7 +104,6 @@ type Config {
input UpdateConfigInput {
ADMIN_SECRET: String
VERSION: String
DATABASE_TYPE: String
DATABASE_URL: String
DATABASE_NAME: String

View File

@ -5,7 +5,6 @@ package graph
import (
"context"
"fmt"
"github.com/authorizerdev/authorizer/server/graph/generated"
"github.com/authorizerdev/authorizer/server/graph/model"
@ -89,7 +88,7 @@ func (r *queryResolver) AdminSession(ctx context.Context) (*model.AdminLoginResp
}
func (r *queryResolver) Config(ctx context.Context) (*model.Config, error) {
panic(fmt.Errorf("not implemented"))
return resolvers.ConfigResolver(ctx)
}
// Mutation returns generated.MutationResolver implementation.
@ -98,5 +97,7 @@ func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResol
// Query returns generated.QueryResolver implementation.
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
type mutationResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }
type (
mutationResolver struct{ *Resolver }
queryResolver struct{ *Resolver }
)

View File

@ -10,7 +10,8 @@ import (
func DashboardHandler() gin.HandlerFunc {
return func(c *gin.Context) {
isOnboardingCompleted := false
if constants.EnvData.ADMIN_SECRET != "" && constants.EnvData.DATABASE_TYPE != "" && constants.EnvData.DATABASE_URL != "" {
if constants.EnvData.ADMIN_SECRET != "" {
isOnboardingCompleted = true
}

View File

@ -0,0 +1,59 @@
package resolvers
import (
"context"
"fmt"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/graph/model"
"github.com/authorizerdev/authorizer/server/utils"
)
func ConfigResolver(ctx context.Context) (*model.Config, error) {
gc, err := utils.GinContextFromContext(ctx)
var res *model.Config
if err != nil {
return res, err
}
if !utils.IsSuperAdmin(gc) {
return res, fmt.Errorf("unauthorized")
}
res = &model.Config{
AdminSecret: &constants.EnvData.ADMIN_SECRET,
DatabaseType: &constants.EnvData.DATABASE_TYPE,
DatabaseURL: &constants.EnvData.DATABASE_URL,
DatabaseName: &constants.EnvData.DATABASE_NAME,
SMTPHost: &constants.EnvData.SMTP_HOST,
SMTPPort: &constants.EnvData.SMTP_PORT,
SenderEmail: &constants.EnvData.SENDER_EMAIL,
SenderPassword: &constants.EnvData.SENDER_PASSWORD,
JwtType: &constants.EnvData.JWT_TYPE,
JwtSecret: &constants.EnvData.JWT_SECRET,
AllowedOrigins: constants.EnvData.ALLOWED_ORIGINS,
AuthorizerURL: &constants.EnvData.AUTHORIZER_URL,
AppURL: &constants.EnvData.APP_URL,
RedisURL: &constants.EnvData.REDIS_URL,
CookieName: &constants.EnvData.COOKIE_NAME,
ResetPasswordURL: &constants.EnvData.RESET_PASSWORD_URL,
DisableEmailVerification: &constants.EnvData.DISABLE_EMAIL_VERIFICATION,
DisableBasicAuthentication: &constants.EnvData.DISABLE_BASIC_AUTHENTICATION,
DisableMagicLinkLogin: &constants.EnvData.DISABLE_MAGIC_LINK_LOGIN,
DisableLoginPage: &constants.EnvData.DISABLE_LOGIN_PAGE,
Roles: constants.EnvData.ROLES,
ProtectedRoles: constants.EnvData.PROTECTED_ROLES,
DefaultRoles: constants.EnvData.DEFAULT_ROLES,
JwtRoleClaim: &constants.EnvData.JWT_ROLE_CLAIM,
GoogleClientID: &constants.EnvData.GOOGLE_CLIENT_ID,
GoogleClientSecret: &constants.EnvData.GOOGLE_CLIENT_SECRET,
GithubClientID: &constants.EnvData.GITHUB_CLIENT_ID,
GithubClientSecret: &constants.EnvData.GITHUB_CLIENT_SECRET,
FacebookClientID: &constants.EnvData.FACEBOOK_CLIENT_ID,
FacebookClientSecret: &constants.EnvData.FACEBOOK_CLIENT_SECRET,
OrganizationName: &constants.EnvData.ORGANIZATION_NAME,
OrganizationLogo: &constants.EnvData.ORGANIZATION_LOGO,
}
return res, nil
}