@@ -21,7 +21,11 @@ module OpenAPI
2121 # * :type -> string
2222 # * :name -> string
2323 # * :in_f -> string
24- # * :flow -> symbol (:implicit_flow_enabled, :direct_access_grants_enabled, :service_accounts_enabled, :standard_flow_enabled)
24+ # * :flows -> hash
25+ # * :implicit_flow_enabled -> bool
26+ # * :direct_access_grants_enabled -> bool
27+ # * :service_accounts_enabled -> bool
28+ # * :standard_flow_enabled -> bool
2529 # * :scopes -> array of string
2630 # * OAS3.service_backend_version -> string ('1','2','oidc')
2731 # * OAS3.set_server_url -> def(spec, url)
@@ -103,9 +107,10 @@ def set_oauth2_urls(spec, sec_scheme_id, authorization_url, token_url)
103107 raise ThreeScaleToolbox ::Error , "Expected security scheme {#{ sec_scheme_id } } not found or not oauth2"
104108 end
105109
106- flow_key , flow_obj = sec_scheme_obj [ 'flows' ] . first
107- flow_obj [ 'authorizationUrl' ] = authorization_url if %w[ implicit authorizationCode ] . include? ( flow_key )
108- flow_obj [ 'tokenUrl' ] = token_url if %w[ password clientCredentials authorizationCode ] . include? ( flow_key )
110+ sec_scheme_obj [ 'flows' ] . each do |flow_key , flow_obj |
111+ flow_obj [ 'authorizationUrl' ] = authorization_url if %w[ implicit authorizationCode ] . include? ( flow_key )
112+ flow_obj [ 'tokenUrl' ] = token_url if %w[ password clientCredentials authorizationCode ] . include? ( flow_key )
113+ end
109114 end
110115
111116 def set_server_url ( spec , url )
@@ -184,7 +189,7 @@ def parse_global_security_reqs
184189 type : sec_def [ 'type' ] ,
185190 name : sec_def [ 'name' ] ,
186191 in_f : sec_def [ 'in' ] ,
187- flow : parse_flows ( sec_def [ 'flows' ] ) ,
192+ flows : parse_flows ( sec_def [ 'flows' ] ) ,
188193 scopes : sec_item
189194 }
190195 end
@@ -208,9 +213,18 @@ def security_schemes
208213 def parse_flows ( flows_object )
209214 return nil if flows_object . nil?
210215
211- raise ThreeScaleToolbox ::Error , 'Invalid OAS: multiple flows' if flows_object . size > 1
216+ flows_object . keys . reduce ( basic_flows_object ) do |obj , key |
217+ obj . merge! ( convert_flow ( key ) => true )
218+ end
219+ end
212220
213- convert_flow ( flows_object . keys . first )
221+ def basic_flows_object
222+ {
223+ standard_flow_enabled : false ,
224+ implicit_flow_enabled : false ,
225+ service_accounts_enabled : false ,
226+ direct_access_grants_enabled : false
227+ }
214228 end
215229
216230 def convert_flow ( flow_name )
0 commit comments