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", ""); } } }
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)); }
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); } } } } }
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); } } } }
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"); } } }
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(); } } }