Example #1
0
        public async Task UpdateComplianceCert2(string ComplianceResult, string signature)
        {
            X509AgentCert oSig = new X509AgentCert(signature);

            try
            {
                if (X509AgentCert.publicCertificates.Count == 0)
                {
                    X509AgentCert.publicCertificates.Add(new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(RootName, false).Result))); //root
                }
                var xIssuing = new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(oSig.IssuingCA, false).Result));
                if (!X509AgentCert.publicCertificates.Contains(xIssuing))
                {
                    X509AgentCert.publicCertificates.Add(xIssuing); //Issuing
                }
                oSig.ValidateChain(X509AgentCert.publicCertificates);
            }
            catch { }

            if (oSig.Exists && oSig.Valid)
            {
                if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                {
                    await setComplianceAsync(oSig.CustomerID, oSig.DeviceID, ComplianceResult);
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                {
                    await Clients.Client(Context.ConnectionId).SendAsync("setAgentSignature", "");
                }
            }
        }
Example #2
0
        public Task JoinGroupCert2(string signature)
        {
            string groupName = "unknown";

            try
            {
                X509AgentCert oSig = new X509AgentCert(signature);

                try
                {
                    if (X509AgentCert.publicCertificates.Count == 0)
                    {
                        X509AgentCert.publicCertificates.Add(new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(RootName, false).Result))); //root
                    }
                    var xIssuing = new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(oSig.IssuingCA, false).Result));
                    if (!X509AgentCert.publicCertificates.Contains(xIssuing))
                    {
                        X509AgentCert.publicCertificates.Add(xIssuing); //Issuing
                    }
                    oSig.ValidateChain(X509AgentCert.publicCertificates);
                }
                catch { }

                if (oSig.Exists && oSig.Valid && !string.IsNullOrEmpty(oSig.IssuingCA))
                {
                    groupName = oSig.IssuingCA;

                    if (!string.IsNullOrEmpty(groupName))
                    {
                        if (!lGroups.Contains(groupName))
                        {
                            lGroups.Add(groupName);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }

            return(Groups.AddToGroupAsync(Context.ConnectionId, groupName));
        }
Example #3
0
        public void HealthCheckCert(string name, string signature, string customerid)
        {
            string regName = Environment.GetEnvironmentVariable("ComputernameRegex") ?? "(.*?)";
            Match  m       = Regex.Match(name, regName, RegexOptions.IgnoreCase);

            if (m.Success)
            {
                X509AgentCert oSig = new X509AgentCert(signature);

                try
                {
                    if (X509AgentCert.publicCertificates.Count == 0)
                    {
                        X509AgentCert.publicCertificates.Add(new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(RootName, false).Result))); //root
                    }
                    var xIssuing = new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(oSig.IssuingCA, false).Result));
                    if (!X509AgentCert.publicCertificates.Contains(xIssuing))
                    {
                        X509AgentCert.publicCertificates.Add(xIssuing); //Issuing
                    }
                    oSig.ValidateChain(X509AgentCert.publicCertificates);
                }
                catch { }

                if (oSig.Exists && oSig.Valid)
                {
                    if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                    {
                        string sScript = getScriptAsync(customerid, "compliance.ps1").Result;
                        if (string.IsNullOrEmpty(sScript))
                        {
                            sScript = getScriptAsync("DEMO", "compliance.ps1").Result;
                        }

                        if (!string.IsNullOrEmpty(sScript))
                        {
                            Clients.Client(Context.ConnectionId).SendAsync("checkComplianceAsync", sScript);
                        }
                    }
                }
            }
        }
Example #4
0
        public void HealthCheckCert2(string signature)
        {
            X509AgentCert oSig = new X509AgentCert(signature);

            try
            {
                if (X509AgentCert.publicCertificates.Count == 0)
                {
                    X509AgentCert.publicCertificates.Add(new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(RootName, false).Result))); //root
                }
                var xIssuing = new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(oSig.IssuingCA, false).Result));
                if (!X509AgentCert.publicCertificates.Contains(xIssuing))
                {
                    X509AgentCert.publicCertificates.Add(xIssuing); //Issuing
                }
                oSig.ValidateChain(X509AgentCert.publicCertificates);
            }
            catch { }

            if (oSig.Exists && oSig.Valid)
            {
                if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                {
                    string sScript = getScriptAsync(oSig.CustomerID, "compliance.ps1").Result;
                    if (string.IsNullOrEmpty(sScript))
                    {
                        sScript = getScriptAsync("DEMO", "compliance.ps1").Result;
                    }

                    if (!string.IsNullOrEmpty(sScript))
                    {
                        Clients.Client(Context.ConnectionId).SendAsync("checkComplianceAsync", sScript);
                    }
                }
            }
        }
