Source: models/core/handlerExternalIp.js

/**
 * 
 *  Handles incoming external ip information and persists them 
 *  at the coredatabase.
 * 
 *  (c) Jens Dinstühler 2020
 * 
 *  Version 1.0.0
 * 
 * 
 */

const EventEmitter = require('events');

class CoreExternalIpHandler extends EventEmitter {
    constructor() {
        super();
    }

    /**
     * Saves new ip address information into core database
     * @param {string} ip
     */
    persistNewIPInformation(ip) {
        if ((typeof ip != 'undefined')) {
            // check if entry for this ip exists
            let checkSql = 'SELECT * FROM configuration WHERE keyword = "externalip"';
            global.coreDb.all(checkSql, [], (err, rows) => {
                if (err) {
                    global.plgManager.logger.error('CORE | HANDLEREXTERNALIP | Error checking for external ip: ' + err.message);
                }
                if (rows.length > 0) {
                    // Found existingh entry --> update record in database
                    if (rows[0].value != ip) {
                        // IP has changed --> update in database
                        global.coreDb.run(`UPDATE configuration SET value = ?, lastupdate = CURRENT_TIMESTAMP WHERE keyword = "externalip"`,
                            [
                                ip
                            ],
                            function (err) {
                                if (err) {
                                    global.plgManager.logger.error('CORE | HANDLEREXTERNALIP | Error inserting new external ip to coredatabase: ' + err.message);
                                    console.log('CORE | HANDLEREXTERNALIP | Error inserting new ip to coredatabase: ' + err.message);
                                } else {
                                    global.plgManager.logger.debug(`CORE | HANDLEREXTERNALIP | IP Info has been updated in coredatabase`);
                                    //console.log(`CORE | HANDLEREXTERNALIP | IP Info has been updated in coredatabase`);
                                }
                            });
                    } else {
                        // IP has not changed against database value, do nothing
                        global.plgManager.logger.debug(`CORE | HANDLEREXTERNALIP | external ip has not changed, no update to database`);
                        //console.log(`CORE | HANDLEREXTERNALIP | external ip has not changed, no update to database`);
                    }
                } else {
                    // No existing entry --> create one
                    global.coreDb.run(`INSERT INTO configuration (keyword, value) VALUES ("externalip", ?)`,
                        [
                            ip
                        ],
                        function (err) {
                            if (err) {
                                global.plgManager.logger.error('CORE | HANDLEREXTERNALIP | Error inserting new external ip to coredatabase: ' + err.message);
                                console.log('CORE | HANDLEREXTERNALIP | Error inserting new ip to coredatabase: ' + err.message);
                            } else {
                                global.plgManager.logger.debug(`CORE | HANDLEREXTERNALIP | New ip Info has been inserted to coredatabase`);
                                //console.log(`CORE | HANDLEREXTERNALIP | New ip Info has been inserted to coredatabase`);
                            }
                        });
                }
            })
        } else {
            global.plgManager.logger.error('CORE | HANDLEREXTERNALIP | Error persisting external IP address');
        }
    }
}

module.exports = CoreExternalIpHandler;