2015-12-15 15:21:27 +00:00
|
|
|
'use strict';
|
|
|
|
|
2015-12-19 19:59:50 +00:00
|
|
|
var path = require('path');
|
|
|
|
var homeRe = new RegExp("^~(\\/|\\\|\\" + path.sep + ")");
|
2015-12-19 10:18:32 +00:00
|
|
|
var re = /^[a-zA-Z0-9\.\-]+$/;
|
|
|
|
var punycode = require('punycode');
|
|
|
|
|
2015-12-19 19:59:50 +00:00
|
|
|
module.exports.isValidDomain = function (domain) {
|
2015-12-19 10:18:32 +00:00
|
|
|
if (re.test(domain)) {
|
|
|
|
return domain;
|
|
|
|
}
|
|
|
|
|
|
|
|
domain = punycode.toASCII(domain);
|
|
|
|
|
|
|
|
if (re.test(domain)) {
|
|
|
|
return domain;
|
|
|
|
}
|
|
|
|
|
|
|
|
return '';
|
|
|
|
};
|
|
|
|
|
2016-08-04 22:49:35 +00:00
|
|
|
module.exports.merge = function (/*defaults, args*/) {
|
|
|
|
var allDefaults = Array.prototype.slice.apply(arguments);
|
|
|
|
var args = args.shift();
|
2015-12-17 08:46:40 +00:00
|
|
|
var copy = {};
|
|
|
|
|
2016-08-04 22:49:35 +00:00
|
|
|
allDefaults.forEach(function (defaults) {
|
|
|
|
Object.keys(defaults).forEach(function (key) {
|
|
|
|
copy[key] = defaults[key];
|
|
|
|
});
|
2015-12-17 08:46:40 +00:00
|
|
|
});
|
2016-08-04 22:49:35 +00:00
|
|
|
|
2015-12-17 08:46:40 +00:00
|
|
|
Object.keys(args).forEach(function (key) {
|
|
|
|
copy[key] = args[key];
|
|
|
|
});
|
|
|
|
|
|
|
|
return copy;
|
|
|
|
};
|
|
|
|
|
2016-08-04 22:49:35 +00:00
|
|
|
module.exports.tplCopy = function (copy) {
|
2015-12-19 19:59:50 +00:00
|
|
|
var homedir = require('homedir')();
|
2015-12-20 00:27:48 +00:00
|
|
|
var tpls = {
|
|
|
|
hostname: (copy.domains || [])[0]
|
|
|
|
, server: (copy.server || '').replace('https://', '').replace(/(\/)$/, '')
|
|
|
|
, conf: copy.configDir
|
|
|
|
, config: copy.configDir
|
|
|
|
};
|
|
|
|
|
2015-12-17 08:46:40 +00:00
|
|
|
Object.keys(copy).forEach(function (key) {
|
2016-08-05 08:14:40 +00:00
|
|
|
if ('string' !== typeof copy[key]) {
|
|
|
|
return;
|
2015-12-17 08:46:40 +00:00
|
|
|
}
|
|
|
|
|
2016-08-05 08:14:40 +00:00
|
|
|
copy[key] = copy[key].replace(homeRe, homedir + path.sep);
|
|
|
|
|
|
|
|
Object.keys(tpls).sort(function (a, b) {
|
|
|
|
return b.length - a.length;
|
|
|
|
}).forEach(function (tplname) {
|
|
|
|
if (!tpls[tplname]) {
|
|
|
|
// what can't be templated now may be templatable later
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
copy[key] = copy[key].replace(':' + tplname, tpls[tplname]);
|
|
|
|
});
|
|
|
|
});
|
2015-12-17 08:46:40 +00:00
|
|
|
};
|