CGC_Codes

Custom Errors Analyzer

Mar 10th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.98 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Collections.Immutable;
  5. using System.Linq;
  6. using System.Threading;
  7. using System.Xml;
  8. using System.Xml.Linq;
  9. using Microsoft.CodeAnalysis;
  10. using Microsoft.CodeAnalysis.Text;
  11. using Microsoft.CodeAnalysis.Diagnostics;
  12. using System.Xml.Xsl;
  13. using System.Configuration;
  14. using System.Xml.XPath;
  15. using Puma.Security.Rules.Model;
  16. using Puma.Security.Rules.Common;
  17. using Puma.Security.Rules.Common.Extensions;
  18. using Puma.Security.Rules.Diagnostics;
  19.  
  20. namespace Puma.Security.Rules.Analyzer.Configuration
  21. {
  22.     [SupportedDiagnostic(DiagnosticId.SEC0002)]
  23.     public class CustomErrorsAnalyzer : IConfigurationFileAnalyzer
  24.     {
  25.         private const string CUSTOMERRORS_SEARCH_EXPRESSION = "configuration/system.web/customErrors";
  26.  
  27.         public IEnumerable<DiagnosticInfo> GetDiagnosticInfo(IEnumerable<ConfigurationFile> srcFiles,
  28.             CancellationToken cancellationToken)
  29.         {
  30.             var result = new List<DiagnosticInfo>();
  31.  
  32.             foreach (var config in srcFiles)
  33.             {
  34.                 var customErrors =
  35.                     config.ProductionConfigurationDocument.XPathSelectElement(CUSTOMERRORS_SEARCH_EXPRESSION);
  36.  
  37.                 //Default (<customErrors mode="RemoteOnly" />) is not an issue
  38.                 //Look for the mode attribute, again default val is not an issue
  39.                 XAttribute mode = customErrors?.Attribute("mode");
  40.                 if (mode == null)
  41.                     continue;
  42.  
  43.                 //Any value that is not "Off" is ok
  44.                 if (string.Compare(mode.Value, "Off", StringComparison.OrdinalIgnoreCase) != 0)
  45.                     continue;
  46.  
  47.                 var lineInfo = config.GetProductionLineInfo(customErrors, CUSTOMERRORS_SEARCH_EXPRESSION);
  48.                 result.Add(new DiagnosticInfo(config.Source.Path, lineInfo.LineNumber, customErrors.ToString()));
  49.             }
  50.  
  51.             return result;
  52.         }
  53.     }
  54. }
Add Comment
Please, Sign In to add comment