// Path: src/main/java/burp/j2ee/CustomScanIssue.java
// public class CustomScanIssue implements IScanIssue {
// 
//     private IHttpService httpService;
//     private URL url;
//     private IHttpRequestResponse httpMessages;
//     private String name;
//     private String detail;
//     private Risk severity;
//     private String remedy;
//     private Confidence confidence = Confidence.Certain;
//     
//     public CustomScanIssue(
//             IHttpService httpService,
//             URL url,
//             IHttpRequestResponse httpMessages,
//             String name,
//             String detail,
//             String remedy,
//             Risk severity,
//             Confidence confidence) {
//         this.httpService = httpService;
//         this.url = url;
//         this.httpMessages = httpMessages;
//         this.name = "J2EEScan - " + name;
//         this.detail = detail;
//         this.remedy = remedy;
//         this.severity = severity;
//         this.confidence = confidence;
//     }      
//     
// 
//     @Override
//     public URL getUrl() {
//         return url;
//     }
// 
//     @Override
//     public String getIssueName() {
//         return name;
//     }
// 
//     @Override
//     public int getIssueType() {
//         return 0;
//     }
// 
//     @Override
//     public String getSeverity() {
//         return severity.toString();
//     }
// 
//     @Override
//     // "Certain", "Firm" or "Tentative"
//     public String getConfidence() {
//         return confidence.toString();
//     }
// 
//     @Override
//     public String getIssueBackground() {
//         return null;
//     }
// 
//     @Override
//     public String getRemediationBackground() {
//         return null;
//     }
// 
//     @Override
//     public String getIssueDetail() {
//         return detail;
//     }
// 
//     @Override
//     public String getRemediationDetail() {
//         return remedy;
//     }
// 
//     @Override
//     public IHttpRequestResponse[] getHttpMessages() {
//         return new IHttpRequestResponse[]{httpMessages};
//     }
// 
//     @Override
//     public IHttpService getHttpService() {
//         return httpService;
//     }
// 
// }
// 
// Path: src/main/java/burp/HTTPMatcher.java
// public static String getApplicationContext(URL url) {
// 
//     String path = url.getPath();
//     int i = path.indexOf("/", 1);
//     String context = path.substring(0, i + 1);
// 
//     return context;
// }
// 
// Path: src/main/java/burp/HTTPMatcher.java
// public static String getApplicationContextAndNestedPath(URL url) {
// 
//     String path = url.getPath();
//     int i = path.lastIndexOf('/');
//     String context = path.substring(0, i + 1);
// 
//     return (StringUtils.countMatches(context, "/") == 3) ? context : "";
// }


