-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathconfiguration.go
136 lines (111 loc) · 3.7 KB
/
configuration.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* Go SDK for OpenFGA
*
* API version: 1.x
* Website: https://openfga.dev
* Documentation: https://openfga.dev/docs
* Support: https://openfga.dev/community
* License: [Apache-2.0](https://github.com/openfga/go-sdk/blob/main/LICENSE)
*
* NOTE: This file was auto generated by OpenAPI Generator (https://openapi-generator.tech). DO NOT EDIT.
*/
package openfga
import (
"net/http"
"github.com/openfga/go-sdk/credentials"
"github.com/openfga/go-sdk/telemetry"
)
const (
SdkVersion = "0.6.3"
defaultUserAgent = "openfga-sdk go/0.6.3"
)
// RetryParams configures configuration for retry in case of HTTP too many request
type RetryParams struct {
MaxRetry int `json:"maxRetry,omitempty"`
MinWaitInMs int `json:"minWaitInMs,omitempty"`
}
// Configuration stores the configuration of the API client
type Configuration struct {
// ApiScheme - defines the scheme for the API: http or https
// Deprecated: use ApiUrl instead of ApiScheme and ApiHost
ApiScheme string `json:"api_scheme,omitempty"`
// ApiHost - defines the host for the API without the scheme e.g. (api.fga.example)
// Deprecated: use ApiUrl instead of ApiScheme and ApiHost
ApiHost string `json:"api_host,omitempty"`
ApiUrl string `json:"api_url,omitempty"`
Credentials *credentials.Credentials `json:"credentials,omitempty"`
DefaultHeaders map[string]string `json:"default_headers,omitempty"`
UserAgent string `json:"user_agent,omitempty"`
Debug bool `json:"debug,omitempty"`
HTTPClient *http.Client
RetryParams *RetryParams
Telemetry *telemetry.Configuration `json:"telemetry,omitempty"`
}
// DefaultRetryParams returns the default retry parameters
func DefaultRetryParams() *RetryParams {
return &RetryParams{
MaxRetry: 15,
MinWaitInMs: 100,
}
}
func GetSdkUserAgent() string {
return defaultUserAgent
}
// NewConfiguration returns a new Configuration object
func NewConfiguration(config Configuration) (*Configuration, error) {
apiUrl := config.ApiUrl
apiScheme := config.ApiScheme
if apiScheme == "" {
apiScheme = "https"
}
if apiUrl == "" {
// If api url is not provided, fall back to deprecated config fields
apiUrl = apiScheme + "://" + config.ApiHost
}
cfg := &Configuration{
ApiUrl: apiUrl,
Credentials: config.Credentials,
DefaultHeaders: config.DefaultHeaders,
UserAgent: config.UserAgent,
Debug: config.Debug,
HTTPClient: config.HTTPClient,
RetryParams: config.RetryParams,
Telemetry: config.Telemetry,
}
if cfg.UserAgent == "" {
cfg.UserAgent = GetSdkUserAgent()
}
if cfg.DefaultHeaders == nil {
cfg.DefaultHeaders = make(map[string]string)
}
if cfg.Telemetry == nil {
cfg.Telemetry = telemetry.DefaultTelemetryConfiguration()
}
err := cfg.ValidateConfig()
if err != nil {
return nil, err
}
return cfg, nil
}
// AddDefaultHeader adds a new HTTP header to the default header in the request
func (c *Configuration) AddDefaultHeader(key string, value string) {
c.DefaultHeaders[key] = value
}
// ValidateConfig ensures that the given configuration is valid
func (c *Configuration) ValidateConfig() error {
if c.ApiUrl == "" {
return reportError("Configuration.ApiUrl is required")
}
if !IsWellFormedUri(c.ApiUrl) {
return reportError("Configuration.ApiUrl (%s) does not form a valid uri", c.ApiUrl)
}
if c.Credentials != nil {
if err := c.Credentials.ValidateCredentialsConfig(); err != nil {
return reportError("Credentials are invalid: %v", err)
}
}
if c.RetryParams != nil && c.RetryParams.MaxRetry > 15 {
return reportError("Configuration.RetryParams.MaxRetry exceeds maximum allowed limit of 15")
}
return nil
}