public SecureChannelMessage <string> Invoke(string className, string methodName, string jsonParams)
        {
            SecureChannelMessage <string> result = new SecureChannelMessage <string>();

            HttpArgs args = new HttpArgs();

            args.ParseJson(jsonParams);
            string parameters = args["jsonParams"];
            SecureExecutionRequest request = new SecureExecutionRequest(HttpContext, className, methodName, parameters)
            {
                ApiKeyResolver  = ApiKeyResolver,
                ServiceProvider = ServiceProvider
            };
            bool success = request.Execute();

            string data = request.Result as string;

            if (string.IsNullOrEmpty(data))
            {
                throw new SecureChannelInvokeException(className, methodName, jsonParams);
            }
            result.Data    = data;
            result.Success = success;

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// validates if the arguments are correct. eg: the url is a required argument.
        /// </summary>
        /// <param name="args">the specified list of arguments.</param>
        /// <returns>a boolean indicating if the arguments are correct.</returns>
        private static bool AreArgsValid(HttpArgs args)
        {
            if (args == null)
            {
                Console.WriteLine("No values have been supplied");
                return(false);
            }
            if (args.Help)
            {
                HttpHelp();
                return(false);
            }
            if (string.IsNullOrEmpty(args.Url))
            {
                Console.WriteLine("Url must be supplied.");
                return(false);
            }
            if (!string.IsNullOrEmpty(args.ProxyCredentialUsername) && !string.IsNullOrEmpty(args.ProxyCredentialPassword))
            {
                args.Proxy.Credentials = !string.IsNullOrEmpty(args.ProxyCredentialDomain)
                    ? new NetworkCredential(args.ProxyCredentialUsername, args.ProxyCredentialPassword, args.ProxyCredentialDomain)
                    : new NetworkCredential(args.ProxyCredentialUsername, args.ProxyCredentialPassword);
            }
            if (args.ProxyAddBypassRule != null && args.ProxyAddBypassRule.Count > 0)
            {
                foreach (var bypass in args.ProxyAddBypassRule)
                {
                    args.Proxy.BypassArrayList.Add(bypass);
                }
            }

            return(true);
        }
Exemple #3
0
        protected override string Post(ServiceProxyInvokeEventArgs invokeArgs, HttpWebRequest request)
        {
            string baseAddress = invokeArgs.BaseAddress;
            string className   = invokeArgs.ClassName;
            string methodName  = invokeArgs.MethodName;

            object[] parameters = invokeArgs.PostParameters;
            if (className.Equals("securechannel", StringComparison.InvariantCultureIgnoreCase) && methodName.Equals("invoke", StringComparison.InvariantCultureIgnoreCase))
            {
                // the target is the SecureChannel.Invoke method but we
                // need the actual className and method that is in the parameters
                // object
                string   actualClassName  = (string)parameters[0];
                string   actualMethodName = (string)parameters[1];
                string   jsonParams       = (string)parameters[2];
                HttpArgs args             = new HttpArgs();
                args.ParseJson(jsonParams);

                if (TypeRequiresApiKey || MethodRequiresApiKey(actualMethodName))
                {
                    ApiKeyResolver.SetKeyToken(request, ApiParameters.GetStringToHash(actualClassName, actualMethodName, args["jsonParams"]));
                }
            }
            return(base.Post(invokeArgs, request));
        }
        protected internal virtual void Initialize()
        {
            lock (_initLock)
            {
                if (!IsInitialized)
                {
                    OnInitializing();

                    if (HttpMethod.Equals("POST") && string.IsNullOrEmpty(Path.GetExtension(Request.Url.AbsolutePath)))
                    {
                        HttpArgs args = HttpArgs;
                        string   jsonParams;
                        if (args.Has("jsonParams", out jsonParams))
                        {
                            JsonParams = jsonParams;
                        }
                    }
                    else if (InputString.StartsWith("{")) // TODO: this should be reviewed for validity, check Content/Type
                    {
                        JsonParams = InputString;
                    }

                    ParseRequestUrl();
                    IsInitialized = true;

                    OnInitialized();
                }
            }
        }
Exemple #5
0
 public HttpResponseArgs Handle(HttpArgs args)
 {
     return(ApiReturn.Return(new ApiReturn
     {
         Code = HttpCode.Success,
         Message = "获取提交记录成功",
         Data = new Model().Select(null)
     }));
 }
Exemple #6
0
 public HttpResponseArgs Handle(HttpArgs args)
 {
     return(ApiReturn.Return(new ApiReturn()
     {
         Code = HttpCode.Success,
         Message = "获取题目信息成功",
         Data = Data.Problems
     }));
 }
Exemple #7
0
        public static HttpResponseArgs Handle(HttpArgs args)
        {
            if (!appTypes.ContainsKey(args.GetArgValue(appKey)))
            {
                return(null);
            }
            var construct = appTypes[args.GetArgValue(appKey)].GetConstructor(new Type[0]);
            var app       = (IApplication)construct.Invoke(null);

            return(app.Handle(args));
        }
 /// <summary>
 /// Decrypt the input string of the specified ExecutionRequest
 /// if it is intended for the SecureChannel
 /// </summary>
 /// <param name="execRequest"></param>
 public static void DecryptSecureChannelInvoke(ExecutionRequest execRequest)
 {
     if (execRequest.Instance != null &&
         execRequest.Instance.GetType() == typeof(SecureChannel) &&
         execRequest.MethodName.Equals(nameof(SecureChannel.Invoke)))
     {
         execRequest.InputString = SecureSession.Get(execRequest.Context).Decrypt(execRequest.InputString);
         HttpArgs args = new HttpArgs();
         args.ParseJson(execRequest.InputString);
         execRequest.JsonParams = args["jsonParams"];
     }
 }
Exemple #9
0
        public HttpResponseArgs Handle(HttpArgs args)
        {
            var model    = new JudgeModel();
            var code     = args.GetPostValue()["code"].ToString();
            var session  = args.GetPostValue()["session"].ToString();
            var id       = args.GetArgValue("id");  //题目ID
            var language = args.GetArgValue("lan"); //语言
            var sno      = Data.GetSno(session);

            if (sno == string.Empty)
            {
                return(ApiReturn.Return(new ApiReturn()
                {
                    Code = HttpCode.Success,
                    Message = "session验证失败",
                    Data = null
                }));
            }
            var source = Handler.SaveAsFile(code, id, sno, language);
            var exe    = Handler.Compiler(source, language);

            if (!exe.Exists)
            {
                model.Insert(new Dictionary <string, object>
                {
                    { "problem", id },
                    { "language", language },
                    { "runtime", 0 },
                    { "result", JudgeResult.EA },
                    { "sno", sno },
                    { "time", DateTime.Now }
                });
            }
            var reslut = Handler.Judge(id, exe, language);

            model.Insert(new Dictionary <string, object>
            {
                { "problem", id },
                { "language", language },
                { "runtime", reslut.Time },
                { "result", reslut.Result },
                { "sno", sno },
                { "time", DateTime.Now }
            });
            Console.WriteLine(Program.TimeLabel() + "用户{0}提交了问题{1}的答案,运行结果{2},用时{3}ms.", sno, id, reslut.Result.ToString(), reslut.Time);
            return(ApiReturn.Return(new ApiReturn()
            {
                Code = HttpCode.Success,
                Message = reslut.Pass ? "运行通过" : "答案错误",
                Data = reslut
            }));
        }
Exemple #10
0
        public HttpResponseArgs Handle(HttpArgs args)
        {
            var model    = new RegisterModel();
            var sno      = args.GetPostValue()["sno"].ToString();
            var pw       = args.GetPostValue()["pw"].ToString();
            var register = model.Register(sno, pw);

            Console.WriteLine(Program.TimeLabel() + "用户{0}已注册.", sno);
            return(ApiReturn.Return(new ApiReturn()
            {
                Code = HttpCode.Success,
                Message = register ? "注册成功" : "账号已存在",
                Data = register
            }));
        }
Exemple #11
0
        private static ExecutionRequest CreateExecutionRequest(string path)
        {
            Uri                 uri   = new Uri("http://blah.com" + path);
            HttpArgs            query = new HttpArgs(uri.Query);
            NameValueCollection nvc   = new NameValueCollection();

            query.Keys.Each(k =>
            {
                nvc.Add(k, query[k]);
            });
            RequestWrapper   req         = new RequestWrapper(new { Headers = new NameValueCollection(), Url = uri, HttpMethod = "GET", ContentLength = 0, QueryString = nvc });
            ResponseWrapper  res         = new ResponseWrapper(new object());
            ExecutionRequest execRequest = new ExecutionRequest(req, res);

            return(execRequest);
        }
Exemple #12
0
        public SecureChannelMessage <string> Invoke(string className, string methodName, string jsonParams)
        {
            SecureChannelMessage <string> result = new SecureChannelMessage <string>();

            HttpArgs args = new HttpArgs();

            args.ParseJson(jsonParams);
            string parameters = args["jsonParams"];
            SecureExecutionRequest request = new SecureExecutionRequest(HttpContext, className, methodName, parameters)
            {
                ApiKeyResolver  = ApiKeyResolver,
                ServiceProvider = ServiceProvider
            };
            bool success = request.Execute();

            if (request.Result is ValidationResult validationResult)
            {
                result.Data    = "validation failed";
                result.Message = validationResult.Message;
                result.Success = false;
                Logger.AddEntry("Validation failed for SecureChannel.Invoke for {0}.{1}:\r\n\tMessage={2}\r\n\tFailures: {3}:\r\n *** jsonParams were ***\r\n{4}",
                                LogEventType.Warning,
                                className,
                                methodName,
                                validationResult.Message,
                                string.Join(",", validationResult.ValidationFailures),
                                jsonParams);
            }
            else
            {
                string data = request.Result as string;
                if (string.IsNullOrEmpty(data))
                {
                    throw new SecureChannelInvokeException(className, methodName, jsonParams);
                }
                result.Data    = data;
                result.Success = success;
            }

            return(result);
        }
Exemple #13
0
        public SecureChannelMessage <string> Invoke(string className, string methodName, string jsonParams)
        {
            SecureChannelMessage <string> result = new SecureChannelMessage <string>();

            HttpArgs args = new HttpArgs();

            args.ParseJson(jsonParams);
            string parameters = args["jsonParams"];
            SecureExecutionRequest request = new SecureExecutionRequest(HttpContext, className, methodName, parameters);

            request.ApiKeyResolver  = ApiKeyResolver;
            request.ServiceProvider = ServiceProvider;
            bool success = request.Execute();

            ValidationResult validationResult = request.Result as ValidationResult;

            if (Debug && validationResult != null)
            {
                result.Data    = "validation failed";
                result.Message = validationResult.Message;
                result.Success = false;
            }
            else
            {
                if (validationResult != null)
                {
                    Logger.AddEntry("Validation failed for SecureChannel.Invoke for {0}.{1}:\r\n *** jsonParams were ***\r\n{2}",
                                    LogEventType.Warning,
                                    className,
                                    methodName,
                                    jsonParams);
                }

                result.Data    = (string)request.Result; //this will throw an exception if validation failed causing 404 not found to be sent back which is what we want for security if debug is off
                result.Success = success;
            }

            return(result);
        }
Exemple #14
0
        public override bool TryRespond(IHttpContext context)
        {
            if (!this.IsInitialized)
            {
                Initialize();
            }

            IRequest  request  = context.Request;
            IResponse response = context.Response;
            bool      handled  = false;
            string    path     = request.Url.AbsolutePath;
            string    appName  = AppConf.AppNameFromUri(request.Url, BamConf.AppConfigs);

            string[] chunks = path.DelimitSplit("/");

            HttpArgs queryString = new HttpArgs(request.Url.Query);
            bool     min         = !string.IsNullOrEmpty(queryString["min"]);

            if (chunks[0].ToLowerInvariant().Equals("dao") && chunks.Length > 1)
            {
                string method = chunks[1];
                if (_dynamicResponders.ContainsKey(method))
                {
                    response.ContentType = GetContentTypeForExtension(".js");
                    string script = _dynamicResponders[method](appName, min);
                    SendResponse(response, script);
                    handled = true;
                    OnResponded(context);
                }
                else
                {
                    handled = TryExecuteCrudRequest(chunks, context, handled, appName);
                    OnNotResponded(context);
                }
            }

            return(handled);
        }
Exemple #15
0
        public string GetTemplateName(object toRender)
        {
            HttpArgs args = HttpArgs;//new HttpArgs(ExecutionRequest.Request.Url.Query);
            string   result;

            args.Has("view", out result);
            if (string.IsNullOrEmpty(result))
            {
                string prefix = string.Empty;
                if (toRender != null)
                {
                    Type typeToRender = toRender.GetType();
                    prefix = "{0}_"._Format(typeToRender.Name);
                    ITemplateRenderer dustRenderer = ContentResponder.AppContentResponders[AppName].AppTemplateRenderer;
                    dustRenderer.EnsureDefaultTemplate(typeToRender);
                }
                AppContentResponder appContentResponder = ContentResponder.AppContentResponders[AppName];
                string domAppName = AppConf.DomApplicationIdFromAppName(appContentResponder.AppConf.Name);

                result = "{0}.{1}default"._Format(domAppName, prefix);
            }

            return(result);
        }
Exemple #16
0
        public HttpResponseArgs Handle(HttpArgs args)
        {
            var model   = new LoginModel();
            var sno     = args.GetPostValue()["sno"].ToString();
            var pw      = args.GetPostValue()["pw"].ToString();
            var session = model.Login(sno, pw);

            if (session == string.Empty)
            {
                return(ApiReturn.Return(new ApiReturn()
                {
                    Code = HttpCode.Success,
                    Message = "登陆失败",
                    Data = string.Empty
                }));
            }
            Console.WriteLine(Program.TimeLabel() + "用户{0}已登录.", sno);
            return(ApiReturn.Return(new ApiReturn()
            {
                Code = HttpCode.Success,
                Message = "登陆成功",
                Data = session
            }));
        }
Exemple #17
0
        /// <summary>
        /// does the actual http request.
        /// </summary>
        /// <param name="args">the list of parsed arguments.</param>
        private static void DoRequest(HttpArgs args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            //Console.WriteLine("--- BEGIN");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            // display help if no arguments where provided or if arguments where invalid
            if (args == null || !AreArgsValid(args))
            {
                HttpHelp(); return;
            }

            var http = new Global.Http.Http(args.Url);

            // for some reason if we set the value after it will not recognize it
            // we have to set before the other values
            if (args.KeepAlive != null)
            {
                http.KeepAlive = (bool)args.KeepAlive;
            }

            http = http.SetMethod(args.Method)
                   .SetContentType(args.ContentType)
                   .SetUserAgent(args.UserAgent)
                   .SetPayload(args.Payload)
                   .SetRequestEncoding(args.PayloadEncoding)
                   .SetResponseEncoding(args.ResponseEncoding);
            if (args.Timeout != null)
            {
                http.Timeout = (int)args.Timeout;
            }
            if (args.Header != null && args.Header.Count > 0)
            {
                http.Headers = args.Header;
            }
            if (!string.IsNullOrEmpty(args.Accept))
            {
                http.Accept = args.Accept;
            }
            if (args.Credential != null)
            {
                http.Credentials = args.Credential;
            }
            if (args.Proxy != null)
            {
                http.Proxy = args.Proxy;
            }
            // track how long the request took to show in the output console
            var started  = DateTime.Now;
            var response = http.DoRequest();
            var ended    = DateTime.Now;

            if (http.Response != null)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\n{0} {1} | {2} {3}", (int)http.Response.StatusCode, http.Response.StatusCode, args.Method, args.Url);

                if (http.Response.Headers != null)
                {
                    foreach (var h in http.Response.Headers)
                    {
                        Console.WriteLine("{0}: {1}", h.Key, string.Join(", ", h.Value));
                    }
                }
                Console.ForegroundColor = ConsoleColor.DarkGreen;

                if (http.Response.IsSuccessStatusCode)
                {
                    if (!string.IsNullOrEmpty(args.Regex))
                    {
                        var m = new Regex(args.Regex, RegexOptions.IgnoreCase | RegexOptions.Singleline).Matches(response);
                        if (m.Count > 0)
                        {
                            var builder = new StringBuilder("");
                            for (var i = 0; i < m.Count; i++)
                            {
                                builder.AppendFormat("Match {0}: {1}", i + 1, !string.IsNullOrEmpty(args.RegexGroup) ? m[i].Groups[args.RegexGroup] : m[i]);
                                builder.Append(i < m.Count - 1 ? "\n" : "");
                            }
                            response = builder.ToString();
                        }
                        else
                        {
                            response = "No matches were found!";
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("N/A (Failed unexpectadly).");
            }

            if (!string.IsNullOrEmpty(args.OutputPath) && !string.IsNullOrEmpty(response))
            {
                using (var writer = new StreamWriter(args.OutputPath)) writer.WriteLine(response);
            }
            else if (args.OutputToConsole && !string.IsNullOrEmpty(response))
            {
                Console.WriteLine("");
                Console.WriteLine(response);
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("");
            Console.WriteLine("{0}", new TimeSpan((ended - started).Ticks).ToString("c"));
        }
        protected virtual object[] GetArguments()
        {
            // TODO: consider extracting this functionality into an ExecutionResponse class that takes the request and resolves the
            // relevant bits using an IExecutionRequestTargetResolver stated in ResolveExecutionTargetInfo.
            //           AND/OR
            // TODO: consider breaking this class up into specific ExecutionRequest implementations that encapsulate the style of intput parameters/arguments
            //  JsonParamsExecutionRequest, OrderedHttpArgsExecutionRequest, FormEncodedPostExecutionRequest, QueryStringParametersExecutionRequest.
            //  The type of the request should be resolved by examining the ContentType

            // see ExecutionRequestResolver.ResolveExecutionRequest

            // This method is becoming a little bloated
            // due to accomodating too many input paths.
            // This will need to be refactored IF
            // changes continue to be necessary
            // 07/29/2018 - +1 added notes -BA
            // see commit 2526558ea460852c033d1151dc190308a9feaefd

            object[] result = new object[] { };;
            if (HttpArgs.Has("jsonParams", out string jsonParams))
            {
                string[] jsonStrings = jsonParams.FromJson <string[]>();
                result = GetJsonArguments(jsonStrings);
            }
            else if (!string.IsNullOrEmpty(JsonParams))
            {
                // POST: bam.invoke
                string[] jsonStrings = JsonParams.FromJson <string[]>();

                result = GetJsonArguments(jsonStrings);
            }
            else if (Request != null && InputString.Length > 0)
            {
                // POST: probably from a form
                Queue <string> inputValues = new Queue <string>(InputString.Split('&'));

                result = GetFormArguments(inputValues);
            }
            else if (Request != null)
            {
                // GET: parse the querystring
                ViewName = Request.QueryString["view"];
                if (string.IsNullOrEmpty(ViewName))
                {
                    ViewName = "Default";
                }

                jsonParams = Request.QueryString["jsonParams"];
                bool numbered = !string.IsNullOrEmpty(Request.QueryString["numbered"]) ? true : false;
                bool named    = !numbered;

                if (!string.IsNullOrEmpty(jsonParams))
                {
                    dynamic  o           = JsonConvert.DeserializeObject <dynamic>(jsonParams);
                    string[] jsonStrings = ((string)(o["jsonParams"])).FromJson <string[]>();
                    result = GetJsonArguments(jsonStrings);
                }
                else if (named)
                {
                    result = GetNamedQueryStringArguments();
                }
                else
                {
                    result = GetNumberedQueryStringArguments();
                }
            }

            return(result);
        }
Exemple #19
0
        /// <summary>
        /// parses the arguments input by the user.
        /// </summary>
        /// <param name="args">the list of arguments input by the user.</param>
        /// <returns></returns>
        private static HttpArgs ParseCommand(string[] args)
        {
            if (args != null && args.Length > 0)
            {
                var argsObj = new HttpArgs();

                for (var i = 0; i < args.Length; i++)
                {
                    switch (args[i])
                    {
                        #region help
                        case "-h":
                            argsObj.Help = true;
                            break;
                        #endregion
                        #region url
                        case "-u":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -u.");
                                return null;
                            }
                            argsObj.Url = args[i + 1];
                            if (!argsObj.Url.StartsWith("http")) argsObj.Url = string.Concat("http://", argsObj.Url);
                            break;
                        #endregion
                        #region output to console
                        case "-oc":
                            argsObj.OutputToConsole = true;
                            break;
                        #endregion
                        #region output path
                        case "-op":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -op.");
                                return null;
                            }
                            argsObj.OutputPath = args[i + 1];
                            break;
                        #endregion
                        #region method
                        case "-m":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -m.");
                                return null;
                            }
                            argsObj.Method = args[i + 1].ToUpper();
                            break;
                        #endregion
                        #region accept
                        case "-a":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -a.");
                                return null;
                            }
                            argsObj.Accept = args[i + 1].ToUpper();
                            break;
                        #endregion
                        #region content type
                        case "-ct":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ct.");
                                return null;
                            }
                            argsObj.ContentType = args[i + 1];
                            break;
                        #endregion
                        #region timeout
                        case "-t":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -t.");
                                return null;
                            }
                            argsObj.Timeout = int.Parse(args[i + 1]);
                            break;
                        #endregion
                        #region user agent
                        case "-ua":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ua.");
                                return null;
                            }
                            argsObj.UserAgent = args[i + 1];
                            break;
                        #endregion
                        #region keep alive
                        case "-ka":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ka.");
                                return null;
                            }
                            argsObj.KeepAlive = bool.Parse(args[i + 1]);
                            break;
                        #endregion
                        #region response encoding
                        case "-re":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -re.");
                                return null;
                            }
                            argsObj.ResponseEncoding = Common.StringToEnum<Encoding>(args[i + 1]);
                            break;
                        #endregion
                        #region payload encoding
                        case "-pe":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -pde.");
                                return null;
                            }
                            argsObj.PayloadEncoding = Common.StringToEnum<Encoding>(args[i + 1]);
                            break;
                        #endregion
                        #region payload
                        case "-p":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -p.");
                                return null;
                            }
                            argsObj.Payload = args[i + 1];
                            break;
                        #endregion
                        #region payload path
                        case "-pp":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -pp.");
                                return null;
                            }
                            argsObj.Payload = IOHelper.GetFileContent(args[i + 1]);
                            break;
                        #endregion
                        #region credentials
                        #region username
                        case "-c:u":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -c:u.");
                                return null;
                            }
                            argsObj.CredentialUsername = args[i + 1];
                            break;
                        #endregion
                        #region password
                        case "-c:p":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -c:p.");
                                return null;
                            }
                            argsObj.CredentialPassword = args[i + 1];
                            break;
                        #endregion
                        #region domain
                        case "-c:d":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -o:d.");
                                return null;
                            }
                            argsObj.CredentialDomain = args[i + 1];
                            break;
                        #endregion
                        #endregion
                        #region proxy
                        #region bypass
                        case "-ps:bl":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps:bl.");
                                return null;
                            }
                            argsObj.ProxyBypassLocally = bool.Parse(args[i + 1]);
                            break;
                        #endregion
                        #region address
                        case "-ps:a":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps:a.");
                                return null;
                            }
                            argsObj.ProxyAddress = args[i + 1];
                            break;
                        #endregion
                        #region credentials
                        #region username
                        case "-ps:c:u":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps:c:u.");
                                return null;
                            }
                            argsObj.ProxyCredentialUsername = args[i + 1];
                            break;
                        #endregion
                        #region password
                        case "-ps:c:p":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps.c.p.");
                                return null;
                            }
                            argsObj.ProxyCredentialPassword = args[i + 1];
                            break;
                        #endregion
                        #region domain
                        case "-ps:c:d":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps:c:d.");
                                return null;
                            }
                            argsObj.ProxyCredentialDomain = args[i + 1];
                            break;
                        #endregion
                        #endregion
                        #region add bypass rule
                        case "-ps:ab":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -ps:ab.");
                                return null;
                            }
                            if (argsObj.ProxyAddBypassRule == null) argsObj.ProxyAddBypassRule = new ArrayList();
                            argsObj.ProxyAddBypassRule.Add(args[i + 1]);
                            break;
                        #endregion
                        #endregion
                        #region headers
                        case "-hd":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -hd.");
                                return null;
                            }
                            if (argsObj.Header == null) argsObj.Header = new WebHeaderCollection();
                            argsObj.Header.Add(args[i + 1]);
                            break;
                        #endregion
                        #region regex
                        case "-rx":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -rx.");
                                return null;
                            }
                            argsObj.Regex = args[i + 1];
                            break;
                        #endregion
                        #region regex group
                        case "-rxg":
                            if (string.IsNullOrEmpty(args[i + 1]))
                            {
                                Console.WriteLine("Must supply value for -rxg.");
                                return null;
                            }
                            argsObj.RegexGroup = args[i + 1];
                            break;
                        #endregion
                    }
                }
                return argsObj;
            }

            return null;

            //Console.WriteLine("Must call http command with valid arguments.");
            //HttpHelp();
        }
        protected object[] GetParameters()
        {
            // TODO: consider breaking this class up into specific ExecutionRequest implementations that encapsulate the style of parameters
            //  JsonParamsExecutionRequest, OrderedHttpArgsExecutionRequest, FormEncodedPostExecutionRequest, QueryStringParametersExecutionRequest

            // This method is becoming a little bloated
            // due to accomodating too many input paths.
            // This will need to be refactored IF
            // changes continue to be necessary

            object[] result = new object[] { };;
            string   jsonParams;

            if (HttpArgs.Has("jsonParams", out jsonParams))
            {
                string[] jsonStrings = jsonParams.FromJson <string[]>();
                result = GetJsonParameters(jsonStrings);
            }
            else if (HttpArgs.Ordered.Length > 0)
            {
                result = new object[HttpArgs.Ordered.Length];
                HttpArgs.Ordered.Each((val, i) =>
                {
                    result[i] = val;
                });
            }
            else if (!string.IsNullOrEmpty(JsonParams))
            {
                // POST: bam.invoke
                string[] jsonStrings = JsonParams.FromJson <string[]>();

                result = GetJsonParameters(jsonStrings);
            }
            else if (Request != null && InputString.Length > 0)
            {
                // POST: probably from a form
                Queue <string> inputValues = new Queue <string>(InputString.Split('&'));

                result = GetFormParameters(inputValues);
            }
            else if (Request != null)
            {
                // GET: parse the querystring
                ViewName = Request.QueryString["view"];
                if (string.IsNullOrEmpty(ViewName))
                {
                    ViewName = "Default";
                }

                jsonParams = Request.QueryString["jsonParams"];
                bool numbered = !string.IsNullOrEmpty(Request.QueryString["numbered"]) ? true : false;
                bool named    = !numbered;

                if (!string.IsNullOrEmpty(jsonParams))
                {
                    dynamic  o           = JsonConvert.DeserializeObject <dynamic>(jsonParams);
                    string[] jsonStrings = ((string)(o["jsonParams"])).FromJson <string[]>();
                    result = GetJsonParameters(jsonStrings);
                }
                else if (named)
                {
                    result = GetNamedQueryStringParameters();
                }
                else
                {
                    result = GetNumberedParameters();
                }
            }

            return(result);
        }
