feat: HA event handling + emitting
This commit is contained in:
		@@ -281,6 +281,7 @@ module.exports = {
 | 
			
		||||
  async reloadGroups () {
 | 
			
		||||
    const groupsArray = await WIKI.models.groups.query()
 | 
			
		||||
    this.groups = _.keyBy(groupsArray, 'id')
 | 
			
		||||
    WIKI.auth.guest = await WIKI.models.users.getGuestUser()
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -324,6 +325,7 @@ module.exports = {
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
    await WIKI.auth.activateStrategies()
 | 
			
		||||
    WIKI.events.outbound.emit('reloadAuthStrategies')
 | 
			
		||||
 | 
			
		||||
    WIKI.logger.info('Regenerated certificates: [ COMPLETED ]')
 | 
			
		||||
  },
 | 
			
		||||
@@ -356,5 +358,20 @@ module.exports = {
 | 
			
		||||
    await guestUser.$relatedQuery('groups').relate(guestGroup.id)
 | 
			
		||||
 | 
			
		||||
    WIKI.logger.info('Guest user has been reset: [ COMPLETED ]')
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Subscribe to HA propagation events
 | 
			
		||||
   */
 | 
			
		||||
  subscribeToEvents() {
 | 
			
		||||
    WIKI.events.inbound.on('reloadGroups', () => {
 | 
			
		||||
      WIKI.auth.reloadGroups()
 | 
			
		||||
    })
 | 
			
		||||
    WIKI.events.inbound.on('reloadApiKeys', () => {
 | 
			
		||||
      WIKI.auth.reloadApiKeys()
 | 
			
		||||
    })
 | 
			
		||||
    WIKI.events.inbound.on('reloadAuthStrategies', () => {
 | 
			
		||||
      WIKI.auth.activateStrategies()
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ module.exports = {
 | 
			
		||||
   * @param {Array} keys Array of keys to save
 | 
			
		||||
   * @returns Promise
 | 
			
		||||
   */
 | 
			
		||||
  async saveToDb(keys) {
 | 
			
		||||
  async saveToDb(keys, propagate = true) {
 | 
			
		||||
    try {
 | 
			
		||||
      for (let key of keys) {
 | 
			
		||||
        let value = _.get(WIKI.config, key, null)
 | 
			
		||||
@@ -107,6 +107,9 @@ module.exports = {
 | 
			
		||||
          await WIKI.models.settings.query().insert({ key, value })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (propagate) {
 | 
			
		||||
        WIKI.events.outbound.emit('reloadConfig')
 | 
			
		||||
      }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      WIKI.logger.error(`Failed to save configuration to DB: ${err.message}`)
 | 
			
		||||
      return false
 | 
			
		||||
@@ -119,5 +122,15 @@ module.exports = {
 | 
			
		||||
   */
 | 
			
		||||
  async applyFlags() {
 | 
			
		||||
    WIKI.models.knex.client.config.debug = WIKI.config.flags.sqllog
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Subscribe to HA propagation events
 | 
			
		||||
   */
 | 
			
		||||
  subscribeToEvents() {
 | 
			
		||||
    WIKI.events.inbound.on('reloadConfig', async () => {
 | 
			
		||||
      await WIKI.configSvc.loadFromDb()
 | 
			
		||||
      await WIKI.configSvc.applyFlags()
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -203,12 +203,22 @@ module.exports = {
 | 
			
		||||
        WIKI.logger.debug(ev)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    // -> Outbound events handling
 | 
			
		||||
 | 
			
		||||
    this.listener.addChannel('wiki', payload => {
 | 
			
		||||
      if (_.has(payload.event) && payload.source !== WIKI.INSTANCE_ID) {
 | 
			
		||||
        WIKI.events.emit(payload.event, payload.value)
 | 
			
		||||
        WIKI.logger.debug(`Received event ${payload.event} from instance ${payload.source}: [ OK ]`)
 | 
			
		||||
        WIKI.events.inbound.emit(payload.event, payload.value)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    WIKI.events.onAny(this.notifyViaDB)
 | 
			
		||||
    WIKI.events.outbound.onAny(this.notifyViaDB)
 | 
			
		||||
 | 
			
		||||
    // -> Listen to inbound events
 | 
			
		||||
 | 
			
		||||
    WIKI.auth.subscribeToEvents()
 | 
			
		||||
    WIKI.configSvc.subscribeToEvents()
 | 
			
		||||
    WIKI.models.pages.subscribeToEvents()
 | 
			
		||||
 | 
			
		||||
    WIKI.logger.info(`High-Availability Listener initialized successfully: [ OK ]`)
 | 
			
		||||
  },
 | 
			
		||||
@@ -217,7 +227,8 @@ module.exports = {
 | 
			
		||||
   */
 | 
			
		||||
  async unsubscribeToNotifications () {
 | 
			
		||||
    if (this.listener) {
 | 
			
		||||
      WIKI.events.offAny(this.notifyViaDB)
 | 
			
		||||
      WIKI.events.outbound.offAny(this.notifyViaDB)
 | 
			
		||||
      WIKI.events.inbound.removeAllListeners()
 | 
			
		||||
      this.listener.close()
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,10 @@ module.exports = {
 | 
			
		||||
      WIKI.scheduler = require('./scheduler').init()
 | 
			
		||||
      WIKI.servers = require('./servers')
 | 
			
		||||
      WIKI.sideloader = require('./sideloader').init()
 | 
			
		||||
      WIKI.events = new EventEmitter()
 | 
			
		||||
      await WIKI.models.subscribeToNotifications()
 | 
			
		||||
      WIKI.events = {
 | 
			
		||||
        inbound: new EventEmitter(),
 | 
			
		||||
        outbound: new EventEmitter()
 | 
			
		||||
      }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      WIKI.logger.error(err)
 | 
			
		||||
      process.exit(1)
 | 
			
		||||
@@ -77,6 +79,8 @@ module.exports = {
 | 
			
		||||
    await WIKI.models.searchEngines.initEngine()
 | 
			
		||||
    await WIKI.models.storage.initTargets()
 | 
			
		||||
    WIKI.scheduler.start()
 | 
			
		||||
 | 
			
		||||
    await WIKI.models.subscribeToNotifications()
 | 
			
		||||
  },
 | 
			
		||||
  /**
 | 
			
		||||
   * Init Telemetry
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user