import burp.j2ee.CustomScanIssue;
import burp.CustomHttpRequestResponse;
import static burp.HTTPMatcher.getApplicationContext;
import static burp.HTTPMatcher.getApplicationContextAndNestedPath;
import burp.IBurpExtenderCallbacks;
import burp.IExtensionHelpers;
import burp.IHttpRequestResponse;
import burp.IRequestInfo;
import burp.IResponseInfo;
import burp.IScanIssue;
import burp.IScannerInsertionPoint;
import burp.j2ee.Confidence;
import burp.j2ee.Risk;
import burp.j2ee.annotation.RunOnlyOnce;
import burp.j2ee.issues.IModule;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
         *
         * http://www.example.com/{FUZZ_LFI_PAYLOADS}
         */
        // System not yet tested for this vulnerability
        if (!hs.contains(system)) {

            hs.add(system);

            // Test Local File include
            for (String path : UTF8_LFI_PATHS) {

                Set<String> lfiOSResources = LFI_RESOURCES.keySet();

                for (String osResource : lfiOSResources) {

                    try {

                        URL urlToTest = new URL(protocol, url.getHost(), url.getPort(), path + osResource);
                        byte[] utf8LFIAttempt = helpers.buildHttpRequest(urlToTest);

                        byte[] responseBytes = callbacks.makeHttpRequest(url.getHost(),
                                url.getPort(), isSSL, utf8LFIAttempt);

                        IResponseInfo UTF8LFIInfo = helpers.analyzeResponse(responseBytes);
                        String response = helpers.bytesToString(responseBytes);

                        Pattern detectionRule = LFI_RESOURCES.get(osResource);

                        Matcher matcher = detectionRule.matcher(response);
                        if (matcher.find()) {
// Path: src/main/java/burp/j2ee/CustomScanIssue.java
// public class CustomScanIssue implements IScanIssue {
// 
//     private IHttpService httpService;
//     private URL url;
//     private IHttpRequestResponse httpMessages;
//     private String name;
//     private String detail;
//     private Risk severity;
//     private String remedy;
//     private Confidence confidence = Confidence.Certain;
//     
//     public CustomScanIssue(
//             IHttpService httpService,
//             URL url,
//             IHttpRequestResponse httpMessages,
//             String name,
//             String detail,
//             String remedy,
//             Risk severity,
//             Confidence confidence) {
//         this.httpService = httpService;
//         this.url = url;
//         this.httpMessages = httpMessages;
//         this.name = "J2EEScan - " + name;
//         this.detail = detail;
//         this.remedy = remedy;
//         this.severity = severity;
//         this.confidence = confidence;
//     }      
//     
// 
//     @Override
//     public URL getUrl() {
//         return url;
//     }
// 
//     @Override
//     public String getIssueName() {
//         return name;
//     }
// 
//     @Override
//     public int getIssueType() {
//         return 0;
//     }
// 
//     @Override
//     public String getSeverity() {
//         return severity.toString();
//     }
// 
//     @Override
//     // "Certain", "Firm" or "Tentative"
//     public String getConfidence() {
//         return confidence.toString();
//     }
// 
//     @Override
//     public String getIssueBackground() {
//         return null;
//     }
// 
//     @Override
//     public String getRemediationBackground() {
//         return null;
//     }
// 
//     @Override
//     public String getIssueDetail() {
//         return detail;
//     }
// 
//     @Override
//     public String getRemediationDetail() {
//         return remedy;
//     }
// 
//     @Override
//     public IHttpRequestResponse[] getHttpMessages() {
//         return new IHttpRequestResponse[]{httpMessages};
//     }
// 
//     @Override
//     public IHttpService getHttpService() {
//         return httpService;
//     }
// 
// }
// 
// Path: src/main/java/burp/HTTPMatcher.java
// public static String getApplicationContext(URL url) {
// 
//     String path = url.getPath();
//     int i = path.indexOf("/", 1);
//     String context = path.substring(0, i + 1);
// 
//     return context;
// }
// 
// Path: src/main/java/burp/HTTPMatcher.java
// public static String getApplicationContextAndNestedPath(URL url) {
// 
//     String path = url.getPath();
//     int i = path.lastIndexOf('/');
//     String context = path.substring(0, i + 1);
// 
//     return (StringUtils.countMatches(context, "/") == 3) ? context : "";
// }


// Path: src/main/java/burp/j2ee/issues/impl/InfrastructurePathTraversal.java
import burp.j2ee.CustomScanIssue;
import burp.CustomHttpRequestResponse;
import static burp.HTTPMatcher.getApplicationContext;
import static burp.HTTPMatcher.getApplicationContextAndNestedPath;
import burp.IBurpExtenderCallbacks;
import burp.IExtensionHelpers;
import burp.IHttpRequestResponse;
import burp.IRequestInfo;
import burp.IResponseInfo;
import burp.IScanIssue;
import burp.IScannerInsertionPoint;
import burp.j2ee.Confidence;
import burp.j2ee.Risk;
import burp.j2ee.annotation.RunOnlyOnce;
import burp.j2ee.issues.IModule;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

         *
         * http://www.example.com/{FUZZ_LFI_PAYLOADS}
         */
        // System not yet tested for this vulnerability
        if (!hs.contains(system)) {

            hs.add(system);

            // Test Local File include
            for (String path : UTF8_LFI_PATHS) {

                Set<String> lfiOSResources = LFI_RESOURCES.keySet();

                for (String osResource : lfiOSResources) {

                    try {

                        URL urlToTest = new URL(protocol, url.getHost(), url.getPort(), path + osResource);
                        byte[] utf8LFIAttempt = helpers.buildHttpRequest(urlToTest);

                        byte[] responseBytes = callbacks.makeHttpRequest(url.getHost(),
                                url.getPort(), isSSL, utf8LFIAttempt);

                        IResponseInfo UTF8LFIInfo = helpers.analyzeResponse(responseBytes);
                        String response = helpers.bytesToString(responseBytes);

                        Pattern detectionRule = LFI_RESOURCES.get(osResource);

                        Matcher matcher = detectionRule.matcher(response);
                        if (matcher.find()) {
                            issues.add(new CustomScanIssue(