diff --git a/angular.json b/angular.json
index ba90e4e..e637c82 100644
--- a/angular.json
+++ b/angular.json
@@ -60,7 +60,13 @@
"development": {
"optimization": false,
"extractLicenses": false,
- "sourceMap": true
+ "sourceMap": true,
+ "fileReplacements": [
+ {
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.development.ts"
+ }
+ ]
}
},
"defaultConfiguration": "production"
diff --git a/openapitools.json b/openapitools.json
new file mode 100644
index 0000000..973a005
--- /dev/null
+++ b/openapitools.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
+ "spaces": 2,
+ "generator-cli": {
+ "version": "7.11.0"
+ }
+}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index aadfb67..38999c1 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -5,6 +5,9 @@ import {AppRoutingModule} from './app-routing.module';
import {AppComponent} from './app.component';
import {HelloComponent} from './hello/hello.component';
import {NavbarComponent} from './navbar/navbar.component';
+import {BASE_PATH} from '../gen';
+import {environment} from '../environments/environment';
+import {provideHttpClient, withInterceptorsFromDi} from '@angular/common/http';
@NgModule({
declarations: [
@@ -16,7 +19,10 @@ import {NavbarComponent} from './navbar/navbar.component';
AppRoutingModule,
NavbarComponent
],
- providers: [],
+ providers: [
+ {provide: BASE_PATH, useValue: environment.apiBasePath},
+ provideHttpClient(withInterceptorsFromDi())
+ ],
bootstrap: [AppComponent]
})
export class AppModule {
diff --git a/src/app/hello/hello.component.html b/src/app/hello/hello.component.html
index c272e07..18ae303 100644
--- a/src/app/hello/hello.component.html
+++ b/src/app/hello/hello.component.html
@@ -1 +1 @@
-
Hello world!
+{{ helloValue }}
diff --git a/src/app/hello/hello.component.ts b/src/app/hello/hello.component.ts
index 82bb6f1..4abcee1 100644
--- a/src/app/hello/hello.component.ts
+++ b/src/app/hello/hello.component.ts
@@ -1,12 +1,22 @@
-import { Component } from '@angular/core';
+import {Component, OnInit} from '@angular/core';
+import {HelloService} from '../../gen';
@Component({
selector: 'app-hello',
standalone: false,
-
+
templateUrl: './hello.component.html',
styleUrl: './hello.component.css'
})
-export class HelloComponent {
+export class HelloComponent implements OnInit {
+ public helloValue: string = "Loading...";
+ constructor(private helloService: HelloService) {
+ }
+
+ ngOnInit(): void {
+ this.helloService.getHello().subscribe(res => {
+ this.helloValue = res.value || "";
+ });
+ }
}
diff --git a/src/environments/environment.development.ts b/src/environments/environment.development.ts
new file mode 100644
index 0000000..887e60b
--- /dev/null
+++ b/src/environments/environment.development.ts
@@ -0,0 +1,4 @@
+export const environment = {
+ production: false,
+ apiBasePath: "http://localhost:8080"
+};
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
new file mode 100644
index 0000000..2e7f58d
--- /dev/null
+++ b/src/environments/environment.ts
@@ -0,0 +1,4 @@
+export const environment = {
+ production: true,
+ apiBasePath: "/api"
+};
diff --git a/src/gen/.gitignore b/src/gen/.gitignore
new file mode 100644
index 0000000..149b576
--- /dev/null
+++ b/src/gen/.gitignore
@@ -0,0 +1,4 @@
+wwwroot/*.js
+node_modules
+typings
+dist
diff --git a/src/gen/.openapi-generator-ignore b/src/gen/.openapi-generator-ignore
new file mode 100644
index 0000000..7484ee5
--- /dev/null
+++ b/src/gen/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/src/gen/.openapi-generator/FILES b/src/gen/.openapi-generator/FILES
new file mode 100644
index 0000000..69f38c1
--- /dev/null
+++ b/src/gen/.openapi-generator/FILES
@@ -0,0 +1,15 @@
+.gitignore
+.openapi-generator-ignore
+README.md
+api.module.ts
+api/api.ts
+api/hello.service.ts
+configuration.ts
+encoder.ts
+git_push.sh
+index.ts
+model/errorResponse.ts
+model/helloResponse.ts
+model/models.ts
+param.ts
+variables.ts
diff --git a/src/gen/.openapi-generator/VERSION b/src/gen/.openapi-generator/VERSION
new file mode 100644
index 0000000..b23eb27
--- /dev/null
+++ b/src/gen/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.11.0
diff --git a/src/gen/README.md b/src/gen/README.md
new file mode 100644
index 0000000..a5ba578
--- /dev/null
+++ b/src/gen/README.md
@@ -0,0 +1,236 @@
+# @
+
+This is the documentation for the SwissSign Challenge API.
+
+The version of the OpenAPI document: 0.0.1
+
+## Building
+
+To install the required dependencies and to build the typescript sources run:
+
+```console
+npm install
+npm run build
+```
+
+## Publishing
+
+First build the package then run `npm publish dist` (don't forget to specify the `dist` folder!)
+
+## Consuming
+
+Navigate to the folder of your consuming project and run one of next commands.
+
+_published:_
+
+```console
+npm install @ --save
+```
+
+_without publishing (not recommended):_
+
+```console
+npm install PATH_TO_GENERATED_PACKAGE/dist.tgz --save
+```
+
+_It's important to take the tgz file, otherwise you'll get trouble with links on windows_
+
+_using `npm link`:_
+
+In PATH_TO_GENERATED_PACKAGE/dist:
+
+```console
+npm link
+```
+
+In your project:
+
+```console
+npm link
+```
+
+__Note for Windows users:__ The Angular CLI has troubles to use linked npm packages.
+Please refer to this issue for a solution / workaround.
+Published packages are not effected by this issue.
+
+### General usage
+
+In your Angular project:
+
+```typescript
+// without configuring providers
+import { ApiModule } from '';
+import { HttpClientModule } from '@angular/common/http';
+
+@NgModule({
+ imports: [
+ ApiModule,
+ // make sure to import the HttpClientModule in the AppModule only,
+ // see https://github.com/angular/angular/issues/20575
+ HttpClientModule
+ ],
+ declarations: [ AppComponent ],
+ providers: [],
+ bootstrap: [ AppComponent ]
+})
+export class AppModule {}
+```
+
+```typescript
+// configuring providers
+import { ApiModule, Configuration, ConfigurationParameters } from '';
+
+export function apiConfigFactory (): Configuration {
+ const params: ConfigurationParameters = {
+ // set configuration parameters here.
+ }
+ return new Configuration(params);
+}
+
+@NgModule({
+ imports: [ ApiModule.forRoot(apiConfigFactory) ],
+ declarations: [ AppComponent ],
+ providers: [],
+ bootstrap: [ AppComponent ]
+})
+export class AppModule {}
+```
+
+```typescript
+// configuring providers with an authentication service that manages your access tokens
+import { ApiModule, Configuration } from '';
+
+@NgModule({
+ imports: [ ApiModule ],
+ declarations: [ AppComponent ],
+ providers: [
+ {
+ provide: Configuration,
+ useFactory: (authService: AuthService) => new Configuration(
+ {
+ basePath: environment.apiUrl,
+ accessToken: authService.getAccessToken.bind(authService)
+ }
+ ),
+ deps: [AuthService],
+ multi: false
+ }
+ ],
+ bootstrap: [ AppComponent ]
+})
+export class AppModule {}
+```
+
+```typescript
+import { DefaultApi } from '';
+
+export class AppComponent {
+ constructor(private apiGateway: DefaultApi) { }
+}
+```
+
+Note: The ApiModule is restricted to being instantiated once app wide.
+This is to ensure that all services are treated as singletons.
+
+### Using multiple OpenAPI files / APIs / ApiModules
+
+In order to use multiple `ApiModules` generated from different OpenAPI files,
+you can create an alias name when importing the modules
+in order to avoid naming conflicts:
+
+```typescript
+import { ApiModule } from 'my-api-path';
+import { ApiModule as OtherApiModule } from 'my-other-api-path';
+import { HttpClientModule } from '@angular/common/http';
+
+@NgModule({
+ imports: [
+ ApiModule,
+ OtherApiModule,
+ // make sure to import the HttpClientModule in the AppModule only,
+ // see https://github.com/angular/angular/issues/20575
+ HttpClientModule
+ ]
+})
+export class AppModule {
+
+}
+```
+
+### Set service base path
+
+If different than the generated base path, during app bootstrap, you can provide the base path to your service.
+
+```typescript
+import { BASE_PATH } from '';
+
+bootstrap(AppComponent, [
+ { provide: BASE_PATH, useValue: 'https://your-web-service.com' },
+]);
+```
+
+or
+
+```typescript
+import { BASE_PATH } from '';
+
+@NgModule({
+ imports: [],
+ declarations: [ AppComponent ],
+ providers: [ provide: BASE_PATH, useValue: 'https://your-web-service.com' ],
+ bootstrap: [ AppComponent ]
+})
+export class AppModule {}
+```
+
+### Using @angular/cli
+
+First extend your `src/environments/*.ts` files by adding the corresponding base path:
+
+```typescript
+export const environment = {
+ production: false,
+ API_BASE_PATH: 'http://127.0.0.1:8080'
+};
+```
+
+In the src/app/app.module.ts:
+
+```typescript
+import { BASE_PATH } from '';
+import { environment } from '../environments/environment';
+
+@NgModule({
+ declarations: [
+ AppComponent
+ ],
+ imports: [ ],
+ providers: [{ provide: BASE_PATH, useValue: environment.API_BASE_PATH }],
+ bootstrap: [ AppComponent ]
+})
+export class AppModule { }
+```
+
+### Customizing path parameter encoding
+
+Without further customization, only [path-parameters][parameter-locations-url] of [style][style-values-url] 'simple'
+and Dates for format 'date-time' are encoded correctly.
+
+Other styles (e.g. "matrix") are not that easy to encode
+and thus are best delegated to other libraries (e.g.: [@honoluluhenk/http-param-expander]).
+
+To implement your own parameter encoding (or call another library),
+pass an arrow-function or method-reference to the `encodeParam` property of the Configuration-object
+(see [General Usage](#general-usage) above).
+
+Example value for use in your Configuration-Provider:
+
+```typescript
+new Configuration({
+ encodeParam: (param: Param) => myFancyParamEncoder(param),
+})
+```
+
+[parameter-locations-url]: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-locations
+[style-values-url]: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#style-values
+[@honoluluhenk/http-param-expander]: https://www.npmjs.com/package/@honoluluhenk/http-param-expander
diff --git a/src/gen/api.module.ts b/src/gen/api.module.ts
new file mode 100644
index 0000000..58d341f
--- /dev/null
+++ b/src/gen/api.module.ts
@@ -0,0 +1,30 @@
+import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';
+import { Configuration } from './configuration';
+import { HttpClient } from '@angular/common/http';
+
+
+@NgModule({
+ imports: [],
+ declarations: [],
+ exports: [],
+ providers: []
+})
+export class ApiModule {
+ public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders {
+ return {
+ ngModule: ApiModule,
+ providers: [ { provide: Configuration, useFactory: configurationFactory } ]
+ };
+ }
+
+ constructor( @Optional() @SkipSelf() parentModule: ApiModule,
+ @Optional() http: HttpClient) {
+ if (parentModule) {
+ throw new Error('ApiModule is already loaded. Import in your base AppModule only.');
+ }
+ if (!http) {
+ throw new Error('You need to import the HttpClientModule in your AppModule! \n' +
+ 'See also https://github.com/angular/angular/issues/20575');
+ }
+ }
+}
diff --git a/src/gen/api/api.ts b/src/gen/api/api.ts
new file mode 100644
index 0000000..baa09dc
--- /dev/null
+++ b/src/gen/api/api.ts
@@ -0,0 +1,3 @@
+export * from './hello.service';
+import { HelloService } from './hello.service';
+export const APIS = [HelloService];
diff --git a/src/gen/api/hello.service.ts b/src/gen/api/hello.service.ts
new file mode 100644
index 0000000..90ae370
--- /dev/null
+++ b/src/gen/api/hello.service.ts
@@ -0,0 +1,153 @@
+/**
+ * swisssign-challenge - dlmw
+ *
+ * Contact: dylan@dlmw.ch
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+/* tslint:disable:no-unused-variable member-ordering */
+
+import { Inject, Injectable, Optional } from '@angular/core';
+import { HttpClient, HttpHeaders, HttpParams,
+ HttpResponse, HttpEvent, HttpParameterCodec, HttpContext
+ } from '@angular/common/http';
+import { CustomHttpParameterCodec } from '../encoder';
+import { Observable } from 'rxjs';
+
+// @ts-ignore
+import { HelloResponse } from '../model/helloResponse';
+
+// @ts-ignore
+import { BASE_PATH, COLLECTION_FORMATS } from '../variables';
+import { Configuration } from '../configuration';
+
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class HelloService {
+
+ protected basePath = 'http://localhost';
+ public defaultHeaders = new HttpHeaders();
+ public configuration = new Configuration();
+ public encoder: HttpParameterCodec;
+
+ constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) {
+ if (configuration) {
+ this.configuration = configuration;
+ }
+ if (typeof this.configuration.basePath !== 'string') {
+ const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
+ if (firstBasePath != undefined) {
+ basePath = firstBasePath;
+ }
+
+ if (typeof basePath !== 'string') {
+ basePath = this.basePath;
+ }
+ this.configuration.basePath = basePath;
+ }
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
+ }
+
+
+ // @ts-ignore
+ private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams {
+ if (typeof value === "object" && value instanceof Date === false) {
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
+ } else {
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
+ }
+ return httpParams;
+ }
+
+ private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams {
+ if (value == null) {
+ return httpParams;
+ }
+
+ if (typeof value === "object") {
+ if (Array.isArray(value)) {
+ (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
+ } else if (value instanceof Date) {
+ if (key != null) {
+ httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10));
+ } else {
+ throw Error("key may not be null if value is Date");
+ }
+ } else {
+ Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive(
+ httpParams, value[k], key != null ? `${key}.${k}` : k));
+ }
+ } else if (key != null) {
+ httpParams = httpParams.append(key, value);
+ } else {
+ throw Error("key may not be null if value is not object or array");
+ }
+ return httpParams;
+ }
+
+ /**
+ * Get a hello from me
+ * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
+ * @param reportProgress flag to report request and response progress.
+ */
+ public getHello(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable;
+ public getHello(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>;
+ public getHello(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>;
+ public getHello(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable {
+
+ let localVarHeaders = this.defaultHeaders;
+
+ let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept;
+ if (localVarHttpHeaderAcceptSelected === undefined) {
+ // to determine the Accept header
+ const httpHeaderAccepts: string[] = [
+ 'application/json'
+ ];
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
+ }
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
+ }
+
+ let localVarHttpContext: HttpContext | undefined = options && options.context;
+ if (localVarHttpContext === undefined) {
+ localVarHttpContext = new HttpContext();
+ }
+
+ let localVarTransferCache: boolean | undefined = options && options.transferCache;
+ if (localVarTransferCache === undefined) {
+ localVarTransferCache = true;
+ }
+
+
+ let responseType_: 'text' | 'json' | 'blob' = 'json';
+ if (localVarHttpHeaderAcceptSelected) {
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
+ responseType_ = 'text';
+ } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
+ responseType_ = 'json';
+ } else {
+ responseType_ = 'blob';
+ }
+ }
+
+ let localVarPath = `/hello`;
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`,
+ {
+ context: localVarHttpContext,
+ responseType: responseType_,
+ withCredentials: this.configuration.withCredentials,
+ headers: localVarHeaders,
+ observe: observe,
+ transferCache: localVarTransferCache,
+ reportProgress: reportProgress
+ }
+ );
+ }
+
+}
diff --git a/src/gen/configuration.ts b/src/gen/configuration.ts
new file mode 100644
index 0000000..526b454
--- /dev/null
+++ b/src/gen/configuration.ts
@@ -0,0 +1,166 @@
+import { HttpParameterCodec } from '@angular/common/http';
+import { Param } from './param';
+
+export interface ConfigurationParameters {
+ /**
+ * @deprecated Since 5.0. Use credentials instead
+ */
+ apiKeys?: {[ key: string ]: string};
+ username?: string;
+ password?: string;
+ /**
+ * @deprecated Since 5.0. Use credentials instead
+ */
+ accessToken?: string | (() => string);
+ basePath?: string;
+ withCredentials?: boolean;
+ /**
+ * Takes care of encoding query- and form-parameters.
+ */
+ encoder?: HttpParameterCodec;
+ /**
+ * Override the default method for encoding path parameters in various
+ * styles.
+ *
+ * See {@link README.md} for more details
+ *
+ */
+ encodeParam?: (param: Param) => string;
+ /**
+ * The keys are the names in the securitySchemes section of the OpenAPI
+ * document. They should map to the value used for authentication
+ * minus any standard prefixes such as 'Basic' or 'Bearer'.
+ */
+ credentials?: {[ key: string ]: string | (() => string | undefined)};
+}
+
+export class Configuration {
+ /**
+ * @deprecated Since 5.0. Use credentials instead
+ */
+ apiKeys?: {[ key: string ]: string};
+ username?: string;
+ password?: string;
+ /**
+ * @deprecated Since 5.0. Use credentials instead
+ */
+ accessToken?: string | (() => string);
+ basePath?: string;
+ withCredentials?: boolean;
+ /**
+ * Takes care of encoding query- and form-parameters.
+ */
+ encoder?: HttpParameterCodec;
+ /**
+ * Encoding of various path parameter
+ * styles.
+ *
+ * See {@link README.md} for more details
+ *
+ */
+ encodeParam: (param: Param) => string;
+ /**
+ * The keys are the names in the securitySchemes section of the OpenAPI
+ * document. They should map to the value used for authentication
+ * minus any standard prefixes such as 'Basic' or 'Bearer'.
+ */
+ credentials: {[ key: string ]: string | (() => string | undefined)};
+
+ constructor(configurationParameters: ConfigurationParameters = {}) {
+ this.apiKeys = configurationParameters.apiKeys;
+ this.username = configurationParameters.username;
+ this.password = configurationParameters.password;
+ this.accessToken = configurationParameters.accessToken;
+ this.basePath = configurationParameters.basePath;
+ this.withCredentials = configurationParameters.withCredentials;
+ this.encoder = configurationParameters.encoder;
+ if (configurationParameters.encodeParam) {
+ this.encodeParam = configurationParameters.encodeParam;
+ }
+ else {
+ this.encodeParam = param => this.defaultEncodeParam(param);
+ }
+ if (configurationParameters.credentials) {
+ this.credentials = configurationParameters.credentials;
+ }
+ else {
+ this.credentials = {};
+ }
+ }
+
+ /**
+ * Select the correct content-type to use for a request.
+ * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
+ * If no content type is found return the first found type if the contentTypes is not empty
+ * @param contentTypes - the array of content types that are available for selection
+ * @returns the selected content-type or undefined
if no selection could be made.
+ */
+ public selectHeaderContentType (contentTypes: string[]): string | undefined {
+ if (contentTypes.length === 0) {
+ return undefined;
+ }
+
+ const type = contentTypes.find((x: string) => this.isJsonMime(x));
+ if (type === undefined) {
+ return contentTypes[0];
+ }
+ return type;
+ }
+
+ /**
+ * Select the correct accept content-type to use for a request.
+ * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
+ * If no content type is found return the first found type if the contentTypes is not empty
+ * @param accepts - the array of content types that are available for selection.
+ * @returns the selected content-type or undefined
if no selection could be made.
+ */
+ public selectHeaderAccept(accepts: string[]): string | undefined {
+ if (accepts.length === 0) {
+ return undefined;
+ }
+
+ const type = accepts.find((x: string) => this.isJsonMime(x));
+ if (type === undefined) {
+ return accepts[0];
+ }
+ return type;
+ }
+
+ /**
+ * Check if the given MIME is a JSON MIME.
+ * JSON MIME examples:
+ * application/json
+ * application/json; charset=UTF8
+ * APPLICATION/JSON
+ * application/vnd.company+json
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
+ * @return True if the given MIME is JSON, false otherwise.
+ */
+ public isJsonMime(mime: string): boolean {
+ const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
+ }
+
+ public lookupCredential(key: string): string | undefined {
+ const value = this.credentials[key];
+ return typeof value === 'function'
+ ? value()
+ : value;
+ }
+
+ private defaultEncodeParam(param: Param): string {
+ // This implementation exists as fallback for missing configuration
+ // and for backwards compatibility to older typescript-angular generator versions.
+ // It only works for the 'simple' parameter style.
+ // Date-handling only works for the 'date-time' format.
+ // All other styles and Date-formats are probably handled incorrectly.
+ //
+ // But: if that's all you need (i.e.: the most common use-case): no need for customization!
+
+ const value = param.dataFormat === 'date-time' && param.value instanceof Date
+ ? (param.value as Date).toISOString()
+ : param.value;
+
+ return encodeURIComponent(String(value));
+ }
+}
diff --git a/src/gen/encoder.ts b/src/gen/encoder.ts
new file mode 100644
index 0000000..138c4d5
--- /dev/null
+++ b/src/gen/encoder.ts
@@ -0,0 +1,20 @@
+import { HttpParameterCodec } from '@angular/common/http';
+
+/**
+ * Custom HttpParameterCodec
+ * Workaround for https://github.com/angular/angular/issues/18261
+ */
+export class CustomHttpParameterCodec implements HttpParameterCodec {
+ encodeKey(k: string): string {
+ return encodeURIComponent(k);
+ }
+ encodeValue(v: string): string {
+ return encodeURIComponent(v);
+ }
+ decodeKey(k: string): string {
+ return decodeURIComponent(k);
+ }
+ decodeValue(v: string): string {
+ return decodeURIComponent(v);
+ }
+}
diff --git a/src/gen/git_push.sh b/src/gen/git_push.sh
new file mode 100644
index 0000000..f53a75d
--- /dev/null
+++ b/src/gen/git_push.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+ git_host="github.com"
+ echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=$(git remote)
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
diff --git a/src/gen/index.ts b/src/gen/index.ts
new file mode 100644
index 0000000..104dd3d
--- /dev/null
+++ b/src/gen/index.ts
@@ -0,0 +1,6 @@
+export * from './api/api';
+export * from './model/models';
+export * from './variables';
+export * from './configuration';
+export * from './api.module';
+export * from './param';
diff --git a/src/gen/model/errorResponse.ts b/src/gen/model/errorResponse.ts
new file mode 100644
index 0000000..69e4672
--- /dev/null
+++ b/src/gen/model/errorResponse.ts
@@ -0,0 +1,26 @@
+/**
+ * swisssign-challenge - dlmw
+ *
+ * Contact: dylan@dlmw.ch
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+export interface ErrorResponse {
+ /**
+ * Human-readable error message
+ */
+ message: string;
+ /**
+ * Machine-readable error code
+ */
+ code: number;
+ /**
+ * Additional error details when available
+ */
+ details?: object;
+}
+
diff --git a/src/gen/model/helloResponse.ts b/src/gen/model/helloResponse.ts
new file mode 100644
index 0000000..1c9e08a
--- /dev/null
+++ b/src/gen/model/helloResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * swisssign-challenge - dlmw
+ *
+ * Contact: dylan@dlmw.ch
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+export interface HelloResponse {
+ value?: string;
+}
+
diff --git a/src/gen/model/models.ts b/src/gen/model/models.ts
new file mode 100644
index 0000000..e3f11f2
--- /dev/null
+++ b/src/gen/model/models.ts
@@ -0,0 +1,2 @@
+export * from './errorResponse';
+export * from './helloResponse';
diff --git a/src/gen/param.ts b/src/gen/param.ts
new file mode 100644
index 0000000..78a2d20
--- /dev/null
+++ b/src/gen/param.ts
@@ -0,0 +1,69 @@
+/**
+ * Standard parameter styles defined by OpenAPI spec
+ */
+export type StandardParamStyle =
+ | 'matrix'
+ | 'label'
+ | 'form'
+ | 'simple'
+ | 'spaceDelimited'
+ | 'pipeDelimited'
+ | 'deepObject'
+ ;
+
+/**
+ * The OpenAPI standard {@link StandardParamStyle}s may be extended by custom styles by the user.
+ */
+export type ParamStyle = StandardParamStyle | string;
+
+/**
+ * Standard parameter locations defined by OpenAPI spec
+ */
+export type ParamLocation = 'query' | 'header' | 'path' | 'cookie';
+
+/**
+ * Standard types as defined in OpenAPI Specification: Data Types
+ */
+export type StandardDataType =
+ | "integer"
+ | "number"
+ | "boolean"
+ | "string"
+ | "object"
+ | "array"
+ ;
+
+/**
+ * Standard {@link DataType}s plus your own types/classes.
+ */
+export type DataType = StandardDataType | string;
+
+/**
+ * Standard formats as defined in OpenAPI Specification: Data Types
+ */
+export type StandardDataFormat =
+ | "int32"
+ | "int64"
+ | "float"
+ | "double"
+ | "byte"
+ | "binary"
+ | "date"
+ | "date-time"
+ | "password"
+ ;
+
+export type DataFormat = StandardDataFormat | string;
+
+/**
+ * The parameter to encode.
+ */
+export interface Param {
+ name: string;
+ value: unknown;
+ in: ParamLocation;
+ style: ParamStyle,
+ explode: boolean;
+ dataType: DataType;
+ dataFormat: DataFormat | undefined;
+}
diff --git a/src/gen/variables.ts b/src/gen/variables.ts
new file mode 100644
index 0000000..6fe5854
--- /dev/null
+++ b/src/gen/variables.ts
@@ -0,0 +1,9 @@
+import { InjectionToken } from '@angular/core';
+
+export const BASE_PATH = new InjectionToken('basePath');
+export const COLLECTION_FORMATS = {
+ 'csv': ',',
+ 'tsv': ' ',
+ 'ssv': ' ',
+ 'pipes': '|'
+}