From fe7acabc4b1ab10d683b00e4a991bd977136007e Mon Sep 17 00:00:00 2001 From: timadamson Date: Thu, 15 Sep 2016 02:35:14 +1000 Subject: [PATCH] add authentication to typescript-angular2 (#3781) * add authentication to typescript-angular2 * updated typescript-angular2 petstore example * update typescript-angular2 with simplified conditionals --- .../TypeScriptAngular2ClientCodegen.java | 1 + .../typescript-angular2/api.mustache | 43 ++++++++- .../configuration.mustache | 6 ++ .../typescript-angular2/index.mustache | 3 +- .../typescript-angular2/default/api/PetApi.ts | 92 ++++++++++++++++--- .../default/api/StoreApi.ts | 24 ++++- .../default/api/UserApi.ts | 31 +++++-- .../default/configuration.ts | 6 ++ .../typescript-angular2/default/index.ts | 3 +- .../typescript-angular2/default/variables.ts | 3 + 10 files changed, 180 insertions(+), 32 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/typescript-angular2/configuration.mustache create mode 100644 samples/client/petstore/typescript-angular2/default/configuration.ts create mode 100644 samples/client/petstore/typescript-angular2/default/variables.ts diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java index 1020375356a7..aeb5d774add2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java @@ -71,6 +71,7 @@ public class TypeScriptAngular2ClientCodegen extends AbstractTypeScriptClientCod supportingFiles.add(new SupportingFile("models.mustache", modelPackage().replace('.', File.separatorChar), "models.ts")); supportingFiles.add(new SupportingFile("apis.mustache", apiPackage().replace('.', File.separatorChar), "api.ts")); supportingFiles.add(new SupportingFile("index.mustache", getIndexDirectory(), "index.ts")); + supportingFiles.add(new SupportingFile("configuration.mustache", getIndexDirectory(), "configuration.ts")); supportingFiles.add(new SupportingFile("variables.mustache", getIndexDirectory(), "variables.ts")); supportingFiles.add(new SupportingFile("gitignore", "", ".gitignore")); supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/api.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/api.mustache index e91e444fe0f8..6980d8f78211 100644 --- a/modules/swagger-codegen/src/main/resources/typescript-angular2/api.mustache +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/api.mustache @@ -9,6 +9,7 @@ import 'rxjs/add/operator/map'; import * as models from '../model/models'; import { BASE_PATH } from '../variables'; +import { Configuration } from '../configuration'; /* tslint:disable:no-unused-variable member-ordering */ @@ -23,11 +24,15 @@ import { BASE_PATH } from '../variables' export class {{classname}} { protected basePath = '{{basePath}}'; public defaultHeaders: Headers = new Headers(); + public configuration: Configuration = new Configuration(); - constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { + constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) { if (basePath) { this.basePath = basePath; } + if (configuration) { + this.configuration = configuration; + } } {{#operation}} @@ -96,7 +101,39 @@ export class {{classname}} { '{{{mediaType}}}'{{#hasMore}}, {{/hasMore}} {{/produces}} ]; - + +{{#authMethods}} + // authentication ({{name}}) required +{{#isApiKey}} +{{#isKeyInHeader}} + if (this.configuration.apiKey) + { + headers.set('{{keyParamName}}', this.configuration.apiKey); + } +{{/isKeyInHeader}} +{{#isKeyInQuery}} + if (this.configuration.apiKey) + { + formParams.set('{{keyParamName}}', this.configuration.apiKey); + } +{{/isKeyInQuery}} +{{/isApiKey}} +{{#isBasic}} + // http basic authentication required + if (this.configuration.username || this.configuration.password) + { + headers.set('Authorization', 'Basic ' + btoa(this.configuration.username + ':' + this.configuration.password)); + } +{{/isBasic}} +{{#isOAuth}} + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } +{{/isOAuth}} +{{/authMethods}} + {{#hasFormParams}} headers.set('Content-Type', 'application/x-www-form-urlencoded'); {{/hasFormParams}} @@ -107,7 +144,7 @@ export class {{classname}} { {{#formParams}} if ({{paramName}} !== undefined) { - formParams.set('{{baseName}}', {{paramName}}); + formParams.set('{{baseName}}', {{paramName}}); } {{/formParams}} diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/configuration.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/configuration.mustache new file mode 100644 index 000000000000..94989933b63b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/configuration.mustache @@ -0,0 +1,6 @@ +export class Configuration { + apiKey: string; + username: string; + password: string; + accessToken: string; +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/index.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/index.mustache index ec7dcae82b2f..d097c728017b 100644 --- a/modules/swagger-codegen/src/main/resources/typescript-angular2/index.mustache +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/index.mustache @@ -1,3 +1,4 @@ export * from './api/api'; export * from './model/models'; -export * from './variables'; \ No newline at end of file +export * from './variables'; +export * from './configuration'; \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular2/default/api/PetApi.ts b/samples/client/petstore/typescript-angular2/default/api/PetApi.ts index 98f96f74173c..ba5b03c777b6 100644 --- a/samples/client/petstore/typescript-angular2/default/api/PetApi.ts +++ b/samples/client/petstore/typescript-angular2/default/api/PetApi.ts @@ -32,6 +32,7 @@ import 'rxjs/add/operator/map'; import * as models from '../model/models'; import { BASE_PATH } from '../variables'; +import { Configuration } from '../configuration'; /* tslint:disable:no-unused-variable member-ordering */ @@ -40,11 +41,15 @@ import { BASE_PATH } from '../variables' export class PetApi { protected basePath = 'http://petstore.swagger.io/v2'; public defaultHeaders: Headers = new Headers(); + public configuration: Configuration = new Configuration(); - constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { + constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) { if (basePath) { this.basePath = basePath; } + if (configuration) { + this.configuration = configuration; + } } /** @@ -204,7 +209,14 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + headers.set('Content-Type', 'application/json'); @@ -246,7 +258,14 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + @@ -284,7 +303,14 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + @@ -322,7 +348,14 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + @@ -361,7 +394,19 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + // authentication (api_key) required + if (this.configuration.apiKey) + { + headers.set('api_key', this.configuration.apiKey); + } + @@ -398,7 +443,14 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + headers.set('Content-Type', 'application/json'); @@ -444,15 +496,22 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + headers.set('Content-Type', 'application/x-www-form-urlencoded'); if (name !== undefined) { - formParams.set('name', name); + formParams.set('name', name); } if (status !== undefined) { - formParams.set('status', status); + formParams.set('status', status); } let requestOptions: RequestOptionsArgs = new RequestOptions({ @@ -496,15 +555,22 @@ export class PetApi { 'application/json', 'application/xml' ]; - + + // authentication (petstore_auth) required + // oauth required + if (this.configuration.accessToken) + { + headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + } + headers.set('Content-Type', 'application/x-www-form-urlencoded'); if (additionalMetadata !== undefined) { - formParams.set('additionalMetadata', additionalMetadata); + formParams.set('additionalMetadata', additionalMetadata); } if (file !== undefined) { - formParams.set('file', file); + formParams.set('file', file); } let requestOptions: RequestOptionsArgs = new RequestOptions({ diff --git a/samples/client/petstore/typescript-angular2/default/api/StoreApi.ts b/samples/client/petstore/typescript-angular2/default/api/StoreApi.ts index 47856742046c..38d674118090 100644 --- a/samples/client/petstore/typescript-angular2/default/api/StoreApi.ts +++ b/samples/client/petstore/typescript-angular2/default/api/StoreApi.ts @@ -32,6 +32,7 @@ import 'rxjs/add/operator/map'; import * as models from '../model/models'; import { BASE_PATH } from '../variables'; +import { Configuration } from '../configuration'; /* tslint:disable:no-unused-variable member-ordering */ @@ -40,11 +41,15 @@ import { BASE_PATH } from '../variables' export class StoreApi { protected basePath = 'http://petstore.swagger.io/v2'; public defaultHeaders: Headers = new Headers(); + public configuration: Configuration = new Configuration(); - constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { + constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) { if (basePath) { this.basePath = basePath; } + if (configuration) { + this.configuration = configuration; + } } /** @@ -136,7 +141,8 @@ export class StoreApi { 'application/json', 'application/xml' ]; - + + @@ -170,7 +176,13 @@ export class StoreApi { 'application/json', 'application/xml' ]; - + + // authentication (api_key) required + if (this.configuration.apiKey) + { + headers.set('api_key', this.configuration.apiKey); + } + @@ -209,7 +221,8 @@ export class StoreApi { 'application/json', 'application/xml' ]; - + + @@ -244,7 +257,8 @@ export class StoreApi { 'application/json', 'application/xml' ]; - + + headers.set('Content-Type', 'application/json'); diff --git a/samples/client/petstore/typescript-angular2/default/api/UserApi.ts b/samples/client/petstore/typescript-angular2/default/api/UserApi.ts index e93b3f1f7de3..9ba9abd4079d 100644 --- a/samples/client/petstore/typescript-angular2/default/api/UserApi.ts +++ b/samples/client/petstore/typescript-angular2/default/api/UserApi.ts @@ -32,6 +32,7 @@ import 'rxjs/add/operator/map'; import * as models from '../model/models'; import { BASE_PATH } from '../variables'; +import { Configuration } from '../configuration'; /* tslint:disable:no-unused-variable member-ordering */ @@ -40,11 +41,15 @@ import { BASE_PATH } from '../variables' export class UserApi { protected basePath = 'http://petstore.swagger.io/v2'; public defaultHeaders: Headers = new Headers(); + public configuration: Configuration = new Configuration(); - constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { + constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) { if (basePath) { this.basePath = basePath; } + if (configuration) { + this.configuration = configuration; + } } /** @@ -198,7 +203,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + headers.set('Content-Type', 'application/json'); @@ -235,7 +241,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + headers.set('Content-Type', 'application/json'); @@ -272,7 +279,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + headers.set('Content-Type', 'application/json'); @@ -313,7 +321,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + @@ -352,7 +361,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + @@ -394,7 +404,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + @@ -428,7 +439,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + @@ -468,7 +480,8 @@ export class UserApi { 'application/json', 'application/xml' ]; - + + headers.set('Content-Type', 'application/json'); diff --git a/samples/client/petstore/typescript-angular2/default/configuration.ts b/samples/client/petstore/typescript-angular2/default/configuration.ts new file mode 100644 index 000000000000..94989933b63b --- /dev/null +++ b/samples/client/petstore/typescript-angular2/default/configuration.ts @@ -0,0 +1,6 @@ +export class Configuration { + apiKey: string; + username: string; + password: string; + accessToken: string; +} \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular2/default/index.ts b/samples/client/petstore/typescript-angular2/default/index.ts index ec7dcae82b2f..d097c728017b 100644 --- a/samples/client/petstore/typescript-angular2/default/index.ts +++ b/samples/client/petstore/typescript-angular2/default/index.ts @@ -1,3 +1,4 @@ export * from './api/api'; export * from './model/models'; -export * from './variables'; \ No newline at end of file +export * from './variables'; +export * from './configuration'; \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular2/default/variables.ts b/samples/client/petstore/typescript-angular2/default/variables.ts new file mode 100644 index 000000000000..27b987e9b23b --- /dev/null +++ b/samples/client/petstore/typescript-angular2/default/variables.ts @@ -0,0 +1,3 @@ +import { OpaqueToken } from '@angular/core'; + +export const BASE_PATH = new OpaqueToken('basePath'); \ No newline at end of file