Class: ThreeScaleToolbox::OpenAPI::OAS3
- Inherits:
-
Object
- Object
- ThreeScaleToolbox::OpenAPI::OAS3
- Defined in:
- lib/3scale_toolbox/openapi/oas3.rb
Overview
OAS3 object
-
OAS3.title -> string
-
OAS3.description -> string
-
OAS3.version -> string
-
OAS3.base_path -> string
-
OAS3.host -> string
-
OAS3.scheme -> string
-
OAS3.operation -> array of operation hash
-
operation hash properties
-
:verb
-
:path
-
:description
-
:operation_id
-
-
-
OAS3.security -> security hash
-
security hash properties
-
:id -> string
-
:type -> string
-
:name -> string
-
:in_f -> string
-
:flows -> hash
-
:implicit_flow_enabled -> bool
-
:direct_access_grants_enabled -> bool
-
:service_accounts_enabled -> bool
-
:standard_flow_enabled -> bool
-
-
:scopes -> array of string
-
-
-
OAS3.service_backend_version -> string (‘1’,‘2’,‘oidc’)
-
OAS3.set_server_url -> def(spec, url)
-
OAS3.set_oauth2_urls-> def(spec, scheme_id, authorization_url, token_url)
Constant Summary collapse
- META_SCHEMA_PATH =
File.('../../../resources/oas3_meta_schema.json', __dir__)
Instance Attribute Summary collapse
-
#definition ⇒ Object
readonly
Returns the value of attribute definition.
Class Method Summary collapse
Instance Method Summary collapse
- #base_path ⇒ Object
- #description ⇒ Object
- #host ⇒ Object
- #operations ⇒ Object
- #scheme ⇒ Object
- #security ⇒ Object
- #service_backend_version ⇒ Object
-
#set_oauth2_urls(spec, sec_scheme_id, authorization_url, token_url) ⇒ Object
Update given spec with urls It is expected identified security scheme to be oauth2 type.
- #set_server_url(spec, url) ⇒ Object
- #title ⇒ Object
- #version ⇒ Object
Instance Attribute Details
#definition ⇒ Object (readonly)
Returns the value of attribute definition.
47 48 49 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 47 def definition @definition end |
Class Method Details
.build(path, raw, validate: true) ⇒ Object
41 42 43 44 45 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 41 def self.build(path, raw, validate: true) self.validate(raw) if validate new(path, raw) end |
.validate(raw) ⇒ Object
36 37 38 39 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 36 def self.validate(raw) = JSON.parse(File.read(META_SCHEMA_PATH)) JSON::Validator.validate!(, raw) end |
Instance Method Details
#base_path ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 61 def base_path # If there are many? take first # From https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#openapi-object # If the servers property is not provided, or is an empty array, # the default value would be a Server Object with a url value of / server_objects(&:path).first || '/' end |
#description ⇒ Object
53 54 55 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 53 def description definition.info['description'] end |
#host ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 69 def host # If there are many? take first server_objects do |url| # URI::HTTP is parent of URI::HTTPS, so both covered "#{url.host}:#{url.port}" if url.kind_of?(URI::HTTP) end.first end |
#operations ⇒ Object
82 83 84 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 82 def operations @operations ||= parse_operations end |
#scheme ⇒ Object
77 78 79 80 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 77 def scheme # If there are many? take first server_objects(&:scheme).first end |
#security ⇒ Object
86 87 88 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 86 def security @security ||= parse_security end |
#service_backend_version ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 90 def service_backend_version # default authentication mode if no security requirement return '1' if security.nil? case security[:type] when 'oauth2' 'oidc' when 'apiKey' '1' else raise ThreeScaleToolbox::Error, "Unexpected security scheme type #{security[:type]}" end end |
#set_oauth2_urls(spec, sec_scheme_id, authorization_url, token_url) ⇒ Object
Update given spec with urls It is expected identified security scheme to be oauth2 type
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 107 def set_oauth2_urls(spec, sec_scheme_id, , token_url) sec_scheme_obj = spec.dig('components', 'securitySchemes', sec_scheme_id) if sec_scheme_obj.nil? || sec_scheme_obj['type'] != 'oauth2' raise ThreeScaleToolbox::Error, "Expected security scheme {#{sec_scheme_id}} not found or not oauth2" end sec_scheme_obj['flows'].each do |flow_key, flow_obj| flow_obj['authorizationUrl'] = if %w[implicit authorizationCode].include?(flow_key) flow_obj['tokenUrl'] = token_url if %w[password clientCredentials authorizationCode].include?(flow_key) end end |
#set_server_url(spec, url) ⇒ Object
119 120 121 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 119 def set_server_url(spec, url) spec['servers'] = [{ 'url' => url }] end |
#title ⇒ Object
49 50 51 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 49 def title definition.info['title'] end |
#version ⇒ Object
57 58 59 |
# File 'lib/3scale_toolbox/openapi/oas3.rb', line 57 def version definition.info['version'] end |