/// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("ELEMENTACTION")
            .Token(Locator)
            .Literal(ElementString);

            if (Recursive)
            {
                writer.Boolean(Recursive, "Recursive");
            }
            else if (ElementIndex != 0)
            {
                writer.Integer(ElementIndex, "ElementIndex");
            }

            writer
            .Indent()
            .Token(Action)
            .Literal(Input, "Input");

            if (!writer.CheckDefault(OutputVariable, "OutputVariable"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(OutputVariable);
            }

            return(writer.ToString());
        }
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled)
                         .Label(Label) // Write the label. If the label is the default one, nothing is written.
                         .Token(Name)  // Write the block name. This cannot be changed.
                         .Literal(awshost)
                         .Literal(awspath)
                         .Literal(awsregion)
                         .Literal(awscredential)
                         .Literal(awskey)
                         .Literal(awssecretkey)
                         .Literal(awssession)
                         .Literal(awshttpmethod)
                         .Literal(awsbodydata)
                         .Literal(awscustomheader);

            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                writer
                .Arrow()                          // Write the -> arrow.
                .Token(IsCapture ? "CAP" : "VAR") // Write CAP or VAR depending on IsCapture.
                .Literal(VariableName);           // Write the Variable Name as a literal.
            }
            return(writer.ToString());
        }
Example #3
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("TCP")
            .Token(TCPCommand);

            switch (TCPCommand)
            {
            case TCPCommand.Connect:
                writer
                .Literal(Host)
                .Literal(Port)
                .Boolean(UseSSL, "UseSSL");
                break;

            case TCPCommand.Send:
                writer
                .Literal(Message);
                break;
            }

            if (!writer.CheckDefault(VariableName, "VariableName"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(VariableName);
            }

            return(writer.ToString());
        }
Example #4
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("PARSE")
            .Literal(ParseTarget)
            .Token(Type);

            switch (Type)
            {
            case ParseType.LR:
                writer
                .Literal(LeftString)
                .Literal(RightString)
                .Boolean(Recursive, "Recursive")
                .Boolean(UseRegexLR, "UseRegexLR");
                break;

            case ParseType.CSS:
                writer
                .Literal(CssSelector)
                .Literal(AttributeName);
                if (Recursive)
                {
                    writer.Boolean(Recursive, "Recursive");
                }
                else
                {
                    writer.Integer(CssElementIndex, "CssElementIndex");
                }
                break;

            case ParseType.JSON:
                writer
                .Literal(JsonField)
                .Boolean(Recursive, "Recursive");
                break;

            case ParseType.REGEX:
                writer
                .Literal(RegexString)
                .Literal(RegexOutput)
                .Boolean(Recursive, "Recursive");
                break;
            }

            writer
            .Arrow()
            .Token(IsCapture ? "CAP" : "VAR")
            .Literal(VariableName);

            if (!writer.CheckDefault(Prefix, "Prefix") || !writer.CheckDefault(Suffix, "Suffix"))
            {
                writer.Literal(Prefix).Literal(Suffix);
            }

            return(writer.ToString());
        }
Example #5
0
        /*
         * This method basically does the opposite of the method above, so it converts a Block from a class to an actual
         * LoliScript statement. It's much easier to write since the BlockWriter was implemented with a fluent pattern.
         */
        public override string ToLS(bool indent = true)
        {
            /*
             * We initialize a new BlockWriter with the given Block type (in this case, GetType() will return BlockSum)
             * and indentation enabled by default when needed (you can type .Indent() anywhere to indent to the next line).
             * The Disabled parameter will tell the writer if the block has been disabled. In that case, it will put a '!'
             * in front of the statement to indicate that it shouldn't be executed by a debugger or runner.
             */
            var writer = new BlockWriter(GetType(), indent, Disabled)
                         .Label(Label)     // Write the label. If the label is the default one, nothing is written.
                         .Token(Name)      // Write the block name. This cannot be changed.
                         .Literal(First)   // Write the 'First' parameter as a literal (it will be double quoted).
                         .Literal(Second); // Write the 'Second' parameter as a literal.

            // Check if the VariableName is the default one. If it is, we don't need to write it to the string.
            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                // Here we reutilize the writer to write more stuff.
                writer
                .Arrow()                          // Write the -> arrow.
                .Token(IsCapture ? "CAP" : "VAR") // Write CAP or VAR depending on IsCapture.
                .Literal(VariableName);           // Write the Variable Name as a literal.
            }

            // Finally we call the ToString() method of the writer to return the statement that will be written to the LoliScript code.
            return(writer.ToString());
        }
Example #6
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("EXECUTEJS")
            .Literal(JavascriptCode.Replace("\r\n", " ").Replace("\n", " "));
            return(writer.ToString());
        }
