Exemple #1
0
        public async Task <RamlDocument> LoadRamlAsync(string raml)
        {
            if (string.IsNullOrWhiteSpace(raml))
            {
                throw new ArgumentException("raml");
            }

            var load = Edge.Func(@"
                return function (content, callback) {
                    var raml = require('raml-parser');
                    raml.load(content).then( function(parsed) {
                        callback(null, parsed);
                    }, function(error) {
                        callback(null, 'Error parsing: ' + error);
                    });
                }
            ");

            var rawresult = await load(raml);

            var error = rawresult as string;

            if (!string.IsNullOrWhiteSpace(error) && error.ToLowerInvariant().Contains("error"))
            {
                throw new FormatException(error);
            }

            var ramlDocument = new RamlBuilder().Build((IDictionary <string, object>)rawresult);

            return(ramlDocument);
        }
Exemple #2
0
        public void should_parse_whewn_oauth1()
        {
            var dynamicRaml = new Dictionary <string, object>();

            dynamicRaml.Add("title", "test");
            dynamicRaml.Add("baseUri", "http://baseuri.com");
            var oauth         = new Dictionary <string, object>();
            var settings      = new Dictionary <string, object>();
            var oauthSettings = new Dictionary <string, object>();

            oauthSettings.Add("authorizationUri", "https://authorization.com");
            oauthSettings.Add("tokenCredentialsUri", "https://tokencredentials.com");
            oauthSettings.Add("requestTokenUri", "https://requesttoken.com");
            settings.Add("settings", oauthSettings);
            settings.Add("type", "OAuth 1.0");
            oauth.Add("oauth_1_0", settings);
            var securitySchemes = new object[] { oauth };

            dynamicRaml.Add("securitySchemes", securitySchemes);
            var ramlDocument = new RamlBuilder().Build(dynamicRaml);

            var security = SecurityParser.GetSecurity(ramlDocument);

            Assert.AreEqual("https://tokencredentials.com", security.TokenCredentialsUri);
            Assert.AreEqual("https://requesttoken.com", security.RequestTokenUri);
            Assert.AreEqual("https://authorization.com", security.AuthorizationUri);
        }
Exemple #3
0
        public void should_parse_whewn_oauth2()
        {
            var dynamicRaml = new Dictionary <string, object>();

            dynamicRaml.Add("title", "test");
            dynamicRaml.Add("baseUri", "http://baseuri.com");
            var oauth = new Dictionary <string, object>();

            var settings      = new Dictionary <string, object>();
            var oauthSettings = new Dictionary <string, object>();

            oauthSettings.Add("authorizationUri", "https://authorization.com");
            oauthSettings.Add("accessTokenUri", "https://accesstoken.com");
            oauthSettings.Add("authorizationGrants", new [] { "read", "write" });
            settings.Add("settings", oauthSettings);
            settings.Add("type", "OAuth 2.0");
            oauth.Add("oauth_2_0", settings);

            var securitySchemes = new object[] { oauth };

            dynamicRaml.Add("securitySchemes", securitySchemes);
            var ramlDocument = new RamlBuilder().Build(dynamicRaml);

            var security = SecurityParser.GetSecurity(ramlDocument);

            Assert.AreEqual("https://accesstoken.com", security.AccessTokenUri);
            Assert.AreEqual("read", security.AuthorizationGrants.First());
            Assert.AreEqual("https://authorization.com", security.AuthorizationUri);
        }
        public async Task <RamlDocument> LoadAsync(string filePath)
        {
            if (string.IsNullOrWhiteSpace(filePath))
            {
                throw new ArgumentException("filePath");
            }

            var load = Edge.Func(@"

                return function (filepath, callback) {

                    var raml1Parser = require('raml-1-0-parser');
                    var path = require('path');

                    var api = raml1Parser.loadApiSync(filepath);
             
                    var errors = '';
                
                    var isError = false;
                
                    for (var i = 0; i < api.errors().length; i++) {
                    
                        if (!api.errors()[i].isWarning)
                            isError = true;
                    
                        errors += (api.errors()[i].isWarning ? 'Warning: ' : 'Error: ') + api.errors()[i].message + '\r\n';
                        errors += 'Line: ' + api.errors()[i].line + ', column: ' + api.errors()[i].column;
                        if (api.errors()[i].path != null)
                            errors += ', ' + api.errors()[i].path + '\r\n';
                        else
                            errors += '\r\n';

                        errors += '\r\n';
                    }

                    if (isError)
                        callback(null, 'Error: when parsing.\r\n\r\n' + errors);
                    else
                        callback(null, api.toJSON())

                }
            ");

            var rawresult = await load(filePath);

            var error = rawresult as string;

            if (!string.IsNullOrWhiteSpace(error) && error.ToLowerInvariant().Contains("error"))
            {
                throw new FormatException(error);
            }

            var ramlDocument = new RamlBuilder().Build((IDictionary <string, object>)rawresult);

            return(ramlDocument);
        }
Exemple #5
0
        public async Task <RamlDocument> LoadRamlAsync(string raml, string path)
        {
            if (string.IsNullOrWhiteSpace(raml))
            {
                throw new ArgumentException("raml");
            }

            var load = Edge.Func(@"
                return function (obj, callback) {
                    var raml = require('raml-parser');
                    raml.load(obj.content, obj.path).then( function(parsed) {
                        callback(null, parsed);
                    }, function(error) {
                        callback(null, 'Error parsing: ' + error);
                    });
                }
            ");

            if (!string.IsNullOrWhiteSpace(path) && !path.EndsWith(Path.DirectorySeparatorChar.ToString()))
            {
                path += Path.DirectorySeparatorChar;
            }

            var rawresult = await load(new { content = raml, path });

            var error = rawresult as string;

            if (!string.IsNullOrWhiteSpace(error) && error.ToLowerInvariant().Contains("error"))
            {
                throw new FormatException(error);
            }

            var ramlDocument = new RamlBuilder().Build((IDictionary <string, object>)rawresult);

            return(ramlDocument);
        }
        public async Task <RamlDocument> LoadAsync(string filePath, string[] extensionPaths)
        {
            if (string.IsNullOrWhiteSpace(filePath))
            {
                throw new ArgumentException("filePath");
            }

            var load = Edge.Func(@"

                function position(pos, positions) {

                    var row = -1;
                    var col = -1;
                    for (var i = 0; i < positions.length; i++) {
                        if (positions[i] >= pos) {
                            row = i + 1;
                            col = positions[i-1] - pos;
                            return { row: row, col: col };
                        }
                    }
                    return { row: row, col: col };
                }

                return function (obj, callback) {

                    var raml1Parser = require('raml-1-0-parser');
                    var path = require('path');

                    var api = raml1Parser.loadApiSync(obj.Filepath, obj.Extensions);

	                var fs = require('fs');

                    var arr = [];
                    var content = fs.readFileSync(obj.Filepath).toString();
                    content.split('\n').forEach(function (x, i) {
                        if (i == 0) {
                            arr.push(x.length + 1);
                        } else {
                            arr.push(arr[i - 1] + x.length + 1);
                        }
                    }); //+1 stands for '\n'    
                
                    var errors = '';
                
                    var isError = false;
                
                    for (var i = 0; i < api.errors().length; i++) {
                    
                        var pos = position(api.errors()[i].start, arr);
                    
                        if (!api.errors()[i].isWarning)
                            isError = true;
                    
                        errors += (api.errors()[i].isWarning ? 'Warning: ' : 'Error: ') + api.errors()[i].message + '\r\n';
                        errors += 'Start: ' + api.errors()[i].start + ' - end: ' + api.errors()[i].end + '\r\n';
                        errors += 'Line: ' + pos.row + ', col: ' + pos.col + '\r\n';
                        if (api.errors()[i].path != null)
                            errors += 'In: ' + api.errors()[i].path + '\r\n';
                    }

                    if (isError)
                        callback(null, 'Error: when parsing.\r\n' + errors);
                    else
                        callback(null, api.toJSON())

                }
            ");

            var rawresult = await load(new { Filepath = filePath, Extensions = extensionPaths });

            var error = rawresult as string;

            if (!string.IsNullOrWhiteSpace(error) && error.ToLowerInvariant().Contains("error"))
            {
                throw new FormatException(error);
            }

            var ramlDocument = new RamlBuilder().Build((IDictionary <string, object>)rawresult);

            return(ramlDocument);
        }