@dedel.alex/adonis6-swagger
Version:
Swagger provider for AdonisJS 6
62 lines (61 loc) • 1.94 kB
JavaScript
import { AuthMiddleware } from '../src/auth/auth_middleware.js';
import { AuthHeaderDecoder } from '../src/auth/auth_header_decoder.js';
import { SwaggerController } from '../src/swagger_controller.js';
export default class SwaggerProvider {
app;
static needsApplication = true;
/**
* Constructor
*/
constructor(app) {
this.app = app;
}
/**
* Register
*/
register() {
this.registerMiddleware();
}
/**
* Boot
*/
async boot() {
return this.initSwaggerRoutes();
}
/**
* Register middleware
*/
registerMiddleware() {
this.app.container.singleton(AuthMiddleware, () => {
const swaggerAuth = this.app.config.get('swagger.swaggerAuth');
return new AuthMiddleware(swaggerAuth, new AuthHeaderDecoder());
});
}
/**
* Init swagger routes
*/
async initSwaggerRoutes() {
const config = await this.app.config;
const router = await this.app.container.make('router');
const controller = new SwaggerController(this.app);
if (config.get('swagger.uiEnabled', true)) {
router
.get(`${config.get('swagger.uiUrl', 'docs')}/:fileName?`, controller.swaggerUI.bind(controller))
.middleware(config.get('swagger.middleware', []));
}
if (config.get('swagger.specEnabled', true)) {
router
.get(config.get('swagger.specUrl'), controller.swaggerFile.bind(controller))
.middleware(config.get('swagger.middleware', []));
}
}
/**
* Merge auth middleware
*/
async mergeAuthMiddleware(middlewares) {
const config = await this.app.config;
return config.get('swagger.swaggerAuth.authMiddleware')
? middlewares.concat(config.get('swagger.swaggerAuth.authMiddleware'))
: middlewares;
}
}