| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 'use strict';
- const _ = require('lodash');
- const error = require('../lib/error');
- const proxyHostModel = require('../models/proxy_host');
- const redirectionHostModel = require('../models/redirection_host');
- const deadHostModel = require('../models/dead_host');
- const internalHost = {
- allowed_ssl_files: ['other_certificate', 'other_certificate_key'],
- /**
- * 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[1]) {
- // 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
- };
- });
- },
- /**
- * Cleans the ssl keys from the meta object and sets them to "true"
- *
- * @param {Object} meta
- * @returns {*}
- */
- cleanMeta: function (meta) {
- internalHost.allowed_ssl_files.map(key => {
- if (typeof meta[key] !== 'undefined' && meta[key]) {
- meta[key] = true;
- }
- });
- return meta;
- },
- /**
- * 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;
- }
- };
- module.exports = internalHost;
|