Example #1
0
        public string WriteCode()
        {
            //fijarse que si el largo maximo es mayor al largo maximo de linea se tiene que poner en dos lineas
            //si es vacio no imprimir nada
            var aux = OpenSTAUtils.SplitCommentIfNecesary(CommentStr);

            if (!aux.StartsWith("!"))
            {
                aux = "!" + aux;
            }

            return(aux);
        }
Example #2
0
        public string WriteCode()
        {
            int    valor;
            string result;

            if (int.TryParse(Value, out valor))
            {
                result = string.Format("CONSTANT {0} = {1}\n", Name, Value);
            }
            else
            {
                var aux = OpenSTAUtils.SplitIfNecesary(Value, "\"", "\"&", ScriptSCL.MaxLineLengh);
                result = string.Format("CONSTANT {0} = {1}\"\n", Name, aux);
            }
            return(result);
        }
        private string GetOpenSTAHeaders()
        {
            //primero armo el global
            var defaultHeaders = "\""; //DEFAULT_HEADERS
            var reqHeadrs      = "";

            foreach (HTTPHeaderItem headr in Request.oRequest.headers)
            {
                var name = headr.Name.ToLower();
                if (
                    (!name.StartsWith("cookie")) &&
                    (name != "user-agent") &&
                    (name != "host") &&
                    (name != "accept-encoding")
                    )
                {
                    if (name == "authorization")
                    {
                        reqHeadrs += string.Format("\t\"{0}: \"+{1},&\n", headr.Name, "blob1");
                    }
                    else
                    {
                        var stringDelmiter = "\"";
                        if (headr.Value.Contains("\""))
                        {
                            stringDelmiter = "'";
                        }
                        var aux = OpenSTAUtils.SplitStringIfNecesary(headr.Value);

                        reqHeadrs += string.Format("\t{2}{0}: {1}{2},&\n", headr.Name, aux, stringDelmiter);
                    }
                }
            }

            defaultHeaders += "\"Host: " + Request.oRequest.headers["Host"] + "^J\"&\n" +
                              "\"User-Agent: " + Request.oRequest.headers["User-Agent"];

            Script.OpenSTARep.Global.AddConstant("DEFAULT_HEADERS", defaultHeaders);
            return("\t HEADER DEFAULT_HEADERS & \n" +
                   "\t , WITH {&\n" +
                   reqHeadrs +
                   SessionUtils.GetCookies(
                       Request.oRequest.headers,
                       this.Script)
                   + "}");
        }
        private string SplitAndParametrizeUrl(string fullURL, ScriptSCL Script)
        {
            var server = Request.host;

            Script.OpenSTARep.Global.AddConstant("Server", "\"" + server);
            var result = fullURL.Replace(fullURL.Contains(server) ? server : Request.host, "\"+Server+\"");

            //saco la comilla inicial y el ultimo caracter &
            result = OpenSTAUtils.SplitStringIfNecesary(result, 50);

            //result = result.Substring(0, result.Length - 2);
            if (!result.StartsWith("\""))
            {
                result = "\"" + result;
            }

            return(result);
        }
Example #5
0
        internal string GetUsedDataFriendly()
        {
            var result = "";

            foreach (var df in DataFiles.Values)
            {
                foreach (var dfc in df.Columns.Values)
                {
                    result += OpenSTAUtils.RemoveSpecialCharacters(dfc.Name) + ":\"+" + dfc.VariableName + "+\", ";
                }
            }

            result = result.Length > 0
                         ? result.Substring(0, result.Length - "+\", ".Length)
                         : "\"";

            return(result);
        }
Example #6
0
 public Variable(string name, string type, VariablesScopes scope)
 {
     Name  = OpenSTAUtils.RenameVariableIfNeccesary(name);
     Type  = type;
     Scope = scope;
 }
