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);
        }
Пример #2
0
        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}");
            }
        }
Пример #3
0
 public ChannelReader <RouterMessage> AddSite(ManagerAddSite cmd)
 {
     return(SendMessageGetResponseChannelSerialized(MasterConnectionOpcodes.OPCODE_MASTER_M_ADDSITE, cmd));
 }