1
1
const R = require ( 'ramda' ) ;
2
2
const {
3
- isMember, isExtension, hasKey, getValue,
3
+ isArray , isMember, isExtension, hasKey, getValue,
4
4
} = require ( '../../predicates' ) ;
5
5
const {
6
+ createWarning,
6
7
createUnsupportedMemberWarning,
7
8
createInvalidMemberWarning,
8
9
createIdentifierNotUniqueWarning,
@@ -13,6 +14,7 @@ const parseObject = require('../parseObject');
13
14
const parseString = require ( '../parseString' ) ;
14
15
const parseResponsesObject = require ( './parseResponsesObject' ) ;
15
16
const parseParameterObjects = require ( './parseParameterObjects' ) ;
17
+ const parseSecurityRequirementObject = require ( './parseSecurityRequirementObject' ) ;
16
18
const parseRequestBodyObject = require ( './parseRequestBodyObject' ) ;
17
19
const parseReference = require ( '../parseReference' ) ;
18
20
@@ -21,7 +23,7 @@ const parseRequestBodyObjectOrRef = parseReference('requestBodies', parseRequest
21
23
const name = 'Operation Object' ;
22
24
const requiredKeys = [ 'responses' ] ;
23
25
const unsupportedKeys = [
24
- 'tags' , 'externalDocs' , 'callbacks' , 'deprecated' , 'security' ,
26
+ 'tags' , 'externalDocs' , 'callbacks' , 'deprecated' ,
25
27
] ;
26
28
const isUnsupportedKey = R . anyPass ( R . map ( hasKey , unsupportedKeys ) ) ;
27
29
@@ -102,13 +104,26 @@ function parseOperationObject(context, path, member) {
102
104
) ,
103
105
] ) ) ;
104
106
107
+ const parseSecurity = pipeParseResult ( namespace ,
108
+ R . unless ( isArray , createWarning ( namespace , `'${ name } ' 'security' is not an array` ) ) ,
109
+ R . compose ( R . chain ( parseSecurityRequirementObject ( context ) ) , R . constructN ( 1 , namespace . elements . Array ) ) ,
110
+ requirements => requirements . map ( ( requirement ) => {
111
+ if ( requirement . length === 1 ) {
112
+ return requirement . get ( 0 ) ;
113
+ }
114
+
115
+ const authSchemeRequirement = new namespace . elements . AuthSchemeRequirement ( requirement . content ) ;
116
+ return authSchemeRequirement ;
117
+ } ) ) ;
118
+
105
119
const parseMember = R . cond ( [
106
120
[ hasKey ( 'summary' ) , parseString ( context , name , false ) ] ,
107
121
[ hasKey ( 'description' ) , parseCopy ( context , name , false ) ] ,
108
122
[ hasKey ( 'operationId' ) , pipeParseResult ( namespace , parseString ( context , name , false ) , parseOperationId ) ] ,
109
123
[ hasKey ( 'responses' ) , R . compose ( parseResponsesObject ( context ) , getValue ) ] ,
110
124
[ hasKey ( 'requestBody' ) , R . compose ( parseRequestBodyObjectOrRef ( context ) , getValue ) ] ,
111
125
[ hasKey ( 'parameters' ) , R . compose ( parseParameterObjects ( context , name ) , getValue ) ] ,
126
+ [ hasKey ( 'security' ) , R . compose ( parseSecurity , getValue ) ] ,
112
127
113
128
[ isUnsupportedKey , createUnsupportedMemberWarning ( namespace , name ) ] ,
114
129
@@ -161,6 +176,13 @@ function parseOperationObject(context, path, member) {
161
176
}
162
177
}
163
178
179
+ const security = operation . get ( 'security' ) ;
180
+ if ( security ) {
181
+ transactions . forEach ( ( transaction ) => {
182
+ transaction . attributes . set ( 'authSchemes' , security ) ;
183
+ } ) ;
184
+ }
185
+
164
186
return transition ;
165
187
} ) ;
166
188
0 commit comments