| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | 
							- const _                    = require('lodash');
 
- const proxyHostModel       = require('../models/proxy_host');
 
- const redirectionHostModel = require('../models/redirection_host');
 
- const deadHostModel        = require('../models/dead_host');
 
- const internalHost = {
 
- 	/**
 
- 	 * Makes sure that the ssl_* and hsts_* fields play nicely together.
 
- 	 * ie: if there is no cert, then force_ssl is off.
 
- 	 *     if force_ssl is off, then hsts_enabled is definitely off.
 
- 	 *
 
- 	 * @param   {object} data
 
- 	 * @param   {object} [existing_data]
 
- 	 * @returns {object}
 
- 	 */
 
- 	cleanSslHstsData: function (data, existing_data) {
 
- 		existing_data = existing_data === undefined ? {} : existing_data;
 
- 		let combined_data = _.assign({}, existing_data, data);
 
- 		if (!combined_data.certificate_id) {
 
- 			combined_data.ssl_forced    = false;
 
- 			combined_data.http2_support = false;
 
- 		}
 
- 		if (!combined_data.ssl_forced) {
 
- 			combined_data.hsts_enabled = false;
 
- 		}
 
- 		if (!combined_data.hsts_enabled) {
 
- 			combined_data.hsts_subdomains = false;
 
- 		}
 
- 		return combined_data;
 
- 	},
 
- 	/**
 
- 	 * used by the getAll functions of hosts, this removes the certificate meta if present
 
- 	 *
 
- 	 * @param   {Array}  rows
 
- 	 * @returns {Array}
 
- 	 */
 
- 	cleanAllRowsCertificateMeta: function (rows) {
 
- 		rows.map(function (row, idx) {
 
- 			if (typeof rows[idx].certificate !== 'undefined' && rows[idx].certificate) {
 
- 				rows[idx].certificate.meta = {};
 
- 			}
 
- 		});
 
- 		return rows;
 
- 	},
 
- 	/**
 
- 	 * used by the get/update functions of hosts, this removes the certificate meta if present
 
- 	 *
 
- 	 * @param   {Object}  row
 
- 	 * @returns {Object}
 
- 	 */
 
- 	cleanRowCertificateMeta: function (row) {
 
- 		if (typeof row.certificate !== 'undefined' && row.certificate) {
 
- 			row.certificate.meta = {};
 
- 		}
 
- 		return row;
 
- 	},
 
- 	/**
 
- 	 * This returns all the host types with any domain listed in the provided domain_names array.
 
- 	 * This is used by the certificates to temporarily disable any host that is using the domain
 
- 	 *
 
- 	 * @param   {Array}  domain_names
 
- 	 * @returns {Promise}
 
- 	 */
 
- 	getHostsWithDomains: function (domain_names) {
 
- 		let promises = [
 
- 			proxyHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0),
 
- 			redirectionHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0),
 
- 			deadHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0)
 
- 		];
 
- 		return Promise.all(promises)
 
- 			.then((promises_results) => {
 
- 				let response_object = {
 
- 					total_count:       0,
 
- 					dead_hosts:        [],
 
- 					proxy_hosts:       [],
 
- 					redirection_hosts: []
 
- 				};
 
- 				if (promises_results[0]) {
 
- 					// Proxy Hosts
 
- 					response_object.proxy_hosts  = internalHost._getHostsWithDomains(promises_results[0], domain_names);
 
- 					response_object.total_count += response_object.proxy_hosts.length;
 
- 				}
 
- 				if (promises_results[1]) {
 
- 					// Redirection Hosts
 
- 					response_object.redirection_hosts = internalHost._getHostsWithDomains(promises_results[1], domain_names);
 
- 					response_object.total_count      += response_object.redirection_hosts.length;
 
- 				}
 
- 				if (promises_results[2]) {
 
- 					// Dead Hosts
 
- 					response_object.dead_hosts   = internalHost._getHostsWithDomains(promises_results[2], domain_names);
 
- 					response_object.total_count += response_object.dead_hosts.length;
 
- 				}
 
- 				return response_object;
 
- 			});
 
- 	},
 