Example #7
0
 /// <inheritdoc />
 public override string ToLS(bool indent = true)
 {
     var writer = new BlockWriter(GetType(), indent, Disabled);
     writer                
         .Label(Label)
         .Token("BROWSERACTION")
         .Token(Action)
         .Literal(Input, "Input");
     return writer.ToString();
 }
Example #8
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("BYPASSCF")
            .Literal(Url)
            .Literal(UserAgent, "UserAgent");
            return(writer.ToString());
        }
Example #9
0
        public override string ToLS(bool indent = true)
        {
            BlockWriter blockWriter = new BlockWriter(base.GetType(), indent, base.Disabled).Label(base.Label).Token(this.Name, "").Literal(this.Email, "").Literal(this.Password, "").Integer(this.MaxFilesCaptured, "");
            bool        flag        = !blockWriter.CheckDefault(this.VariableName, "VariableName");

            if (flag)
            {
                blockWriter.Arrow().Token(this.IsCapture ? "CAP" : "VAR", "").Literal(this.VariableName, "");
            }
            return(blockWriter.ToString());
        }
Example #10
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("NAVIGATE")
            .Literal(Url)
            .Integer(Timeout, "Timeout");
            return(writer.ToString());
        }
Example #11
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("BYPASSCF")
            .Literal(Url)
            .Literal(UserAgent, "UserAgent")
            .Boolean(PrintResponseInfo, "PrintResponseInfo")
            .Boolean(ErrorOn302, "ErrorOn302");
            return(writer.ToString());
        }
Example #12
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("KEYCHECK")
            .Boolean(BanOn4XX, "BanOn4XX")
            .Boolean(BanOnToCheck, "BanOnToCheck");

            foreach (var kc in KeyChains)
            {
                writer
                .Indent(1)
                .Token("KEYCHAIN")
                .Token(kc.Type);

                if (kc.Type == KeyChain.KeychainType.Custom)
                {
                    writer.Literal(kc.CustomType);
                }

                writer.Token(kc.Mode);

                foreach (var k in kc.Keys)
                {
                    if (k.LeftTerm == "<SOURCE>" && k.Condition == Condition.Contains)
                    {
                        writer
                        .Indent(2)
                        .Token("KEY")
                        .Literal(k.RightTerm);
                    }
                    else
                    {
                        writer
                        .Indent(2)
                        .Token("KEY")
                        .Literal(k.LeftTerm)
                        .Token(k.Condition);

                        if (k.Condition != Condition.Exists)
                        {
                            writer.Literal(k.RightTerm);
                        }
                    }
                }
            }

            return(writer.ToString());
        }
Example #13
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("RECAPTCHA")
            .Literal(Url)
            .Literal(SiteKey)
            .Arrow()
            .Token("VAR")
            .Literal(VariableName);
            return(writer.ToString());
        }
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("CAPTCHA")
            .Literal(Url)
            .Boolean(Base64, "Base64")
            .Boolean(SendScreenshot, "SendScreenshot")
            .Arrow()
            .Token("VAR")
            .Literal(VariableName);
            return(writer.ToString());
        }
Example #15
0
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled)
                         .Label(Label) // Write the label. If the label is the default one, nothing is written.
                         .Token(Name); // Write the block name. This cannot be changed.

            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                writer
                .Arrow()                          // Write the -> arrow.
                .Token(IsCapture ? "CAP" : "VAR") // Write CAP or VAR depending on IsCapture.
                .Literal(VariableName);           // Write the Variable Name as a literal.
            }
            return(writer.ToString());
        }
Example #16
0
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer.Label(Label)
            .Token(nameof(BCrypt))
            .Literal(input)
            .Literal(Salt);

            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                writer.Arrow()
                .Token("VAR")
                .Literal(VariableName)
                .Indent();
            }
            return(writer.ToString());
        }
Example #17
0
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer.Label(Label)
            .Token(nameof(McDonaldsCapReader))
            .Literal(Base64Captcha);

            if (!writer.CheckDefault(InputVariableName, nameof(InputVariableName)))
            {
                writer.Arrow()
                .Token("VAR")
                .Literal(InputVariableName)
                .Indent();
            }

            return(writer.ToString());
        }
Example #18
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("EXECUTEJS")
            .Literal(JavascriptCode.Replace("\r\n", " ").Replace("\n", " "));

            if (!writer.CheckDefault(OutputVariable, "OutputVariable"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(OutputVariable);
            }

            return(writer.ToString());
        }
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("BROWSERACTION")
            .Token(Action)
            .Literal(Input, "Input");

            if (Action == BrowserAction.Open && !string.IsNullOrEmpty(SUserAgent))
            {
                writer.Indent()
                .Token("USERAGENT")
                .Literal(SUserAgent);
            }

            return(writer.ToString());
        }
