|
|
|
import { ApolloServer } from 'apollo-server-express';
|
|
|
|
import bikeresolver from './resolvers/cargobikeResolver';
|
|
|
|
import { CargoBikeAPI } from './datasources/db/cargobikeAPI';
|
|
|
|
import typeDefs from './schema/type-defs';
|
|
|
|
import 'reflect-metadata';
|
|
|
|
import { createConnection } from 'typeorm';
|
|
|
|
import { UserServerAPI } from './datasources/userserver/userserviceAPI';
|
|
|
|
import express from 'express';
|
|
|
|
import { requiredPermissions } from './datasources/userserver/permission';
|
|
|
|
|
|
|
|
require('dotenv').config();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function that is called to authenticate a user by using the user rpc server
|
|
|
|
* @param req
|
|
|
|
* @param res
|
|
|
|
* @param next
|
|
|
|
*/
|
|
|
|
async function authenticate (req: any, res: any, next: any) {
|
|
|
|
if (process.env.NODE_ENV === 'develop') {
|
|
|
|
req.permissions = requiredPermissions.map((e) => e.name);
|
|
|
|
next();
|
|
|
|
} else {
|
|
|
|
const token = req.headers.authorization?.replace('Bearer ', '');
|
|
|
|
if (token) {
|
|
|
|
if (await userAPI.validateToken(token)) {
|
|
|
|
req.permissions = await userAPI.getUserPermissions(token);
|
|
|
|
next();
|
|
|
|
} else {
|
|
|
|
res.status(401);
|
|
|
|
res.send('Unauthorized');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
res.status(401);
|
|
|
|
res.send('Unauthorized');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
createConnection().then(async () => {
|
|
|
|
console.log('connected to db');
|
|
|
|
}).catch(error => console.log(error));
|
|
|
|
|
|
|
|
const userAPI = new UserServerAPI(process.env.RPC_HOST);
|
|
|
|
|
|
|
|
const server = new ApolloServer({
|
|
|
|
resolvers: [bikeresolver],
|
|
|
|
typeDefs,
|
|
|
|
dataSources: () => ({
|
|
|
|
cargoBikeAPI: new CargoBikeAPI(),
|
|
|
|
userAPI
|
|
|
|
}),
|
|
|
|
context: (req: any) => {
|
|
|
|
return req;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const app = express();
|
|
|
|
|
|
|
|
app.post('/graphql', authenticate);
|
|
|
|
app.get(/\/graphql?&.*query=/, authenticate);
|
|
|
|
server.applyMiddleware({ app });
|
|
|
|
|
|
|
|
console.log(__dirname);
|
|
|
|
app.listen(4000, async () => {
|
|
|
|
console.log('Server listening on port 4000');
|
|
|
|
await userAPI.createDefinedPermissions();
|
|
|
|
});
|