Exemple #21
0
        /// <summary>
        /// parses the arguments input by the user.
        /// </summary>
        /// <param name="args">the list of arguments input by the user.</param>
        /// <returns></returns>
        private static HttpArgs ParseCommand(string[] args)
        {
            if (args != null && args.Length > 0)
            {
                var argsObj = new HttpArgs();

                for (var i = 0; i < args.Length; i++)
                {
                    switch (args[i])
                    {
                        #region help
                    case "-h":
                        argsObj.Help = true;
                        break;

                        #endregion
                        #region url
                    case "-u":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -u.");
                            return(null);
                        }
                        argsObj.Url = args[i + 1];
                        if (!argsObj.Url.StartsWith("http"))
                        {
                            argsObj.Url = string.Concat("http://", argsObj.Url);
                        }
                        break;

                        #endregion
                        #region output to console
                    case "-oc":
                        argsObj.OutputToConsole = true;
                        break;

                        #endregion
                        #region output path
                    case "-op":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -op.");
                            return(null);
                        }
                        argsObj.OutputPath = args[i + 1];
                        break;

                        #endregion
                        #region method
                    case "-m":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -m.");
                            return(null);
                        }
                        argsObj.Method = args[i + 1].ToUpper();
                        break;

                        #endregion
                        #region accept
                    case "-a":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -a.");
                            return(null);
                        }
                        argsObj.Accept = args[i + 1].ToUpper();
                        break;

                        #endregion
                        #region content type
                    case "-ct":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ct.");
                            return(null);
                        }
                        argsObj.ContentType = args[i + 1];
                        break;

                        #endregion
                        #region timeout
                    case "-t":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -t.");
                            return(null);
                        }
                        argsObj.Timeout = int.Parse(args[i + 1]);
                        break;

                        #endregion
                        #region user agent
                    case "-ua":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ua.");
                            return(null);
                        }
                        argsObj.UserAgent = args[i + 1];
                        break;

                        #endregion
                        #region keep alive
                    case "-ka":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ka.");
                            return(null);
                        }
                        argsObj.KeepAlive = bool.Parse(args[i + 1]);
                        break;

                        #endregion
                        #region response encoding
                    case "-re":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -re.");
                            return(null);
                        }
                        argsObj.ResponseEncoding = Common.StringToEnum <Encoding>(args[i + 1]);
                        break;

                        #endregion
                        #region payload encoding
                    case "-pe":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -pde.");
                            return(null);
                        }
                        argsObj.PayloadEncoding = Common.StringToEnum <Encoding>(args[i + 1]);
                        break;

                        #endregion
                        #region payload
                    case "-p":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -p.");
                            return(null);
                        }
                        argsObj.Payload = args[i + 1];
                        break;

                        #endregion
                        #region payload path
                    case "-pp":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -pp.");
                            return(null);
                        }
                        argsObj.Payload = IOHelper.GetFileContent(args[i + 1]);
                        break;

                        #endregion
                        #region credentials
                        #region username
                    case "-c:u":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -c:u.");
                            return(null);
                        }
                        argsObj.CredentialUsername = args[i + 1];
                        break;

                        #endregion
                        #region password
                    case "-c:p":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -c:p.");
                            return(null);
                        }
                        argsObj.CredentialPassword = args[i + 1];
                        break;

                        #endregion
                        #region domain
                    case "-c:d":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -o:d.");
                            return(null);
                        }
                        argsObj.CredentialDomain = args[i + 1];
                        break;

                        #endregion
                        #endregion
                        #region proxy
                        #region bypass
                    case "-ps:bl":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps:bl.");
                            return(null);
                        }
                        argsObj.ProxyBypassLocally = bool.Parse(args[i + 1]);
                        break;

                        #endregion
                        #region address
                    case "-ps:a":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps:a.");
                            return(null);
                        }
                        argsObj.ProxyAddress = args[i + 1];
                        break;

                        #endregion
                        #region credentials
                        #region username
                    case "-ps:c:u":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps:c:u.");
                            return(null);
                        }
                        argsObj.ProxyCredentialUsername = args[i + 1];
                        break;

                        #endregion
                        #region password
                    case "-ps:c:p":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps.c.p.");
                            return(null);
                        }
                        argsObj.ProxyCredentialPassword = args[i + 1];
                        break;

                        #endregion
                        #region domain
                    case "-ps:c:d":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps:c:d.");
                            return(null);
                        }
                        argsObj.ProxyCredentialDomain = args[i + 1];
                        break;

                        #endregion
                        #endregion
                        #region add bypass rule
                    case "-ps:ab":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -ps:ab.");
                            return(null);
                        }
                        if (argsObj.ProxyAddBypassRule == null)
                        {
                            argsObj.ProxyAddBypassRule = new ArrayList();
                        }
                        argsObj.ProxyAddBypassRule.Add(args[i + 1]);
                        break;

                        #endregion
                        #endregion
                        #region headers
                    case "-hd":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -hd.");
                            return(null);
                        }
                        if (argsObj.Header == null)
                        {
                            argsObj.Header = new WebHeaderCollection();
                        }
                        argsObj.Header.Add(args[i + 1]);
                        break;

                        #endregion
                        #region regex
                    case "-rx":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -rx.");
                            return(null);
                        }
                        argsObj.Regex = args[i + 1];
                        break;

                        #endregion
                        #region regex group
                    case "-rxg":
                        if (string.IsNullOrEmpty(args[i + 1]))
                        {
                            Console.WriteLine("Must supply value for -rxg.");
                            return(null);
                        }
                        argsObj.RegexGroup = args[i + 1];
                        break;
                        #endregion
                    }
                }
                return(argsObj);
            }

            return(null);

            //Console.WriteLine("Must call http command with valid arguments.");
            //HttpHelp();
        }