Example #5
0
        public async Task InitCert(string name, string signature)
        {
            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
            {
                X509AgentCert oSig = new X509AgentCert(signature);
                try
                {
                    if (X509AgentCert.publicCertificates.Count == 0)
                    {
                        X509AgentCert.publicCertificates.Add(new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(RootName, false).Result))); //root
                    }
                    var xIssuing = new X509Certificate2(Convert.FromBase64String(getPublicCertAsync(oSig.IssuingCA, false).Result));
                    if (!X509AgentCert.publicCertificates.Contains(xIssuing))
                    {
                        X509AgentCert.publicCertificates.Add(xIssuing); //Issuing
                    }
                    oSig.ValidateChain(X509AgentCert.publicCertificates);
                }
                catch { }

                if (oSig.Exists && oSig.Valid)
                {
                    name = name.ToLower();
                    _connections.Remove(name, "");                //Remove existing Name
                    _connections.Add(name, Context.ConnectionId); //Add Name

                    IP2LocationURL = Environment.GetEnvironmentVariable("IP2LocationURL") ?? "";

                    lClients.Remove(name);
                    lClients.Add(name);
                    lClients.Remove("");

                    if (!string.IsNullOrEmpty(name))
                    {
                        await JoinGroup("Devices");
                    }

                    string groupName = oSig.IssuingCA;

                    if (!string.IsNullOrEmpty(groupName))
                    {
                        if (!lGroups.Contains(groupName))
                        {
                            lGroups.Add(groupName);
                        }
                    }

                    await Groups.AddToGroupAsync(Context.ConnectionId, groupName);

                    //Request Status
                    await Clients.Client(Context.ConnectionId).SendAsync("status", name);
                }
                else
                {
                    //Just for the case that something is wrong with the certificates...
                    if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("AllowAll")))
                    {
                        name = name.ToLower();
                        _connections.Remove(name, "");                //Remove existing Name
                        _connections.Add(name, Context.ConnectionId); //Add Name

                        IP2LocationURL = Environment.GetEnvironmentVariable("IP2LocationURL") ?? "";

                        lClients.Remove(name);
                        lClients.Add(name);
                        lClients.Remove("");

                        //Request Status
                        await Clients.Client(Context.ConnectionId).SendAsync("status", name);

                        if (!string.IsNullOrEmpty(name))
                        {
                            await JoinGroup("Devices");
                        }
                    }
                    else
                    {
                        await Clients.Client(Context.ConnectionId).SendAsync("setAgentSignature", "");
                    }
                }
            }
            else
            {
                //No external CertAuthority defined... start classic mode:
                name = name.ToLower();
                _connections.Remove(name, "");                //Remove existing Name
                _connections.Add(name, Context.ConnectionId); //Add Name

                IP2LocationURL = Environment.GetEnvironmentVariable("IP2LocationURL") ?? "";

                lClients.Remove(name);
                lClients.Add(name);
                lClients.Remove("");

                //Request Status
                await Clients.Client(Context.ConnectionId).SendAsync("status", name);

                if (!string.IsNullOrEmpty(name))
                {
                    await JoinGroup("Devices");
                }
            }
        }
