Fix token app

This commit is contained in:
tsightler
2022-03-04 21:02:03 -05:00
parent be1bafeb55
commit f5d4ab5a34
3 changed files with 15 additions and 17 deletions

View File

@@ -55,10 +55,9 @@ class RingMqtt {
} }
async init(state, generatedToken) { async init(state, generatedToken) {
const ringAuth = { const ringAuth = {
refreshToken: generatedToken ? generatedToken : state.ring_token, refreshToken: generatedToken ? generatedToken : state.data.ring_token,
systemId: state.systemId, systemId: state.data.systemId,
controlCenterDisplayName: (process.env.RUNMODE === 'addon') ? 'ring-mqtt-addon' : 'ring-mqtt', controlCenterDisplayName: (process.env.RUNMODE === 'addon') ? 'ring-mqtt-addon' : 'ring-mqtt',
...utils.config.enable_cameras ? { cameraStatusPollingSeconds: 20, cameraDingsPollingSeconds: 2 } : {}, ...utils.config.enable_cameras ? { cameraStatusPollingSeconds: 20, cameraDingsPollingSeconds: 2 } : {},
...utils.config.enable_modes ? { locationModePollingSeconds: 20 } : {}, ...utils.config.enable_modes ? { locationModePollingSeconds: 20 } : {},
@@ -71,6 +70,11 @@ class RingMqtt {
await this.client.getProfile() await this.client.getProfile()
utils.event.emit('ringState', 'connected') utils.event.emit('ringState', 'connected')
debug(`Successfully established connection to Ring API using ${generatedToken ? 'generated' : 'saved'} token`) debug(`Successfully established connection to Ring API using ${generatedToken ? 'generated' : 'saved'} token`)
// Subscribe to token update events and save new tokens to state file
this.client.onRefreshTokenUpdated.subscribe(({ newRefreshToken, oldRefreshToken }) => {
state.updateToken(newRefreshToken, oldRefreshToken)
})
} catch(error) { } catch(error) {
this.client = false this.client = false
debug(colors.brightYellow(error.message)) debug(colors.brightYellow(error.message))

View File

@@ -17,6 +17,10 @@ class TokenApp {
utils.event.on('ringState', async (state) => { utils.event.on('ringState', async (state) => {
if (state === 'connected') { if (state === 'connected') {
this.ringConnected = true this.ringConnected = true
// Only the addon leaves the web UI running all the time
if (process.env.RUNMODE !== 'addon') {
this.stop()
}
} else { } else {
this.ringConnected = false this.ringConnected = false
} }

View File

@@ -68,26 +68,16 @@ const main = async(generatedToken) => {
await utils.sleep(10) await utils.sleep(10)
} }
if (await ring.init(state.data, generatedToken)) { if (!await ring.init(state, generatedToken)) {
// Subscribe to token update events and save new tokens to state file debug(colors.brightRed('Failed to connect to Ring API using saved token, generate a new token using the Web UI'))
ring.client.onRefreshTokenUpdated.subscribe(({ newRefreshToken, oldRefreshToken }) => { debug(colors.brightRed('or wait 60 seconds to automatically retry authentication using the existing token'))
state.updateToken(newRefreshToken, oldRefreshToken)
})
// Only leave the web UI active if this is the addon
if (process.env.RUNMODE === 'addon') {
tokenApp.stop()
}
} else {
debug(colors.brightRed('Failed to connect to Ring API using saved token, generate a new token using the Web UI.'))
debug(colors.brightRed('Authentication will be automatically retried in 60 seconds using the existing token.'))
tokenApp.start() tokenApp.start()
await utils.sleep(60) await utils.sleep(60)
main() main()
} }
} else { } else {
// If a refresh token was not found, start Web UI for token generator // If a refresh token was not found, start Web UI for token generator
debug(colors.brightRed('No refresh token was found in state file, generate a token using the Web UI.')) debug(colors.brightRed('No refresh token was found in state file, generate a token using the Web UI'))
tokenApp.start() tokenApp.start()
} }
} }