This repository was archived by the owner on Nov 8, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathparseOauthFlowObject.js
76 lines (61 loc) · 2.16 KB
/
parseOauthFlowObject.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const R = require('ramda');
const {
isExtension, hasKey, getValue,
} = require('../../predicates');
const {
createInvalidMemberWarning,
} = require('../annotations');
const pipeParseResult = require('../../pipeParseResult');
const parseObject = require('../parseObject');
const parseString = require('../parseString');
const name = 'Oauth Flow Object';
const requiredKeys = ['scopes'];
/**
* Parse Oauth Flow Object
*
* @param namespace {Namespace}
* @param element {Element}
* @returns ParseResult
*
* @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oauthFlowObject
* @private
*/
function parseOauthFlowObject(context, object) {
const { namespace } = context;
const scopesName = `${name}' 'scopes`;
const parseScopeMember = R.cond([
[R.T, parseString(context, scopesName, false)],
]);
const parseScopes = pipeParseResult(namespace,
parseObject(context, scopesName, parseScopeMember, [], [], true),
scopes => new namespace.elements.Array(scopes.content),
R.map((member) => {
const scope = member.key.clone();
scope.description = member.value;
return scope;
}));
const parseUrl = pipeParseResult(namespace,
parseString(context, name, false),
(url) => {
const transition = new namespace.elements.Transition();
transition.href = url.value.clone();
transition.relation = url.key.clone();
// remove 'Url' from key
transition.relation.content = transition.relation.toValue().slice(0, -3);
return transition;
});
const parseMember = R.cond([
[hasKey('scopes'), R.compose(parseScopes, getValue)],
[hasKey('refreshUrl'), parseUrl],
[hasKey('authorizationUrl'), parseUrl],
[hasKey('tokenUrl'), parseUrl],
// FIXME Support exposing extensions into parse result
[isExtension, () => new namespace.elements.ParseResult()],
// Return a warning for additional properties
[R.T, createInvalidMemberWarning(namespace, name)],
]);
const parseOauthFlow = pipeParseResult(namespace,
parseObject(context, name, parseMember, requiredKeys, [], true));
return parseOauthFlow(object);
}
module.exports = R.curry(parseOauthFlowObject);