mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-03-23 04:25:24 +00:00
Use generic config.forceSecret[name] and allow forcing logsChannel
This commit is contained in:
parent
b08a028d69
commit
0605a9f4ee
@ -13,7 +13,7 @@ module.exports = (application) ->
|
||||
api = express()
|
||||
api.use(bodyParser())
|
||||
api.use (req, res, next) ->
|
||||
utils.getOrGenerateSecret('apiSecret')
|
||||
utils.getOrGenerateSecret('api')
|
||||
.then (secret) ->
|
||||
if req.query.apikey is secret
|
||||
next()
|
||||
@ -129,7 +129,7 @@ module.exports = (application) ->
|
||||
# Expires the supervisor's API key and generates a new one.
|
||||
# It also communicates the new key to the Resin API.
|
||||
api.post '/v1/regenerate-api-key', (req, res) ->
|
||||
utils.newSecret('apiSecret')
|
||||
utils.newSecret('api')
|
||||
.then (secret) ->
|
||||
device.updateState(api_secret: secret)
|
||||
res.status(200).send(secret)
|
||||
|
@ -14,7 +14,7 @@ knex.init.then ->
|
||||
console.log('Starting connectivity check..')
|
||||
utils.connectivityCheck()
|
||||
|
||||
Promise.join bootstrap.startBootstrapping(), utils.getOrGenerateSecret('apiSecret'), utils.getOrGenerateSecret('logsChannel'), (uuid, secret, logsChannel) ->
|
||||
Promise.join bootstrap.startBootstrapping(), utils.getOrGenerateSecret('api'), utils.getOrGenerateSecret('logsChannel'), (uuid, secret, logsChannel) ->
|
||||
# Persist the uuid in subsequent metrics
|
||||
utils.mixpanelProperties.uuid = uuid
|
||||
|
||||
|
@ -30,6 +30,8 @@ module.exports = config =
|
||||
restartSuccessTimeout: checkInt(process.env.RESTART_SUCCESS_TIMEOUT) ? 60000
|
||||
appUpdatePollInterval: checkInt(process.env.APPLICATION_UPDATE_POLL_INTERVAL) ? 60000
|
||||
successMessage: 'SUPERVISOR OK'
|
||||
forceApiSecret: process.env.RESIN_SUPERVISOR_SECRET ? null
|
||||
forceSecret:
|
||||
api: process.env.RESIN_SUPERVISOR_SECRET ? null
|
||||
logsChannel: process.env.RESIN_SUPERVISOR_LOGS_CHANNEL ? null
|
||||
vpnStatusPath: process.env.VPN_STATUS_PATH ? '/mnt/root/run/openvpn/vpn_status'
|
||||
checkInt: checkInt
|
||||
|
@ -105,22 +105,22 @@ exports.connectivityCheck = _.once ->
|
||||
secretPromises = {}
|
||||
generateSecret = (name) ->
|
||||
Promise.try ->
|
||||
return config.forceApiSecret if name == 'apiSecret' && config.forceApiSecret?
|
||||
return config.forceSecret[name] if config.forceSecret[name]?
|
||||
return randomHexString.generate()
|
||||
.then (newSecret) ->
|
||||
secretInDB = { key: name, value: newSecret }
|
||||
knex('config').update(secretInDB).where(key: name)
|
||||
secretInDB = { key: "#{name}Secret", value: newSecret }
|
||||
knex('config').update(secretInDB).where(key: "#{name}Secret")
|
||||
.then (affectedRows) ->
|
||||
knex('config').insert(secretInDB) if affectedRows == 0
|
||||
.return(newSecret)
|
||||
|
||||
exports.newSecret = newSecret = (name) ->
|
||||
exports.newSecret = (name) ->
|
||||
secretPromises[name] ?= Promise.resolve()
|
||||
secretPromises[name] = secretPromises[name].then ->
|
||||
generateSecret(name)
|
||||
|
||||
exports.getOrGenerateSecret = (name) ->
|
||||
secretPromises[name] ?= knex('config').select('value').where(key: name).then ([ secret ]) ->
|
||||
secretPromises[name] ?= knex('config').select('value').where(key: "#{name}Secret").then ([ secret ]) ->
|
||||
return secret.value if secret?
|
||||
generateSecret(name)
|
||||
return secretPromises[name]
|
||||
@ -132,7 +132,7 @@ exports.extendEnvVars = (env, uuid) ->
|
||||
RESIN_SUPERVISOR_ADDRESS: "http://#{host}:#{config.listenPort}"
|
||||
RESIN_SUPERVISOR_HOST: host
|
||||
RESIN_SUPERVISOR_PORT: config.listenPort
|
||||
RESIN_SUPERVISOR_API_KEY: exports.getOrGenerateSecret('apiSecret')
|
||||
RESIN_SUPERVISOR_API_KEY: exports.getOrGenerateSecret('api')
|
||||
RESIN_SUPERVISOR_VERSION: exports.supervisorVersion
|
||||
RESIN: '1'
|
||||
USER: 'root'
|
||||
|
Loading…
x
Reference in New Issue
Block a user