Skip to content

Commit 608e696

Browse files
committed
Merge pull request #111 from mulesoft/chores/show-security-schema-describeBy
Chores/show security schema describe by
2 parents 49006d0 + 87c9963 commit 608e696

File tree

11 files changed

+221
-26
lines changed

11 files changed

+221
-26
lines changed

dist/examples/leagues.raml

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,21 @@ securitySchemes:
3737
authorizationGrants: [ code, credentials, owner ]
3838
scopes:
3939
- "user"
40-
- "user:email"
41-
- "user:follow"
42-
- "public_repo"
43-
- "repo"
44-
- "repo:status"
45-
- "delete_repo"
46-
- "notifications"
47-
- "gist"
40+
- "league"
41+
- custom_scheme_1:
42+
type: x-custom
43+
describedBy:
44+
headers:
45+
auth:
46+
queryParameters:
47+
access_token:
48+
- custom_scheme_2:
49+
type: x-custom
50+
describedBy:
51+
headers:
52+
auth:
4853

49-
securedBy: [ basic, digest_auth, oauth_2_0 ]
54+
securedBy: [ basic, digest_auth, oauth_2_0, custom_scheme_1, custom_scheme_2 ]
5055

5156
/teams:
5257
displayName: Teams
@@ -145,14 +150,16 @@ securedBy: [ basic, digest_auth, oauth_2_0 ]
145150
get:
146151
description: |
147152
*Obtain* information from a collection of teams simultaneously
153+
headers:
154+
header:
148155
queryParameters:
149156
city:
150157
description:
151158
Filter the list of teams by home city.
152159
type: string
153160
required: false
154161
default: BAR
155-
example: Barcelona
162+
example: BAR
156163
responses:
157164
200:
158165
body:

dist/scripts/api-console.js

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,10 @@
381381
}
382382
}
383383

384+
function beautifyCustomSecuritySchemeName (name) {
385+
return (name.charAt(0).toUpperCase() + name.slice(1)).replace(/_/g, ' ');
386+
}
387+
384388
$scope.readTraits = function (traits) {
385389
var list = [];
386390

@@ -442,6 +446,18 @@
442446
type: 'Anonymous'
443447
};
444448

