From 36803ecbb0a3a397d7eb00e54f61a9267db549b9 Mon Sep 17 00:00:00 2001 From: Lennart kats Date: Mon, 29 Jun 2015 19:47:13 +0000 Subject: [PATCH] Revert "Revert "Merge pull request +7975 from c9/multi-domain"" This reverts commit 66642209e7e9d4d08e4905071c024754445098be. --- server.js | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/server.js b/server.js index 1e165a26..da73a991 100755 --- a/server.js +++ b/server.js @@ -10,6 +10,7 @@ var path = require("path"); var architect = require("architect"); var optimist = require("optimist"); var async = require("async"); +var assert = require("assert"); var os = require("os"); require("c9/setup_paths.js"); @@ -60,9 +61,9 @@ function main(argv, config, onLoaded) { .default("settings", DEFAULT_SETTINGS) .describe("settings", "Settings file to use") .describe("dump", "dump config file as JSON") - .describe("domain", "Top-level domain to use (e.g, c9.io)") + .describe("domains", "Primary and any secondary top-level domains to use (e.g, c9.io,c9.dev)") .describe("exclude", "Exclude specified service") - .default("domain", inContainer && process.env.C9_HOSTNAME) + .default("domains", inContainer && process.env.C9_HOSTNAME) .boolean("help") .describe("help", "Show command line options."); @@ -124,13 +125,9 @@ function start(configName, options, callback) { var settings = require(path.join(__dirname, "./settings", settingsName))(); - if (argv.domain && settings.c9) { - settings.c9.domain = argv.domain; - for (var s in settings) { - if (settings[s] && settings[s].baseUrl) - settings[s].baseUrl = replaceDomain(settings[s].baseUrl, argv.domain); - } - } + argv.domains = argv.domains || settings.domains; + if (settings.c9 && argv.domains) + replaceDomains(settings, argv.domains); var plugins = require(configPath)(settings, options); @@ -177,6 +174,28 @@ function start(configName, options, callback) { }); } +function replaceDomains(settings, domains) { + domains = Array.isArray(domains) ? domains : [domains]; + var primaryDomain = domains[0]; + settings.domains = domains; + settings.primaryDomain = replaceDomain(settings.primaryDomain, primaryDomain); + settings.primaryBaseUrl = replaceDomain(settings.primaryBaseUrl, primaryDomain); + for (var s in settings) { + if (!settings[s]) + continue; + if (settings[s].baseUrl) + settings[s].baseUrl = replaceDomain(settings[s].baseUrl, primaryDomain); + if (settings[s].primaryBaseUrl) + settings[s].primaryBaseUrl = replaceDomain(settings[s].primaryBaseUrl, primaryDomain); + if (settings[s].baseUrls) { + assert(settings[s].baseUrls.length === 1); + settings[s].baseUrls = domains.map(function(d) { + return replaceDomain(settings[s].baseUrls[0], d); + }); + } + } +} + function replaceDomain(url, domain) { - return url.replace(/[^./]+\.[^./]+$/, domain).replace(/[^./]+\.[^.]+\//, domain + "/"); + return url.replace("$DOMAIN", domain); } \ No newline at end of file