Merge pull request #365 from xinvincible21/master

safe-JSON-parsing-check-for-type-undefined
This commit is contained in:
Tony Tam
2013-12-29 05:44:43 -08:00
3 changed files with 74 additions and 38 deletions

45
dist/lib/swagger.js vendored
View File

@@ -63,10 +63,18 @@
} }
}, },
response: function(rawResponse) { response: function(rawResponse) {
var response; if (/^[\],:{}\s]*$/.test(rawResponse.content.data.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
response = JSON.parse(rawResponse.content.data); try {
var response = JSON.parse(rawResponse.content.data);
} catch (e) {
var response = rawResponse.content.data;
}
} else {
var response = rawResponse.content.data;
}
_this.swaggerVersion = response.swaggerVersion; _this.swaggerVersion = response.swaggerVersion;
if (_this.swaggerVersion === "1.2") {
if (_this.swaggerVersion === "1.2") {
return _this.buildFromSpec(response); return _this.buildFromSpec(response);
} else { } else {
return _this.buildFrom1_1Spec(response); return _this.buildFrom1_1Spec(response);
@@ -290,7 +298,7 @@
this.api.fail("SwaggerResources must have a path."); this.api.fail("SwaggerResources must have a path.");
} }
if (this.path.substring(0, 4) === 'http') { if (this.path.substring(0, 4) === 'http') {
this.url = this.path.replace('{format}', 'json'); this.url = this.path.replace('{format}', 'json');
} else { } else {
this.url = this.api.basePath + this.path.replace('{format}', 'json'); this.url = this.api.basePath + this.path.replace('{format}', 'json');
} }
@@ -305,7 +313,16 @@
}, },
response: function(rawResponse) { response: function(rawResponse) {
var response; var response;
response = JSON.parse(rawResponse.content.data); if (/^[\],:{}\s]*$/.test(rawResponse.content.data.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
try {
var response = JSON.parse(rawResponse.content.data);
} catch (e) {
var response = rawResponse.content.data;
}
} else {
var response = rawResponse.content.data;
}
return _this.addApiDeclaration(response); return _this.addApiDeclaration(response);
} }
} }
@@ -641,10 +658,10 @@
parameter = _ref1[_i]; parameter = _ref1[_i];
parameter.name = parameter.name || parameter.type || parameter.dataType; parameter.name = parameter.name || parameter.type || parameter.dataType;
type = parameter.type || parameter.dataType; type = parameter.type || parameter.dataType;
if (type.toLowerCase() === 'boolean') { if (typeof(type) != 'undefined' && type.toLowerCase() === 'boolean') {
parameter.allowableValues = {}; parameter.allowableValues = {};
parameter.allowableValues.values = ["true", "false"]; parameter.allowableValues.values = ["true", "false"];
} }
parameter.signature = this.getSignature(type, this.resource.models); parameter.signature = this.getSignature(type, this.resource.models);
parameter.sampleJSON = this.getSampleJSON(type, this.resource.models); parameter.sampleJSON = this.getSampleJSON(type, this.resource.models);
if (parameter["enum"] != null) { if (parameter["enum"] != null) {
@@ -702,11 +719,11 @@
} }
SwaggerOperation.prototype.isListType = function(type) { SwaggerOperation.prototype.isListType = function(type) {
if (type.indexOf('[') >= 0) { if (typeof(type) != 'undefined' && type.indexOf('[') >= 0) {
return type.substring(type.indexOf('[') + 1, type.indexOf(']')); return type.substring(type.indexOf('[') + 1, type.indexOf(']'));
} else { } else {
return void 0; return void 0;
} }
}; };
SwaggerOperation.prototype.getSignature = function(type, models) { SwaggerOperation.prototype.getSignature = function(type, models) {

22
dist/swagger-ui.js vendored
View File

@@ -1509,14 +1509,16 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
contentTypeModel.produces = this.model.produces; contentTypeModel.produces = this.model.produces;
_ref5 = this.model.parameters; _ref5 = this.model.parameters;
for (_i = 0, _len = _ref5.length; _i < _len; _i++) { for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
param = _ref5[_i]; param = _ref5[_i];
type = param.type || param.dataType; type = param.type || param.dataType;
if (type.toLowerCase() === 'file') {
if (!contentTypeModel.consumes) { if (typeof(type) != 'undefined' && type.toLowerCase() === 'file') {
console.log("set content type "); if (!contentTypeModel.consumes) {
contentTypeModel.consumes = 'multipart/form-data'; console.log("set content type ");
} contentTypeModel.consumes = 'multipart/form-data';
} }
}
} }
responseContentTypeView = new ResponseContentTypeView({ responseContentTypeView = new ResponseContentTypeView({
model: contentTypeModel model: contentTypeModel
@@ -1904,8 +1906,8 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
if (this.model.paramType === 'body') { if (this.model.paramType === 'body') {
this.model.isBody = true; this.model.isBody = true;
} }
if (type.toLowerCase() === 'file') { if (typeof(type) != 'undefined' && type.toLowerCase() === 'file') {
this.model.isFile = true; this.model.isFile = true;
} }
template = this.template(); template = this.template();
$(this.el).html(template(this.model)); $(this.el).html(template(this.model));

View File

@@ -63,10 +63,18 @@
} }
}, },
response: function(rawResponse) { response: function(rawResponse) {
var response; if (/^[\],:{}\s]*$/.test(rawResponse.content.data.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
response = JSON.parse(rawResponse.content.data); try {
var response = JSON.parse(rawResponse.content.data);
} catch (e) {
var response = rawResponse.content.data;
}
} else {
var response = rawResponse.content.data;
}
_this.swaggerVersion = response.swaggerVersion; _this.swaggerVersion = response.swaggerVersion;
if (_this.swaggerVersion === "1.2") {
if (_this.swaggerVersion === "1.2") {
return _this.buildFromSpec(response); return _this.buildFromSpec(response);
} else { } else {
return _this.buildFrom1_1Spec(response); return _this.buildFrom1_1Spec(response);
@@ -290,7 +298,7 @@
this.api.fail("SwaggerResources must have a path."); this.api.fail("SwaggerResources must have a path.");
} }
if (this.path.substring(0, 4) === 'http') { if (this.path.substring(0, 4) === 'http') {
this.url = this.path.replace('{format}', 'json'); this.url = this.path.replace('{format}', 'json');
} else { } else {
this.url = this.api.basePath + this.path.replace('{format}', 'json'); this.url = this.api.basePath + this.path.replace('{format}', 'json');
} }
@@ -305,7 +313,16 @@
}, },
response: function(rawResponse) { response: function(rawResponse) {
var response; var response;
response = JSON.parse(rawResponse.content.data); if (/^[\],:{}\s]*$/.test(rawResponse.content.data.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
try {
var response = JSON.parse(rawResponse.content.data);
} catch (e) {
var response = rawResponse.content.data;
}
} else {
var response = rawResponse.content.data;
}
return _this.addApiDeclaration(response); return _this.addApiDeclaration(response);
} }
} }
@@ -641,10 +658,10 @@
parameter = _ref1[_i]; parameter = _ref1[_i];
parameter.name = parameter.name || parameter.type || parameter.dataType; parameter.name = parameter.name || parameter.type || parameter.dataType;
type = parameter.type || parameter.dataType; type = parameter.type || parameter.dataType;
if (type.toLowerCase() === 'boolean') { if (typeof(type) != 'undefined' && type.toLowerCase() === 'boolean') {
parameter.allowableValues = {}; parameter.allowableValues = {};
parameter.allowableValues.values = ["true", "false"]; parameter.allowableValues.values = ["true", "false"];
} }
parameter.signature = this.getSignature(type, this.resource.models); parameter.signature = this.getSignature(type, this.resource.models);
parameter.sampleJSON = this.getSampleJSON(type, this.resource.models); parameter.sampleJSON = this.getSampleJSON(type, this.resource.models);
if (parameter["enum"] != null) { if (parameter["enum"] != null) {
@@ -702,11 +719,11 @@
} }
SwaggerOperation.prototype.isListType = function(type) { SwaggerOperation.prototype.isListType = function(type) {
if (type.indexOf('[') >= 0) { if (typeof(type) != 'undefined' && type.indexOf('[') >= 0) {
return type.substring(type.indexOf('[') + 1, type.indexOf(']')); return type.substring(type.indexOf('[') + 1, type.indexOf(']'));
} else { } else {
return void 0; return void 0;
} }
}; };
SwaggerOperation.prototype.getSignature = function(type, models) { SwaggerOperation.prototype.getSignature = function(type, models) {