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 void OnCmdAddSite(RouterMessage msg) { //Decode arguments and create logger ManagerAddSite args = msg.DeserializeAs <ManagerAddSite>(); MasterCommandLogger logger = new MasterCommandLogger(msg); //Run try { session.AddSite(args, logger); } catch (Exception ex) { logger.FinishFail($"Unexpected error: {ex.Message}{ex.StackTrace}"); } }
public ChannelReader <RouterMessage> AddSite(ManagerAddSite cmd) { return(SendMessageGetResponseChannelSerialized(MasterConnectionOpcodes.OPCODE_MASTER_M_ADDSITE, cmd)); }