mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-09 12:37:49 +00:00
Low-level docs for v3 model are now in place
5/6 of the way there!
This commit is contained in:
@@ -10,12 +10,16 @@ import (
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
const (
|
||||
SecurityLabel = "security"
|
||||
SecuritySchemesLabel = "securitySchemes"
|
||||
OAuthFlowsLabel = "flows"
|
||||
)
|
||||
|
||||
// SecurityScheme represents a low-level OpenAPI 3+ SecurityScheme object.
|
||||
//
|
||||
// Defines a security scheme that can be used by the operations.
|
||||
//
|
||||
// Supported schemes are HTTP authentication, an API key (either as a header, a cookie parameter or as a query parameter),
|
||||
// mutual TLS (use of a client certificate), OAuth2’s common flows (implicit, password, client credentials and
|
||||
// authorization code) as defined in RFC6749 (https://www.rfc-editor.org/rfc/rfc6749), and OpenID Connect Discovery.
|
||||
// Please note that as of 2020, the implicit flow is about to be deprecated by OAuth 2.0 Security Best Current Practice.
|
||||
// Recommended for most use case is Authorization Code Grant flow with PKCE.
|
||||
// - https://spec.openapis.org/oas/v3.1.0#security-scheme-object
|
||||
type SecurityScheme struct {
|
||||
Type low.NodeReference[string]
|
||||
Description low.NodeReference[string]
|
||||
@@ -28,14 +32,28 @@ type SecurityScheme struct {
|
||||
Extensions map[low.KeyReference[string]]low.ValueReference[any]
|
||||
}
|
||||
|
||||
// SecurityRequirement is a low-level representation of an OpenAPI 3+ SecurityRequirement object.
|
||||
//
|
||||
// It lists the required security schemes to execute this operation. The name used for each property MUST correspond
|
||||
// to a security scheme declared in the Security Schemes under the Components Object.
|
||||
//
|
||||
// Security Requirement Objects that contain multiple schemes require that all schemes MUST be satisfied for a
|
||||
// request to be authorized. This enables support for scenarios where multiple query parameters or HTTP headers are
|
||||
// required to convey security information.
|
||||
//
|
||||
// When a list of Security Requirement Objects is defined on the OpenAPI Object or Operation Object, only one of the
|
||||
// Security Requirement Objects in the list needs to be satisfied to authorize the request.
|
||||
// - https://spec.openapis.org/oas/v3.1.0#security-requirement-object
|
||||
type SecurityRequirement struct {
|
||||
ValueRequirements []low.ValueReference[map[low.KeyReference[string]][]low.ValueReference[string]]
|
||||
}
|
||||
|
||||
// FindExtension attempts to locate an extension using the supplied key.
|
||||
func (ss *SecurityScheme) FindExtension(ext string) *low.ValueReference[any] {
|
||||
return low.FindItemInMap[any](ext, ss.Extensions)
|
||||
}
|
||||
|
||||
// Build will extract OAuthFlows and extensions from the node.
|
||||
func (ss *SecurityScheme) Build(root *yaml.Node, idx *index.SpecIndex) error {
|
||||
ss.Extensions = low.ExtractExtensions(root)
|
||||
|
||||
@@ -50,6 +68,7 @@ func (ss *SecurityScheme) Build(root *yaml.Node, idx *index.SpecIndex) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindRequirement will attempt to locate a security requirement string from a supplied name.
|
||||
func (sr *SecurityRequirement) FindRequirement(name string) []low.ValueReference[string] {
|
||||
for _, r := range sr.ValueRequirements {
|
||||
for k, v := range r.Value {
|
||||
@@ -61,6 +80,7 @@ func (sr *SecurityRequirement) FindRequirement(name string) []low.ValueReference
|
||||
return nil
|
||||
}
|
||||
|
||||
// Build will extract all security requirements
|
||||
func (sr *SecurityRequirement) Build(root *yaml.Node, idx *index.SpecIndex) error {
|
||||
if utils.IsNodeArray(root) {
|
||||
var requirements []low.ValueReference[map[low.KeyReference[string]][]low.ValueReference[string]]
|
||||
|
||||
Reference in New Issue
Block a user