Example #7
0
 public EndTimer(string timerName)
 {
     TimerName = OpenSTAUtils.RenameVariableIfNeccesary(timerName);
 }
        private string SplitBody(string body)
        {
//para el gxstate tengo que hacer algo especial
            // NP - 16/01/2014
            // agrego esta movida para que no se rompa el body cuando trae comillas adentro
            body = body.Replace("\"", "\"+'\"'+\"");
            var result         = "";
            var lastLine       = "";
            var separatorStr   = "&";
            var bodyParameters = body.Split('&'); //separo los parámetrosr

            foreach (var str in bodyParameters)   //recorro los parámetros
            {
                if ((lastLine.Length + str.Length) < ScriptSCL.MaxLineLengh)
                //me fijo si el param. y la linea anterior caben en una línea
                {
                    // NP - 16/01/2014
                    // agrego el if para no poner el & al principio del body, que rompe los formatos de los json.
                    if (result == lastLine)
                    {
                        lastLine += str;
                    }
                    else
                    {
                        lastLine += "&" + str; //vuelvo a poner el & que separa los parámetros que perdí en el split
                    }
                }
                else
                {
                    if (result == "")
                    // si result es vacío le agrego el parámetro y el & para el próximo parámetro, y pongo el cierre de linea
                    {
                        // NP - 16/01/2014
                        // agrego el if para no meter una línea con únicamente un ampersand al principio de los bodys cuando el 1er parámetro no cabe en una línea
                        if (lastLine != "")
                        {
                            result += lastLine + "&\"&\n";
                        }
                    }
                    else // si no es, armo la linea igual que en el otro caso pero empezando con tab y comillas
                    {
                        result += "\t\"" + lastLine + "&\"&\n";
                    }
                    lastLine = "";
                    if (str.Length > ScriptSCL.MaxLineLengh) //me fijo si el param. no cabe en la linea
                    {
                        if (str.StartsWith("GXState"))       // si es el param. GXState lo separo por ;
                        {
                            //separo por %22%2C%22 es el ; codificado
                            string[] separator = { "%22%2C%22" };
                            separatorStr = separator[0]; //no encuentro donde se usa esta variable
                            var gxstateParameters = str.Split(separator, StringSplitOptions.None);
                            var firstGXparameter  = true;
                            foreach (var strGx in gxstateParameters) // recorro los params de GXState
                            {
                                if ((lastLine.Length + strGx.Length) < ScriptSCL.MaxLineLengh)
                                {
// chequeo si cabe la linea anterior con el param nuevo en una linea
                                    if (firstGXparameter) // si es el 1er param. lo meto en last line de una
                                    {
                                        firstGXparameter = false;
                                        lastLine        += strGx;
                                    }
                                    else // si no es el 1ero le agrego el separador antes de meterlo en last line
                                    {
                                        lastLine += separator[0] + strGx;
                                    }
                                }
                                else // si no cabe el param
                                {
// armo la línea como la voy a mostrar

                                    /*if (lastLine.StartsWith("GXState"))///////////////////////////////////////////////////
                                     * {
                                     *  result += "\t\"" + lastLine + "\"&\n";
                                     * }
                                     * else
                                     * {
                                     *  result += "\t\"" +   lastLine + "\"&\n";
                                     * }
                                     * else//                                      qué onda con esto?
                                     * {*/
                                    result += "\t\"" + lastLine + "\"&\n";
                                    //}/////////////////////////////////////////////////////////////////////////////////////
                                    lastLine = "";                             // empiezo una linea nueva
                                    if (strGx.Length > ScriptSCL.MaxLineLengh) //
                                    {
                                        // NP 29/11/2013 - Agrego control para que no ponga el separador si es la primer variable del gxstate
                                        if (strGx.StartsWith("GXState="))
                                        {
                                            result += "\t\"" + OpenSTAUtils.SplitStringIfNecesary(strGx, "\t") + "\"&\n";
                                        }
                                        else
                                        {
                                            result += "\t\"" + separator[0] +
                                                      OpenSTAUtils.SplitStringIfNecesary(strGx, "\t") + "\"&\n";
                                        }
                                    }
                                    else
                                    {
                                        // idem arriba
                                        if (strGx.StartsWith("GXState="))
                                        {
                                            lastLine += strGx;
                                        }
                                        else
                                        {
                                            lastLine += separator[0] + strGx;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            // NP - 16/01/2014
                            // Se agrega el control de si result es vacío, porque la función que invoca a esta ya pone las primeras comillas
                            if (result == "")
                            {
                                result += OpenSTAUtils.SplitStringIfNecesary(str) + "\"&\n";
                            }
                            else
                            {
                                /*se cambia lo de la izq para que arranque con " en lugar de & y se agrega
                                 * lo de la der para arreglar el bug del tab en el medio del body*/
                                // (Anónimo)
                                result += "\"" + OpenSTAUtils.SplitStringIfNecesary(str) + "\"&\n";
                            }
                        }
                    }
                    else
                    {
                        lastLine += str;
                    }
                }
            }
            // NP - 16/01/2014
            // saco el ampersand que se agregaba después de lastLine para que no se termine el body con un ampersand (por los json)
            // NP - 20/01/2014
            // agrego el if para que no quede una comilla de más cuando el body cabe todo en la 1er línea

            if (result == "")
            {
                result += lastLine + "\"\n";
            }
            else
            {
                result += "\t\"" + lastLine + "\"\n";
            }
            return(ParametrizeBody(result));
        }
        public string AddRequest(Session req, bool primary)
        {
            var url = req.fullUrl;

            url = PreviousRedirectURL == req.fullUrl ? "redirectUrl+\"" : SplitAndParametrizeUrl(url, Script);

            //string cookies = SessionUtils.GetCookies(req.oRequest.headers, this.Script);
            var connectionID = GetConnectionID(Request);

            var primaryString = "";

            if (primary)
            {
                primaryString = "PRIMARY";
            }

            //tengo que saber cuando es get y cuando es post
            var isGet = req.oRequest.headers.HTTPMethod == "GET";

            var openSTAHeaders = GetOpenSTAHeaders();

            var result = "";

            if (isGet)
            {
                result += string.Format("\n\t{0} GET URI {1} HTTP/1.1\" ON {2} &\n\t{3}\n\n"
                                        , primaryString, url, connectionID, openSTAHeaders);
            }
            else
            {
                result += "\n\t" + primaryString + " POST URI " + url + " HTTP/1.1\" ON " + connectionID + " &\n\t" +
                          openSTAHeaders + "		 &\n"+
                          "\t,BODY \"" + SplitBody(Request.GetRequestBodyAsString()) + "\n\n";
            }

            //si hay cookies para cargar tengo que cargarlas
            result += LoadCookies(connectionID);
            if (primary)
            {
                var lrs = new LogResponsesSection(connectionID);
                result += lrs.WriteCode();

                switch (Request.responseCode)
                {
                case 200:
                    //pongo el codigo para la validacion de texto
                    Validation = new AppearTextSection("<Text to validate>", connectionID,
                                                       OpenSTAUtils.SplitStringIfNecesary("Step " + StepCounter +
                                                                                          " - " +
                                                                                          Script.GetUsedDataFriendly
                                                                                              ()));
                    StepCounter++;
                    //me fijo si es un pdf
                    //Content-Type: application/pdf
                    if ((req.oResponse.headers.Exists("Content-Type")) &&
                        (req.oResponse.headers["Content-Type"] == "application/pdf"))
                    {
                        Validation.Body = false;
                        Validation.Text = "application/pdf";
                    }
                    break;

                case 301:
                case 302:
                case 303:
                    //aca falta que se maneje el redirect para el proximo pedido
                    //cargo el campo location en una variable url y luego lo uso en el proximo pedido que coincida con la url
                    if (req.oResponse.headers.Exists("Location"))
                    {
                        PreviousRedirectURL = req.oResponse.headers["Location"];
                        var redVar = new Variable("redirectUrl", "CHARACTER*1024", VariablesScopes.Local);
                        Script.AddVariable(redVar);
                        result += "\tLoad Response_Info Header on " + connectionID + " into buffer\n";
                        result += "\tSet strInicial = 'Location: '\n";
                        result += "\tSet strFinal = '~<CR>'\n";
                        result += "\tcall between\n";
                        result += "\tSet redirectUrl = Straux\n\n";
                    }
                    break;

                case 401:
                    //me fijo si es el primer 401 para este pedido entonces agrego un from user, sino si es el segundo agrego un from blob
                    var blob = new Variable("blob1", "CHARACTER*2048", VariablesScopes.Local);
                    Script.AddVariable(blob);
                    if (
                        (PreviousRequestResponse.ContainsKey(req.fullUrl)) &&
                        (PreviousRequestResponse[req.fullUrl] == 401)
                        )
                    {
                        //me fijo si esta el campo WWW-Authenticate
                        if (req.oResponse.headers.Exists("WWW-Authenticate"))
                        {
                            result += string.Format(
                                "\n\tLoad Response_Info Header on {0}		&\n"+
                                "\tInto blob1	&\n"+
                                "\t,WITH \"WWW-Authenticate\"\n\n", connectionID);
                        }
                        result += new BuildBlobFromBlobSection(blob).WriteCode();
                    }
                    else
                    {
                        var usrStr = "\"<user>\"";
                        var pwdStr = "\"<pwd>\"";
                        var domain = "\"\"";
                        if (User != null)
                        {
                            usrStr = User.Name;
                            pwdStr = Pwd.Name;
                        }
                        result += new BuildBlobFromUserSection(usrStr, pwdStr, domain, connectionID).WriteCode();
                    }
                    break;
                }
            }

            if (!PreviousRequestResponse.ContainsKey(req.fullUrl))
            {
                PreviousRequestResponse.Add(req.fullUrl, req.responseCode);
            }

            return(result);
        }