Skip to content

Commit d566e1d

Browse files
author
cfernandes
committed
Make changes to prevent plugins referencing non existing APIs from
being created Fix another race condition because I misunderstood the return type
1 parent ebe3b64 commit d566e1d

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

bin/operations/synchronization.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,21 @@ module.exports = async function synchronization(filename, url, username, passwor
162162
await delay(waitTimeInMs);
163163

164164
console.log('Updating Plugins'.bold);
165-
const pendingPluginCreations = diskPlugins.map(async eachPlugin => await kong.plugins.createOrUpdatePlugin(eachPlugin));
165+
const pendingPluginCreations = diskPlugins.map(async eachPlugin => {
166+
if (eachPlugin.api_id) {
167+
// this is a plugin that applies to a specific API
168+
// check whether the API exists before applying the plugin
169+
const apiInformation = await kong.apis.apiDetails(eachPlugin.api_id).catch(() => undefined);
170+
if (apiInformation) {
171+
return await kong.plugins.createOrUpdatePlugin(eachPlugin)
172+
} else {
173+
console.log(`WARNING: Plugin ${eachPlugin.name} points to an API ID ${eachPlugin.api_id} that does not exist`.grey);
174+
return Promise.resolve(0);
175+
}
176+
} else {
177+
return await kong.plugins.createOrUpdatePlugin(eachPlugin)
178+
}
179+
});
166180
await Promise.all(pendingPluginCreations);
167181
console.log('Plugin updates complete'.green);
168182

lib/kong/entities/apis.js

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ module.exports = function kongApis(connectionContext) {
5353

5454
return {
5555
allApis: apis,
56+
api,
5657
createOrUpdateApi,
5758
removeApi
5859
}

lib/kong/entities/consumers.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ module.exports = function kongConsumers(connectionContext) {
121121
}, {}, authPlugins);
122122

123123
const pluginsDataWithoutBasicAuth = dissoc('basic-auth', plugins);
124-
return authPlugins
124+
const result = authPlugins
125125
.filter(pluginName => pluginName !== 'basic-auth')
126126
.filter(pluginName => pluginsDataWithoutBasicAuth[pluginName].length > 0)
127127
.map(pluginName => {
@@ -133,6 +133,7 @@ module.exports = function kongConsumers(connectionContext) {
133133
credentialList.map(async credential => await deleteAdminRequest(`consumers/${consumerNameOrId}/${pluginName}`, credential.id))
134134
)
135135
);
136+
return await Promise.all(result);
136137
}
137138

138139
return {

lib/kong/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const kongCertificates = require('./entities/certificates');
77
const kongSNIs = require('./entities/snis');
88

99
module.exports = function kong(connectionContext) {
10-
const {allApis, createOrUpdateApi, removeApi} = kongApis(connectionContext);
10+
const {allApis, createOrUpdateApi, removeApi, api} = kongApis(connectionContext);
1111
const {plugin, plugins, createOrUpdatePlugin, removePlugin} = kongPlugins(connectionContext);
1212
const {consumers, consumerDetails, consumersWithAuthentication, createOrUpdateConsumerWithCredentials,
1313
removeConsumerWithCredentials, cleanConsumerWithCredentials} = kongConsumers(connectionContext);
@@ -18,7 +18,8 @@ module.exports = function kong(connectionContext) {
1818
apis: {
1919
allApis,
2020
createOrUpdateApi,
21-
removeApi
21+
removeApi,
22+
apiDetails: api
2223
},
2324
plugins: {
2425
pluginsForApi: plugin,

0 commit comments

Comments
 (0)