diff --git a/pkg/kong/consumer.go b/pkg/kong/consumer.go index 6098f82..c4074dc 100644 --- a/pkg/kong/consumer.go +++ b/pkg/kong/consumer.go @@ -1,6 +1,8 @@ package kong import ( + "fmt" + v1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1" "github.com/api7/kong-to-apisix/pkg/utils" ) @@ -19,12 +21,30 @@ func MigrateConsumer(kongConfig *KongConfig, configYamlAll *[]utils.YamlItem) (* } // TODO: need to test then it got multiple key - if c.KeyAuthCredentials[0].Key != "" { + if c.KeyAuthCredentials != nil { pluginConfig := make(map[string]interface{}) pluginConfig["key"] = c.KeyAuthCredentials[0].Key apisixConsumer.Plugins = v1.Plugins{"key-auth": pluginConfig} } + if c.JWTCredentials != nil { + cred := c.JWTCredentials[0] + pluginConfig := make(map[string]interface{}) + pluginConfig["key"] = cred.Key + pluginConfig["secret"] = cred.Secret + algorithm := cred.Algorithm + if algorithm == "HS384" || algorithm == "ES256" { + fmt.Printf("APISIX JWT have not support %s yet\n", algorithm) + } else { + pluginConfig["algorithm"] = algorithm + if cred.Secret != "" { + pluginConfig["secret"] = cred.Secret + } + if cred.RSA_Public_Key != "" { + pluginConfig["rsa_public_key"] = cred.RSA_Public_Key + } + } + } apisixConsumers = append(apisixConsumers, *apisixConsumer) } diff --git a/pkg/kong/plugin.go b/pkg/kong/plugin.go index ea955de..5e85fa7 100644 --- a/pkg/kong/plugin.go +++ b/pkg/kong/plugin.go @@ -11,6 +11,7 @@ var pluginMap = map[string]func(p Plugin) (v1.Plugins, []utils.YamlItem, error){ "proxy-cache": proxyCache, "key-auth": keyAuth, "rate-limiting": rateLimiting, + "jwt": jwt, } // TODO: some configuration need to be configured in config.yaml @@ -77,10 +78,15 @@ func rateLimiting(p Plugin) (v1.Plugins, []utils.YamlItem, error) { } func keyAuth(p Plugin) (v1.Plugins, []utils.YamlItem, error) { - pluginConfig := make(map[string]interface{}) - pluginConfig["key"] = p.Config["key_names"] - emptyMap := make(map[string]interface{}) return v1.Plugins{"key-auth": emptyMap}, nil, nil } + +func jwt(p Plugin) (v1.Plugins, []utils.YamlItem, error) { + pluginConfig := make(map[string]interface{}) + pluginConfig["base64_secret"] = p.Config["secret_is_base64"] + pluginConfig["exp"] = p.Config["maximum_expiration"] + + return v1.Plugins{"jwt": pluginConfig}, nil, nil +} diff --git a/pkg/kong/types.go b/pkg/kong/types.go index 2b5fcd4..b9e7d7e 100644 --- a/pkg/kong/types.go +++ b/pkg/kong/types.go @@ -98,6 +98,12 @@ type Consumers []struct { KeyAuthCredentials []struct { Key string `yaml:"key"` } `yaml:"keyauth_credentials,omitempty"` + JWTCredentials []struct { + Key string `yaml:"key"` + Secret string `yaml:"secret"` + Algorithm string `yaml:"algorithm"` + RSA_Public_Key string `yaml:"rsa_public_key"` + } `yaml:"jwt_credentials,omitempty"` } type Plugins []Plugin