Example #20
0
        /// <inheritdoc/>
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer.Label(Label)
            .Token("SPEECHTOTEXT")
            .Token(Lang)
            .Literal(Url);

            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                writer.Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(VariableName)
                .Indent();
            }

            return(writer.ToString());
        }
Example #21
0
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer.Label(Label)
            .Token(nameof(RecaptchaV3Bypass))
            .Literal(RecaptchaUrlGet)
            .Literal(BG)
            .Literal(RecaptchaUrlPost);

            if (!writer.CheckDefault(VariableName, nameof(VariableName)))
            {
                writer.Arrow()
                .Token("VAR")
                .Literal(VariableName)
                .Indent();
            }

            return(writer.ToString());
        }
Example #22
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("BYPASSCF")
            .Literal(Url)
            .Literal(UserAgent, nameof(UserAgent));

            if (SecurityProtocol != SecurityProtocol.SystemDefault)
            {
                writer
                .Token("SECPROTO")
                .Token(SecurityProtocol);
            }

            writer
            .Boolean(PrintResponseInfo, nameof(PrintResponseInfo))
            .Boolean(AutoRedirect, nameof(AutoRedirect));
            return(writer.ToString());
        }
Example #23
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("FUNCTION")
            .Token(FunctionType);

            switch (FunctionType)
            {
            case Function.Hash:
                writer
                .Token(HashType);
                break;

            case Function.HMAC:
                writer
                .Token(HashType)
                .Literal(HmacKey)
                .Boolean(HmacBase64, "HmacBase64")
                .Boolean(KeyBase64, "KeyBase64");
                break;

            case Function.Translate:
                writer
                .Boolean(StopAfterFirstMatch, "StopAfterFirstMatch");
                foreach (var t in TranslationDictionary)
                {
                    writer
                    .Indent()
                    .Token("KEY")
                    .Literal(t.Key)
                    .Token("VALUE")
                    .Literal(t.Value);
                }

                writer
                .Indent();
                break;

            case Function.UnixTimeToDate:
            case Function.DateToUnixTime:
                writer
                .Literal(DateFormat);
                break;

            case Function.Replace:
                writer
                .Literal(ReplaceWhat)
                .Literal(ReplaceWith)
                .Boolean(UseRegex, "UseRegex");
                break;

            case Function.RegexMatch:
                writer
                .Literal(RegexMatch, "RegexMatch");
                break;

            case Function.RandomNum:
                writer
                .Literal(RandomMin)
                .Literal(RandomMax)
                .Boolean(RandomZeroPad, "RandomZeroPad");
                break;

            case Function.CountOccurrences:
                writer
                .Literal(StringToFind);
                break;

            case Function.CharAt:
                writer
                .Literal(CharIndex);
                break;

            case Function.Substring:
                writer
                .Literal(SubstringIndex)
                .Literal(SubstringLength);
                break;

            case Function.RSAEncrypt:
                writer
                .Literal(RsaN)
                .Literal(RsaE)
                .Boolean(RsaOAEP, "RsaOAEP");
                break;

            /*
             * case Function.RSADecrypt:
             * writer
             *  .Literal(RsaN)
             *  .Literal(RsaD)
             *  .Boolean(RsaOAEP, "RsaOAEP");
             * break;
             */

            case Function.RSAPKCS1PAD2:
                writer
                .Literal(RsaN)
                .Literal(RsaE);
                break;

            case Function.GetRandomUA:
                if (UserAgentSpecifyBrowser)
                {
                    writer
                    .Token("BROWSER")
                    .Token(UserAgentBrowser);
                }
                break;

            case Function.AESDecrypt:
            case Function.AESEncrypt:
                writer
                .Literal(AesKey)
                .Literal(AesIV)
                .Token(AesMode)
                .Token(AesPadding);
                break;

            case Function.PBKDF2PKCS5:
                if (KdfSalt != string.Empty)
                {
                    writer.Literal(KdfSalt);
                }
                else
                {
                    writer.Integer(KdfSaltSize);
                }
                writer
                .Integer(KdfIterations)
                .Integer(KdfKeySize)
                .Token(KdfAlgorithm);
                break;
            }

            writer
            .Literal(InputString, "InputString");
            if (!writer.CheckDefault(VariableName, "VariableName"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(VariableName);
            }

            return(writer.ToString());
        }
