
Security News
Open Source Maintainers Demand Ability to Block Copilot-Generated Issues and PRs
Open source maintainers are urging GitHub to let them block Copilot from submitting AI-generated issues and pull requests to their repositories.
leo-config
Advanced tools
Node configuration based on NODE_ENV as well as integrations into AWS KMS, Secrets Manager, and DynamoDB for configuration values
Leo configuration consists of two files. leo_config.js and leo_cli_config.js. As their names suggest, they configure two different aspects of a Leo Microservice
leo_config.js - Configures the runtime of a Microservice
leo_cli_config.js - Configures the leo-cli to execute/publish/deploy a Microservice
Leo Config is designed as a NODE_ENV based system for storing configuration for as many deployment environments as you want using a hierarchical approach, and securely accessing stored credentials.
We recommend using AWS Secrets Manager for storing database credentials.
In your application, require leo-config, then you can use any of the configuration settings outlined in the following steps. Note: Config uses async and wait, which, for example, enables the code to wait for database settings BEFORE trying to connect to the database.
const config = require('leo-config');
exports.handler = async function(event, context, callback) {
// your config settings are now in the config object
// Example getting the database credentials:
// use await to make sure your code waits for database credentials before trying to connect to the database
let dbConfig = await config.database;
// Output the database host for our environment
console.log(dbConfig.host);
callback();
}
Create a file named leo_config.js
in any directory of your project that you use the LEO Platform.
const leoaws = require('leo-aws');
module.exports = {
// predefined options
_global: {},
_local: {},
// your user-defined configuration options
prod: {},
stage: {},
dev: {},
prodServer1: {},
prodServer2: {},
etc: {}
}
Each configuration option can be written as a static object for basic configuration settings (not recommended for connection information such as usernames, passwords, etc), or a dynamic function for getting settings such as database connection information or other configuration settings you want to keep secret or stored somewhere secure.
_global: {}
_global: function() {}
_global
Sets default configuration settings for all environments. Any user-defined environment will override anything in global.
_local
Used for when you're testing locally. Will override settings in your current environment when LEO_LOCAL=true
Any option in here should match exactly the NODE_ENV for the environment you will be deploying and running this code.
For this example, I will be using a basic dev
, stage
, prod
; but you can use any value you like and have defined
in your NODE_ENV.
// if NODE_ENV=prod, use settings for the prod environment
prod: {
// using database as a dynamic function, get the credentials from AWS Secrets Manager
database: function() {
return this.leoaws.secrets.getSecret('mysql_prod_secret')
},
// setting your AWS configuration
"leo-sdk": {
"resources": {
"Region": "us-west-2",
"LeoArchive": "DevBus-LeoArchive-AB01CD23EF45GH67IJ89KL0M",
"LeoCron": "DevBus-LeoCron-CD23EF45GH67IJ89KL01MN2O",
"LeoEvent": "DevBus-LeoEvent-EF45GH67IJ89KL01MN23OP4Q",
"LeoFirehoseStream": "DevBus-LeoFirehoseStream-GH67IJ89KL01MN23OP45QR6S",
"LeoKinesisStream": "DevBus-LeoKinesisStream-IJ89KL01MN23OP45QR67ST8U",
"LeoS3": "devbus-leos3-KL01MN23OP45QR67ST89UV0W",
"LeoSettings": "DevBus-LeoSettings-MN23OP45QR67ST89UV01WX2Y",
"LeoStream": "DevBus-LeoStream-OP45QR67ST89UV01WX23YZ4A",
"LeoSystem": "DevBus-LeoSystem-QR67ST89UV01WX23YZ45AB6C"
},
"firehose": "DevBus-LeoFirehoseStream-ST89UV01WX23YZ45AB67CD8E",
"kinesis": "DevBus-LeoKinesisStream-UV01WX23YZ45AB67CD89EF0G",
"s3": "devbus-leos3-WX23YZ45AB67CD89EF01GH2I"
}
},
// if NODE_ENV=stage, use settings for the stage environment
stage: {
database: function() {
return this.leoaws.secrets.getSecret('mysql_stage_secret')
}
},
// if NODE_ENV=dev, use settings for the dev environment
dev: {
// using database as a static object
database: {
username: 'root',
password: 'mySuperSecretAndVerySecurePasswordNowStoredInTheCode',
host: 'db.mydomain.com',
port: '1234',
database: 'test'
}
}
If you have an environment variable LEO_LOCAL=true
, you can use _local
and override any settings in _global and env section.
_local: {
// required for local testing with AWS.
leoaws: {
profile: "default", // set in your ~/.aws/credentials
region: "us-west-2"
}
}
If you use a dynamic function, you can cache the value by first passing in cache
into the function, then wrapping
your call in the cache
function.
dev: {
dynamodbSettings: function(cache) {
return cache(this.leoaws.dynamodb.get("DevBus-LeoSettings-14HODE41JWL2O", "healthSNS_data"));
}
}
If you have created a Leo React App you can a configuration profile that may be passed to the front end
'use strict';
module.exports = {
_global: {
ui: {
cognito: {
id: "some-cognito-id"
},
region: "some-aws-region"
}
}
}
Find the LEOCognito object here
The following shows examples of how to extract some or all of the leo_config via the leo
server side object
<html>
<head>
<base href="${leo.baseHref}" />
<script>
// Full UI Config from leo_config.js
window.leo = ${leo};
// Start LEOCognito
LEOCognito.start(leo.cognito.id, false, {region:leo.region, cognito_region: leo.cognito_region || leo.region});
// Just parts of the UI Config
window.leo = {
cognitoId: "${leo.cognito.id}",
region: "${leo.region}",
cognito_region: "${leo.region}"
};
// Start LEOCognito
LEOCognito.start(leo.cognitoId, false, {region:leo.region, cognito_region: leo.cognito_region || leo.region});
// Start LEOCognito using replacements
LEOCognito.start("${leo.cognito.id}", false, {region:"${leo.region}", cognito_region: "${leo.region}"});
</script>
</head>
<body>
<p>Hello World</p>
</body>
</html>
Also, note the basehref
coming from leo
. That is intended to be the HTML so your urls are relative to the deployment
module.exports = {
linkedStacks: [
"LeoBus" // must match the parameter name in deploy
],
publish: [{
leoaws: {
profile: "default", // defined in ~/.aws/credentials
region: "us-west-2" // supported regions: us-west-2 and us-east-1
},
public: false
}],
deploy: {
dev: {
stack: "QuickStart",
parameters: {
LeoBus: "DevBus",
AlarmEmail: "default@email.com"
}
}
}
}
You may add a test
section to configure an application port
module.exports = {
test: {
port: 8080
}
}
Want to hire an expert, or need technical support? Reach out to the Leo team: https://leoinsights.com/contact
FAQs
Node configuration based on NODE_ENV as well as integrations into AWS KMS, Secrets Manager, and DynamoDB for configuration values
We found that leo-config demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Open source maintainers are urging GitHub to let them block Copilot from submitting AI-generated issues and pull requests to their repositories.
Research
Security News
Malicious Koishi plugin silently exfiltrates messages with hex strings to a hardcoded QQ account, exposing secrets in chatbots across platforms.
Research
Security News
Malicious PyPI checkers validate stolen emails against TikTok and Instagram APIs, enabling targeted account attacks and dark web credential sales.