From 6ac00afa9a25ee7bbaadad784c209ab0962e9965 Mon Sep 17 00:00:00 2001 From: hongming Date: Mon, 21 Oct 2019 10:43:21 +0800 Subject: [PATCH] fix: null pointer exception Signed-off-by: hongming --- .../caddy-plugin/authenticate/authenticate.go | 2 +- .../caddy-plugin/authenticate/auto_load.go | 37 +++++++++++-------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/pkg/apigateway/caddy-plugin/authenticate/authenticate.go b/pkg/apigateway/caddy-plugin/authenticate/authenticate.go index 4adb6d73..f1c59ece 100644 --- a/pkg/apigateway/caddy-plugin/authenticate/authenticate.go +++ b/pkg/apigateway/caddy-plugin/authenticate/authenticate.go @@ -36,7 +36,7 @@ import ( ) type Auth struct { - Rule Rule + Rule *Rule Next httpserver.Handler } diff --git a/pkg/apigateway/caddy-plugin/authenticate/auto_load.go b/pkg/apigateway/caddy-plugin/authenticate/auto_load.go index 3cb2f4c7..529b3c7c 100644 --- a/pkg/apigateway/caddy-plugin/authenticate/auto_load.go +++ b/pkg/apigateway/caddy-plugin/authenticate/auto_load.go @@ -38,6 +38,7 @@ func Setup(c *caddy.Controller) error { c.OnStartup(func() error { rule.RedisClient, err = redis.NewRedisClient(rule.RedisOptions, nil) + // ensure redis is connected when startup if err != nil { return err } @@ -56,9 +57,9 @@ func Setup(c *caddy.Controller) error { return nil } -func parse(c *caddy.Controller) (Rule, error) { +func parse(c *caddy.Controller) (*Rule, error) { - rule := Rule{ExceptedPath: make([]string, 0)} + rule := &Rule{ExceptedPath: make([]string, 0)} if c.Next() { args := c.RemainingArgs() @@ -68,57 +69,57 @@ func parse(c *caddy.Controller) (Rule, error) { switch c.Val() { case "path": if !c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } rule.Path = c.Val() if c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } case "token-idle-timeout": if !c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } if timeout, err := time.ParseDuration(c.Val()); err != nil { - return rule, c.ArgErr() + return nil, c.ArgErr() } else { rule.TokenIdleTimeout = timeout } if c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } case "redis-url": if !c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } options := &redis.RedisOptions{RedisURL: c.Val()} if err := options.Validate(); len(err) > 0 { - return rule, c.ArgErr() + return nil, c.ArgErr() } else { rule.RedisOptions = options } if c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } case "secret": if !c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } rule.Secret = []byte(c.Val()) if c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } case "except": if !c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } rule.ExceptedPath = strings.Split(c.Val(), ",") @@ -128,17 +129,21 @@ func parse(c *caddy.Controller) (Rule, error) { } if c.NextArg() { - return rule, c.ArgErr() + return nil, c.ArgErr() } } } default: - return rule, c.ArgErr() + return nil, c.ArgErr() } } if c.Next() { - return rule, c.ArgErr() + return nil, c.ArgErr() + } + + if rule.RedisOptions == nil { + return nil, c.Err("redis-url must be specified") } return rule, nil -- GitLab