Example #24
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("SOLVECAPTCHA")
            .Token(Type);

            switch (Type)
            {
            case CaptchaType.TextCaptcha:
                writer
                .Literal(Question)
                .Token(LanguageGroup)
                .Token(Language);
                break;

            case CaptchaType.ImageCaptcha:
                writer
                .Literal(Base64)
                .Token(LanguageGroup)
                .Token(Language)
                .Integer(MinLength)
                .Integer(MaxLength)
                .Token(CharSet)
                .Literal(TextInstructions)
                .Boolean(IsPhrase, nameof(IsPhrase))
                .Boolean(CaseSensitive, nameof(CaseSensitive))
                .Boolean(RequiresCalculation, nameof(RequiresCalculation));
                break;

            case CaptchaType.ReCaptchaV2:
                writer
                .Literal(SiteKey)
                .Literal(SiteUrl)
                .Boolean(IsInvisible, nameof(IsInvisible));
                break;

            case CaptchaType.ReCaptchaV3:
                writer
                .Literal(SiteKey)
                .Literal(SiteUrl)
                .Literal(Action)
                .Literal(MinScore);
                break;

            case CaptchaType.FunCaptcha:
                writer
                .Literal(PublicKey)
                .Literal(ServiceUrl)
                .Boolean(NoJS, nameof(NoJS));
                break;

            case CaptchaType.KeyCaptcha:
                writer
                .Literal(UserId)
                .Literal(SessionId)
                .Literal(WebServerSign1)
                .Literal(WebServerSign2);
                break;

            case CaptchaType.Capy:
            case CaptchaType.HCaptcha:
                writer
                .Literal(SiteKey)
                .Literal(SiteUrl);
                break;

            case CaptchaType.GeeTest:
                writer
                .Literal(SiteUrl)
                .Literal(GT)
                .Literal(Challenge)
                .Literal(ApiServer);
                break;
            }

            writer
            .Boolean(UseProxy, nameof(UseProxy))
            .Literal(UserAgent, nameof(UserAgent));

            return(writer.ToString());
        }
Example #25
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("REQUEST")
            .Token(Method)
            .Literal(Url)
            .Boolean(AutoRedirect, "AutoRedirect")
            .Boolean(ReadResponseSource, "ReadResponseSource")
            .Boolean(ParseQuery, "ParseQuery")
            .Boolean(EncodeContent, "EncodeContent")
            .Token(RequestType, "RequestType")
            .Indent();

            switch (RequestType)
            {
            case RequestType.BasicAuth:
                writer
                .Token("USERNAME")
                .Literal(AuthUser)
                .Token("PASSWORD")
                .Literal(AuthPass)
                .Indent();
                break;

            case RequestType.Standard:
                if (!writer.CheckDefault(PostData, "PostData"))
                {
                    writer
                    .Token("CONTENT")
                    .Literal(PostData)
                    .Indent()
                    .Token("CONTENTTYPE")
                    .Literal(ContentType);
                }
                break;

            case RequestType.Multipart:
                foreach (var c in MultipartContents)
                {
                    writer
                    .Indent()
                    .Token($"{c.Type.ToString().ToUpper()}CONTENT")
                    .Literal($"{c.Name}: {c.Value}");
                }
                if (!writer.CheckDefault(MultipartBoundary, "MultipartBoundary"))
                {
                    writer
                    .Indent()
                    .Token("BOUNDARY")
                    .Literal(MultipartBoundary);
                }
                break;
            }

            foreach (var c in CustomCookies)
            {
                writer
                .Indent()
                .Token("COOKIE")
                .Literal($"{c.Key}: {c.Value}");
            }

            foreach (var h in CustomHeaders)
            {
                writer
                .Indent()
                .Token("HEADER")
                .Literal($"{h.Key}: {h.Value}");
            }

            if (ResponseType == ResponseType.File)
            {
                writer
                .Indent()
                .Arrow()
                .Token("FILE")
                .Literal(DownloadPath);
            }

            return(writer.ToString());
        }
Example #26
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("UTILITY")
            .Token(Group);

            switch (Group)
            {
            case UtilityGroup.List:
                writer
                .Literal(ListName)
                .Token(ListAction);

                switch (ListAction)
                {
                case ListAction.Join:
                    writer
                    .Literal(Separator);
                    break;

                case ListAction.Sort:
                    writer
                    .Boolean(Ascending, "Ascending")
                    .Boolean(Numeric, "Numeric");
                    break;

                case ListAction.Concat:
                case ListAction.Zip:
                case ListAction.Map:
                    writer
                    .Literal(SecondListName);
                    break;

                case ListAction.Add:
                    writer
                    .Literal(ListItem)
                    .Literal(ListIndex);
                    break;

                case ListAction.Remove:
                    writer
                    .Literal(ListIndex);
                    break;

                case ListAction.RemoveValues:
                    writer
                    .Token(ListElementComparer)
                    .Literal(ListComparisonTerm);
                    break;
                }
                break;

            case UtilityGroup.Variable:
                writer
                .Literal(VarName)
                .Token(VarAction);

                switch (VarAction)
                {
                case VarAction.Split:
                    writer
                    .Literal(SplitSeparator);
                    break;
                }
                break;

            case UtilityGroup.Conversion:
                writer
                .Token(ConversionFrom)
                .Token(ConversionTo)
                .Literal(InputString);
                break;

            case UtilityGroup.File:
                writer
                .Literal(FilePath)
                .Token(FileAction);

                switch (FileAction)
                {
                case FileAction.Write:
                case FileAction.WriteLines:
                case FileAction.Append:
                case FileAction.AppendLines:
                case FileAction.Copy:
                case FileAction.Move:
                    writer
                    .Literal(InputString);
                    break;
                }
                break;

            case UtilityGroup.Folder:
                writer
                .Literal(FolderPath)
                .Token(FolderAction);
                break;
            }

            if (!writer.CheckDefault(VariableName, "VariableName"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(VariableName);
            }

            return(writer.ToString());
        }
