Beispiel #1
0
        private string WithUrl(string url)
        {
            var uri = new Uri(url, UriKind.RelativeOrAbsolute);

            if (!uri.IsAbsoluteUri)
            {
                throw new ArgumentException($"Url must be an absolute URI rather than relative. '{url}'", nameof(url));
            }

            if (uri.Query.Length > 0)
            {
                MatchUrlWithQuery = true;

                if (QueryParams.Any())
                {
                    throw new ArgumentException($"Url must not contain QueryString as request has already been configured to match containing a QueryParam. {QueryParams.Keys.Flat()}");
                }

                if (m_ParentTrackingBuilder.HasMatchUrlWithQueryParams())
                {
                    throw new ArgumentException($"Url must not contain QueryString as request matches already exist with <c>ContainingQueryParam</c>. '{url}'", nameof(url));
                }
            }

            return(url);
        }
Beispiel #2
0
        private void AddQueryParams(StringBuilder uriBuilder)
        {
            if (!QueryParams.Any())
            {
                return;
            }

            if (!uriBuilder.ToString().Contains("?"))
            {
                uriBuilder.Append("?");
            }

            for (var i = 0; i < QueryParams.Count; i++)
            {
                var(key, value) = QueryParams.ElementAt(i);

                uriBuilder.Append($"{key}={value}");

                var isLast = i == QueryParams.Count - 1;

                if (!isLast)
                {
                    uriBuilder.Append("&");
                }
            }
        }
