public ManagerSite AddSite(ManagerAddSite cmd, IManagerCommandLogger logger) { //Generate a new ID long id; while (true) { //Create byte[] idBytes = new byte[8]; rand.NextBytes(idBytes); id = Math.Abs(BitConverter.ToInt64(idBytes)); //Check if (!sites.ContainsKey(id.ToString())) { break; } } //Create site data ManagerSite site = new ManagerSite { id = id.ToString(), cert_name = "DeltaManagedCert_" + id.ToString(), document_root = cmd.document_root, proxies = new LibDeltaSystem.CoreNet.NetMessages.Master.Entities.NetManagerSite_Proxy[] { new LibDeltaSystem.CoreNet.NetMessages.Master.Entities.NetManagerSite_Proxy { to_path = "/", from_path = cmd.proxy_root, proto = cmd.proto } }, site_domain = cmd.domain, cert_expiry = DateTime.UtcNow.AddMonths(3) }; //Create+sign SSL certificate logger?.Log("AddSite", "Creating and signing a new SSL certificate..."); int status = CLITool.RunCLIProcess("certbot", $"certonly -n --cert-name {site.cert_name} --standalone --preferred-challenges http -d {site.site_domain}", logger, "AddSite", "Creating and signing SSL certificate..."); if (status != 0) { logger?.FinishFail($"Could not create SSL certificate! (Code {status})"); return(null); } //Add sites.Add(site.id, site); Save(); //Finish RefreshSites(); logger.FinishSuccess($"Successfully added site {site.site_domain}."); return(site); }
private string CreateBalancerString(ManagerSite t, string proto) { string file = ""; file += $"<Proxy \"balancer://DeltaManagedBalancer_{t.id}_{proto}\">\n\t#DELTA MANAGED BALANCER {t.id}\n"; foreach (var i in instances) { if (i.site_id == t.id) { file += $"\tBalancerMember \"{proto}://0.0.0.0:{i.ports[0]}\"\n"; } } file += "</Proxy>\n"; return(file); }