Example #6
0
        public async void Status2(string name, string Status, string signature)
        {
            name = name.ToLower();
            X509AgentCert oSig = new X509AgentCert(signature, true); //do not validate signature for performance

            if (string.IsNullOrEmpty(AzureLog.WorkspaceId))
            {
                if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("Log-WorkspaceID")) && !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("Log-SharedKey")))
                {
                    AzureLog = new DevCDR.Extensions.AzureLogAnalytics(Environment.GetEnvironmentVariable("Log-WorkspaceID"), Environment.GetEnvironmentVariable("Log-SharedKey"), "DevCDR_" + (Environment.GetEnvironmentVariable("INSTANCENAME") ?? "Default"));
                }
            }

            var J1 = JObject.Parse(Status);

            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("IP2LocationURL")))
            {
                string ClientIP = Context.GetHttpContext().Connection.RemoteIpAddress.ToString();
                J1["Internal IP"] = ClientIP;
                try
                {
                    J1["Internal IP"] = GetLocAsync(ClientIP).Result;
                    if (J1["IP"] == null)
                    {
                        J1.Add(new JProperty("IP", ClientIP));
                    }
                    else
                    {
                        J1["IP"] = ClientIP;
                    }
                }
                catch { }
            }

            if (J1["Customer"] == null)
            {
                J1.Add("Customer", "");
            }

            bool bChange = false;

            try
            {
                if (string.IsNullOrEmpty(J1.GetValue("Hostname").Value <string>()))
                {
                    return;
                }

                if (string.IsNullOrEmpty(J1.GetValue("id").Value <string>()))
                {
                    return;
                }

                if (jData.SelectTokens("[?(@.id == '" + J1.GetValue("id") + "')]").Count() == 0) //Prevent Duplicates
                {
                    J1.Add("ConnectionId", Context.ConnectionId);
                    lock (jData)
                    {
                        jData.Add(J1);
                    }
                    bChange = true;
                    _connections.Add(name, Context.ConnectionId);               //Add Device
                    await Clients.Group("web").SendAsync("newData", "add", ""); //Enforce PageUpdate

                    AzureLog.PostAsync(new { Computer = J1.GetValue("Hostname"), EventID = 3000, Description = J1.GetValue("ScriptResult").ToString() });
                    if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                    {
                        if (!string.IsNullOrEmpty(oSig.CustomerID))
                        {
                            await setStatusAsync(oSig.CustomerID, oSig.DeviceID, J1.ToString());
                        }
                        else
                        {
                            await setStatusAsync(Environment.GetEnvironmentVariable("INSTANCENAME") ?? "Default", J1.GetValue("id").ToString(), J1.ToString());
                        }
                    }
                }
                else
                {
                    var jTemp = JObject.Parse(jData.SelectTokens("[?(@.id == '" + J1.GetValue("id") + "')]", false).First().ToString());

                    await Clients.Group("web").SendAsync("newData", jTemp.ToString(), ""); //Enforce PageUpdate

                    //Changes ?
                    if ((jTemp["ScriptResult"].Value <string>().ToLower() != J1["ScriptResult"].Value <string>().ToLower()) || (jTemp["Version"].Value <string>().ToLower() != J1["Version"].Value <string>().ToLower()))
                    {
                        lock (jData)
                        {
                            jData.SelectTokens("[?(@.id == '" + J1.GetValue("id") + "')]", false).First().Replace(J1);
                            bChange = true;
                        }
                    }

                    //if (jData.SelectTokens("[?(@.Hostname == '" + J1.GetValue("Hostname") + "')]").First().ToString(Formatting.None).ToLower() != J1.ToString(Formatting.None).ToLower())
                    //{
                    //    await Clients.Group("web").SendAsync("newData", "change", jData.ToString()); //Enforce PageUpdate
                    //    lock (jData)
                    //    {
                    //        jData.SelectTokens("[?(@.Hostname == '" + J1.GetValue("Hostname") + "')]", false).First().Replace(J1);
                    //        bChange = true;
                    //    }
                    //    await Clients.Group("web").SendAsync("newData", "done", jData.ToString()); //Enforce PageUpdate
                    //}

                    if (bChange)
                    {
                        _ = Task.Run(() =>
                        {
                            AzureLog.PostAsync(new { Computer = J1.GetValue("Hostname"), EventID = 3000, Description = J1.GetValue("ScriptResult").ToString() });

                            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("fnDevCDR")))
                            {
                                if (!string.IsNullOrEmpty(oSig.CustomerID))
                                {
                                    setStatusAsync(oSig.CustomerID, J1.GetValue("id").ToString(), J1.ToString()).Wait(2000);
                                }
                                else
                                {
                                    setStatusAsync(Environment.GetEnvironmentVariable("INSTANCENAME") ?? "Default", J1.GetValue("id").ToString(), J1.ToString()).Wait(2000);
                                }
                            }
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                bChange = true; //update on error...
            }

            if (bChange)
            {
                try
                {
                    await Clients.Group("web").SendAsync("newData", name, ""); //Enforce PageUpdate
                }
                catch (Exception ex)
                {
                    ex.Message.ToString();
                }
            }
        }