-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.js
100 lines (85 loc) · 3.08 KB
/
api.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const Hapi = require('hapi')
const Context = require('./src/db/strategies/base/contextStrategy')
const MongoDB = require('./src/db/strategies/mongodb/mongodb')
const UsuarioRoutes = require('./src/routes/UsuarioRoutes')
const UsuarioSchema = require('./src/db/strategies/mongodb/schemas/usuarioSchema')
const TicketRoutes = require('./src/routes/TicketRoutes')
const TicketSchema = require('./src/db/strategies/mongodb/schemas/ticketSchema')
const CategoriaRoutes = require('./src/routes/CategoriaRoutes')
const CategoriaSchema = require('./src/db/strategies/mongodb/schemas/categoriaSchema')
const ModuloRoutes = require('./src/routes/ModuloRoutes')
const ModuloSchema = require('./src/db/strategies/mongodb/schemas/moduloSchema')
const AuthRoutes = require('./src/routes/AuthRoutes')
const HapiSwagger = require('hapi-swagger')
const Inert = require('inert')
const Vision = require('vision')
const Jwt = require('jsonwebtoken')
const HapiJwt = require('hapi-auth-jwt2')
const {config} = require('dotenv')
const {join} = require('path')
const {ok} = require('assert')
const env = process.env.NODE_ENV || "dev"
ok(env === "prod" || env === "dev", "A env é inválida!!")
const configPath = join(__dirname, './config', `.env.${env}`)
config({path: configPath})
const swaggerConfig = {
info: {
title: 'API Central de Os',
version: 'v1.0'
},
lang: 'pt'
}
const app = new Hapi.Server({
port: process.env.PORT || 5000,
routes: {
cors: {
origin: ["*"],
additionalHeaders: ['Authorization'],
headers: ["Access-Control-Allow-Origin","Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type", "CORELATION_ID"],
credentials: true
}
}
})
function mapRoutes(instance, methods) {
return methods.map(method => instance[method]())
}
async function main(){
const connection = MongoDB.connect()
const mongoDbUsuario = new Context(new MongoDB(connection, UsuarioSchema))
const mongoDbTicket = new Context(new MongoDB(connection, TicketSchema))
const mongoDbCategoria = new Context(new MongoDB(connection, CategoriaSchema))
const mongoDbModulo = new Context(new MongoDB(connection, ModuloSchema))
await app.register([
HapiJwt,
Inert,
Vision,
{
plugin: HapiSwagger,
options: swaggerConfig
}
])
app.auth.strategy('jwt', 'jwt', {
key: process.env.JWT_KEY,
validate: (dado, request) => {
return {
isValid: true
}
},
verifyOptions: {
ignoreExpiration: true,
algorithms: [ process.env.JWT_ALGORITHMS ]
}
})
app.auth.default('jwt')
app.route([
...mapRoutes(new UsuarioRoutes(mongoDbUsuario), UsuarioRoutes.methods()),
...mapRoutes(new TicketRoutes(mongoDbTicket), TicketRoutes.methods()),
...mapRoutes(new CategoriaRoutes(mongoDbCategoria), CategoriaRoutes.methods()),
...mapRoutes(new ModuloRoutes(mongoDbModulo), ModuloRoutes.methods()),
...mapRoutes(new AuthRoutes(process.env.JWT_KEY, mongoDbUsuario), AuthRoutes.methods())
])
await app.start()
console.log('Servidor rodando porta', process.env.PORT)
return app
}
module.exports = main()