forked from loafle/openapi-generator-original
* [REQ][GO] add awsv4 signature support for client OpenAPI format does not support AWS Signature method. This commit add support for AWSv4 signature in GO client generation by adding "withAWSV4Signature" option. "withAWSV4Signature" option is false by default. Signed-off-by: Jérome Jutteau <jerome.jutteau@outscale.com> * [REQ][GO] update samples for awsv4 signature support Signed-off-by: Jérome Jutteau <jerome.jutteau@outscale.com>
130 lines
3.8 KiB
Go
130 lines
3.8 KiB
Go
/*
|
|
* OpenAPI Petstore
|
|
*
|
|
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
|
|
*
|
|
* API version: 1.0.0
|
|
* Generated by: OpenAPI Generator (https://openapi-generator.tech)
|
|
*/
|
|
|
|
package petstore
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// contextKeys are used to identify the type of value in the context.
|
|
// Since these are string, it is possible to get a short description of the
|
|
// context key for logging and debugging using key.String().
|
|
|
|
type contextKey string
|
|
|
|
func (c contextKey) String() string {
|
|
return "auth " + string(c)
|
|
}
|
|
|
|
var (
|
|
// ContextOAuth2 takes an oauth2.TokenSource as authentication for the request.
|
|
ContextOAuth2 = contextKey("token")
|
|
|
|
// ContextBasicAuth takes BasicAuth as authentication for the request.
|
|
ContextBasicAuth = contextKey("basic")
|
|
|
|
// ContextAccessToken takes a string oauth2 access token as authentication for the request.
|
|
ContextAccessToken = contextKey("accesstoken")
|
|
|
|
// ContextAPIKey takes an APIKey as authentication for the request
|
|
ContextAPIKey = contextKey("apikey")
|
|
|
|
)
|
|
|
|
// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
|
|
type BasicAuth struct {
|
|
UserName string `json:"userName,omitempty"`
|
|
Password string `json:"password,omitempty"`
|
|
}
|
|
|
|
// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
|
|
type APIKey struct {
|
|
Key string
|
|
Prefix string
|
|
}
|
|
|
|
|
|
// ServerVariable stores the information about a server variable
|
|
type ServerVariable struct {
|
|
Description string
|
|
DefaultValue string
|
|
EnumValues []string
|
|
}
|
|
|
|
// ServerConfiguration stores the information about a server
|
|
type ServerConfiguration struct {
|
|
Url string
|
|
Description string
|
|
Variables map[string]ServerVariable
|
|
}
|
|
|
|
// Configuration stores the configuration of the API client
|
|
type Configuration struct {
|
|
BasePath string `json:"basePath,omitempty"`
|
|
Host string `json:"host,omitempty"`
|
|
Scheme string `json:"scheme,omitempty"`
|
|
DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
|
|
UserAgent string `json:"userAgent,omitempty"`
|
|
Debug bool `json:"debug,omitempty"`
|
|
Servers []ServerConfiguration
|
|
HTTPClient *http.Client
|
|
}
|
|
|
|
// NewConfiguration returns a new Configuration object
|
|
func NewConfiguration() *Configuration {
|
|
cfg := &Configuration{
|
|
BasePath: "http://petstore.swagger.io:80/v2",
|
|
DefaultHeader: make(map[string]string),
|
|
UserAgent: "OpenAPI-Generator/1.0.0/go",
|
|
Debug: false,
|
|
Servers: []ServerConfiguration{{
|
|
Url: "http://petstore.swagger.io:80/v2",
|
|
Description: "No description provided",
|
|
},
|
|
},
|
|
}
|
|
return cfg
|
|
}
|
|
|
|
// AddDefaultHeader adds a new HTTP header to the default header in the request
|
|
func (c *Configuration) AddDefaultHeader(key string, value string) {
|
|
c.DefaultHeader[key] = value
|
|
}
|
|
|
|
// ServerUrl returns URL based on server settings
|
|
func (c *Configuration) ServerUrl(index int, variables map[string]string) (string, error) {
|
|
if index < 0 || len(c.Servers) <= index {
|
|
return "", fmt.Errorf("Index %v out of range %v", index, len(c.Servers) - 1)
|
|
}
|
|
server := c.Servers[index]
|
|
url := server.Url
|
|
|
|
// go through variables and replace placeholders
|
|
for name, variable := range server.Variables {
|
|
if value, ok := variables[name]; ok {
|
|
found := bool(len(variable.EnumValues) == 0)
|
|
for _, enumValue := range variable.EnumValues {
|
|
if value == enumValue {
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
return "", fmt.Errorf("The variable %s in the server URL has invalid value %v. Must be %v", name, value, variable.EnumValues)
|
|
}
|
|
url = strings.Replace(url, "{"+name+"}", value, -1)
|
|
} else {
|
|
url = strings.Replace(url, "{"+name+"}", variable.DefaultValue, -1)
|
|
}
|
|
}
|
|
return url, nil
|
|
}
|