This repository has been archived by the owner on Feb 23, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfiguration.go
170 lines (141 loc) · 5.99 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/**
* Go SDK for Auth0 Fine Grained Authorization (FGA)
*
* API version: 0.1
* Website: <https://fga.dev>
* Documentation: <https://docs.fga.dev>
* Support: <https://discord.gg/8naAwJfWN6>
* License: [MIT](https://github.com/auth0-lab/fga-go-sdk/blob/main/LICENSE)
*
* NOTE: This file was auto generated by [OpenAPI Generator](https://openapi-generator.tech). DO NOT EDIT.
*/
package auth0fga
import (
"encoding/json"
"net/http"
"strings"
)
// 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"`
}
// UserConfiguration stores the configuration provided by the user
type UserConfiguration struct {
StoreId string `json:"storeId,omitempty"`
ClientId string `json:"clientId,omitempty"`
ClientSecret string `json:"clientSecret,omitempty"`
Environment string `json:"environment,omitempty"`
RetryParams *RetryParams
}
// Configuration stores the configuration of the API client
type Configuration struct {
ApiScheme string `json:"apiScheme,omitempty"`
ApiHost string `json:"apiHost,omitempty"`
StoreId string `json:"storeId,omitempty"`
ApiTokenIssuer string `json:"apiTokenIssuer,omitempty"`
ApiAudience string `json:"apiAudience,omitempty"`
ClientId string `json:"clientId,omitempty"`
ClientSecret string `json:"clientSecret,omitempty"`
DefaultHeaders map[string]string `json:"defaultHeader,omitempty"`
UserAgent string `json:"userAgent,omitempty"`
Debug bool `json:"debug,omitempty"`
HTTPClient *http.Client
RetryParams *RetryParams
}
// EnvironmentConfiguration stores the environment settings
type EnvironmentConfiguration struct {
ApiHost string `json:"apiHost,omitempty"`
ApiScheme string `json:"apiScheme,omitempty"`
ApiTokenIssuer string `json:"apiTokenIssuer,omitempty"`
ApiAudience string `json:"apiAudience,omitempty"`
AllowNoAuth bool `json:"allowNoAuth,omitempty"`
}
var environmentConfigurationString = `{"default":{"apiAudience":"https://api.us1.fga.dev/","apiTokenIssuer":"fga.us.auth0.com","apiScheme":"https","apiHost":"api.us1.fga.dev"},"us":{"apiAudience":"https://api.us1.fga.dev/","apiTokenIssuer":"fga.us.auth0.com","apiScheme":"https","apiHost":"api.us1.fga.dev"},"playground":{"allowNoAuth":true,"apiAudience":"https://api.playground.fga.dev/","apiTokenIssuer":"sandcastle-dev.us.auth0.com","apiScheme":"https","apiHost":"api.playground.fga.dev"},"staging":{"apiAudience":"https://api.staging.fga.dev/","apiTokenIssuer":"sandcastle-dev.us.auth0.com","apiScheme":"https","apiHost":"api.staging.fga.dev"}}`
func getEnvironmentConfiguration(environment string) (*EnvironmentConfiguration, error) {
var environmentConfigs map[string]EnvironmentConfiguration
if err := json.Unmarshal([]byte(environmentConfigurationString), &environmentConfigs); err != nil {
return nil, err
}
if environment == "" {
environment = "default"
}
environmentConfig, found := environmentConfigs[environment]
if !found {
allowedEnvs := []string{}
for env := range environmentConfigs {
allowedEnvs = append(allowedEnvs, env)
}
return nil, reportError("UserConfiguration.Environment is required and must be one of the following: %v", allowedEnvs)
}
return &environmentConfig, nil
}
// DefaultRetryParams returns the default retry parameters
func DefaultRetryParams() *RetryParams {
return &RetryParams{
MaxRetry: 3,
MinWaitInMs: 100,
}
}
func GetSdkUserAgent() string {
userAgent := strings.Replace("auth0-fga-sdk {sdkId}/{packageVersion}", "{sdkId}", "go", -1)
userAgent = strings.Replace(userAgent, "{packageVersion}", "0.6.1", -1)
return userAgent
}
// NewConfiguration returns a new Configuration object
func NewConfiguration(userConfig UserConfiguration) (*Configuration, error) {
if userConfig.StoreId == "" {
return nil, reportError("UserConfiguration.StoreId is required")
}
environmentConfig, err := getEnvironmentConfiguration(userConfig.Environment)
if err != nil {
return nil, err
}
if !environmentConfig.AllowNoAuth && (userConfig.ClientId == "" || userConfig.ClientSecret == "") {
return nil, reportError("UserConfiguration.ClientId and userConfig.ClientSecret are required")
}
cfg := &Configuration{
ApiHost: environmentConfig.ApiHost,
ApiScheme: environmentConfig.ApiScheme,
DefaultHeaders: make(map[string]string),
UserAgent: GetSdkUserAgent(),
Debug: false,
StoreId: userConfig.StoreId,
ClientId: userConfig.ClientId,
ClientSecret: userConfig.ClientSecret,
ApiTokenIssuer: environmentConfig.ApiTokenIssuer,
ApiAudience: environmentConfig.ApiAudience,
RetryParams: userConfig.RetryParams,
}
if cfg.ApiScheme == "" {
cfg.ApiScheme = "https"
}
err = cfg.ValidateConfig()
if err == nil {
return cfg, nil
}
return nil, err
}
// 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.ApiHost == "" {
return reportError("Configuration.ApiHost is required")
}
if c.ApiScheme == "" {
return reportError("Configuration.ApiScheme is required")
}
if c.StoreId == "" {
return reportError("Configuration.StoreId is required")
}
if (c.ClientId != "" || c.ClientSecret != "") && (c.ClientId == "" || c.ClientSecret == "" || c.ApiAudience == "" || c.ApiTokenIssuer == "") {
return reportError("Configuration.ClientId or Configuration.ClientSecret is set, so all of Configuration.ClientId, Configuration.ClientSecret, Configuration.ApiAudience and Configuration.ApiTokenIssuer are required")
}
if c.RetryParams != nil && c.RetryParams.MaxRetry > 5 {
return reportError("Configuration.RetryParams.MaxRetry exceeds maximum allowed limit of 5")
}
return nil
}