public ModuleResults GetResults(IInstanceInfo instanceInfo) { try { ProbeHelper.InstallProbe(instanceInfo.Directory); var uri = new Uri(instanceInfo.Uri, "CMSPages/KInspectorProbe.aspx"); HttpWebRequest request = WebRequest.CreateHttp(uri); using (WebResponse response = request.GetResponse()) { DataTable result = new DataTable(); result.ReadXml(response.GetResponseStream()); return(new ModuleResults { Result = result, }); } } catch (Exception e) { // Probably 404 return(new ModuleResults { Result = e.ToString(), Status = Status.Error }); } finally { ProbeHelper.UninstallProbe(instanceInfo.Directory); } }
public static ISxcInstance SxcInstanceForModule(IInstanceInfo moduleInfo) { var dnnModule = ((EnvironmentInstance <ModuleInfo>)moduleInfo).Original; var tenant = new DnnTenant(new PortalSettings(dnnModule.OwnerPortalID)); return(new ModuleContentBlock(moduleInfo, parentLog: null, tenant: tenant).SxcInstance); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("TaskProcessingIssueModule.sql"); var hasUnprocessedTasks = false; if (results != null && results.Rows.Count > 0) { var row = results.Rows[0]; foreach (DataColumn column in results.Columns) { var value = int.Parse(row[column].ToString()); if (value > 0) { hasUnprocessedTasks = true; break; } } } return new ModuleResults { Result = results, Status = hasUnprocessedTasks ? Status.Warning : Status.Good, ResultComment = hasUnprocessedTasks ? "There are unprocessed tasks that should be reviewed." : "All tasks have been processed." }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { // Initialize database connection service var dbService = instanceInfo.DBService; // Retrieve data var tablesWithoutClass = dbService.ExecuteAndGetTableFromFile("ClassTableValidationTables.sql"); tablesWithoutClass.TableName = "Database tables without Kentico Class"; var classesWithoutTable = dbService.ExecuteAndGetTableFromFile("ClassTableValidationClasses.sql"); classesWithoutTable.TableName = "Kentico Classes without database table"; // Merge data into result var result = new DataSet("Non-matching Tables-Class entries"); if (tablesWithoutClass.Rows.Count > 0) { result.Merge(tablesWithoutClass); } if (classesWithoutTable.Rows.Count > 0) { result.Merge(classesWithoutTable); } // Calculate total number of identified issues (if any) int issues = tablesWithoutClass.Rows.Count + classesWithoutTable.Rows.Count; return(new ModuleResults { Result = result, ResultComment = $"{issues} invalid entries found", Status = (issues > 0) ? Status.Error : Status.Good }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { try { ProbeHelper.InstallProbe(instanceInfo.Directory); var uri = new Uri(instanceInfo.Uri, "CMSPages/KInspectorProbe.aspx"); HttpWebRequest request = WebRequest.CreateHttp(uri); using (WebResponse response = request.GetResponse()) { DataTable result = new DataTable(); result.ReadXml(response.GetResponseStream()); return new ModuleResults { Result = result, }; } } catch (Exception e) { // Probably 404 return new ModuleResults { Result = e.ToString(), Status = Status.Error }; } finally { ProbeHelper.UninstallProbe(instanceInfo.Directory); } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { return new ModuleResults { Result = GetAndJoinDataTables(instanceInfo), }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { try { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("FloodProtectionModule.sql"); // Make sure there are records if (results.Rows.Count > 0) { // Return the issues return new ModuleResults { Result = results, Status = Status.Warning }; } else { return new ModuleResults { ResultComment = "Flood Protection is enabled.", Status = Status.Good }; } } catch (Exception ex) { return new ModuleResults { ResultComment = "Failed to check settings as expected.<br />" + ex.Message, Status = Status.Error }; } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { return(new ModuleResults { Result = GetAndJoinDataTables(instanceInfo), }); }
public void SetAppIdForInstance(IInstanceInfo instance, IAppEnvironment env, int?appId, Log parentLog) { Log.Add($"SetAppIdForInstance({instance.Id}, -, appid: {appId})"); // Reset temporary template ContentGroupManager.ClearPreviewTemplate(instance.Id); // ToDo: Should throw exception if a real ContentGroup exists var module = (instance as EnvironmentInstance <ModuleInfo>).Original; var zoneId = env.ZoneMapper.GetZoneId(module.OwnerPortalID); if (appId == 0 || !appId.HasValue) { DnnStuffToRefactor.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, null, Log); } else { var appName = ((BaseCache)DataSource.GetCache(0, 0)).ZoneApps[zoneId].Apps[appId.Value]; DnnStuffToRefactor.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, appName, Log); } // Change to 1. available template if app has been set if (appId.HasValue) { var app = App.LightWithoutData(new DnnTenant(null), zoneId, appId.Value, parentLog: Log); var templateGuid = app.TemplateManager.GetAllTemplates().FirstOrDefault(t => !t.IsHidden)?.Guid; if (templateGuid.HasValue) { ContentGroupManager.SetPreviewTemplate(instance.Id, templateGuid.Value); } } }
private void OnConfigurableFileChanged(ICacheItem item, bool dirty) { if (dirty) { var fileCacheItem = item as IFileCacheItem; if (fileCacheItem == null) { return; } IInstanceInfo instanceInfo = null; IConfigurableFileInfo configurableFileInfo = null; foreach (var objectName in ObjectMappings.ToArray().Where(x => string.Equals(x.Value.Path, fileCacheItem.Path)).Select(x => x.Key)) { RegisterInstances.TryRemove(objectName, out instanceInfo); ObjectMappings.TryRemove(objectName, out configurableFileInfo); } if (configurableFileInfo != null) { RegisterConfigurableFile(configurableFileInfo); } } }
private static void ProcessMissingFormAttachmentFiles(IInstanceInfo instanceInfo, DataSet allData, AllSiteSettings siteSettings, DataSet resultSet, Dictionary <int, Dictionary <string, bool> > formAttachmentRecords) { AddMissingFormAttachmentFilesTable(allData, resultSet); /* bizform Attachments: * //UploadedFormFiles/SiteName?/unknownguid.filetype) * AttachmentGuid is unknownguid.filetype/filename.filetype */ foreach (DataRow row in allData.Tables["BizFormAttachmentRecords"].Rows) { var siteID = Convert.ToInt32(row["SiteID"]); var guidSplit = row["AttachmentGUID"].ToString().Split(new char[] { '/' }, 2); if (guidSplit.Length != 2) { throw new ApplicationException($"AttachmentGUID of '{row["AttachmentGUID"].ToString()}' expected a '/' but did not find one."); } var rowURL = UriExtensions.Combine(siteSettings[siteID].baseFormAttachmentsFolder, guidSplit[0]); if (!UriExtensions.Exists(rowURL, instanceInfo)) { var tempArray = new List <object>(row.ItemArray); tempArray[0] = guidSplit[0]; tempArray.Add(guidSplit[1]); tempArray.Add(rowURL); resultSet.Tables["BizFormAttachmentMissingFiles"].Rows.Add(tempArray.ToArray()); } //As long as we're looping over the Attachment records anyways, take note of which records were found. if (formAttachmentRecords[siteID].ContainsKey(guidSplit[0])) { formAttachmentRecords[siteID][guidSplit[0]] = true; } } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; string scriptFileName = string.Empty; if (instanceInfo.Version.Major == 6) { scriptFileName = "WebPartColumnsModule6.sql"; } if (instanceInfo.Version.Major == 7 || instanceInfo.Version.Major == 8) { scriptFileName = "WebPartColumnsModule7.sql"; } if (instanceInfo.Version.Major >= 9) { scriptFileName = "WebPartColumnsModule9.sql"; } return(new ModuleResults { Result = string.IsNullOrWhiteSpace(scriptFileName) ? null : dbService.ExecuteAndGetPrintsFromFile(scriptFileName) }); }
public int?GetAppIdFromInstance(IInstanceInfo instance, int zoneId) { var module = (instance as EnvironmentInstance <ModuleInfo>)?.Original ?? throw new Exception("instance is not of type ModuleInfo"); var msg = $"get appid from instance for Z:{zoneId} Mod:{module.ModuleID}"; if (module.DesktopModule.ModuleName == "2sxc") { var appId = new ZoneRuntime(zoneId, null).DefaultAppId; Log.Add($"{msg} - use def app: {appId}"); return(appId); } if (module.ModuleSettings.ContainsKey(Settings.AppNameString)) { var guid = module.ModuleSettings[Settings.AppNameString].ToString(); var appId = AppHelpers.GetAppIdFromGuidName(zoneId, guid); Log.Add($"{msg} AppG:{guid} = app:{appId}"); return(appId); } Log.Add($"{msg} not found = null"); return(null); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { try { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("FloodProtectionModule.sql"); // Make sure there are records if (results.Rows.Count > 0) { // Return the issues return(new ModuleResults { Result = results, Status = Status.Warning }); } else { return(new ModuleResults { ResultComment = "Flood Protection is enabled.", Status = Status.Good }); } } catch (Exception ex) { return(new ModuleResults { ResultComment = "Failed to check settings as expected.<br />" + ex.Message, Status = Status.Error }); } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("TaskProcessingIssueModule.sql"); var hasUnprocessedTasks = false; if (results != null && results.Rows.Count > 0) { var row = results.Rows[0]; foreach (DataColumn column in results.Columns) { var value = int.Parse(row[column].ToString()); if (value > 0) { hasUnprocessedTasks = true; break; } } } return(new ModuleResults { Result = results, Status = hasUnprocessedTasks ? Status.Warning : Status.Good, ResultComment = hasUnprocessedTasks ? "There are unprocessed tasks that should be reviewed." : "All tasks have been processed." }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("EventLogSizeModule.sql"); if (results.Rows.Count > 0) { foreach (DataRow resultRow in results.Rows) { if (!EventLogIsRecommendedSize(resultRow)) { return(new ModuleResults { Result = results, ResultComment = "The event log settings are set outside the recommended range.", Status = Status.Warning, }); } } } return(new ModuleResults { ResultComment = "The event log settings are as per recommendations.", Status = Status.Good }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { this.instanceInfo = instanceInfo; List <string> report = new List <string>(); List <string> xssReport = new List <string>(); List <string> customMacrosReport = new List <string>(); var webPartConfigurations = GetWebPartConfigurationsForTemplates(); var transformationInfos = GetTransformationInfo(webPartConfigurations); var checkForCustomMacros = MacroValidator.Current.CheckForCustomMacros(instanceInfo.Version); PerformAnalysis(transformationInfos, checkForCustomMacros, xssReport, customMacrosReport); report.Add("------------------------ Transformations - XSS Analysis report -----------------"); report.AddRange(xssReport); report.Add("<br /><br />"); if (customMacrosReport.Count > 0) { report.Add("------------------------ Transformations - Using deprecated Custom Macros -----------------"); report.AddRange(customMacrosReport); report.Add("<br /><br />"); } return(new ModuleResults { Result = report, Trusted = true }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List<string> report = new List<string>(); bool isWebSite = ProjectCodeFilesHelper.Current.IsWebSiteProject(instanceInfo.Directory); List<string> customerCodeFiles = ProjectCodeFilesHelper.Current.GetCustomerProjectCodeFiles(instanceInfo.Directory, instanceInfo.Version, isWebSite, true).ToList(); if (customerCodeFiles.Count == 0) { return new ModuleResults { ResultComment = "No customer files found.", Status = Status.Good }; } report.AddRange(customerCodeFiles); VulnerabilityAnalysisResults results = new VulnerabilityAnalysisResults(); AnalyseVulnerabilities(instanceInfo.Directory, customerCodeFiles, ref results); string resultString = PrintResults(results); if (!String.IsNullOrEmpty(resultString)) { report.Add(String.Empty); report.AddRange(resultString.Split(new[] { "<br />" }, StringSplitOptions.None)); } return new ModuleResults { Result = report, Trusted = true }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var sitemaps = dbService.ExecuteAndGetDataSetFromFile("SiteMapModule.sql"); // Postprocess sitemaps of all sites foreach (DataTable sitemap in sitemaps.Tables) { bool outputCacheEnabled = dbService.GetSetting <bool>("CMSEnableOutputCache", sitemap.TableName); // process every row of the sitemap foreach (DataRow row in sitemap.Rows) { // Get effective value of columns that can be inherited foreach (var column in ColumnsWithInheritance) { string origColName = column.Key + "Orig"; // Add new column to the table for storing original column value if (!sitemap.Columns.Contains(origColName)) { int colIndex = sitemap.Columns.IndexOf(column.Key); sitemap.Columns.Add(origColName).SetOrdinal(colIndex); } // Copy original value to the new column row[origColName] = row[column.Key]; if (column.Key == "OutputCache" && !outputCacheEnabled) { // Special case - output cache can be disabled in settings and then effective value is always 0 row[column.Key] = 0; } else if (column.Key == SEO_DESCRIPTION || column.Key == SEO_KEYWORDS) { // SEO columns have two possible values -> EMPTY or SET row[column.Key] = GetParentSeoDefinition(sitemap, row, column.Key); } else { // Other columns have DBNULL in case no explicit content is added // Therefore we look for parent until we find matching type - string (value is set, no DBNULL) row[column.Key] = GetEffectiveColumnResult(sitemap, row, column.Key, column.Value); } } } // All post processing for the table is done - remove columns that might not be visible sitemap.Columns.Cast <DataColumn>() .Select(x => x.ColumnName) .Except(VisibleColumns) .ToList() .ForEach(x => sitemap.Columns.Remove(x)); } return(new ModuleResults { Result = sitemaps, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("EventLogSizeModule.sql"); if (results.Rows.Count > 0) { foreach (DataRow resultRow in results.Rows) { if(!EventLogIsRecommendedSize(resultRow)) { return new ModuleResults { Result = results, ResultComment = "The event log settings are set outside the recommended range.", Status = Status.Warning, }; } } } return new ModuleResults { ResultComment = "The event log settings are as per recommendations.", Status = Status.Good }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List<string> responses = new List<string>(); var dbService = instanceInfo.DBService; var taskRowCount = dbService.ExecuteAndGetScalar<int>("SELECT count(*) FROM CMS_WebFarmTask WHERE TaskCreated < DATEADD(hour, -24, GETDATE());"); if (taskRowCount > 0) { responses.Add("There are tasks over 24 hours old in the web farm (" + taskRowCount + " tasks exactly)."); return new ModuleResults { Result = responses, ResultComment = "There are tasks that are over 24 hours old in the CMS_WebFarmTask table. Please check the health of the web farm.", Status = Status.Error, }; } return new ModuleResults { ResultComment = "There are no aged tasks pending.", Status = Status.Good }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var sitemaps = dbService.ExecuteAndGetDataSetFromFile("SiteMapModule.sql"); // Postprocess sitemaps of all sites foreach (DataTable sitemap in sitemaps.Tables) { bool outputCacheEnabled = dbService.GetSetting<bool>("CMSEnableOutputCache", sitemap.TableName); // process every row of the sitemap foreach (DataRow row in sitemap.Rows) { // Get effective value of columns that can be inherited foreach (var column in ColumnsWithInheritance) { string origColName = column.Key + "Orig"; // Add new column to the table for storing original column value if (!sitemap.Columns.Contains(origColName)) { int colIndex = sitemap.Columns.IndexOf(column.Key); sitemap.Columns.Add(origColName).SetOrdinal(colIndex); } // Copy original value to the new column row[origColName] = row[column.Key]; if (column.Key == "OutputCache" && !outputCacheEnabled) { // Special case - output cache can be disabled in settings and then effective value is always 0 row[column.Key] = 0; } else if (column.Key == SEO_DESCRIPTION || column.Key == SEO_KEYWORDS) { // SEO columns have two possible values -> EMPTY or SET row[column.Key] = GetParentSeoDefinition(sitemap, row, column.Key); } else { // Other columns have DBNULL in case no explicit content is added // Therefore we look for parent until we find matching type - string (value is set, no DBNULL) row[column.Key] = GetEffectiveColumnResult(sitemap, row, column.Key, column.Value); } } } // All post processing for the table is done - remove columns that might not be visible sitemap.Columns.Cast<DataColumn>() .Select(x => x.ColumnName) .Except(VisibleColumns) .ToList() .ForEach(x => sitemap.Columns.Remove(x)); } return new ModuleResults { Result = sitemaps, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; DataTable urls; if (instanceInfo.Version.Major >= 9) { urls = dbService.ExecuteAndGetTableFromFile("ScreenshotterModule-v9.sql"); } else { urls = dbService.ExecuteAndGetTableFromFile("ScreenshotterModule.sql"); } // Start process in separate thread to make website responsive. Thread t = new Thread(StartScreenshotting); t.Start(new object[] { instanceInfo, urls }); return(new ModuleResults { Result = urls }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List <string> report = new List <string>(); mDatabaseService = instanceInfo.DBService; mInstancePath = instanceInfo.Directory.FullName; HashSet <string> transformationNames = new HashSet <string>(); mTransformationFullNames = new HashSet <string>(); DataTable webPartsInTransformationsTable = GetPageTemplateWebParts(LikePageTemplateDisplayName); foreach (DataRow webPart in webPartsInTransformationsTable.Rows) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(webPart["PageTemplateWebParts"] as string); IEnumerable <string> templateTransformationFullNames = GetTransformationNamesInPageTemplateWebParts(xmlDoc); foreach (string templateTransformationFullName in templateTransformationFullNames) { mTransformationFullNames.Add(templateTransformationFullName); string transformationName = templateTransformationFullName.Substring(templateTransformationFullName.LastIndexOf('.') + 1); transformationNames.Add(transformationName); } } DataTable transformationCodesTable = GetTransformationCodes(transformationNames); foreach (DataRow transformation in transformationCodesTable.Rows) { int transformationId = (int)transformation["TransformationID"]; string transformationName = transformation["TransformationName"] as string; string transformationCode = transformation["TransformationCode"] as string; string xssResult = null; AnalyseXss(transformationId, transformationName, transformationCode, ref xssResult); if (!string.IsNullOrEmpty(xssResult)) { report.Add(xssResult); } } if (report.Count == 0) { return(new ModuleResults { ResultComment = "No problems in transformations found.", Status = Status.Good }); } return(new ModuleResults { Result = report, Trusted = true }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { // Initialize database connection service var dbService = instanceInfo.DBService; // Retrieve data var tablesWithoutClass = dbService.ExecuteAndGetTableFromFile("ClassTableValidationTables.sql"); tablesWithoutClass.TableName = "Database tables without Kentico Class"; var formattedTableWhitelist = string.Join(",", GetTableWhitelist(instanceInfo.Version).Select(tn => string.Format("'{0}'", tn))); var tablesWithoutClassCount = 0; if (!string.IsNullOrEmpty(formattedTableWhitelist) && formattedTableWhitelist != ",") { tablesWithoutClassCount = tablesWithoutClass.Select($"TABLE_NAME not in ({formattedTableWhitelist})").Count(); } else { tablesWithoutClassCount = tablesWithoutClass.Select().Count(); } var classesWithoutTable = dbService.ExecuteAndGetTableFromFile("ClassTableValidationClasses.sql"); classesWithoutTable.TableName = "Kentico Classes without database table"; var formattedClassWhitelist = string.Join(",", GetClassWhitelist(instanceInfo.Version).Select(tn => string.Format("'{0}'", tn))); var classesWithoutTableCount = 0; if (!string.IsNullOrEmpty(formattedClassWhitelist) && formattedClassWhitelist != ",") { classesWithoutTableCount = classesWithoutTable.Select($"ClassTableName not in ({formattedClassWhitelist})").Count(); } else { classesWithoutTableCount = classesWithoutTable.Select().Count(); } // Merge data into result var result = new DataSet("Non-matching Tables-Class entries"); if (tablesWithoutClassCount > 0) { result.Merge(tablesWithoutClass); } if (classesWithoutTableCount > 0) { result.Merge(classesWithoutTable); } // Calculate total number of identified issues (if any) int issues = tablesWithoutClassCount + classesWithoutTableCount; return(new ModuleResults { Result = result, ResultComment = $"{issues} invalid entries found", Status = (issues > 0) ? Status.Error : Status.Good }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("SecuritySettingsModule.sql"); List <DataRow> rowsToDelete = new List <DataRow>(); // Iterate through and check int/double settings foreach (DataRow row in results.Rows) { if (!String.IsNullOrEmpty(row["Key value"].ToString())) { switch (row["Key name"].ToString()) { case "CMSResetPasswordInterval": if (GetValueAndCheckInterval(row, 1, 12)) { rowsToDelete.Add(row); } break; case "CMSPolicyMinimalLength": if (GetValueAndCheckInterval(row, 8)) { rowsToDelete.Add(row); } break; case "CMSPolicyNumberOfNonAlphaNumChars": if (GetValueAndCheckInterval(row, 2)) { rowsToDelete.Add(row); } break; case "CMSMaximumInvalidLogonAttempts": if (GetValueAndCheckInterval(row, 0, 5)) { rowsToDelete.Add(row); } break; default: break; } } } foreach (DataRow row in rowsToDelete) { results.Rows.Remove(row); } return(new ModuleResults { Result = results, ResultComment = "", Status = Status.Warning, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List <string> responses = new List <string>(); var dbService = instanceInfo.DBService; var activityCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_Activity"); if (activityCount > 10000000) { responses.Add("There are over 10 000 000 (" + activityCount + " exactly) activities in the database. Consider using deleting old page visits or setting up the old contact's deletion"); } var contactsCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_Contact"); if (contactsCount > 1000000) { responses.Add("There are over 1 000 000 (" + contactsCount + " exactly) contacts in the database. Consider using old contact's deletion"); var anonymousCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_Contact WHERE ContactLastName LIKE 'Anonymous%'"); var mergedCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_Contact WHERE ContactMergedWithContactID NOT NULL"); responses.Add("Out of these " + contactsCount + " contacts, " + anonymousCount + " are anonymous and " + mergedCount + " are merged"); } var contactGroupCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_ContactGroup"); if (contactGroupCount > 50) { responses.Add("There are over 50 contact groups (" + contactGroupCount + " exactly). This might affect performance, are all of those really necessary?"); } var scoringRuleCount = dbService.ExecuteAndGetScalar <int>("SELECT COUNT(*) FROM OM_Rule"); if (scoringRuleCount > 50) { responses.Add("There are over 50 scoring rules (" + scoringRuleCount + " exactly). This might affect performance, are all of those really necessary?"); } if (responses.Any()) { return(new ModuleResults { Result = responses, ResultComment = @"Check the counts in the result table. Exceeding the limits doesn't mean it must be wrong. It depends on other things like traffic, hardware and so on.", Status = Status.Error, }); } else { return(new ModuleResults { ResultComment = "All of critical Online marketing are small enough to use Online marketing without affecting performance.", Status = Status.Good }); } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var identicalTemplateLayouts = dbService.ExecuteAndGetTableFromFile("IdenticalTemplateLayoutsModule.sql"); return(new ModuleResults { Result = identicalTemplateLayouts }); }
private DataSet GetAndJoinDataTables(IInstanceInfo instanceInfo) { var result = instanceInfo.DBService.ExecuteAndGetDataSetFromFile("NumberOfAliasesModule.sql"); result.Tables[0].TableName = "Number of documents"; result.Tables[1].TableName = "Number of aliases"; result.Tables[2].TableName = "Aliases per node"; return result; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("ApplicationRestartsModule.sql"); return new ModuleResults { Result = results, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetDataSetFromFile("Setup/GlobalAdminSetupModule.sql"); return new ModuleResults { ResultComment = "The default administrator user with UserID=53 has been reset. You may need to recycle the application pool for changes to take effect." }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetDataSetFromFile(VersionConfig[instanceInfo.Version]); return(new ModuleResults { Result = results, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var unusedTemplates = dbService.ExecuteAndGetTableFromFile("UnusedTemplatesModule.sql"); return(new ModuleResults { Result = unusedTemplates }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("ApplicationRestartsModule.sql"); return(new ModuleResults { Result = results, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("AttachmentsBySizeModule.sql"); return new ModuleResults { Result = results, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetPrintsFromFile("CMSFileModule.sql"); return new ModuleResults { Result = results, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var unusedTemplates = dbService.ExecuteAndGetTableFromFile("UnusedPageTypesModule.sql"); return new ModuleResults { Result = unusedTemplates }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("AttachmentsBySizeModule.sql"); return(new ModuleResults { Result = results, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetPrintsFromFile("CMSFileModule.sql"); return(new ModuleResults { Result = results, }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetDataSetFromFile("Setup/LicenseSetupModule.sql"); return new ModuleResults { Result = results }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetPrintsFromFile("Setup/SiteDomainAliasesSetupModule.sql"); return new ModuleResults { Result = results }; }
private DataSet GetAndJoinDataTables(IInstanceInfo instanceInfo) { var result = instanceInfo.DBService.ExecuteAndGetDataSetFromFile("NumberOfAliasesModule.sql"); result.Tables[0].TableName = "Number of documents"; result.Tables[1].TableName = "Number of aliases"; result.Tables[2].TableName = "Aliases per node"; return(result); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetPrintsFromFile("Setup/SiteDomainAliasesSetupModule.sql"); return(new ModuleResults { Result = results }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetDataSetFromFile("Setup/WebFarmServerSetupModule.sql"); return(new ModuleResults { Result = results }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("SecuritySettingsModule.sql"); List<DataRow> rowsToDelete = new List<DataRow>(); // Iterate through and check int/double settings foreach (DataRow row in results.Rows) { if (!String.IsNullOrEmpty(row["Key value"].ToString())) { switch (row["Key name"].ToString()) { case "CMSResetPasswordInterval": if (GetValueAndCheckInterval(row, 1, 12)) { rowsToDelete.Add(row); } break; case "CMSPolicyMinimalLength": if (GetValueAndCheckInterval(row, 8)) { rowsToDelete.Add(row); } break; case "CMSPolicyNumberOfNonAlphaNumChars": if (GetValueAndCheckInterval(row, 2)) { rowsToDelete.Add(row); } break; case "CMSMaximumInvalidLogonAttempts": if (GetValueAndCheckInterval(row, 0, 5)) { rowsToDelete.Add(row); } break; default: break; } } } foreach(DataRow row in rowsToDelete) { results.Rows.Remove(row); } return new ModuleResults { Result = results, ResultComment = "", Status = Status.Warning, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("WebPartsInTransformationsModule.sql"); return new ModuleResults { Result = results, Status = results.Rows.Count > 0 ? Status.Error : Status.Good }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { DataTable expiredTokens = new DataTable("Expired account tokens"); expiredTokens.Columns.Add("SocialNetwork"); expiredTokens.Columns.Add("SiteName"); expiredTokens.Columns.Add("AccountName"); var dbService = instanceInfo.DBService; if (instanceInfo.Version != new Version("8.0")) { // LinkedIn integration is in 8.1 and newer var linResults = dbService.ExecuteAndGetTableFromFile("ExpiredTokensModule-LinkedIn.sql"); foreach (DataRow token in linResults.Rows) { var row = expiredTokens.NewRow(); row["SocialNetwork"] = "LinkedIn"; row["SiteName"] = token["SiteName"]; row["AccountName"] = token["AccountName"]; expiredTokens.Rows.Add(row); } } var fbResults = dbService.ExecuteAndGetTableFromFile("ExpiredTokensModule-Facebook.sql"); if (fbResults.Rows.Count > 0) { foreach (DataRow token in fbResults.Rows) { var row = expiredTokens.NewRow(); row["SocialNetwork"] = "Facebook"; row["SiteName"] = token["SiteName"]; row["AccountName"] = token["AccountName"]; expiredTokens.Rows.Add(row); } } if (expiredTokens.Rows.Count > 0) { return(new ModuleResults { Result = expiredTokens, Status = Status.Error, ResultComment = "Tokens have expired, posting stuff on some social markenting accounts doesn't work at all for accounts in results. Tell customer to reauthorize the pages.", }); } return(new ModuleResults { Status = Status.Good, ResultComment = "There are no expired tokens.", }); }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var results = dbService.ExecuteAndGetTableFromFile("PageTypeFieldsDataTypeMismatchModule.sql"); return new ModuleResults { Result = results, Status = results.Rows.Count > 0 ? Status.Warning : Status.Good, }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { InstanceInfo = instanceInfo; var result = GetInconsistenciesDataTable(); return new ModuleResults { Result = result, Status = result.Rows.Count == 0 ? Status.Good : Status.Error }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; int databaseSizeInMB = dbService.ExecuteAndGetScalar<int>("SELECT SUM(reserved_page_count) * 8.0 / 1024 FROM sys.dm_db_partition_stats"); var results = dbService.ExecuteAndGetTableFromFile("BigTablesModule.sql"); return new ModuleResults { Result = results, ResultComment = $"The overall database size is {databaseSizeInMB} MB"}; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List<string> responses = new List<string>(); var dbService = instanceInfo.DBService; var activityCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_Activity"); if (activityCount > 10000000) { responses.Add("There are over 10 000 000 (" + activityCount + " exactly) activities in the database. Consider using deleting old page visits or setting up the old contact's deletion"); } var contactsCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_Contact"); if (contactsCount > 1000000) { responses.Add("There are over 1 000 000 (" + contactsCount + " exactly) contacts in the database. Consider using old contact's deletion"); var anonymousCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_Contact WHERE ContactLastName LIKE 'Anonymous%'"); var mergedCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_Contact WHERE ContactMergedWithContactID NOT NULL"); responses.Add("Out of these " + contactsCount + " contacts, " + anonymousCount + " are anonymous and " + mergedCount + " are merged"); } var contactGroupCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_ContactGroup"); if (contactGroupCount > 50) { responses.Add("There are over 50 contact groups (" + contactGroupCount + " exactly). This might affect performance, are all of those really neccessary?"); } var scoringRuleCount = dbService.ExecuteAndGetScalar<int>("SELECT COUNT(*) FROM OM_Rule"); if (scoringRuleCount > 50) { responses.Add("There are over 50 scoring rules (" + scoringRuleCount + " exactly). This might affect performance, are all of those really neccessary?"); } if (responses.Any()) { return new ModuleResults { Result = responses, ResultComment = @"Check the counts in the result table. Exceeding the limits doesn't mean it must be wrong. It depends on other things like traffic, hardware and so on.", Status = Status.Error, }; } else { return new ModuleResults { ResultComment = "All of critical Online marketing are small enough to use Online marketing without affecting performance.", Status = Status.Good }; } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var disableAllDatabaseDebugs = false; var enabledDatabaseDebugs = new List<string>(); bool compilationDebugActive = IsCompilationDebugActive(instanceInfo); var databaseDebugSettings = GetDatabaseDebugSettings(instanceInfo.DBService); foreach (var setting in databaseDebugSettings) { if (setting.Key == "CMSDisableDebug") { disableAllDatabaseDebugs = setting.Value; } else if (setting.Value) { enabledDatabaseDebugs.Add(string.Format("The {0} setting is enabled", setting.Key)); } } var databaseDebugsActive = !disableAllDatabaseDebugs && enabledDatabaseDebugs.Count > 0; if (compilationDebugActive || databaseDebugsActive) { var result = new List<string>(); if (compilationDebugActive) { result.Add("Compilation debug is enabled in the web.config"); } if (databaseDebugsActive) { result.AddRange(enabledDatabaseDebugs); } return new ModuleResults { Status = Status.Error, Result = result, ResultComment = "Debug settings should be disabled on production instances!" }; } else { return new ModuleResults { Status = Status.Good, ResultComment = "Debug settings have been disabled!" }; } }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { DataTable expiredTokens = new DataTable("Expired account tokens"); expiredTokens.Columns.Add("SocialNetwork"); expiredTokens.Columns.Add("SiteName"); expiredTokens.Columns.Add("AccountName"); var dbService = instanceInfo.DBService; if (instanceInfo.Version != new Version("8.0")) { // LinkedIn integration is in 8.1 and newer var linResults = dbService.ExecuteAndGetTableFromFile("ExpiredTokensModule-LinkedIn.sql"); foreach (DataRow token in linResults.Rows) { var row = expiredTokens.NewRow(); row["SocialNetwork"] = "LinkedIn"; row["SiteName"] = token["SiteName"]; row["AccountName"] = token["AccountName"]; expiredTokens.Rows.Add(row); } } var fbResults = dbService.ExecuteAndGetTableFromFile("ExpiredTokensModule-Facebook.sql"); if (fbResults.Rows.Count > 0) { foreach (DataRow token in fbResults.Rows) { var row = expiredTokens.NewRow(); row["SocialNetwork"] = "Facebook"; row["SiteName"] = token["SiteName"]; row["AccountName"] = token["AccountName"]; expiredTokens.Rows.Add(row); } } if (expiredTokens.Rows.Count > 0) { return new ModuleResults { Result = expiredTokens, Status = Status.Error, ResultComment = "Tokens have expired, posting stuff on some social markenting accounts doesn't work at all for accounts in results. Tell customer to reauthorize the pages.", }; } return new ModuleResults { Status = Status.Good, ResultComment = "There are no expired tokens.", }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; var urls = dbService.ExecuteAndGetTableFromFile("ScreenshotterModule.sql"); // Start process in separate thread to make website responsive. Thread t = new Thread(StartScreenshotting); t.Start(new object[] { instanceInfo, urls }); return new ModuleResults { Result = urls }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; int databaseSizeInMB = dbService.ExecuteAndGetScalar<int>("SELECT SUM(reserved_page_count) * 8.0 / 1024 FROM sys.dm_db_partition_stats"); var results = dbService.ExecuteAndGetDataSetFromFile("BigTablesModule.sql"); results.Tables[0].TableName = "Top 25 Tables By Rows"; results.Tables[1].TableName = "Top 25 Tables By Data"; return new ModuleResults { Result = results, ResultComment = String.Format("The overall database size is {0} MB", databaseSizeInMB)
public ModuleResults GetResults(IInstanceInfo instanceInfo) { List<string> report = new List<string>(); mDatabaseService = instanceInfo.DBService; DataTable webPartsInTransformationsTable = GetPageTemplateWebParts(LikePageTemplateDisplayName); List<string> whereOrderResults = new List<string>(); List<string> otherResults = new List<string>(); foreach (DataRow webPart in webPartsInTransformationsTable.Rows) { string pageTemplateDisplayName = webPart["PageTemplateDisplayName"] as string; XmlDocument webPartsXmlDoc = new XmlDocument(); webPartsXmlDoc.LoadXml(webPart["PageTemplateWebParts"] as string); whereOrderResults.AddRange(AnalyseWhereAndOrderByConditionsInPageTemplateWebParts(webPartsXmlDoc, pageTemplateDisplayName)); otherResults.AddRange(AnalysePageTemplateWebParts(webPartsXmlDoc, pageTemplateDisplayName)); } if (whereOrderResults.Count > 0) { report.Add("------------------------ Web parts - Where and Order condition results - Potential SQL injections -----------------"); report.AddRange(whereOrderResults); } if (otherResults.Count > 0) { report.Add("------------------------ Macros in DB - Potential XSS -----------------"); report.AddRange(otherResults); } if (report.Count == 0) { return new ModuleResults { ResultComment = "No problems in web parts found.", Status = Status.Good }; } StringBuilder res = new StringBuilder(); report.ForEach(it => res.Append(it.Replace("\n", "<br />"))); return new ModuleResults { Result = report, Trusted = true }; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { var dbService = instanceInfo.DBService; if (instanceInfo.Version == new Version("6.0")) { return new ModuleResults { Result = dbService.ExecuteAndGetPrintsFromFile("WebPartColumnsModule6.sql"), }; } return new ModuleResults { Result = dbService.ExecuteAndGetPrintsFromFile("WebPartColumnsModule.sql"), }; }
private static bool IsCompilationDebugActive(IInstanceInfo instanceInfo) { Version kenticoVersion = instanceInfo.Version; string pathToWebConfig = instanceInfo.Directory.ToString(); if ((kenticoVersion >= new Version("8.0")) && !(instanceInfo.Directory.ToString().EndsWith("\\CMS\\") || instanceInfo.Directory.ToString().EndsWith("\\CMS"))) { pathToWebConfig += "\\CMS"; } ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = pathToWebConfig + "\\web.config" }; Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); CompilationSection compilationSection = (CompilationSection)configuration.GetSection(@"system.web/compilation"); var compilationDebugActive = compilationSection != null ? compilationSection.Debug : false; return compilationDebugActive; }
public ModuleResults GetResults(IInstanceInfo instanceInfo) { if (!TestUrl(instanceInfo.Uri, "robots.txt")) { return new ModuleResults { Status = Status.Warning, Result = "Missing! Please add the robots.txt into the web root", }; } return new ModuleResults { Status = Status.Good, Result = "All good, robots.txt found.", }; }