Skip to content

Commit

Permalink
feat(ns-openapi-3-1): add support for Security Scheme Object
Browse files Browse the repository at this point in the history
  • Loading branch information
char0n committed Apr 26, 2021
1 parent 8cd324c commit 5bb977e
Show file tree
Hide file tree
Showing 18 changed files with 183 additions and 5 deletions.
2 changes: 1 addition & 1 deletion apidom/packages/apidom-ns-openapi-3-1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ Only fully implemented specification objects should be checked here.
- [x] [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#schemaObject)
- [x] [Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#discriminatorObject)
- [x] [XML Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#xmlObject)
- [ ] [Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#securitySchemeObject)
- [x] [Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#securitySchemeObject)
- [x] [OAuth Flows Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#oauthFlowsObject)
- [x] [OAuth Flow Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#oauthFlowObject)
- [x] [Security Requirement Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#securityRequirementObject)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { Attributes, Meta } from 'minim';
import { ObjectElement, StringElement } from 'apidom';

import OAuthFlowsElement from './OAuthFlows';

class SecurityScheme extends ObjectElement {
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
super(content, meta, attributes);
this.element = 'securityScheme';
}

get type(): StringElement {
return this.get('type');
}

set type(type: StringElement) {
this.set('type', type);
}

get description(): StringElement {
return this.get('description');
}

set description(description: StringElement) {
this.set('description', description);
}

get name(): StringElement {
return this.get('name');
}

set name(name: StringElement) {
this.set('name', name);
}

get in(): StringElement {
return this.get('in');
}

set in(inVal: StringElement) {
this.set('in', inVal);
}

get scheme(): StringElement {
return this.get('scheme');
}

set scheme(scheme: StringElement) {
this.set('scheme', scheme);
}

get bearerFormat(): StringElement {
return this.get('bearerFormat');
}

set bearerFormat(bearerFormat: StringElement) {
this.set('bearerFormat', bearerFormat);
}

get flows(): OAuthFlowsElement {
return this.get('flows');
}

set flows(flows: OAuthFlowsElement) {
this.set('flows', flows);
}

get openIdConnectUrl(): StringElement {
return this.get('openIdConnectUrl');
}

set openIdConnectUrl(openIdConnectUrl: StringElement) {
this.set('openIdConnectUrl', openIdConnectUrl);
}
}

export default SecurityScheme;
1 change: 1 addition & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ export { default as ResponseElement } from './elements/Response';
export { default as ResponsesElement } from './elements/Responses';
export { default as SchemaElement } from './elements/Schema';
export { default as SecurityRequirementElement } from './elements/SecurityRequirement';
export { default as SecurityScheme } from './elements/SecurityScheme';
export { default as ServerElement } from './elements/Server';
export { default as ServerVariableElement } from './elements/ServerVariable';
export { default as XmlElement } from './elements/Xml';
2 changes: 2 additions & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import ResponseElement from './elements/Response';
import ResponsesElement from './elements/Responses';
import SchemaElement from './elements/Schema';
import SecurityRequirementElement from './elements/SecurityRequirement';
import SecuritySchemeElement from './elements/SecurityScheme';
import ServerElement from './elements/Server';
import ServerVariableElement from './elements/ServerVariable';
import XmlElement from './elements/Xml';
Expand Down Expand Up @@ -54,6 +55,7 @@ const openApi3_1 = {
base.register('responses', ResponsesElement);
base.register('schema', SchemaElement);
base.register('securityRequirement', SecurityRequirementElement);
base.register('securityScheme', SecuritySchemeElement);
base.register('server', ServerElement);
base.register('serverVariable', ServerVariableElement);
base.register('xml', XmlElement);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import ResponseElement from '../elements/Response';
import ResponsesElement from '../elements/Responses';
import SchemaElement from '../elements/Schema';
import SecurityRequirementElement from '../elements/SecurityRequirement';
import SecuritySchemeElement from '../elements/SecurityScheme';
import ServerElement from '../elements/Server';
import ServerVariableElement from '../elements/ServerVariable';
import XmlElement from '../elements/Xml';
Expand Down Expand Up @@ -172,6 +173,13 @@ SecurityRequirementElement.refract = createRefractor([
'SecurityRequirement',
'$visitor',
]);
SecuritySchemeElement.refract = createRefractor([
'visitors',
'document',
'objects',
'SecurityScheme',
'$visitor',
]);
ServerElement.refract = createRefractor(['visitors', 'document', 'objects', 'Server', '$visitor']);
ServerVariableElement.refract = createRefractor([
'visitors',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,20 @@ import PathItemVisitor from './visitors/open-api-3-1/path-item';
import PathItem$RefVisitor from './visitors/open-api-3-1/path-item/$RefVisitor';
import PathItemSummaryVisitor from './visitors/open-api-3-1/path-item/SummaryVisitor';
import PathItemDescriptionVisitor from './visitors/open-api-3-1/path-item/DescriptionVisitor';
import SecuritySchemeVisitor from './visitors/open-api-3-1/security-scheme';
import SecuritySchemeTypeVisitor from './visitors/open-api-3-1/security-scheme/TypeVisitor';
import SecuritySchemeDescriptionVisitor from './visitors/open-api-3-1/security-scheme/DescriptionVisitor';
import SecuritySchemeNameVisitor from './visitors/open-api-3-1/security-scheme/NameVisitor';
import SecuritySchemeInVisitor from './visitors/open-api-3-1/security-scheme/InVisitor';
import SecuritySchemeSchemeVisitor from './visitors/open-api-3-1/security-scheme/SchemeVisitor';
import SecuritySchemeBearerFormatVisitor from './visitors/open-api-3-1/security-scheme/BearerFormatVisitor';
import SecuritySchemeOpenIdConnectUrlVisitor from './visitors/open-api-3-1/security-scheme/OpenIdConnectUrlVisitor';
import OAuthFlowsVisitor from './visitors/open-api-3-1/oauth-flows';
import OAuthFlowVisitor from './visitors/open-api-3-1/oauth-flow';
import OAuthFlowAuthorizationUrlVisitor from './visitors/open-api-3-1/oauth-flow/AuthorizationUrl';
import OAuthFlowTokenUrlVisitor from './visitors/open-api-3-1/oauth-flow/TokenUrl';
import OAuthFlowRefreshUrlVisitor from './visitors/open-api-3-1/oauth-flow/RefreshUrl';
import OAuthFlowScopesVisitor from './visitors/open-api-3-1/oauth-flow/Scopes';
import OAuthFlowAuthorizationUrlVisitor from './visitors/open-api-3-1/oauth-flow/AuthorizationUrlVisitor';
import OAuthFlowTokenUrlVisitor from './visitors/open-api-3-1/oauth-flow/TokenUrlVisitor';
import OAuthFlowRefreshUrlVisitor from './visitors/open-api-3-1/oauth-flow/RefreshUrlVisitor';
import OAuthFlowScopesVisitor from './visitors/open-api-3-1/oauth-flow/ScopesVisitor';

/**
* Specification object allows us to have complete control over visitors
Expand Down Expand Up @@ -477,6 +485,21 @@ const specification = {
wrapped: XmlWrappedVisitor,
},
},
SecurityScheme: {
$visitor: SecuritySchemeVisitor,
fixedFields: {
type: SecuritySchemeTypeVisitor,
description: SecuritySchemeDescriptionVisitor,
name: SecuritySchemeNameVisitor,
in: SecuritySchemeInVisitor,
scheme: SecuritySchemeSchemeVisitor,
bearerFormat: SecuritySchemeBearerFormatVisitor,
flows: {
$ref: '#/visitors/document/objects/OAuthFlows',
},
openIdConnectUrl: SecuritySchemeOpenIdConnectUrlVisitor,
},
},
OAuthFlows: {
$visitor: OAuthFlowsVisitor,
fixedFields: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const BearerFormatVisitor = stampit(FallbackVisitor);

export default BearerFormatVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const DescriptionVisitor = stampit(FallbackVisitor);

export default DescriptionVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const InVisitor = stampit(FallbackVisitor);

export default InVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const NameVisitor = stampit(FallbackVisitor);

export default NameVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const OpenIdConnectUrlVisitor = stampit(FallbackVisitor);

export default OpenIdConnectUrlVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const SchemeVisitor = stampit(FallbackVisitor);

export default SchemeVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const TypeVisitor = stampit(FallbackVisitor);

export default TypeVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import stampit from 'stampit';
import { always } from 'ramda';

import SecuritySchemeElement from '../../../../elements/SecurityScheme';
import FallbackVisitor from '../../FallbackVisitor';
import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor';

const SecuritySchemeVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, {
props: {
specPath: always(['document', 'objects', 'SecurityScheme']),
canSupportSpecificationExtensions: true,
},
init() {
this.element = new SecuritySchemeElement();
},
});

export default SecuritySchemeVisitor;

0 comments on commit 5bb977e

Please sign in to comment.