add generate key script
This commit is contained in:
parent
6ac670a25b
commit
8a4efca141
|
@ -1,2 +1,4 @@
|
||||||
APP_PORT=8000
|
APP_PORT=8000
|
||||||
APP_DEBUG=true
|
APP_DEBUG=true
|
||||||
|
# a 256-bit base64 encryption key
|
||||||
|
APP_KEY=TKe8lE2IdkgGBUrB4nxdq7mGMf8PK29xqOnGa3vU0PBmNXADJrVA5LKd8pg6g/YO5aFG/ESzUleo/9Hve3SAe4rvwLBejD/SKOmDR4gbaMv4PuiNi8S2sYL30aVyi1OeaSTyYsfjteumkFxFVwrsxhDCX94xvNEuTEfS4repfLo=
|
|
@ -2,18 +2,20 @@ const crypto = require('crypto');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const args = require('args-parser')(process.argv);
|
const args = require('args-parser')(process.argv);
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const base64 = require('js-base64');
|
||||||
|
|
||||||
let key = crypto.randomBytes(256).toString('base64');
|
let key = crypto.randomBytes(256).toString('base64');
|
||||||
let dotenv = path.resolve('.env');
|
let dotenv = path.resolve('.env');
|
||||||
|
|
||||||
if (args['help']) {
|
if (args['help']) {
|
||||||
console.log(path.basename(__filename) + ' [--key-only] [--env|-e] [--set-key] [--dry-run]');
|
console.log(path.basename(__filename) + ' [--key-only] [--env|-e] [--set-key] [--dry-run] [--stdout|-s]');
|
||||||
console.log('\n' +
|
console.log('\n' +
|
||||||
' --help: Display this help\n' +
|
' --help: Display this help\n' +
|
||||||
' --key-only: Generate key only and put it in stdout\n' +
|
' --key-only: Generate key only and put it in stdout\n' +
|
||||||
' --env -e: Specify an env file\n' +
|
' --env -e: Specify an env file\n' +
|
||||||
' --set-key: Specify your key\n' +
|
' --set-key: Specify your key\n' +
|
||||||
' --dry-run: Don\'t write anything, just do the thing'
|
' --dry-run: Don\'t write anything, just do the thing\n' +
|
||||||
|
' --stdout -s: Don\'t write to file, write to stdout instead'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +43,10 @@ for (let i = 0; i != lines.length; i++) {
|
||||||
|
|
||||||
const newfile = lines.join('\n');
|
const newfile = lines.join('\n');
|
||||||
|
|
||||||
|
const w_stdout = args['stdout'] || args['s'];
|
||||||
|
|
||||||
if (!args['dry-run']) {
|
if (!args['dry-run']) {
|
||||||
fs.writeFileSync(dotenv, newfile);
|
if (w_stdout) console.log(newfile);
|
||||||
|
else
|
||||||
|
fs.writeFileSync(dotenv, newfile);
|
||||||
}
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"name": "scripts",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "generate_key.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"args-parser": "^1.3.0"
|
||||||
|
}
|
||||||
|
}
|
11
startup.js
11
startup.js
|
@ -5,6 +5,8 @@ if (process.env.APP_DEBUG) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const {Base64} = require('js-base64');
|
||||||
|
const crc32 = require('crc-32');
|
||||||
|
|
||||||
const hrt = () => {
|
const hrt = () => {
|
||||||
let hr = process.hrtime();
|
let hr = process.hrtime();
|
||||||
|
@ -22,6 +24,15 @@ async function startup() {
|
||||||
path: dotpath
|
path: dotpath
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!process.env.APP_KEY) {
|
||||||
|
throw new Error('APP_KEY is not set.')
|
||||||
|
}
|
||||||
|
process.env.APP_KEY = Base64.decode(process.env.APP_KEY);
|
||||||
|
if (process.env.APP_KEY.length !== 256) {
|
||||||
|
throw new Error('APP_KEY has to be a 256-byte base64 string.');
|
||||||
|
}
|
||||||
|
console.log('Using a key with CRC32: ' + crc32.bstr(process.env.APP_KEY.toString(16)));
|
||||||
|
|
||||||
await require('./helpers').ViewLoader.preload();
|
await require('./helpers').ViewLoader.preload();
|
||||||
console.log('Views compiled in ' + (hrt() - t1) + ' ms');
|
console.log('Views compiled in ' + (hrt() - t1) + ' ms');
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
const test = require('unit.js');
|
||||||
|
const execSync = require('child_process').execSync;
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
describe('TestS generate key script', () => {
|
||||||
|
|
||||||
|
it('Check if key is generated properly', () => {
|
||||||
|
const stdout = execSync('node ./scripts/generate_key.js --key-only').toString('utf-8');
|
||||||
|
const key = Buffer.from(stdout, 'base64');
|
||||||
|
test.number(key.length).is(256);
|
||||||
|
});
|
||||||
|
it('Check if file is edited properly', () => {
|
||||||
|
const stdout = execSync('node ./scripts/generate_key.js -s').toString('utf-8');
|
||||||
|
const file = fs.readFileSync(path.resolve('.env'));
|
||||||
|
test.string(stdout).isNot(file);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in New Issue