UNPKG

liquido

Version:

Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português

217 lines 8.31 kB
"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