/// <summary> /// Retrieves log messages from database /// </summary> /// <returns></returns> public static List <AuditRecord> GetAuditRecords() { using (DNSAdminEntities db = new DNSAdminEntities()) { return(db.AuditRecords.OrderByDescending(i => i.TimestampUTC).ToList()); } }
/// <summary> /// Database saving handler /// </summary> /// <param name="repeatedly">should it go indefinatly? just for background thread</param> private static void DatabaseHandler(bool repeatedly) { DateTime lastcheck = DateTime.MinValue; while (true) { //store all audit records using (DNSAdminEntities db = new DNSAdminEntities()) { AuditRecord auditrec = null; while (auditrecords.TryDequeue(out auditrec)) { db.AuditRecords.AddObject(auditrec); } db.SaveChanges(); db.AcceptAllChanges(); } //check 10 minutes passed if ((DateTime.UtcNow - lastcheck).TotalMinutes > 10) { lastcheck = DateTime.UtcNow; //remove old records int removeitems = 0; using (DNSAdminEntities db = new DNSAdminEntities()) { var deletelist = db.AuditRecords.OrderByDescending(i => i.TimestampUTC).ToList().Skip(AuditMediaDBMaximumRecords).ToList(); removeitems = deletelist.Count(); foreach (var item in deletelist) { db.DeleteObject(item); } db.SaveChanges(); db.AcceptAllChanges(); } //if any records removed, compact database if (removeitems > 0) { using (SqlCeEngine engine = new SqlCeEngine("Data Source = |DataDirectory|\\DNSAdmin.sdf")) { engine.Shrink(); } } } if (repeatedly) { Thread.Sleep(5000); } else { break; } } }
/// <summary> /// Checks if access should be allowed to this server /// </summary> /// <param name="domain"></param> /// <param name="username"></param> /// <param name="serverName"></param> /// <returns></returns> public static bool IsAllowedServer(string domain, string username, string serverName) { //Check server is in config or config is empty if ((AppSettings.LimitToServers.Length > 0) && (!AppSettings.LimitToServers.Contains(serverName.ToLower()))) return false; //Check server is in allowed list using (DNSAdminEntities db = new DNSAdminEntities()) { string user = domain + "\\" + username; var servers = db.DNSServers.Where(i => i.Username == user && i.ServerName == serverName); if (servers.FirstOrDefault() != null) return true; } return false; }
/// <summary> /// Checks if access should be allowed to this server /// </summary> /// <param name="domain"></param> /// <param name="username"></param> /// <param name="serverName"></param> /// <returns></returns> public static bool IsAllowedServer(string domain, string username, string serverName) { //Check server is in config or config is empty if ((AppSettings.LimitToServers.Length > 0) && (!AppSettings.LimitToServers.Contains(serverName.ToLower()))) { return(false); } //Check server is in allowed list using (DNSAdminEntities db = new DNSAdminEntities()) { string user = domain + "\\" + username; var servers = db.DNSServers.Where(i => i.Username == user && i.ServerName == serverName); if (servers.FirstOrDefault() != null) { return(true); } } return(false); }
public ActionResult Tree(string id, string serverName, string zoneName, string search_string) { var authres = CheckAuthorizationAndLog(Audit.AuditTypeEnum.View, false, serverName, zoneName, "", "Show server in tree"); if (authres != null) return authres; Response.Expires = -1; //search if (!string.IsNullOrEmpty(search_string)) { List<string> searchids = new List<string>(); using (DNSAdminEntities db = new DNSAdminEntities()) { string user = Session["Domain"] + "\\" + Session["Username"]; var searchservers = db.DNSServers.Where(i => i.Username == user).ToList(); foreach (var server in searchservers) { DNSManagement.Server msserver = new DNSManagement.Server(server.ServerName, Session["Username"] as string, Session["Password"] as string); var zones = msserver.GetZones(); foreach (var zone in zones) { var resources = zone.GetRecords(); var resexist = resources.Where(i => i.OwnerName.ToLower().Contains(search_string.ToLower())).Any(); if ((zone.Name.ToLower().Contains(search_string.ToLower())) || (resexist)) { searchids.Add("#Server_" + server.ServerName); if (zone.Reverse) { searchids.Add("#ReverseLookupZones_" + server.ServerName); } else if (zone.ZoneType == DNSManagement.Zone.ZoneTypeEnum.Forwarder) { searchids.Add("#ConditionalForwarders_" + server.ServerName); } else { searchids.Add("#ForwardLookupZones_" + server.ServerName); } } if (resexist) { searchids.Add("#Zone_" + zone.DnsServerName + "_" + zone.Name); } } } } return Json(searchids.ToArray(), JsonRequestBehavior.AllowGet); } var splits = id.Split('_'); var key = (splits.Length > 0) ? splits[0] : ""; //var value = (splits.Length > 1) ? splits[1] : ""; //var value2 = (splits.Length > 2) ? splits[2] : ""; switch (key) { case "DNSServers": List<DNSServer> servers = null; using (DNSAdminEntities db = new DNSAdminEntities()) { string user = Session["Domain"] + "\\" + Session["Username"]; servers = db.DNSServers.Where(i => i.Username == user).ToList(); } List<JsTreeNode> jsServers = new List<JsTreeNode>(); foreach (var server in servers) { jsServers.Add(new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "Server_" + server.ServerName, serverName = server.ServerName, href = "/Home/DNSServer?serverName=" + server.ServerName }, data = new Data { title = server.ServerName, icon = "/Content/icons/server.png" }, state = "closed" }); } jsServers.Add(new JsTreeNode { attr = new Attributes { id = "AuditLogs", href = "/Home/AuditLog" }, data = new Data { title = "Audit Logs", icon = "/Content/icons/log.png" }, }); return Json(jsServers, JsonRequestBehavior.AllowGet); case "Server": List<JsTreeNode> jsServerAreas = new List<JsTreeNode>(); jsServerAreas.Add(new JsTreeNode { attr = new Attributes { id = "Logs_" + serverName, serverName = serverName, href = "/Home/Logs?serverName=" + serverName }, data = new Data { title = "Logs", icon = "/Content/icons/log.png" }, }); jsServerAreas.Add(new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "ForwardLookupZones_" + serverName, serverName = serverName, href = "/Home/ForwardLookupZones?serverName=" + serverName }, data = new Data { title = "Forward Lookup Zones", icon = "/Content/icons/folder.png" }, state = "closed" }); jsServerAreas.Add(new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "ReverseLookupZones_" + serverName, serverName = serverName, href = "/Home/ReverseLookupZones?serverName=" + serverName }, data = new Data { title = "Reverse Lookup Zones", icon = "/Content/icons/folder.png" }, state = "closed" }); jsServerAreas.Add(new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "ConditionalForwarders_" + serverName, serverName = serverName, href = "/Home/ConditionalForwarders?serverName=" + serverName }, data = new Data { title = "Conditional Forwarders", icon = "/Content/icons/folder.png" }, state = "closed" }); jsServerAreas.Add(new JsTreeNode { attr = new Attributes { id = "nslookup_" + serverName, serverName = serverName, href = "/Home/nslookup?serverName=" + serverName }, data = new Data { title = "nslookup", icon = "/Content/icons/kfind.png" }, }); return Json(jsServerAreas, JsonRequestBehavior.AllowGet); //break; case "ForwardLookupZones": List<JsTreeNode> jsServerForwardZones = new List<JsTreeNode>(); jsServerForwardZones.AddRange(GetForwardLookupZones(serverName).Select(i => new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "Zone_" + i.DnsServerName + "_" + i.Name, serverName = serverName, zoneName = i.Name, href = "/Home/Zone?serverName=" + serverName + "&zoneName=" + i.Name }, data = new Data { title = i.Name, icon = "/Content/icons/folder.png" }, state = "closed" })); return Json(jsServerForwardZones, JsonRequestBehavior.AllowGet); //break; case "ReverseLookupZones": List<JsTreeNode> jsServerReverseZones = new List<JsTreeNode>(); jsServerReverseZones.AddRange(GetReverseLookupZones(serverName).Select(i => new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "Zone_" + i.DnsServerName + "_" + i.Name, serverName = serverName, zoneName = i.Name, href = "/Home/Zone?serverName=" + serverName + "&zoneName=" + i.Name }, data = new Data { title = i.Name, icon = "/Content/icons/folder.png" }, state = "closed" })); return Json(jsServerReverseZones, JsonRequestBehavior.AllowGet); //break; case "ConditionalForwarders": List<JsTreeNode> jsServerConditionalForwardersZones = new List<JsTreeNode>(); jsServerConditionalForwardersZones.AddRange(GetConditionalForwardersZones(serverName).Select(i => new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "Zone_" + i.DnsServerName + "_" + i.Name, serverName = serverName, zoneName = i.Name, href = "/Home/Zone?serverName=" + serverName + "&zoneName=" + i.Name }, data = new Data { title = i.Name, icon = "/Content/icons/folder.png" }, state = "closed" })); return Json(jsServerConditionalForwardersZones, JsonRequestBehavior.AllowGet); //break; case "Zone": List<JsTreeNode> jsZoneRRs = new List<JsTreeNode>(); DNSManagement.Server msserver = new DNSManagement.Server(serverName, Session["Username"] as string, Session["Password"] as string); var zoneRRs = msserver.GetZones().FirstOrDefault(i => i.Name == zoneName).GetRecords(); jsZoneRRs.AddRange(zoneRRs.Select(i => new JsTreeNodeChildren { children = new List<JsTreeNode>(), attr = new Attributes { id = "ZoneRR_" + i.DnsServerName + "_" + i.ContainerName + "_" + HttpUtility.UrlEncode(i.TextRepresentation).Replace("%","_"), serverName = serverName, zoneName = zoneName, href = "/Home/ZoneRR?serverName=" + serverName + "&zoneName=" + zoneName + "&zoneTR=" + HttpUtility.UrlEncode(i.TextRepresentation) }, data = new Data { title = i.OwnerName, icon = "/Content/icons/folder.png" }, state = "closed" })); return Json(jsZoneRRs, JsonRequestBehavior.AllowGet); //break; } return Content("Error"); }
public ActionResult ServersSave(ServersModel model) { Audit.Log(Audit.AuditTypeEnum.Change, model.Name, (Session["Domain"] as string) + "\\" + (Session["Username"] as string), NetworkHelper.ClientIPAddress(HttpContext), "Saved new server to list","",""); using (DNSAdminEntities db = new DNSAdminEntities()) { string user = Session["Domain"] + "\\" + Session["Username"]; DNSServer server = new DNSServer(); server.Id = Guid.NewGuid(); server.Username = user; server.ServerName = model.Name; db.DNSServers.AddObject(server); db.SaveChanges(); } return Content(true.ToString()); }
public ActionResult ServersDelete(string serverName) { Audit.Log(Audit.AuditTypeEnum.Change, serverName, (Session["Domain"] as string) + "\\" + (Session["Username"] as string), NetworkHelper.ClientIPAddress(HttpContext), "Deleted server from list","",""); using (DNSAdminEntities db = new DNSAdminEntities()) { string user = Session["Domain"] + "\\" + Session["Username"]; var servers = db.DNSServers.Where(i => i.Username == user && i.ServerName == serverName).ToList(); foreach (var server in servers) db.DNSServers.DeleteObject(server); db.SaveChanges(); } return Content(true.ToString()); }
public ActionResult Servers() { List<DNSServer> servers = null; using (DNSAdminEntities db = new DNSAdminEntities()) { string user = Session["Domain"] + "\\" + Session["Username"]; servers = db.DNSServers.Where(i => i.Username == user).ToList(); } ViewData["servers"] = servers; return PartialView(); }
/// <summary> /// Database saving handler /// </summary> /// <param name="repeatedly">should it go indefinatly? just for background thread</param> private static void DatabaseHandler(bool repeatedly) { DateTime lastcheck = DateTime.MinValue; while (true) { //store all audit records using (DNSAdminEntities db = new DNSAdminEntities()) { AuditRecord auditrec = null; while (auditrecords.TryDequeue(out auditrec)) { db.AuditRecords.AddObject(auditrec); } db.SaveChanges(); db.AcceptAllChanges(); } //check 10 minutes passed if ((DateTime.UtcNow - lastcheck).TotalMinutes > 10) { lastcheck = DateTime.UtcNow; //remove old records int removeitems = 0; using (DNSAdminEntities db = new DNSAdminEntities()) { var deletelist = db.AuditRecords.OrderByDescending(i => i.TimestampUTC).ToList().Skip(AuditMediaDBMaximumRecords).ToList(); removeitems = deletelist.Count(); foreach (var item in deletelist) db.DeleteObject(item); db.SaveChanges(); db.AcceptAllChanges(); } //if any records removed, compact database if (removeitems > 0) { using (SqlCeEngine engine = new SqlCeEngine("Data Source = |DataDirectory|\\DNSAdmin.sdf")) { engine.Shrink(); } } } if (repeatedly) Thread.Sleep(5000); else break; } }
/// <summary> /// Retrieves log messages from database /// </summary> /// <returns></returns> public static List<AuditRecord> GetAuditRecords() { using (DNSAdminEntities db = new DNSAdminEntities()) { return db.AuditRecords.OrderByDescending(i => i.TimestampUTC).ToList(); } }