liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
217 lines • 8.31 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Roteador = void 0;
const body_parser_1 = __importDefault(require("body-parser"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const cors_1 = __importDefault(require("cors"));
const express_1 = __importDefault(require("express"));
const helmet_1 = __importDefault(require("helmet"));
const jwt_simple_1 = __importDefault(require("jwt-simple"));
const morgan_1 = __importDefault(require("morgan"));
const redoc_express_1 = __importDefault(require("redoc-express"));
const usuarios_1 = __importDefault(require("../../usuarios"));
const autenticacao_1 = __importDefault(require("../utilidades/autenticacao"));
const variaveis_ambiente_1 = require("../utilidades/variaveis-ambiente");
const metodo_roteador_1 = require("./metodo-roteador");
/**
* O roteador é a classe que monta todas as rotas em que a aplicação irá trabalhar.
* Instrumenta o Express para trabalhar interpretando Delégua.
*/
class Roteador {
constructor(autoDocumentador) {
this.morgan = false;
this.helmet = false;
this.expressJson = false;
this.cookieParser = false;
this.bodyParser = false;
this.cors = false;
this.passport = false;
this.aplicacao = (0, express_1.default)();
this.porta = Number(process.env.PORTA) || Number(process.env.PORT) || 3000;
this.autoDocumentador = autoDocumentador;
this.mapaRotas = {};
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Get] = this.rotaGet.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Post] = this.rotaPost.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Put] = this.rotaPut.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Delete] = this.rotaDelete.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Patch] = this.rotaPatch.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Options] = this.rotaOptions.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Copy] = this.rotaCopy.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Head] = this.rotaHead.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Lock] = this.rotaLock.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Unlock] = this.rotaUnlock.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Purge] = this.rotaPurge.bind(this);
this.mapaRotas[metodo_roteador_1.MetodoRoteador.Propfind] = this.rotaPropfind.bind(this);
// Rota reservada para servir o JSON de auto-documentação.
this.aplicacao.get('/docs/openapi.json', async (req, res) => {
const documentoOpenApi = await this.autoDocumentador.documentar();
res.send(documentoOpenApi).status(200);
});
// Rota reservada para servir a documentação automática.
this.aplicacao.get('/docs', (0, redoc_express_1.default)({
title: 'API Docs',
specUrl: '/docs/openapi.json',
redocOptions: {
theme: {
colors: {
primary: {
main: '#6EC5AB'
}
},
typography: {
fontFamily: `"museo-sans", 'Helvetica Neue', Helvetica, Arial, sans-serif`,
fontSize: '15px',
lineHeight: '1.5',
code: {
code: '#87E8C7',
backgroundColor: '#4D4D4E'
}
},
menu: {
backgroundColor: '#ffffff'
}
}
}
}));
}
configurarArquivosEstaticos(diretorio = 'publico') {
this.aplicacao.use(express_1.default.static(diretorio, { redirect: true }));
}
iniciarMiddlewares() {
if (this.morgan) {
this.aplicacao.use((0, morgan_1.default)('dev'));
}
if (this.helmet) {
this.aplicacao.use((0, helmet_1.default)());
}
if (this.bodyParser) {
this.aplicacao.use(body_parser_1.default.json());
}
if (this.expressJson) {
this.aplicacao.use(express_1.default.json());
}
if (this.cookieParser) {
this.aplicacao.use((0, cookie_parser_1.default)());
}
if (this.cors) {
this.aplicacao.use((0, cors_1.default)());
}
if (this.passport) {
this.aplicacao.use((0, autenticacao_1.default)().initialize());
}
}
ativarDesativarCors(valor) {
this.cors = valor;
}
ativarDesativarPassport(valor) {
this.passport = valor;
}
ativarDesativarCookieParser(valor) {
this.cookieParser = valor;
}
ativarDesativarExpressJson(valor) {
this.expressJson = valor;
}
ativarDesativarBodyParser(valor) {
this.bodyParser = valor;
}
ativarDesativarHelmet(valor) {
this.helmet = valor;
}
ativarDesativarMorgan(valor) {
this.morgan = valor;
}
rotaGet(caminho, execucao) {
this.aplicacao.get(caminho, execucao);
}
rotaPost(caminho, execucao) {
this.aplicacao.post(caminho, execucao);
}
rotaPut(caminho, execucao) {
this.aplicacao.put(caminho, execucao);
}
rotaPatch(caminho, execucao) {
this.aplicacao.patch(caminho, execucao);
}
rotaDelete(caminho, execucao) {
this.aplicacao.delete(caminho, execucao);
}
rotaOptions(caminho, execucao) {
this.aplicacao.options(caminho, execucao);
}
rotaCopy(caminho, execucao) {
this.aplicacao.copy(caminho, execucao);
}
rotaHead(caminho, execucao) {
this.aplicacao.head(caminho, execucao);
}
rotaLock(caminho, execucao) {
this.aplicacao.lock(caminho, execucao);
}
rotaUnlock(caminho, execucao) {
this.aplicacao.unlock(caminho, execucao);
}
rotaPurge(caminho, execucao) {
this.aplicacao.purge(caminho, execucao);
}
rotaPropfind(caminho, execucao) {
this.aplicacao.propfind(caminho, execucao);
}
adicionarRotaToken() {
this.aplicacao.post('/token', (req, res) => {
if (req.body.email && req.body.senha) {
const { email, senha } = req.body;
const usuario = usuarios_1.default.find((u) => {
return u.email === email && u.senha === senha;
});
if (usuario) {
const payload = {
id: usuario.id
};
const token = jwt_simple_1.default.encode(payload, (0, variaveis_ambiente_1.devolverVariavelAmbiente)('chaveSecreta'));
usuarios_1.default.find((u) => u.id === usuario.id).token = token;
return res.json({ token });
}
else {
res.sendStatus(401);
}
}
else {
res.sendStatus(401);
}
});
}
validarToken(req, res, next) {
const token = req.headers['authorization'];
if (token) {
try {
const decoded = jwt_simple_1.default.decode(token, (0, variaveis_ambiente_1.devolverVariavelAmbiente)('chaveSecreta'));
if (decoded) {
next();
}
else {
res.sendStatus(401);
}
}
catch (erro) {
res.sendStatus(401);
}
}
else {
res.sendStatus(401);
}
}
iniciar() {
if (this.passport === true) {
this.adicionarRotaToken();
}
this.aplicacao.listen(this.porta, () => {
console.log(`Aplicação iniciada na porta ${this.porta}`);
});
}
}
exports.Roteador = Roteador;
//# sourceMappingURL=roteador.js.map