AutolabJS/autolabcli

View on GitHub
lib/controller/validate/prefs.js

Summary

Maintainability
A
0 mins
Test Coverage
const validator = require('validator');
const path = require('path');

const defaultPrefPath = path.join(__dirname, '../../../default-prefs.json');
const defaultPrefs = JSON.parse(require('fs').readFileSync(defaultPrefPath, 'utf8'));

const { supportedLanguages } = defaultPrefs;
const { logger } = require('../../utils/logger');
const preferenceManager = require('../../utils/preference-manager');

const validateLang = (changeLangEvent) => {
  if (supportedLanguages.indexOf(changeLangEvent.details.lang) === -1) {
    logger.moduleLog('debug', 'Prefs Validate', `Invalid language for changelang command ${changeLangEvent.details.lang}`);
    return {
      name: 'invalid_lang',
      details: {
        supportedLanguages,
      },
    };
  }
  return changeLangEvent;
};

const hostValidator = (host, flags) => {
  if (validator.isFQDN(host) || validator.isIP(host)) {
    return true;
  }
  return flags === true ? false : 'Enter a valid hostname or IP';
};

const portValidator = (port, flags) => {
  if (validator.isPort(port)) {
    return true;
  }
  return flags === true ? false : 'Enter a valid port';
};

const validateChangeServer = (changeServerEvent) => {
  const { host, port, type } = changeServerEvent.details;
  const supportedServers = ['ms', 'gitlab'];
  if (supportedServers.indexOf(type) === -1) {
    return {
      name: 'invalid_server',
      details: {
        supportedServers: ['ms', 'gitlab'],
      },
    };
  }
  if (!hostValidator(host, true)) {
    logger.moduleLog('debug', 'Prefs Input', `Invalid mainserver host ${host}`);
    return {
      name: 'invalid_host',
    };
  }
  if (port && !portValidator(port, true)) {
    logger.moduleLog('debug', 'Prefs Input', `Invalid mainserver port ${host}`);
    return {
      name: 'invalid_port',
    };
  }
  return changeServerEvent;
};

const keywordValidator = (keyword, flags) => {
  const { blacklist } = preferenceManager.getPreference({ name: 'cliPrefs' }).logger;
  if (!blacklist.includes(keyword)) {
    return true;
  }
  return flags === true ? false : 'Keyword already exists. Enter any other keyword';
};

const validateLogger = (changeLoggerEvent) => {
  const { keyword } = changeLoggerEvent.details;
  if (keyword && !keywordValidator(keyword, true)) {
    return {
      name: 'invalid_blacklist_keyword',
    };
  }
  return changeLoggerEvent;
};

const validate = (changePrefEvent) => {
  switch (changePrefEvent.name) {
    case 'lang_changed':
      return validateLang(changePrefEvent);
    case 'server_changed':
      return validateChangeServer(changePrefEvent);
    case 'logger_pref_changed':
      return validateLogger(changePrefEvent);
    default:
      return changePrefEvent;
  }
};

module.exports = {
  validate,
};