forked from itsmefury/backend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.ts
114 lines (103 loc) · 2.29 KB
/
app.ts
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import express from 'express'
import {
RootRouter,
AdminRouter,
AuthRouter,
UsersRouter,
UploadRouter,
ImagesRouter,
InvitesRouter,
MailRouter,
DiscordRouter,
DomainRouter,
VoucherRouter,
MatrixRouter,
} from './routes'
import cors from 'cors'
import os from 'os'
import { createLogger } from '@logdna/logger'
import morgan from 'morgan'
const app = express()
app.disable('x-powered-by')
const hostname = os.hostname()
const logger = createLogger(process.env.LOGDNA_INGESTION_KEY!, {
hostname,
})
logger.on('error', (...args) => {
console.error(
'some error occurred with LogDNA and we caught it so this shit doesnt kill itself'
)
})
const stream = {
write: (message: any) => {
//console.log(message)
//logger.info(message)
},
}
app.use((req, res, next) => {
let ip = req.headers['cf-connecting-ip'] as string
req.realIp = ip || req.ip
res.header('X-Server-Hostname', hostname)
return next()
})
morgan.token(
'realip',
(req: express.Request, res: express.Response) => req.realIp
)
app.use(
morgan(
':realip - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"',
{
stream,
}
)
)
app.use(
cors({
origin: [
'https://www.pxl.blue',
'https://pxl.blue',
'http://localhost:8080',
'http://localhost:8000',
],
credentials: true,
})
)
app.use('/', RootRouter)
app.use('/admin', AdminRouter)
app.use('/auth', AuthRouter)
app.use('/users', UsersRouter)
app.use('/images', ImagesRouter)
app.use('/invites', InvitesRouter)
app.use('/upload', UploadRouter)
app.use('/mail', MailRouter)
app.use('/discord', DiscordRouter)
app.use('/domains', DomainRouter)
app.use('/voucher', VoucherRouter)
app.use('/matrix', MatrixRouter)
app.use((req, res, next) => {
return res.status(404).json({
success: false,
errors: ['page not found'],
})
})
app.use(
(
err: Error,
req: express.Request,
res: express.Response,
next: express.NextFunction
) => {
return res.status(500).json({
success: false,
message: 'internal server error',
errors: [err.toString()],
stack: err.stack,
})
}
)
export default async function listen(port: number) {
return new Promise((resolve, reject) => {
app.listen(port, resolve)
})
}