mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const BbPromise = require('bluebird');
|
|
const _ = require('lodash');
|
|
|
|
module.exports = {
|
|
getApiKeyValues() {
|
|
const info = this.gatheredData.info;
|
|
info.apiKeys = [];
|
|
|
|
// check if the user has set api keys
|
|
const apiKeyDefinitions = this.serverless.service.provider.apiKeys;
|
|
const apiKeyNames = [];
|
|
if (Array.isArray(apiKeyDefinitions) && apiKeyDefinitions.length) {
|
|
apiKeyDefinitions.forEach(definition => {
|
|
// different API key types are nested in separate arrays
|
|
if (_.isObject(definition)) {
|
|
const keyTypeName = Object.keys(definition)[0];
|
|
if (Array.isArray(definition[keyTypeName])) {
|
|
definition[keyTypeName].forEach(keyName => apiKeyNames.push(keyName));
|
|
} else if (definition.name) {
|
|
apiKeyNames.push(definition.name);
|
|
}
|
|
} else if (typeof definition === 'string') {
|
|
// plain strings are simple, non-nested API keys
|
|
apiKeyNames.push(definition);
|
|
}
|
|
});
|
|
}
|
|
|
|
if (apiKeyNames.length) {
|
|
return this.provider
|
|
.request('CloudFormation', 'describeStackResources', {
|
|
StackName: this.provider.naming.getStackName(),
|
|
})
|
|
.then(resources => {
|
|
const apiKeys = _(resources.StackResources)
|
|
.filter(resource => resource.ResourceType === 'AWS::ApiGateway::ApiKey')
|
|
.map(resource => resource.PhysicalResourceId)
|
|
.value();
|
|
return Promise.all(
|
|
apiKeys.map(apiKey =>
|
|
this.provider.request('APIGateway', 'getApiKey', {
|
|
apiKey,
|
|
includeValue: true,
|
|
})
|
|
)
|
|
);
|
|
})
|
|
.then(apiKeys => {
|
|
if (apiKeys && apiKeys.length) {
|
|
info.apiKeys = apiKeys.map(apiKey =>
|
|
_.pick(apiKey, ['name', 'value', 'description', 'customerId'])
|
|
);
|
|
}
|
|
return BbPromise.resolve();
|
|
});
|
|
}
|
|
return BbPromise.resolve();
|
|
},
|
|
};
|