when security is defined in the openapi yaml like the following
paths:
/foo:
get:
# ...
security:
- key: []
secret: []
components:
securitySchemes:
key:
type: apiKey
in: header
name: X-API-Key
secret:
type: apiKey
in: header
name: X-API-Secret
Then in the generated code it creates constants which it uses as context value keys like so
const (
KeyScopes = "key.Scopes"
SecretScopes = "secret.Scopes"
)
func (siw *ServerInterfaceWrapper) GetFoo(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
ctx = context.WithValue(ctx, KeyScopes, []string{})
ctx = context.WithValue(ctx, SecretScopes, []string{})
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.GetFoo(w, r)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r.WithContext(ctx))
}
which fails staticcheck
$ staticcheck ./...
api.gen.go:117:31: should not use built-in type string as key for value; define your own type to avoid collisions (SA1029)
solution is to simply have the constants use a custom unexported type like this
type ctxKey string
const (
KeyScopes ctxKey = "key.Scopes"
SecretScopes ctxKey = "secret.Scopes"
)
when security is defined in the openapi yaml like the following
Then in the generated code it creates constants which it uses as context value keys like so
which fails staticcheck
solution is to simply have the constants use a custom unexported type like this