- 	/**
 
- 	 * Internal use only, checks to see if the domain is already taken by any other record
 
- 	 *
 
- 	 * @param   {String}   hostname
 
- 	 * @param   {String}   [ignore_type]   'proxy', 'redirection', 'dead'
 
- 	 * @param   {Integer}  [ignore_id]     Must be supplied if type was also supplied
 
- 	 * @returns {Promise}
 
- 	 */
 
- 	isHostnameTaken: function (hostname, ignore_type, ignore_id) {
 
- 		let promises = [
 
- 			proxyHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0)
 
- 				.andWhere('domain_names', 'like', '%' + hostname + '%'),
 
- 			redirectionHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0)
 
- 				.andWhere('domain_names', 'like', '%' + hostname + '%'),
 
- 			deadHostModel
 
- 				.query()
 
- 				.where('is_deleted', 0)
 
- 				.andWhere('domain_names', 'like', '%' + hostname + '%')
 
- 		];
 
- 		return Promise.all(promises)
 
- 			.then((promises_results) => {
 
- 				let is_taken = false;
 
- 				if (promises_results[0]) {
 
- 					// Proxy Hosts
 
- 					if (internalHost._checkHostnameRecordsTaken(hostname, promises_results[0], ignore_type === 'proxy' && ignore_id ? ignore_id : 0)) {
 
- 						is_taken = true;
 
- 					}
 
- 				}
 
- 				if (promises_results[1]) {
 
- 					// Redirection Hosts
 
- 					if (internalHost._checkHostnameRecordsTaken(hostname, promises_results[1], ignore_type === 'redirection' && ignore_id ? ignore_id : 0)) {
 
- 						is_taken = true;
 
- 					}
 
- 				}
 
- 				if (promises_results[2]) {
 
- 					// Dead Hosts
 
- 					if (internalHost._checkHostnameRecordsTaken(hostname, promises_results[2], ignore_type === 'dead' && ignore_id ? ignore_id : 0)) {
 
- 						is_taken = true;
 
- 					}
 
- 				}
 
- 				return {
 
- 					hostname: hostname,
 
- 					is_taken: is_taken
 
- 				};
 
- 			});
 
- 	},
 
- 	/**
 
- 	 * Private call only
 
- 	 *
 
- 	 * @param   {String}  hostname
 
- 	 * @param   {Array}   existing_rows
 
- 	 * @param   {Integer} [ignore_id]
 
- 	 * @returns {Boolean}
 
- 	 */
 
- 	_checkHostnameRecordsTaken: function (hostname, existing_rows, ignore_id) {
 
- 		let is_taken = false;
 
- 		if (existing_rows && existing_rows.length) {
 
- 			existing_rows.map(function (existing_row) {
 
- 				existing_row.domain_names.map(function (existing_hostname) {
 
- 					// Does this domain match?
 
- 					if (existing_hostname.toLowerCase() === hostname.toLowerCase()) {
 
- 						if (!ignore_id || ignore_id !== existing_row.id) {
 
- 							is_taken = true;
 
- 						}
 
- 					}
 
- 				});
 
- 			});
 
- 		}
 
- 		return is_taken;
 
- 	},
 
- 	/**
 
- 	 * Private call only
 
- 	 *
 
- 	 * @param   {Array}   hosts
 
- 	 * @param   {Array}   domain_names
 
- 	 * @returns {Array}
 
- 	 */
 
- 	_getHostsWithDomains: function (hosts, domain_names) {
 
- 		let response = [];
 
- 		if (hosts && hosts.length) {
 
- 			hosts.map(function (host) {
 
- 				let host_matches = false;
 
- 				domain_names.map(function (domain_name) {
 
- 					host.domain_names.map(function (host_domain_name) {
 
- 						if (domain_name.toLowerCase() === host_domain_name.toLowerCase()) {
 
- 							host_matches = true;
 
- 						}
 
- 					});
 
- 				});
 
- 				if (host_matches) {
 
- 					response.push(host);
 
- 				}
 
- 			});
 
- 		}
 
- 		return response;
 
- 	}
 
- };
 
- module.exports = internalHost;
 
 
  |