|
| 1 | +require('dotenv').config() |
| 2 | +const { JWK } = require('@panva/jose') |
| 3 | +const config = require('nconf') |
| 4 | + .argv() |
| 5 | + .env() |
| 6 | + .defaults({ |
| 7 | + NODE_ENV: 'development', |
| 8 | + APP_NAME: 'egendata-operator' |
| 9 | + }) |
| 10 | + |
| 11 | +function exitWith (message) { |
| 12 | + process.stderr.write(`${message}\n`) |
| 13 | + process.exit(1) |
| 14 | +} |
| 15 | + |
| 16 | +function privateKey (host, rsaKey) { |
| 17 | + const rxPEM = /^-----BEGIN RSA PRIVATE KEY-----\n([a-zA-Z0-9+/=]*\n)*-----END RSA PRIVATE KEY-----\n?$/ |
| 18 | + if (typeof rsaKey !== 'string' || !rxPEM.test(rsaKey)) { |
| 19 | + exitWith('Unknown key format for PRIVATE_KEY') |
| 20 | + } |
| 21 | + |
| 22 | + const keyConfig = { |
| 23 | + kid: `${host}/jwks/operator_key`, |
| 24 | + use: 'sig' |
| 25 | + } |
| 26 | + return JWK.asKey(rsaKey, keyConfig).toJWK(true) |
| 27 | +} |
| 28 | + |
| 29 | +function publicKey ({ e, kid, kty, n, use }) { |
| 30 | + return { e, kid, kty, n, use } |
| 31 | +} |
| 32 | + |
| 33 | +function checkMissingKeys (config, keys) { |
| 34 | + const missing = keys.filter(key => { |
| 35 | + return !config.get(key) |
| 36 | + }) |
| 37 | + if (missing.length > 0) { |
| 38 | + exitWith(`Your config is missing the following keys: ${missing.join(', ')}`) |
| 39 | + } |
| 40 | +} |
| 41 | + |
| 42 | +let ip, PORT, HOST, PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE, PRIVATE_KEY, PUBLIC_KEY |
| 43 | + |
| 44 | +switch (config.get('NODE_ENV')) { |
| 45 | + case 'development': |
| 46 | + ip = require('ip').address() |
| 47 | + PORT = config.get('PORT') || '3000' |
| 48 | + HOST = `http://${ip}:${PORT}` |
| 49 | + PGHOST = config.get('PGHOST') || ip |
| 50 | + PGPORT = config.get('PGPORT') || '5432' |
| 51 | + PGUSER = config.get('PGUSER') || 'postgresuser' |
| 52 | + PGPASSWORD = config.get('PGPASSWORD') || 'postgrespassword' |
| 53 | + PGDATABASE = config.get('PGDATABASE') || 'mydata' |
| 54 | + PRIVATE_KEY = privateKey(HOST, config.get('PRIVATE_KEY') || '-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQDgR0M9RBFT26AseaNYy9g5YX+YQhbskFTAp0aCO6h/8xPAOzkd\n7sO+Lqrx4Ljs8iuUTv7JUbx8+ml+7IMKYjpFx4eFQ1kcEW9IL5xSKKcHt2O359cy\n5KbBExqj4Fr2JkmCE+XcMJa5GGOnpNKB92pmJtfOkjVBVQ280n/j8suyCwIDAQAB\nAoGBAMwGqBl86ZJy0nSDN2EZF5ujoXJ+dOJBrogP5CmnYfL7y3Ttq1kakwFY7PPb\nLf+HkrN5ZXj5HVJIb14ihFcW4tBR2EtABhuv2J6ZNx0KnDxUj+mJlb7GNgr5eayI\nUibIu8/eQh2+CGMilI/KR8zlRiHpD8BgttfBaRktGIrzklQJAkEA9C8JgnAGUbPp\n3rc3dEZR6pEcOGI5Fjo3uvhbOYO5oa4tJszNF1Fh1oUmn17J6yoMnh0qPG4snL2B\nOgSB8OCOnwJBAOshovf7obbVZFzQ7ikYImT/pqz7f7eV1+Uv1MRfGsXAc0EAXDrh\nAPiJ5icWkeRDCFxaTAy/8lrDGgDcL2CSoRUCQQCem4L4x91C6rMJaEbL7vU8gL8s\n3JgqGOykNLfElwxXubQ4VKUO9Vywo9JfiIlth+WkOlt53zJ5KRqsXcstdB8PAkAo\nw6IfYA6/Reuqc8Z2dWqxG+lnoAqaZ24Qm+RFTz+y/RR+NnPG+W9Tp4SxTiZo7n4q\nlLUOmNCJj72YXJQSKBmpAkAyDc4PrJ3nFt45BOEnRuXE60Lv3VzLPdWggOLcKTbW\nr6NAWQS0VNdXEmJVmdoKFhJAeUvLrXPtBGqPS7HO6A8A\n-----END RSA PRIVATE KEY-----\n') |
| 55 | + PUBLIC_KEY = publicKey(PRIVATE_KEY) |
| 56 | + |
| 57 | + module.exports = config.defaults({ |
| 58 | + PORT, |
| 59 | + HOST, |
| 60 | + PGHOST, |
| 61 | + PGPORT, |
| 62 | + PGUSER, |
| 63 | + PGPASSWORD, |
| 64 | + PGDATABASE, |
| 65 | + PRIVATE_KEY, |
| 66 | + PUBLIC_KEY, |
| 67 | + APM_SERVER: `http://${ip}:8200`, |
| 68 | + APM_TOKEN: 'abc' |
| 69 | + }) |
| 70 | + break |
| 71 | + case 'test': |
| 72 | + PORT = '3000' |
| 73 | + HOST = `http://localhost:${PORT}` |
| 74 | + PGHOST = 'localhost' |
| 75 | + PGPORT = '5432' |
| 76 | + PGUSER = 'postgresuser' |
| 77 | + PGPASSWORD = 'postgrespassword' |
| 78 | + PGDATABASE = 'mydata' |
| 79 | + PRIVATE_KEY = privateKey(HOST, '-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQDgR0M9RBFT26AseaNYy9g5YX+YQhbskFTAp0aCO6h/8xPAOzkd\n7sO+Lqrx4Ljs8iuUTv7JUbx8+ml+7IMKYjpFx4eFQ1kcEW9IL5xSKKcHt2O359cy\n5KbBExqj4Fr2JkmCE+XcMJa5GGOnpNKB92pmJtfOkjVBVQ280n/j8suyCwIDAQAB\nAoGBAMwGqBl86ZJy0nSDN2EZF5ujoXJ+dOJBrogP5CmnYfL7y3Ttq1kakwFY7PPb\nLf+HkrN5ZXj5HVJIb14ihFcW4tBR2EtABhuv2J6ZNx0KnDxUj+mJlb7GNgr5eayI\nUibIu8/eQh2+CGMilI/KR8zlRiHpD8BgttfBaRktGIrzklQJAkEA9C8JgnAGUbPp\n3rc3dEZR6pEcOGI5Fjo3uvhbOYO5oa4tJszNF1Fh1oUmn17J6yoMnh0qPG4snL2B\nOgSB8OCOnwJBAOshovf7obbVZFzQ7ikYImT/pqz7f7eV1+Uv1MRfGsXAc0EAXDrh\nAPiJ5icWkeRDCFxaTAy/8lrDGgDcL2CSoRUCQQCem4L4x91C6rMJaEbL7vU8gL8s\n3JgqGOykNLfElwxXubQ4VKUO9Vywo9JfiIlth+WkOlt53zJ5KRqsXcstdB8PAkAo\nw6IfYA6/Reuqc8Z2dWqxG+lnoAqaZ24Qm+RFTz+y/RR+NnPG+W9Tp4SxTiZo7n4q\nlLUOmNCJj72YXJQSKBmpAkAyDc4PrJ3nFt45BOEnRuXE60Lv3VzLPdWggOLcKTbW\nr6NAWQS0VNdXEmJVmdoKFhJAeUvLrXPtBGqPS7HO6A8A\n-----END RSA PRIVATE KEY-----\n') |
| 80 | + PUBLIC_KEY = publicKey(PRIVATE_KEY) |
| 81 | + |
| 82 | + module.exports = config.defaults({ |
| 83 | + PORT, |
| 84 | + HOST, |
| 85 | + PGHOST, |
| 86 | + PGPORT, |
| 87 | + PGUSER, |
| 88 | + PGPASSWORD, |
| 89 | + PGDATABASE, |
| 90 | + PRIVATE_KEY, |
| 91 | + PUBLIC_KEY, |
| 92 | + APM_SERVER: '', |
| 93 | + APM_TOKEN: '' |
| 94 | + }) |
| 95 | + break |
| 96 | + default: |
| 97 | + checkMissingKeys(config, ['PORT', 'HOST', 'DATABASE_URL', 'PRIVATE_KEY']) |
| 98 | + |
| 99 | + config.set('PRIVATE_KEY', privateKey(config.get('HOST'), '-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQDgR0M9RBFT26AseaNYy9g5YX+YQhbskFTAp0aCO6h/8xPAOzkd\n7sO+Lqrx4Ljs8iuUTv7JUbx8+ml+7IMKYjpFx4eFQ1kcEW9IL5xSKKcHt2O359cy\n5KbBExqj4Fr2JkmCE+XcMJa5GGOnpNKB92pmJtfOkjVBVQ280n/j8suyCwIDAQAB\nAoGBAMwGqBl86ZJy0nSDN2EZF5ujoXJ+dOJBrogP5CmnYfL7y3Ttq1kakwFY7PPb\nLf+HkrN5ZXj5HVJIb14ihFcW4tBR2EtABhuv2J6ZNx0KnDxUj+mJlb7GNgr5eayI\nUibIu8/eQh2+CGMilI/KR8zlRiHpD8BgttfBaRktGIrzklQJAkEA9C8JgnAGUbPp\n3rc3dEZR6pEcOGI5Fjo3uvhbOYO5oa4tJszNF1Fh1oUmn17J6yoMnh0qPG4snL2B\nOgSB8OCOnwJBAOshovf7obbVZFzQ7ikYImT/pqz7f7eV1+Uv1MRfGsXAc0EAXDrh\nAPiJ5icWkeRDCFxaTAy/8lrDGgDcL2CSoRUCQQCem4L4x91C6rMJaEbL7vU8gL8s\n3JgqGOykNLfElwxXubQ4VKUO9Vywo9JfiIlth+WkOlt53zJ5KRqsXcstdB8PAkAo\nw6IfYA6/Reuqc8Z2dWqxG+lnoAqaZ24Qm+RFTz+y/RR+NnPG+W9Tp4SxTiZo7n4q\nlLUOmNCJj72YXJQSKBmpAkAyDc4PrJ3nFt45BOEnRuXE60Lv3VzLPdWggOLcKTbW\nr6NAWQS0VNdXEmJVmdoKFhJAeUvLrXPtBGqPS7HO6A8A\n-----END RSA PRIVATE KEY-----\n')) |
| 100 | + config.set('PUBLIC_KEY', publicKey(config.get('PRIVATE_KEY'))) |
| 101 | + |
| 102 | + module.exports = config |
| 103 | + break |
| 104 | +} |
0 commit comments