diff --git a/kong/plugins/keyauth/daos.lua b/kong/plugins/keyauth/daos.lua index 2b5f12dd7407..91aa4065e3e3 100644 --- a/kong/plugins/keyauth/daos.lua +++ b/kong/plugins/keyauth/daos.lua @@ -1,12 +1,21 @@ +local utils = require "kong.tools.utils" +local stringy = require "stringy" local BaseDao = require "kong.dao.cassandra.base_dao" +local function generate_if_missing(v, t, column) + if not v or stringy.strip(v) == "" then + return true, nil, { [column] = utils.random_string()} + end + return true +end + local SCHEMA = { primary_key = {"id"}, fields = { id = { type = "id", dao_insert_value = true }, created_at = { type = "timestamp", dao_insert_value = true }, consumer_id = { type = "id", required = true, foreign = "consumers:id" }, - key = { type = "string", required = true, unique = true, queryable = true } + key = { type = "string", required = false, unique = true, queryable = true, func = generate_if_missing } } } diff --git a/spec/plugins/keyauth/daos_spec.lua b/spec/plugins/keyauth/daos_spec.lua index f0d0d70f952f..00f9ed5a6212 100644 --- a/spec/plugins/keyauth/daos_spec.lua +++ b/spec/plugins/keyauth/daos_spec.lua @@ -37,6 +37,21 @@ describe("DAO keyauth Credentials", function() local cred_t = {key = "apikey123", consumer_id = consumer.id} local app, err = dao_factory.keyauth_credentials:insert(cred_t) assert.falsy(err) + assert.truthy(app.key) + assert.are.same("apikey123", app.key) + assert.truthy(app.id) + assert.truthy(app.created_at) + end) + + it("should insert an autogenerated key", function() + local consumer_t = faker:fake_entity("consumer") + local consumer, err = dao_factory.consumers:insert(consumer_t) + assert.falsy(err) + + local cred_t = {consumer_id = consumer.id} + local app, err = dao_factory.keyauth_credentials:insert(cred_t) + assert.falsy(err) + assert.truthy(app.key) assert.truthy(app.id) assert.truthy(app.created_at) end)