Example #27
0
        public static string Generate(MetadataSrv.Metadata metadataSrv)
        {
            var entityTypes = metadataSrv.EntityTypes.ToList();
            var entitySets  = (from t in metadataSrv.EntityTypes select new { name = t.Value.EntitySetName, entityTypeName = t.Key }).ToList();

            Dictionary <string, string> dbTypeConvert = null;

            switch (metadataSrv.Dialect)
            {
            case "MSSQL":
                dbTypeConvert = new Dictionary <string, string>()
                {
                    { "int", "int" },
                    { "smallint", "short" },
                    { "real", "float" },
                    { "datetime", "DateTime" },
                    { "nvarchar", "string" },
                    { "text", "string" },
                    { "bit", "bool" }
                };
                break;

            case "MYSQL":
                dbTypeConvert = new Dictionary <string, string>()
                {
                    { "int", "int" },
                    { "smallint", "short" },         // or "int"
                    { "float", "float" },
                    { "decimal", "float" },
                    { "mediumint", "int" },
                    { "tinyint", "sbyte" },         // or "byte"
                    { "datetime", "DateTime" },
                    { "timestamp", "DateTime" },
                    { "bit", "bool" },
                    { "char", "string" },
                    { "varchar", "string" },
                    { "text", "string" },
                    { "longtext", "string" },
                    { "enum", "string" },
                    { "set", "string" },
                    { "geometry", "object" },
                    { "year", "ushort" },
                    { "blob", "byte[]" },
                };
                break;

            default:
                throw new Exception("Unknown dialect");
            }

            var br = new BlockWriter();

            br.WriteLine("#pragma warning disable SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300")
            .WriteLine()
            .WriteLine("//------------------------------------------------------------------------------")
            .WriteLine("//    This code was auto-generated.")
            .WriteLine("//")
            .WriteLine("//    Manual changes to this file may cause unexpected behavior in your application.")
            .WriteLine("//    Manual changes to this file will be overwritten if the code is regenerated.")
            .WriteLine("//------------------------------------------------------------------------------")
            .WriteLine();

            br.WriteLine("using NavyBlueDtos;");
            br.WriteLine("using NavyBlueEntities;");
            br.WriteLine("using Newtonsoft.Json;");
            br.WriteLine("using Newtonsoft.Json.Linq;");
            br.WriteLine("using System;");
            br.WriteLine("using System.Collections.Generic;");
            br.WriteLine("using MetadataSrv = NavyBlueDtos.MetadataSrv;");
            br.WriteLine();

            br.WriteLine("namespace " + metadataSrv.Namespace);
            br.BeginBlock("{");

            //var json = JsonConvert.SerializeObject(result, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore });

            // DataProvider
            br.WriteLine("public interface IDataProvider");
            br.BeginBlock("{")
            .WriteLine("DataService CreateDataServiceInstance();");
            br.EndBlock("}");

            br.WriteLine("public class DataProvider : IDataProvider");
            br.BeginBlock("{")
            .WriteLine("private readonly IDataProviderDto dataProviderDto;")
            .WriteLine();

            br.WriteLine("public DataProvider(IDataProviderDto dataProviderDto)");
            br.BeginBlock("{")
            .WriteLine("this.dataProviderDto = dataProviderDto;");
            br.EndBlock("}");

            br.WriteLine("public DataService CreateDataServiceInstance()");
            br.BeginBlock("{")
            .WriteLine("var dataServiceDto = this.dataProviderDto.CreateDataServiceInstance();")
            .WriteLine("var dataService = new DataService(dataServiceDto);")
            .WriteLine("return dataService;");
            br.EndBlock("}", false);

            br.EndBlock("}");

            // DataService
            br.WriteLine("public class DataService : DataServiceEntity<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>");
            br.BeginBlock("{");
            br.WriteLine("public DataService(DataServiceDto dataServiceDto) : base(dataServiceDto)");
            br.BeginBlock("{");
            br.WriteLine("this.From = new ServiceLocation<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>()");
            br.BeginBlock("{")
            .WriteLine("Local = new ViewType<LocalEntityViews, LocalDtoViews>() { EntityView = new LocalEntityViews(this.DataContext), DtoView = new LocalDtoViews(this.DataContext, dataServiceDto.MetadataSrv) },")
            .WriteLine("Remote = new ViewType<RemoteEntityViews, RemoteDtoViews>() { EntityView = new RemoteEntityViews(dataServiceDto.DataViewDto, this.DataContext), DtoView = new RemoteDtoViews(dataServiceDto.DataViewDto) }");
            br.EndBlock("};", false);
            br.EndBlock("}", false);

            // br.WriteLine("public static DataService CreateDataServiceInstance()");
            // br.BeginBlock("{")
            //     .WriteLine("var connectionString = DataProviderConfig.GetConnectionString();")
            //     .WriteLine("var metadataSrv = DataProviderConfig.GetMetadataSrv();")
            //     .WriteLine("var dataServiceDto = new DataServiceDto(connectionString, metadataSrv);")
            //     .WriteLine("var dataService = new DataService(dataServiceDto);")
            //     .WriteLine("return dataService;");
            // br.EndBlock("}", false);

            br.EndBlock("}");

            // LocalEntityViews
            br.WriteLine("public class LocalEntityViews : LocalEntityViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public LocalEntityViews(DataContext dataContext) : base(dataContext)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalEntity<{1}>(dataContext);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewLocalEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // RemoteEntityViews
            br.WriteLine("public class RemoteEntityViews : RemoteEntityViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public RemoteEntityViews(DataViewDto dataViewDto, DataContext dataContext) : base(dataViewDto, dataContext)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteEntity<{1}>(dataViewDto, dataContext);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewRemoteEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // LocalDtoViews
            br.WriteLine("public class LocalDtoViews : LocalDtoViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public LocalDtoViews(DataContext dataContext, MetadataSrv.Metadata metadataSrv) : base(dataContext, metadataSrv)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalDto<{1}>(dataContext, metadataSrv);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewLocalDto<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // RemoteDtoViews
            br.WriteLine("public class RemoteDtoViews : RemoteDtoViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public RemoteDtoViews(DataViewDto dataViewDto) : base(dataViewDto)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteDto<{1}>(dataViewDto);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewRemoteDto {0} {{ get {{ return this.GetPropertyValue(\"{1}\"); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // Entities
            foreach (var et in entityTypes)
            {
                var entityTypeName       = et.Key;
                var properties           = et.Value.Properties;
                var navigationProperties = et.Value.NavigationProperties ?? new Dictionary <string, MetadataSrv.NavigationProperty>();

                // with constructor generator
                br.WriteLine(string.Format("public sealed class {0} : IDerivedEntity", entityTypeName));
                br.BeginBlock("{");
                br.WriteLine(string.Format("public {0}(Entity entity)", entityTypeName));
                br.BeginBlock("{")
                .WriteLine(string.Format("if (entity.entityTypeName != \"{0}\") {{ throw new ArgumentException(\"Incorrect entity type\"); }}", entityTypeName))
                .WriteLine("this.entity = entity;");
                br.EndBlock("}");

                br.WriteLine("public Entity entity { get; private set; }")
                .WriteLine();

                GeneratorUtils.WriteProperties(br, properties, dbTypeConvert);

                // navigation properties for intellisense
                GeneratorUtils.WriteNavigationProperties(br, entityTypeName, navigationProperties);

                br.EndBlock("}");
            }

            br.EndBlock("}");

            br.WriteLine("#pragma warning restore SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300");

            return(br.ToString());
        }
        public static string Generate(MetadataCli.Metadata metadataCli)
        {
            var entityTypes = metadataCli.EntityTypes.ToList();
            var entitySets  = (from t in metadataCli.EntityTypes select new { name = t.Value.EntitySetName, entityTypeName = t.Key }).ToList();

            var br = new BlockWriter();

            br.WriteLine("#pragma warning disable SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300")
            .WriteLine()
            .WriteLine("//------------------------------------------------------------------------------")
            .WriteLine("//    This code was auto-generated.")
            .WriteLine("//")
            .WriteLine("//    Manual changes to this file may cause unexpected behavior in your application.")
            .WriteLine("//    Manual changes to this file will be overwritten if the code is regenerated.")
            .WriteLine("//------------------------------------------------------------------------------")
            .WriteLine();

            br.WriteLine("using NavyBlueDtos;");
            br.WriteLine("using NavyBlueEntities;");
            br.WriteLine("using Newtonsoft.Json;");
            br.WriteLine("using Newtonsoft.Json.Linq;");
            br.WriteLine("using System;");
            br.WriteLine("using System.Collections.Generic;");
            br.WriteLine("using MetadataSrv = NavyBlueDtos.MetadataSrv;");
            br.WriteLine();

            br.WriteLine("namespace Server.Models.DataAccess");
            br.BeginBlock("{");

            // DataProvider
            br.WriteLine("public interface IDataProvider");
            br.BeginBlock("{")
            .WriteLine("DataService CreateDataServiceInstance();");
            br.EndBlock("}");

            br.WriteLine("public class DataProvider : IDataProvider");
            br.BeginBlock("{")
            .WriteLine("private readonly IDataProviderDto dataProviderDto;")
            .WriteLine();

            br.WriteLine("public DataProvider(IDataProviderDto dataProviderDto)");
            br.BeginBlock("{")
            .WriteLine("this.dataProviderDto = dataProviderDto;");
            br.EndBlock("}");

            br.WriteLine("public DataService CreateDataServiceInstance()");
            br.BeginBlock("{")
            .WriteLine("var dataServiceDto = this.dataProviderDto.CreateDataServiceInstance();")
            .WriteLine("var dataService = new DataService(dataServiceDto);")
            .WriteLine("return dataService;");
            br.EndBlock("}", false);

            br.EndBlock("}");

            // DataService
            br.WriteLine("public class DataService : DataServiceEntity<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>");
            br.BeginBlock("{");
            br.WriteLine("public DataService(DataServiceDto dataServiceDto) : base(dataServiceDto)");
            br.BeginBlock("{");
            br.WriteLine("this.From = new ServiceLocation<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>()");
            br.BeginBlock("{")
            .WriteLine("Local = new ViewType<LocalEntityViews, LocalDtoViews>() { EntityView = new LocalEntityViews(this.DataContext), DtoView = new LocalDtoViews(this.DataContext, dataServiceDto.MetadataSrv) },")
            .WriteLine("Remote = new ViewType<RemoteEntityViews, RemoteDtoViews>() { EntityView = new RemoteEntityViews(dataServiceDto.DataViewDto, this.DataContext), DtoView = new RemoteDtoViews(dataServiceDto.DataViewDto) }");
            br.EndBlock("};", false);
            br.EndBlock("}", false);

            br.EndBlock("}");

            // LocalEntityViews
            br.WriteLine("public class LocalEntityViews : LocalEntityViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public LocalEntityViews(DataContext dataContext) : base(dataContext)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalEntity<{1}>(dataContext);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewLocalEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // RemoteEntityViews
            br.WriteLine("public class RemoteEntityViews : RemoteEntityViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public RemoteEntityViews(DataViewDto dataViewDto, DataContext dataContext) : base(dataViewDto, dataContext)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteEntity<{1}>(dataViewDto, dataContext);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewRemoteEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // LocalDtoViews
            br.WriteLine("public class LocalDtoViews : LocalDtoViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public LocalDtoViews(DataContext dataContext, MetadataSrv.Metadata metadataSrv) : base(dataContext, metadataSrv)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalDto<{1}>(dataContext, metadataSrv);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewLocalDto<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // RemoteDtoViews
            br.WriteLine("public class RemoteDtoViews : RemoteDtoViewsBase");
            br.BeginBlock("{");
            br.WriteLine("public RemoteDtoViews(DataViewDto dataViewDto) : base(dataViewDto)");
            br.BeginBlock("{");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteDto<{1}>(dataViewDto);", es.name, es.entityTypeName));
            }
            br.EndBlock("}");
            foreach (var es in entitySets)
            {
                br.WriteLine(string.Format("public DataViewRemoteDto {0} {{ get {{ return this.GetPropertyValue(\"{1}\"); }} }}", es.name, es.entityTypeName));
            }
            br.EndBlock("}");

            // Entities
            foreach (var et in entityTypes)
            {
                var entityTypeName       = et.Key;
                var properties           = et.Value.Properties;
                var navigationProperties = et.Value.NavigationProperties ?? new Dictionary <string, MetadataCli.NavigationProperty>();

                // with constructor generator
                br.WriteLine(string.Format("public sealed class {0} : IDerivedEntity", entityTypeName));
                br.BeginBlock("{");
                br.WriteLine(string.Format("public {0}(Entity entity)", entityTypeName));
                br.BeginBlock("{")
                .WriteLine(string.Format("if (entity.entityTypeName != \"{0}\") {{ throw new ArgumentException(\"Incorrect entity type\"); }}", entityTypeName))
                .WriteLine("this.entity = entity;");
                br.EndBlock("}");

                br.WriteLine("public Entity entity { get; private set; }")
                .WriteLine();

                GeneratorUtils.WriteProperties(br, properties);

                // navigation properties for intellisense
                GeneratorUtils.WriteNavigationProperties(br, entityTypeName, navigationProperties);

                br.EndBlock("}");
            }

            br.EndBlock("}");

            br.WriteLine("#pragma warning restore SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300");

            return(br.ToString());
        }
Example #29
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("FUNCTION")
            .Token(FunctionType);

            switch (FunctionType)
            {
            case Function.Hash:
                writer
                .Token(HashType);
                break;

            case Function.HMAC:
                writer
                .Token(HashType)
                .Literal(HmacKey)
                .Boolean(HmacBase64, "HmacBase64");
                break;

            case Function.Translate:
                writer
                .Boolean(StopAfterFirstMatch, "StopAfterFirstMatch");
                foreach (var t in TranslationDictionary)
                {
                    writer
                    .Indent()
                    .Token("KEY")
                    .Literal(t.Key)
                    .Token("VALUE")
                    .Literal(t.Value);
                }

                writer
                .Indent();
                break;

            case Function.DateToUnixTime:
                writer
                .Literal(DateFormat, "DateFormat");
                break;

            case Function.Replace:
                writer
                .Literal(ReplaceWhat)
                .Literal(ReplaceWith)
                .Boolean(UseRegex, "UseRegex");
                break;

            case Function.RegexMatch:
                writer
                .Literal(RegexMatch, "RegexMatch");
                break;

            case Function.RandomNum:
                writer
                .Integer(RandomMin)
                .Integer(RandomMax);
                break;

            case Function.CountOccurrences:
                writer
                .Literal(StringToFind);
                break;

            case Function.CharAt:
                writer
                .Literal(CharIndex);
                break;

            case Function.Substring:
                writer
                .Literal(SubstringIndex)
                .Literal(SubstringLength);
                break;

            case Function.RSA:
                writer
                .Literal(RSAMod)
                .Literal(RSAExp);
                break;
            }

            writer
            .Literal(InputString, "InputString");
            if (!writer.CheckDefault(VariableName, "VariableName"))
            {
                writer
                .Arrow()
                .Token(IsCapture ? "CAP" : "VAR")
                .Literal(VariableName);
            }

            return(writer.ToString());
        }
Example #30
0
        /// <inheritdoc />
        public override string ToLS(bool indent = true)
        {
            var writer = new BlockWriter(GetType(), indent, Disabled);

            writer
            .Label(Label)
            .Token("REQUEST")
            .Token(Method)
            .Literal(Url)
            .Boolean(AcceptEncoding, "AcceptEncoding")
            .Boolean(AutoRedirect, "AutoRedirect")
            .Boolean(ReadResponseSource, "ReadResponseSource")
            .Boolean(EncodeContent, "EncodeContent")
            .Token(RequestType, "RequestType")
            .Indent();

            switch (RequestType)
            {
            case RequestType.BasicAuth:
                writer
                .Token("USERNAME")
                .Literal(AuthUser)
                .Token("PASSWORD")
                .Literal(AuthPass)
                .Indent();
                break;

            case RequestType.Standard:
                if (HttpRequest.CanContainRequestBody(method))
                {
                    writer
                    .Token("CONTENT")
                    .Literal(PostData)
                    .Indent()
                    .Token("CONTENTTYPE")
                    .Literal(ContentType);
                }
                break;

            case RequestType.Multipart:
                foreach (var c in MultipartContents)
                {
                    writer
                    .Indent()
                    .Token($"{c.Type.ToString().ToUpper()}CONTENT");

                    if (c.Type == MultipartContentType.String)
                    {
                        writer.Literal($"{c.Name}: {c.Value}");
                    }
                    else if (c.Type == MultipartContentType.File)
                    {
                        writer.Literal($"{c.Name}: {c.Value}: {c.ContentType}");
                    }
                }
                if (!writer.CheckDefault(MultipartBoundary, "MultipartBoundary"))
                {
                    writer
                    .Indent()
                    .Token("BOUNDARY")
                    .Literal(MultipartBoundary);
                }
                break;

            case RequestType.Raw:
                if (HttpRequest.CanContainRequestBody(method))
                {
                    writer
                    .Token("RAWDATA")
                    .Literal(RawData)
                    .Indent()
                    .Token("CONTENTTYPE")
                    .Literal(ContentType);
                }
                break;
            }

            if (SecurityProtocol != SecurityProtocol.SystemDefault)
            {
                writer
                .Indent()
                .Token("SECPROTO")
                .Token(SecurityProtocol, "SecurityProtocol");
            }

            foreach (var c in CustomCookies)
            {
                writer
                .Indent()
                .Token("COOKIE")
                .Literal($"{c.Key}: {c.Value}");
            }

            foreach (var h in CustomHeaders)
            {
                writer
                .Indent()
                .Token("HEADER")
                .Literal($"{h.Key}: {h.Value}");
            }

            if (ResponseType == ResponseType.File)
            {
                writer
                .Indent()
                .Arrow()
                .Token("FILE")
                .Literal(DownloadPath)
                .Boolean(SaveAsScreenshot, "SaveAsScreenshot");
            }
            else if (ResponseType == ResponseType.Base64String)
            {
                writer
                .Indent()
                .Arrow()
                .Token("BASE64")
                .Literal(OutputVariable);
            }

            return(writer.ToString());
        }