Exemple #22
0
        /// <summary>
        /// does the actual http request.
        /// </summary>
        /// <param name="args">the list of parsed arguments.</param>
        private static void DoRequest(HttpArgs args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            //Console.WriteLine("--- BEGIN");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            // display help if no arguments where provided or if arguments where invalid
            if (args == null || !AreArgsValid(args)) { HttpHelp(); return; }

            var http = new Global.Http.Http(args.Url);
            // for some reason if we set the value after it will not recognize it
            // we have to set before the other values
            if (args.KeepAlive != null) http.KeepAlive = (bool)args.KeepAlive;

            http = http.SetMethod(args.Method)
                .SetContentType(args.ContentType)
                .SetUserAgent(args.UserAgent)
                .SetPayload(args.Payload)
                .SetRequestEncoding(args.PayloadEncoding)
                .SetResponseEncoding(args.ResponseEncoding);
            if (args.Timeout != null) http.Timeout = (int)args.Timeout;
            if (args.Header != null && args.Header.Count > 0) http.Headers = args.Header;
            if (!string.IsNullOrEmpty(args.Accept)) http.Accept = args.Accept;
            if (args.Credential != null) http.Credentials = args.Credential;
            if (args.Proxy != null) http.Proxy = args.Proxy;
            // track how long the request took to show in the output console
            var started = DateTime.Now;
            var response = http.DoRequest();
            var ended = DateTime.Now;

            if (http.Response != null)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\n{0} {1} | {2} {3}", (int)http.Response.StatusCode, http.Response.StatusCode, args.Method, args.Url);

                if (http.Response.Headers != null)
                {
                    foreach (var h in http.Response.Headers)
                        Console.WriteLine("{0}: {1}", h.Key, string.Join(", ", h.Value));
                }
                Console.ForegroundColor = ConsoleColor.DarkGreen;

                if (http.Response.IsSuccessStatusCode)
                {
                    if (!string.IsNullOrEmpty(args.Regex))
                    {
                        var m = new Regex(args.Regex, RegexOptions.IgnoreCase | RegexOptions.Singleline).Matches(response);
                        if (m.Count > 0)
                        {
                            var builder = new StringBuilder("");
                            for (var i = 0; i < m.Count; i++)
                            {
                                builder.AppendFormat("Match {0}: {1}", i + 1, !string.IsNullOrEmpty(args.RegexGroup) ? m[i].Groups[args.RegexGroup] : m[i]);
                                builder.Append(i < m.Count - 1 ? "\n" : "");
                            }
                            response = builder.ToString();
                        }
                        else
                        {
                            response = "No matches were found!";
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("N/A (Failed unexpectadly).");
            }

            if (!string.IsNullOrEmpty(args.OutputPath) && !string.IsNullOrEmpty(response))
            {
                using (var writer = new StreamWriter(args.OutputPath)) writer.WriteLine(response);
            }
            else if (args.OutputToConsole && !string.IsNullOrEmpty(response))
            {
                Console.WriteLine("");
                Console.WriteLine(response);
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("");
            Console.WriteLine("{0}", new TimeSpan((ended - started).Ticks).ToString("c"));
        }
Exemple #23
0
        /// <summary>
        /// validates if the arguments are correct. eg: the url is a required argument.
        /// </summary>
        /// <param name="args">the specified list of arguments.</param>
        /// <returns>a boolean indicating if the arguments are correct.</returns>
        private static bool AreArgsValid(HttpArgs args)
        {
            if (args == null)
            {
                Console.WriteLine("No values have been supplied");
                return false;
            }
            if (args.Help)
            {
                HttpHelp();
                return false;
            }
            if (string.IsNullOrEmpty(args.Url))
            {
                Console.WriteLine("Url must be supplied.");
                return false;
            }
            if (!string.IsNullOrEmpty(args.ProxyCredentialUsername) && !string.IsNullOrEmpty(args.ProxyCredentialPassword))
            {
                args.Proxy.Credentials = !string.IsNullOrEmpty(args.ProxyCredentialDomain)
                    ? new NetworkCredential(args.ProxyCredentialUsername, args.ProxyCredentialPassword, args.ProxyCredentialDomain)
                    : new NetworkCredential(args.ProxyCredentialUsername, args.ProxyCredentialPassword);
            }
            if (args.ProxyAddBypassRule != null && args.ProxyAddBypassRule.Count > 0)
            {
                foreach (var bypass in args.ProxyAddBypassRule) args.Proxy.BypassArrayList.Add(bypass);
            }

            return true;
        }