init
This commit is contained in:
73
server/server.js
Normal file
73
server/server.js
Normal file
@@ -0,0 +1,73 @@
|
||||
import Fastify from 'fastify';
|
||||
import cors from '@fastify/cors';
|
||||
import jwt from '@fastify/jwt';
|
||||
import { PORT, JWT_SECRET } from './src/config/constants.js';
|
||||
import { connectDB } from './src/config/db.js';
|
||||
import routes from './src/routes/v1.js';
|
||||
import { User } from './src/models/User.js';
|
||||
|
||||
const fastify = Fastify({ logger: true });
|
||||
|
||||
await connectDB();
|
||||
|
||||
const allowedOrigins = [
|
||||
'http://localhost:5173',
|
||||
'http://localhost',
|
||||
'capacitor://localhost',
|
||||
'https://10.0.2.2:5173',
|
||||
'https://zenkanji.crylia.de'
|
||||
];
|
||||
|
||||
if (process.env.CORS_ORIGINS) {
|
||||
const prodOrigins = process.env.CORS_ORIGINS.split(',');
|
||||
allowedOrigins.push(...prodOrigins);
|
||||
}
|
||||
|
||||
await fastify.register(cors, {
|
||||
origin: allowedOrigins,
|
||||
methods: ['GET', 'POST', 'PUT', 'DELETE'],
|
||||
credentials: true
|
||||
});
|
||||
|
||||
await fastify.register(jwt, {
|
||||
secret: JWT_SECRET
|
||||
});
|
||||
|
||||
fastify.decorate('authenticate', async function (req, reply) {
|
||||
try {
|
||||
const payload = await req.jwtVerify();
|
||||
|
||||
const user = await User.findById(payload.userId);
|
||||
|
||||
if (!user) {
|
||||
reply.code(401).send({ message: 'User not found', code: 'INVALID_USER' });
|
||||
return;
|
||||
}
|
||||
|
||||
if (payload.version !== user.tokenVersion) {
|
||||
reply.code(401).send({ message: 'Session invalid', code: 'INVALID_SESSION' });
|
||||
return;
|
||||
}
|
||||
if (payload.version !== user.tokenVersion) {
|
||||
throw new Error('Session invalid');
|
||||
}
|
||||
|
||||
req.user = user;
|
||||
|
||||
} catch (err) {
|
||||
reply.code(401).send(err);
|
||||
}
|
||||
});
|
||||
|
||||
await fastify.register(routes);
|
||||
|
||||
const start = async () => {
|
||||
try {
|
||||
await fastify.listen({ port: PORT, host: '0.0.0.0' });
|
||||
console.log(`Server running at http://localhost:${PORT}`);
|
||||
} catch (err) {
|
||||
fastify.log.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
start();
|
||||
Reference in New Issue
Block a user