449+
Object.keys($scope.securitySchemes).map(function (key) {
450+
var type = $scope.securitySchemes[key].type;
451+
452+
$scope.securitySchemes[key].name = type;
453+
$scope.securitySchemes[key].id = type + '|' + key;
454+
455+
if (type === 'x-custom') {
456+
$scope.securitySchemes[key].name = beautifyCustomSecuritySchemeName(key);
457+
$scope.securitySchemes[key].id = type + '|' + key;
458+
}
459+
});
460+
445461
/*jshint camelcase: false */
446462
// Digest Authentication is not supported
447463
delete $scope.securitySchemes.digest_auth;
@@ -913,6 +929,7 @@
913929
controller: function ($scope, $location, $anchorScroll) {
914930
$scope.markedOptions = RAML.Settings.marked;
915931
$scope.currentSchemeType = 'Anonymous';
932+
$scope.currentScheme = 'Anonymous|anonymous';
916933
$scope.responseDetails = false;
917934

918935
function completeAnimation (element) {
@@ -1172,6 +1189,64 @@
11721189

11731190
$scope.context.forceRequest = false;
11741191

1192+
function cleanSchemeMetadata(collection, context) {
1193+
Object.keys(collection).map(function (key) {
1194+
if (collection[key][0].isFromSecurityScheme) {
1195+
delete collection[key];
1196+
}
1197+
1198+
if (context.plain[key].definitions[0].isFromSecurityScheme) {
1199+
delete context.plain[key];
1200+
}
1201+
});
1202+
}
1203+
1204+
function updateContextData (type, scheme, collection, context) {
1205+
var details = $scope.securitySchemes[scheme].describedBy || {};
1206+
var securityHeaders = details[type] || {};
1207+
1208+
if (securityHeaders) {
1209+
Object.keys(securityHeaders).map(function (key) {
1210+
if (!securityHeaders[key]) {
1211+
securityHeaders[key] = {
1212+
id: key,
1213+
type: 'string'
1214+
};
1215+
}
1216+
1217+
securityHeaders[key].displayName = key;
1218+
securityHeaders[key].isFromSecurityScheme = true;
1219+
collection[key] = [securityHeaders[key]];
1220+
1221+
context.plain[key] = {
1222+
definitions: [securityHeaders[key]],
1223+
selected: securityHeaders[key].type
1224+
};
1225+
context.values[key] = [undefined];
1226+
});
1227+
}
1228+
}
1229+
1230+
$scope.securitySchemeChanged = function (scheme) {
1231+
var info = scheme.split('|');
1232+
var type = info[0];
1233+
var name = info[1];
1234+
1235+
$scope.currentSchemeType = type;
1236+
1237+
cleanSchemeMetadata($scope.methodInfo.headers.plain, $scope.context.headers);
1238+
cleanSchemeMetadata($scope.methodInfo.queryParameters, $scope.context.queryParameters);
1239+
1240+
if (type === 'x-custom') {
1241+
if (!$scope.methodInfo.headers.plain) {
1242+
$scope.methodInfo.headers.plain = {};
1243+
}
1244+
1245+
updateContextData('headers', name, $scope.methodInfo.headers.plain, $scope.context.headers);
1246+
updateContextData('queryParameters', name, $scope.methodInfo.queryParameters, $scope.context.queryParameters);
1247+
}
1248+
};
1249+
11751250
$scope.tryIt = function ($event) {
11761251
$scope.requestOptions = null;
11771252
$scope.responseDetails = false;
@@ -1929,6 +2004,8 @@
19292004
return new RAML.Client.AuthStrategies.Oauth2(scheme, credentials);
19302005
case 'OAuth 1.0':
19312006
return new RAML.Client.AuthStrategies.Oauth1(scheme, credentials);
2007+
case 'x-custom':
2008+
return RAML.Client.AuthStrategies.anonymous();
19322009
default:
19332010
throw new Error('Unknown authentication strategy: ' + scheme.type);
19342011
}
@@ -5114,7 +5191,7 @@ angular.module('ramlConsoleApp').run(['$templateCache', function($templateCache)
51145191

51155192
$templateCache.put('directives/raml-field.tpl.html',
51165193
"<div>\n" +
5117-
" <label for=\"{{param.id}}\" class=\"raml-console-sidebar-label\">{{param.displayName}} <a class=\"raml-console-sidebar-override\" ng-if=\"canOverride(param)\" ng-click=\"overrideField($event, param)\">Override</a> <span class=\"raml-console-side-bar-required-field\" ng-if=\"param.required\">*</span></label>\n" +
5194+
" <label for=\"{{param.id}}\" class=\"raml-console-sidebar-label\">{{param.displayName}} <a class=\"raml-console-sidebar-override\" ng-if=\"canOverride(param)\" ng-click=\"overrideField($event, param)\">Override</a> <span class=\"raml-console-side-bar-required-field\" ng-if=\"param.required\">*</span><label ng-if=\"param.isFromSecurityScheme\" class=\"raml-console-sidebar-security-label\">from security scheme</label></label>\n" +
51185195
"\n" +
51195196
" <span class=\"raml-console-sidebar-input-tooltip-container raml-console-sidebar-input-left\" ng-if=\"hasExampleValue(param)\">\n" +
51205197
" <button tabindex=\"-1\" class=\"raml-console-sidebar-input-reset\" ng-click=\"reset(param)\"><span class=\"raml-console-visuallyhidden\">Reset field</span></button>\n" +
@@ -5318,8 +5395,8 @@ angular.module('ramlConsoleApp').run(['$templateCache', function($templateCache)
53185395
" <div class=\"raml-console-sidebar-row raml-console-sidebar-securty\">\n" +
53195396
" <div class=\"raml-console-toggle-group raml-console-sidebar-toggle-group\">\n" +
53205397
" <label class=\"raml-console-sidebar-label\">Security Scheme</label>\n" +
5321-
" <select class=\"raml-console-sidebar-input\" ng-model=\"currentSchemeType\" style=\"margin-bottom: 0;\">\n" +
5322-
" <option ng-repeat=\"(key, scheme) in securitySchemes\" value=\"{{scheme.type}}\" ng-selected=\"scheme.type=='Anonymous'\">{{scheme.type}}</option>\n" +
5398+
" <select ng-change=\"securitySchemeChanged(currentScheme)\" class=\"raml-console-sidebar-input\" ng-model=\"currentScheme\" style=\"margin-bottom: 0;\">\n" +
5399+
" <option ng-repeat=\"(key, scheme) in securitySchemes\" value=\"{{scheme.id}}\" ng-selected=\"scheme.type=='Anonymous'\">{{scheme.name}}</option>\n" +
53235400
" </select>\n" +
53245401
" </div>\n" +
53255402
" </div>\n" +

dist/styles/api-console-dark-theme.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3238,6 +3238,15 @@ a.raml-console-resource-path-active {
32383238
font-weight: 700;
32393239
}
32403240

3241+
.raml-console-sidebar-security-label {
3242+
display: inline;
3243+
float: right;
3244+
font-size: 11px;
3245+
font-weight: normal;
3246+
margin-right: 5px;
3247+
margin-top: 9px;
3248+
}
3249+
32413250
.raml-console-sidebar-input {
32423251
display: block;
32433252
width: 100%;

dist/styles/api-console-light-theme.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3238,6 +3238,15 @@ a.raml-console-resource-path-active {
32383238
font-weight: 700;
32393239
}
32403240

3241+
.raml-console-sidebar-security-label {
3242+
display: inline;
3243+
float: right;
3244+
font-size: 11px;
3245+
font-weight: normal;
3246+
margin-right: 5px;
3247+
margin-top: 9px;
3248+
}
3249+
32413250
.raml-console-sidebar-input {
32423251
display: block;
32433252
width: 100%;

src/app/directives/method-list.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
}
5454
}
5555

56+
function beautifyCustomSecuritySchemeName (name) {
57+
return (name.charAt(0).toUpperCase() + name.slice(1)).replace(/_/g, ' ');
58+
}
59+
5660
$scope.readTraits = function (traits) {
5761
var list = [];
5862

@@ -114,6 +118,18 @@
114118
type: 'Anonymous'
115119
};
116120

121+
Object.keys($scope.securitySchemes).map(function (key) {
122+
var type = $scope.securitySchemes[key].type;
123+
124+
$scope.securitySchemes[key].name = type;
125+
$scope.securitySchemes[key].id = type + '|' + key;
126+
127+
if (type === 'x-custom') {
128+
$scope.securitySchemes[key].name = beautifyCustomSecuritySchemeName(key);
129+
$scope.securitySchemes[key].id = type + '|' + key;
130+
}
131+
});
132+
117133
/*jshint camelcase: false */
118134
// Digest Authentication is not supported
119135
delete $scope.securitySchemes.digest_auth;

src/app/directives/raml-field.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div>
2-
<label for="{{param.id}}" class="raml-console-sidebar-label">{{param.displayName}} <a class="raml-console-sidebar-override" ng-if="canOverride(param)" ng-click="overrideField($event, param)">Override</a> <span class="raml-console-side-bar-required-field" ng-if="param.required">*</span></label>
2+
<label for="{{param.id}}" class="raml-console-sidebar-label">{{param.displayName}} <a class="raml-console-sidebar-override" ng-if="canOverride(param)" ng-click="overrideField($event, param)">Override</a> <span class="raml-console-side-bar-required-field" ng-if="param.required">*</span><label ng-if="param.isFromSecurityScheme" class="raml-console-sidebar-security-label">from security scheme</label></label>
33

44
<span class="raml-console-sidebar-input-tooltip-container raml-console-sidebar-input-left" ng-if="hasExampleValue(param)">
55
<button tabindex="-1" class="raml-console-sidebar-input-reset" ng-click="reset(param)"><span class="raml-console-visuallyhidden">Reset field</span></button>

src/app/directives/sidebar.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
controller: function ($scope, $location, $anchorScroll) {
1010
$scope.markedOptions = RAML.Settings.marked;
1111
$scope.currentSchemeType = 'Anonymous';
12+
$scope.currentScheme = 'Anonymous|anonymous';
1213
$scope.responseDetails = false;
1314

1415
function completeAnimation (element) {
@@ -268,6 +269,64 @@
268269

269270
$scope.context.forceRequest = false;
270271

272+
function cleanSchemeMetadata(collection, context) {
273+
Object.keys(collection).map(function (key) {
274+
if (collection[key][0].isFromSecurityScheme) {
275+
delete collection[key];
276+
}
277+
278+
if (context.plain[key].definitions[0].isFromSecurityScheme) {
279+
delete context.plain[key];
280+
}
281+
});
282+
}
283+
284+
function updateContextData (type, scheme, collection, context) {
285+
var details = $scope.securitySchemes[scheme].describedBy || {};
286+
var securityHeaders = details[type] || {};
287+
288+
if (securityHeaders) {
289+
Object.keys(securityHeaders).map(function (key) {
290+
if (!securityHeaders[key]) {
291+
securityHeaders[key] = {
292+
id: key,
293+
type: 'string'
294+
};
295+
}
296+
297+
securityHeaders[key].displayName = key;
298+
securityHeaders[key].isFromSecurityScheme = true;
299+
collection[key] = [securityHeaders[key]];
300+
301+
context.plain[key] = {
302+
definitions: [securityHeaders[key]],
303+
selected: securityHeaders[key].type
304+
};
305+
context.values[key] = [undefined];
306+
});
307+
}
308+
}
309+
310+
$scope.securitySchemeChanged = function (scheme) {
311+
var info = scheme.split('|');
312+
var type = info[0];
313+
var name = info[1];
314+
315+
$scope.currentSchemeType = type;
316+
317+
cleanSchemeMetadata($scope.methodInfo.headers.plain, $scope.context.headers);
318+
cleanSchemeMetadata($scope.methodInfo.queryParameters, $scope.context.queryParameters);
319+
320+
if (type === 'x-custom') {
321+
if (!$scope.methodInfo.headers.plain) {
322+
$scope.methodInfo.headers.plain = {};
323+
}
324+
325+
updateContextData('headers', name, $scope.methodInfo.headers.plain, $scope.context.headers);
326+
updateContextData('queryParameters', name, $scope.methodInfo.queryParameters, $scope.context.queryParameters);
327+
}
328+
};
329+
271330
$scope.tryIt = function ($event) {
272331
$scope.requestOptions = null;
273332
$scope.responseDetails = false;

src/app/directives/sidebar.tpl.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ <h4 class="raml-console-sidebar-subhead">Authentication</h4>
2626
<div class="raml-console-sidebar-row raml-console-sidebar-securty">
2727
<div class="raml-console-toggle-group raml-console-sidebar-toggle-group">
2828
<label class="raml-console-sidebar-label">Security Scheme</label>
29-
<select class="raml-console-sidebar-input" ng-model="currentSchemeType" style="margin-bottom: 0;">
30-
<option ng-repeat="(key, scheme) in securitySchemes" value="{{scheme.type}}" ng-selected="scheme.type=='Anonymous'">{{scheme.type}}</option>
29+
<select ng-change="securitySchemeChanged(currentScheme)" class="raml-console-sidebar-input" ng-model="currentScheme" style="margin-bottom: 0;">
30+
<option ng-repeat="(key, scheme) in securitySchemes" value="{{scheme.id}}" ng-selected="scheme.type=='Anonymous'">{{scheme.name}}</option>
3131
</select>
3232
</div>
3333
</div>

src/assets/examples/leagues.raml

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,21 @@ securitySchemes:
3737
authorizationGrants: [ code, credentials, owner ]
3838
scopes:
3939
- "user"
40-
- "user:email"
41-
- "user:follow"
42-
- "public_repo"
43-
- "repo"
44-
- "repo:status"
45-
- "delete_repo"
46-
- "notifications"
47-
- "gist"
40+
- "league"
41+
- custom_scheme_1:
42+
type: x-custom
43+
describedBy:
44+
headers:
45+
auth:
46+
queryParameters:
47+
access_token:
48+
- custom_scheme_2:
49+
type: x-custom
50+
describedBy:
51+
headers:
52+
auth:
4853

49-
securedBy: [ basic, digest_auth, oauth_2_0 ]
54+
securedBy: [ basic, digest_auth, oauth_2_0, custom_scheme_1, custom_scheme_2 ]
5055

5156
/teams:
5257
displayName: Teams
@@ -145,14 +150,16 @@ securedBy: [ basic, digest_auth, oauth_2_0 ]
145150
get:
146151
description: |
147152
*Obtain* information from a collection of teams simultaneously
153+
headers:
154+
header:
148155
queryParameters:
149156
city:
150157
description:
151158
Filter the list of teams by home city.
152159
type: string
153160
required: false
154161
default: BAR
155-
example: Barcelona
162+
example: BAR
156163
responses:
157164
200:
158165
body:

src/common/client/auth_strategies.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
return new RAML.Client.AuthStrategies.Oauth2(scheme, credentials);
1515
case 'OAuth 1.0':
1616
return new RAML.Client.AuthStrategies.Oauth1(scheme, credentials);
17+
case 'x-custom':
18+
return RAML.Client.AuthStrategies.anonymous();
1719
default:
1820
throw new Error('Unknown authentication strategy: ' + scheme.type);
1921
}

0 commit comments

Comments
 (0)