If API supports both HTTP and HTTPS use HTTPS (fixes #72)

This commit is contained in:
Roman Hotsiy 2016-07-26 14:51:59 +03:00
parent ae0b0f5f14
commit 2872ffbcf9
No known key found for this signature in database
GPG Key ID: 5CB7B3ACABA57CB0
8 changed files with 2623 additions and 4 deletions

View File

@ -1,6 +1,7 @@
swagger: '2.0'
schemes:
- http
- https
host: petstore.swagger.io
basePath: /v2
info:

View File

@ -4,11 +4,13 @@ import JsonSchemaRefParser from 'json-schema-ref-parser';
import JsonPointer from './JsonPointer';
import { renderMd, safePush } from './helpers';
import slugify from 'slugify';
import { parse as urlParse } from 'url';
export class SpecManager {
public _schema:any = {};
public _schema: any = {};
public apiUrl: string;
private _instance:any;
private _instance: any;
private _url: string;
static instance() {
return new SpecManager();
@ -28,6 +30,7 @@ export class SpecManager {
JsonSchemaRefParser.bundle(url, {http: {withCredentials: false}})
.then(schema => {
this._url = url;
this._schema = schema;
resolve(this._schema);
this.init();
@ -39,8 +42,16 @@ export class SpecManager {
/* calculate common used values */
init() {
if (!this._schema || !this._schema.schemes) return;
this.apiUrl = this._schema.schemes[0] + '://' + this._schema.host + this._schema.basePath;
let protocol;
if (!this._schema.schemes || !this._schema.schemes.length) {
protocol = this._url ? urlParse(this._url).protocol : 'http';
} else {
protocol = this._schema.schemes[0];
if (protocol === 'http' && this._schema.schemes.indexOf('https') >= 0) {
protocol = 'https';
}
}
this.apiUrl = protocol + '://' + this._schema.host + this._schema.basePath;
if (this.apiUrl.endsWith('/')) {
this.apiUrl = this.apiUrl.substr(0, this.apiUrl.length - 1);
}

View File

@ -50,6 +50,7 @@
"scrollparent": "npm:scrollparent@^0.1.0",
"slugify": "npm:slugify@^0.1.1",
"stream-http": "npm:stream-http@^2.3.0",
"url": "github:jspm/nodelibs-url@^0.1.0",
"zone.js": "npm:zone.js@0.6.12"
},
"devDependencies": {

View File

@ -41,6 +41,7 @@ System.config({
"slugify": "npm:slugify@0.1.1",
"stream-http": "npm:stream-http@2.3.0",
"systemjs/plugin-json": "github:systemjs/plugin-json@0.1.2",
"url": "github:jspm/nodelibs-url@0.1.0",
"zone.js": "npm:zone.js@0.6.12",
"github:jspm/nodelibs-assert@0.1.0": {
"assert": "npm:assert@1.4.1"

View File

@ -53,6 +53,12 @@ describe('Utils', () => {
specMgr.apiUrl.should.be.equal('http://petstore.swagger.io/v2');
});
it('should correctly init api url if both http and https', ()=> {
specMgr._schema.schemes.push('https');
specMgr.init();
specMgr.apiUrl.should.be.equal('https://petstore.swagger.io/v2');
});
describe('byPointer method', () => {
it('should return correct schema part', ()=> {
let part = specMgr.byPointer('/tags/3');

2590
typings/globals/node/index.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
{
"resolution": "main",
"tree": {
"src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/91d45c49a3b5cd6a0abbf5f319c1406fd4f2b1e7/node/node.d.ts",
"raw": "registry:dt/node#6.0.0+20160720070758",
"typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/91d45c49a3b5cd6a0abbf5f319c1406fd4f2b1e7/node/node.d.ts"
}
}

1
typings/index.d.ts vendored
View File

@ -1,3 +1,4 @@
/// <reference path="globals/jasmine/index.d.ts" />
/// <reference path="globals/json-pointer/index.d.ts" />
/// <reference path="globals/node/index.d.ts" />
/// <reference path="globals/should/index.d.ts" />