Skip to content

Commit 1a571a1

Browse files
authored
Merge pull request #919 from swagger-api/issue-917
added form data, multipart tests
2 parents 810b7af + 308c7d0 commit 1a571a1

File tree

4 files changed

+94
-16
lines changed

4 files changed

+94
-16
lines changed

browser/swagger-client.js

+13-8
Large diffs are not rendered by default.

browser/swagger-client.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/types/operation.js

+12-7
Original file line numberDiff line numberDiff line change
@@ -571,12 +571,17 @@ Operation.prototype.getBody = function (headers, args) {
571571
for (var i = 0; i < this.parameters.length; i++) {
572572
param = this.parameters[i];
573573
if (typeof args[param.name] !== 'undefined') {
574+
var isPassword;
575+
if(param.type === 'string' && param.format === 'password') {
576+
isPassword = 'password';
577+
}
574578
if (param.in === 'body') {
575579
body = args[param.name];
576580
} else if (param.in === 'formData') {
577581
formParams[param.name] = {
578582
param: param,
579-
value: args[param.name]
583+
value: args[param.name],
584+
password: isPassword
580585
};
581586
hasFormParams = true;
582587
}
@@ -608,20 +613,21 @@ Operation.prototype.getBody = function (headers, args) {
608613
for (key in formParams) {
609614
param = formParams[key].param;
610615
value = formParams[key].value;
616+
var password = formParams[key].password;
611617

612618
if (typeof value !== 'undefined') {
613619
if (Array.isArray(value)) {
614620
if (encoded !== '') {
615621
encoded += '&';
616622
}
617-
encoded += this.encodeQueryCollection(param.collectionFormat, key, value);
623+
encoded += this.encodeQueryCollection(param.collectionFormat, key, value, password);
618624
}
619625
else {
620626
if (encoded !== '') {
621627
encoded += '&';
622628
}
623629

624-
encoded += encodeURIComponent(key) + '=' + encodeURIComponent(value);
630+
encoded += encodeURIComponent(key) + '=' + mask(encodeURIComponent(value), password);
625631
}
626632
}
627633
}
@@ -1153,7 +1159,7 @@ Operation.prototype.encodePathCollection = function (type, name, value, maskPass
11531159
return encoded;
11541160
};
11551161

1156-
Operation.prototype.encodeQueryCollection = function (type, name, value) {
1162+
Operation.prototype.encodeQueryCollection = function (type, name, value, maskPasswords) {
11571163
var encoded = '';
11581164
var i;
11591165

@@ -1162,7 +1168,7 @@ Operation.prototype.encodeQueryCollection = function (type, name, value) {
11621168
for (i = 0; i < value.length; i++) {
11631169
if (i > 0) {encoded += '&';}
11641170

1165-
encoded += this.encodeQueryKey(name) + '=' + this.encodeQueryParam(value[i]);
1171+
encoded += this.encodeQueryKey(name) + '=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
11661172
}
11671173
} else {
11681174
var separator = '';
@@ -1180,8 +1186,7 @@ Operation.prototype.encodeQueryCollection = function (type, name, value) {
11801186
if (i !== 0) {
11811187
encoded += '&';
11821188
}
1183-
1184-
encoded += this.encodeQueryKey(name) + '[]=' + this.encodeQueryParam(value[i]);
1189+
encoded += this.encodeQueryKey(name) + '[]=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
11851190
}
11861191
}
11871192

test/help.js

+68
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,74 @@ describe('help options', function () {
460460
});
461461
});
462462

463+
it('shows curl for multipart/form-data with password masking', function (done) {
464+
var spec = {
465+
basePath: '/v2',
466+
paths: {
467+
'/test': {
468+
post: {
469+
tags: [ 'test' ],
470+
operationId: 'sample',
471+
consumes: ['multipart/form-data'],
472+
parameters: [
473+
{
474+
in: 'query',
475+
name: 'password',
476+
type: 'string',
477+
format: 'password',
478+
required: true
479+
}
480+
]
481+
}
482+
}
483+
}
484+
};
485+
486+
var client = new SwaggerClient({
487+
url: 'http://petstore.swagger.io/v2/swagger.json',
488+
spec: spec,
489+
success: function () {
490+
var msg = client.test.sample.asCurl({password: 'hidden!'});
491+
expect(msg).toBe('curl -X POST --header \'Content-Type: multipart/form-data\' --header \'Accept: application/json\' {} \'http://petstore.swagger.io/v2/test?password=******\'');
492+
493+
done();
494+
}
495+
});
496+
});
497+
498+
it('masks www-form-urlencoded passwords', function (done) {
499+
var spec = {
500+
paths: {
501+
'/foo': {
502+
delete: {
503+
tags: [ 'test' ],
504+
operationId: 'sample',
505+
consumes: [ 'application/x-www-form-urlencoded' ],
506+
parameters: [
507+
{
508+
in: 'formData',
509+
name: 'password',
510+
type: 'string',
511+
format: 'password'
512+
}
513+
]
514+
}
515+
}
516+
}
517+
};
518+
519+
var client = new SwaggerClient({
520+
url: 'http://localhost:8080/petstore.yaml',
521+
spec: spec,
522+
success: function () {
523+
var msg = client.test.sample.asCurl({password: 'hidden!'});
524+
expect(msg).toBe('curl -X DELETE --header \'Content-Type: application/x-www-form-urlencoded\' --header \'Accept: application/json\' -d \'password=******\' \'http://localhost:8080/foo\'');
525+
done();
526+
}
527+
});
528+
});
529+
530+
463531
it('shows curl for multipart/form-data', function (done) {
464532
var spec = {
465533
basePath: '/v2',

0 commit comments

Comments
 (0)