Beispiel #3
0
        private void AddQueryParams(StringBuilder uriBuilder)
        {
            if (!QueryParams.Any())
            {
                return;
            }

            if (!uriBuilder.ToString().Contains("?"))
            {
                uriBuilder.Append("?");
            }

            for (var i = 0; i < QueryParams.Count; i++)
            {
                var kvp = QueryParams.ElementAt(i);

                uriBuilder.AppendFormat("{0}={1}", kvp.Key, kvp.Value);

                var isLast = i == QueryParams.Count - 1;

                if (!isLast)
                {
                    uriBuilder.Append("&");
                }
            }
        }
        public string ToLocalPath(String fileName = null)
        {
            var res = Url.Trim('/').Replace("/", "\\");

            if (QueryParams != null && QueryParams.Any())
            {
                res = res + "\\" + CalculateMD5Hash(JsonConvert.SerializeObject(QueryParams));
            }
            if (fileName == null)
            {
                return(res);
            }
            return(res + "\\" + fileName);
        }
        protected StatementSyntax GetPaginatedQueryParams()
        {
            if (QueryParams.Any())
            {
                var queryParamDeclaration = new PaginatedQueryParamLocalDeclarationSyntax
                {
                    Name     = "queryParams",
                    MyParams = QueryParams,
                }.GetSyntax();

                return(queryParamDeclaration);
            }

            return(default(StatementSyntax));
        }
        public override string ToString()
        {
            string result;

            if (QueryParams != null && QueryParams.Any())
            {
                var query = string.Join("&", QueryParams.Select(x => $"{x.Key}={UrlEncoder.Default.Encode(x.Value)}"));
                result = $"{Method} {Url}?{query} {Protocol}\r\n";
            }
            else
            {
                result = $"{Method} {Url} {Protocol}\r\n";
            }


            if (Headers.Count > 0)
            {
                result += string.Join("\r\n", Headers.Select(h => $"{h.Key}: {h.Value}")) + "\r\n";
            }
            else
            {
                result += "User-Agent: xxx (shell 1)\r\n";
            }

            if (!string.IsNullOrEmpty(Body))
            {
                if (!Headers.ContainsKey("Content-Length"))
                {
                    result += $"Content-Length: {Body.Length}\r\n";
                }

                result += $"\r\n{Body}";
            }

            result += "\r\n";

            var len = result.Length;

            return($"{len} {Status}\n{result}");
        }
        public override LocalDeclarationStatementSyntax GetSyntax()
        {
            var paramArgList = new List <SyntaxNodeOrToken>();

            paramArgList.Add(GetLiteralArg("path", Path));
            paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));

            if (PathParams.Any())
            {
                paramArgList.Add(GetVariableArg("pathParams", "pathParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (QueryParams.Any())
            {
                paramArgList.Add(GetVariableArg("queryParams", "queryParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (BodyParams.Any())
            {
                paramArgList.Add(GetVariableArg("bodyParams", "bodyParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            paramArgList.Add(GetMemberAccessArg("method", "HttpMethods", HttpMethod));

            return(SyntaxFactory.LocalDeclarationStatement(
                       SyntaxFactory.VariableDeclaration(
                           SyntaxFactory.GenericName(
                               SyntaxFactory.Identifier("Func"))
                           .WithTypeArgumentList(
                               SyntaxFactory.TypeArgumentList(
                                   SyntaxFactory.SeparatedList <TypeSyntax>(
                                       new SyntaxNodeOrToken[] {
                SyntaxFactory.IdentifierName(ListOptionsName),
                SyntaxFactory.Token(SyntaxKind.CommaToken),
                SyntaxFactory.GenericName(
                    SyntaxFactory.Identifier("Task"))
                .WithTypeArgumentList(
                    SyntaxFactory.TypeArgumentList(
                        SyntaxFactory.SingletonSeparatedList <TypeSyntax>(
                            SyntaxFactory.GenericName(
                                SyntaxFactory.Identifier("ResponsePage"))
                            .WithTypeArgumentList(
                                SyntaxFactory.TypeArgumentList(
                                    SyntaxFactory.SingletonSeparatedList <TypeSyntax>(
                                        SyntaxFactory.IdentifierName(Returns)))))))
            }))))
                       .WithVariables(
                           SyntaxFactory.SingletonSeparatedList <VariableDeclaratorSyntax>(
                               SyntaxFactory.VariableDeclarator(
                                   SyntaxFactory.Identifier("paginatedFunc"))
                               .WithInitializer(
                                   SyntaxFactory.EqualsValueClause(
                                       SyntaxFactory.ParenthesizedLambdaExpression(
                                           getFunctionBlock(paramArgList)
                                           )
                                       .WithAsyncKeyword(
                                           SyntaxFactory.Token(SyntaxKind.AsyncKeyword))
                                       .WithParameterList(
                                           SyntaxFactory.ParameterList(
                                               SyntaxFactory.SingletonSeparatedList <ParameterSyntax>(
                                                   SyntaxFactory.Parameter(
                                                       SyntaxFactory.Identifier("_options"))
                                                   .WithType(
                                                       SyntaxFactory.IdentifierName(ListOptionsName)))))))))));
        }
        public override StatementSyntax GetSyntax()
        {
            var paramArgList = new List <SyntaxNodeOrToken>();

            paramArgList.Add(GetLiteralArg("path", Path));
            paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));

            if (PathParams.Any())
            {
                paramArgList.Add(GetVariableArg("pathParams", "pathParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (QueryParams.Any())
            {
                paramArgList.Add(GetVariableArg("queryParams", "queryParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (FileParams.Any())
            {
                paramArgList.Add(GetVariableArg("fileParams", "fileParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (FormParams.Any())
            {
                paramArgList.Add(GetVariableArg("formParams", "formParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (BodyParams.Any(b => b.External != true))
            {
                paramArgList.Add(GetVariableArg("bodyParams", "bodyParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (BodyParams.Any(b => b.External == true && !b.Key.EndsWith("request")))
            {
                paramArgList.Add(GetVariableArg("externalBodyParams", "externalBodyParams"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            if (HasRequest)
            {
                paramArgList.Add(GetVariableArg("request", "objectToUnpack"));
                paramArgList.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }

            paramArgList.Add(GetMemberAccessArg("method", "HttpMethods", HttpMethod));

            var statementBody = SyntaxFactory.AwaitExpression(
                SyntaxFactory.InvocationExpression(
                    SyntaxFactory.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SyntaxFactory.IdentifierName("Client"),
                        SyntaxFactory.GenericName(
                            SyntaxFactory.Identifier("CallApi"))
                        .WithTypeArgumentList(
                            SyntaxFactory.TypeArgumentList(
                                SyntaxFactory.SingletonSeparatedList <TypeSyntax>(
                                    SyntaxFactory.IdentifierName(Returns))))))
                .WithArgumentList(
                    SyntaxFactory.ArgumentList(
                        SyntaxFactory.SeparatedList <ArgumentSyntax>(
                            paramArgList.ToArray()
                            ))));

            if (IsVoidTask)
            {
                return(SyntaxFactory.ExpressionStatement(statementBody));
            }

            return(SyntaxFactory.ReturnStatement(statementBody));
        }
        protected List <StatementSyntax> GetMethodBodyParams(bool ignoreQuery = false)
        {
            var methodBody = new List <StatementSyntax>();

            if (PathParams.Any())
            {
                var pathDeclaration = new DictionaryParamaterLocalDeclarationSyntax
                {
                    Name     = "pathParams",
                    MyParams = PathParams,
                }.GetSyntax();

                methodBody.Add(pathDeclaration);
            }

            if (QueryParams.Any() && !ignoreQuery)
            {
                var queryParamDeclaration = new DictionaryParamaterLocalDeclarationSyntax
                {
                    Name     = "queryParams",
                    MyParams = QueryParams,
                }.GetSyntax();

                methodBody.Add(queryParamDeclaration);
            }

            if (FileParams.Any())
            {
                var fileParamDeclaration = new DictionaryParamaterLocalDeclarationSyntax
                {
                    Name     = "fileParams",
                    MyParams = FileParams,
                    VarType  = "Stream",
                }.GetSyntax();

                methodBody.Add(fileParamDeclaration);
            }

            if (FormParams.Any())
            {
                var formParamDeclaration = new DictionaryParamaterLocalDeclarationSyntax
                {
                    Name     = "formParams",
                    MyParams = FormParams,
                }.GetSyntax();

                methodBody.Add(formParamDeclaration);
            }

            if (BodyParams.Any(b => b.External != true))
            {
                var bodyParamDeclaration = new BodyParameterContainer
                {
                    Name       = "bodyParams",
                    BodyType   = UseAnnonBody ? "Annonymous" : Returns,
                    BodyParams = BodyParams.Where(b => b.External != true && !b.Key.EndsWith("request")).ToList(),
                }.GetSyntax();

                methodBody.Add(bodyParamDeclaration);
            }

            // add external body params
            if (BodyParams.Any(b => b.External == true && !b.Key.EndsWith("request")))
            {
                var bodyParamDeclaration = new BodyParameterContainer
                {
                    Name       = "externalBodyParams",
                    BodyType   = "Annonymous",
                    BodyParams = BodyParams.Where(b => b.External == true && !b.Key.EndsWith("request")).ToList(),
                }.GetSyntax();

                methodBody.Add(bodyParamDeclaration);
            }

            return(methodBody);
        }