diff --git a/src/components/SecurityRequirement/RequiredScopesRow.tsx b/src/components/SecurityRequirement/RequiredScopesRow.tsx
index 8f899b60..c802f730 100644
--- a/src/components/SecurityRequirement/RequiredScopesRow.tsx
+++ b/src/components/SecurityRequirement/RequiredScopesRow.tsx
@@ -1,15 +1,22 @@
import * as React from 'react';
-export const RequiredScopesRow = ({ scopes }: { scopes: string[] }): JSX.Element | null => {
- if (!scopes.length) return null;
+export const RequiredScopesRow = ({ scopeSets }: { scopeSets: string[][] }): JSX.Element | null => {
+ if (!scopeSets.length) return null;
return (
Required scopes:
- {scopes.map((scope, idx) => {
+ {scopeSets.map((scopeSet, ssIdx) => {
return (
-
- {scope}
{' '}
+
+ {scopeSet.map((scope, idx) => {
+ return (
+
+ {scope}
{' '}
+
+ );
+ })}
+ {ssIdx + 1 < scopeSets.length && ' or '}
);
})}
diff --git a/src/components/SecurityRequirement/SecurityRequirement.tsx b/src/components/SecurityRequirement/SecurityRequirement.tsx
index d578284e..7cb38f62 100644
--- a/src/components/SecurityRequirement/SecurityRequirement.tsx
+++ b/src/components/SecurityRequirement/SecurityRequirement.tsx
@@ -65,7 +65,7 @@ export function SecurityRequirements(props: SecurityRequirementsProps) {
key={scheme.id}
scheme={scheme}
RequiredScopes={
-
+
}
/>
@@ -83,8 +83,8 @@ const LockIcon = () => (
);
-function getRequiredScopes(id: string, securities: SecurityRequirementModel[]): string[] {
- const allScopes: string[] = [];
+function getRequiredScopeSets(id: string, securities: SecurityRequirementModel[]): string[][] {
+ const allScopes: string[][] = [];
let securitiesLength = securities.length;
while (securitiesLength--) {
@@ -92,8 +92,8 @@ function getRequiredScopes(id: string, securities: SecurityRequirementModel[]):
let schemesLength = security.schemes.length;
while (schemesLength--) {
const scheme = security.schemes[schemesLength];
- if (scheme.id === id && Array.isArray(scheme.scopes)) {
- allScopes.push(...scheme.scopes);
+ if (scheme.id === id && Array.isArray(scheme.scopes) && scheme.scopes.length) {
+ allScopes.unshift(scheme.scopes);
}
}
}
diff --git a/src/components/__tests__/__snapshots__/SecurityRequirement.test.tsx.snap b/src/components/__tests__/__snapshots__/SecurityRequirement.test.tsx.snap
index cfea66c7..1f47ea95 100644
--- a/src/components/__tests__/__snapshots__/SecurityRequirement.test.tsx.snap
+++ b/src/components/__tests__/__snapshots__/SecurityRequirement.test.tsx.snap
@@ -5,18 +5,20 @@ exports[`SecurityRequirement should render SecurityDefs 1`] = `
OAuth2 is also a safer and more secure way to give you access.
Security Scheme Type: OAuth2
Flow type: implicit
Scopes:
write:pets
- modify pets in your account
read:pets
- update:pets
-
GitLab_PersonalAccessToken
GitLab Personal Access Token description
Security Scheme Type: API Key
Header parameter name: PRIVATE-TOKEN
GitLab_OpenIdConnect
GitLab OpenIdConnect description
Security Scheme Type: OpenID Connect
basicAuth
Security Scheme Type: HTTP
HTTP Authorization Scheme: basic
"
`;
-exports[`SecurityRequirement should render authDefinition 1`] = `"(API Key: GitLab_PersonalAccessTokenOpenID Connect: GitLab_OpenIdConnectHTTP: basicAuth) OAuth2: petstore_auth
,"`;
+exports[`SecurityRequirement should render authDefinition 1`] = `"(API Key: GitLab_PersonalAccessTokenOpenID Connect: GitLab_OpenIdConnectHTTP: basicAuth) OAuth2: petstore_authOAuth2: petstore_auth
,"`;
exports[`SecurityRequirement should render authDefinition 2`] = `
-"(API Key: GitLab_PersonalAccessTokenOpenID Connect: GitLab_OpenIdConnectHTTP: basicAuth) OAuth2: petstore_auth (write:pets
read:pets
)
OAuth2: petstore_auth
Get access to data while protecting your account credentials.
+"
(API Key: GitLab_PersonalAccessTokenOpenID Connect: GitLab_OpenIdConnectHTTP: basicAuth) OAuth2: petstore_auth (write:pets
read:pets
) OAuth2: petstore_auth (update:pets
)
OAuth2: petstore_auth
Get access to data while protecting your account credentials.
OAuth2 is also a safer and more secure way to give you access.
-
Flow type: implicit
Required scopes: write:pets
read:pets
Scopes:
write:pets
- modify pets in your account
+
Flow type: implicit
Required scopes: write:pets
read:pets
or update:pets
Scopes:
write:pets
- modify pets in your account
read:pets
- update:pets
-
API Key: GitLab_PersonalAccessToken
GitLab Personal Access Token description
Header parameter name: PRIVATE-TOKEN
OpenID Connect: GitLab_OpenIdConnect
GitLab OpenIdConnect description
HTTP: basicAuth
HTTP Authorization Scheme: basic
,"
diff --git a/src/components/__tests__/fixtures/simple-security-fixture.json b/src/components/__tests__/fixtures/simple-security-fixture.json
index 084ef84a..536525d9 100644
--- a/src/components/__tests__/fixtures/simple-security-fixture.json
+++ b/src/components/__tests__/fixtures/simple-security-fixture.json
@@ -23,6 +23,9 @@
},
{
"petstore_auth": ["write:pets", "read:pets"]
+ },
+ {
+ "petstore_auth": ["update:pets"]
}
]
}
@@ -39,7 +42,8 @@
"authorizationUrl": "http://petstore.swagger.io/api/oauth/dialog",
"scopes": {
"write:pets": "modify pets in your account",
- "read:pets": "read your pets"
+ "read:pets": "read your pets",
+ "update:pets": "update your pets"
}
}
}