var parseToInt = require ( './parseToInt' ) ;
var isIP = require ( './isIP' ) ;
// Using Validator
var isDomain = require ( './isFQDN' ) ;
function validate ( domain , inPort , outPort ) {
//
inPort = inPort || undefined ;
outPort = outPort || 80 ;
// Error messages
var domainInvalidMsg = [ "\nPlease use a domain name instead of an IP address." , "\nDomain is not valid. Please use a valid domain name." ] ;
var portInvalidMsg = [ "\nPort should be a number." , "\nPort should be a number from 1 and 65535." ] ;
// ARGV returns a string as input. Port numbers should be parsed to int to validate them. If validation fails, these will return undefined and will fail the subsequent test.
var validInPort = parseToInt ( inPort ) ;
var validOutPort = parseToInt ( outPort ) ;
// The value of isInvalid will be returned back. If none of the `if`s are true, the default value `true` is returned `domain`, `inPort` and `outPort` are considered validated.
var isValid = true ;
// Throw if IP is given instead of domain name.
if ( isIP ( domain ) ) {
console . log ( domainInvalidMsg [ 0 ] ) ;
return isValid = false ;
}
// Throw if input is not a Fully Qualified Domain Name (FQDN)
if ( ! isDomain ( domain ) ) {
console . log ( domainInvalidMsg [ 1 ] ) ;
return isValid = false ;
}
// Enter if `inPort` is not defined. This happens for `up static` where no inbound ports are required.
if ( typeof inPort == undefined ) {
if ( ! validOutPort ) {
console . log ( portInvalidMsg [ 0 ] ) ; // `outPort` is not an integer.
return isValid = false ;
}
if ( ! ( validOutPort > 0 && validOutPort <= 65535 ) ) {
console . log ( portInvalidMsg [ 1 ] ) ; // `outPort` is not within port range.
return isValid = false ;
}
}
// Enter if `inPort` is defined. This happens for `up proxy` where inbound port is required.
if ( typeof inPort !== undefined ) {
if ( ! validInPort || ! validOutPort ) {
console . log ( portInvalidMsg [ 0 ] ) ; // Either `inPort` or `outPort` is not an integer.
return isValid = false ;
}
if ( typeof outPort !== undefined ) {
if ( ! ( ( validInPort > 0 && validInPort <= 65535 ) && ( validOutPort > 0 && validOutPort <= 65535 ) ) ) {
console . log ( portInvalidMsg [ 1 ] ) ; // Either `inPort` or `outPort` are not within port range.
return isValid = false ;
}
}
return isValid ; // If any of the `if`s were true, `isInvalid = false`. If not, `isInvalid = true`.
}
}
module . exports = validate ;