public static void BeforeRequest(Session oS)
        {
            var file = oS.url.Replace('/', '_').Split('?').First();
            var method = oS.HTTPMethodIs("GET") ? "GET"
                             : oS.HTTPMethodIs("POST") ? "POST"
                                   : oS.HTTPMethodIs("PUT") ? "PUT" : null;
            oS.utilCreateResponseAndBypassServer();
            var lines = File.ReadAllLines("./Api/Data/" + method + " " + file + ".txt");
            oS.oResponse.headers = Parser.ParseResponse(lines.First());
            oS.oResponse.headers.Add("Content-Type", "application/json");

            oS.utilSetResponseBody(String.Join(Environment.NewLine, lines.Skip(2).ToArray()));
        }
Beispiel #2
0
        private void InterceptRequest(Session session)
        {
            if (!session.hostname.EndsWith(s3Configuration.ServiceUrl))
              {
            return;
              }

              if (session.HTTPMethodIs("CONNECT"))
              {
            session.oFlags["x-replywithtunnel"] = "fake tunnel";
            return;
              }

              string bucket = string.Empty;
              if (!session.HostnameIs(s3Configuration.ServiceUrl))
              {
            string virtualHostedPath = session.hostname.Replace("." + s3Configuration.ServiceUrl, string.Empty);
            bucket = "/" + virtualHostedPath;
              }

              if(session.isHTTPS)
              {
            session.fullUrl = session.fullUrl.Replace("https", "http");
              }
              session.host = string.Format("127.0.0.1:{0}", s3Configuration.HostPort);
              session.PathAndQuery = string.Format("{0}{1}", bucket, session.PathAndQuery);
        }
        public void AutoTamperRequestBefore(Session session)
        {
            if (Settings.enabled && session.HostnameIs(reportHost) && !session.isFTP)
            {
                // TODO: We should offer an option to hide the reports from Fiddler; change "ui-strikeout" to "ui-hide" in the next line
                session["ui-strikeout"] = "CSPReportGenerator";

                if (!session.HTTPMethodIs("CONNECT"))
                {
                    session.utilCreateResponseAndBypassServer();
                    session.oResponse.headers.Add("Content-Type", "text/html");
                    session.ResponseBody = Encoding.UTF8.GetBytes("<!doctype html><HTML><BODY><H1>Report received.</H1></BODY></HTML>");

                    ProcessCSPReport(session);
                }
                else
                {
                    session["x-replywithtunnel"] = "CSPReportGenerator";
                }
            }
        }
 void OnFiddlerResponseReceived(Session oSession)
 {
     if (oSession.HTTPMethodIs("CONNECT"))
     {
         // iOS 10.0 beta bug. rdar://problem/27423535
         oSession.ResponseHeaders.Remove("Connection");
     }
 }
Beispiel #5
0
 // 패턴 체크 실행
 void checkUrlType(HostCheck patternCheck, Session oSession)
 {
     if (oSession.HTTPMethodIs("CONNECT")) {
         oSession.hostname = patternCheck.afterHost();
     } else {
         oSession.fullUrl = patternCheck.afterUrl(oSession.fullUrl);
     }
 }
Beispiel #6
0
        // HOST, URL, REAL 타입체크
        void checkHost(Session oSession)
        {
            HostCheck patternCheck = PLinkCore.PLink.host.checkPattern(oSession.fullUrl);

            if (patternCheck != null && patternCheck.Checked) {
                checkUrlType(patternCheck, oSession);
                //return;
            }

            HostCheck check = PLinkCore.PLink.host.checkUrl(oSession.hostname, oSession.PathAndQuery);

            if (check == null) return;
            if (!check.Checked) return;

            // Host, Real 적용
            if (check.isHost() || check.isReal()) {
                if (oSession.HTTPMethodIs("CONNECT")) {
                    oSession.hostname = check.afterHost();
                } else {
                    oSession.bypassGateway = true;
                    oSession["x-overrideHost"] = check.After;
                }
            }
            // URL, PATTERN 적용
            else if (check.isUrl() || check.isPattern()) {
                if (oSession.HTTPMethodIs("CONNECT")) {
                    oSession.hostname = check.afterHost();
                } else {
                    // 캐쉬된 정책 적용
                    string redirect = check.getHostItem().Redirect;
                    if (!string.IsNullOrEmpty(redirect)) {
                        check.After = redirect;
                    }
                    oSession.fullUrl = check.afterUrl(oSession.fullUrl);
                }
            }
        }
Beispiel #7
0
        // 패턴 체크 실행
        bool checkUrlType(HostCheck patternCheck, Session oSession)
        {
            if (oSession.HTTPMethodIs("CONNECT")) {
                oSession.hostname = patternCheck.afterHost();

            } else {

                if (patternCheck.isStatus()) {
                    int code = patternCheck.getStatusCode();

                    sendResponse(oSession, code, "text/html", new byte[0]);

                    return false;
                }

                if (patternCheck.isFolder() || patternCheck.isFile()) {
                    string url = oSession.fullUrl;
                    int idx = url.LastIndexOf(patternCheck.Before);

                    FileInfo file;
                    string target;

                    if (patternCheck.isFolder()) {

                        string first = url.Substring(0, idx);
                        string second = patternCheck.Before;
                        string last = url.Replace(first, "").Replace(second, "");

                        log(first + " : " + second + " : " + last);

                        if (string.IsNullOrEmpty(last) || last.Equals("/")) {
                            last = "/index.html";
                        }

                        if (last[0] != '/') {  last = "/" + last; }

                        target = patternCheck.After + last;
                    } else {
                        target = patternCheck.After;
                    }

                    file = new FileInfo(target);

                    if (file.Exists) {
                        string content_type = MimeType.Get(file.Extension);
                        byte[] data = File.ReadAllBytes(file.FullName);

                        sendResponse(oSession, 200, content_type, data);

                        return false;

                    }

                } else {
                    oSession.fullUrl = patternCheck.afterUrl(oSession.fullUrl);

                }

            }

            return true;
        }