2019-05-06 00:01:57 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const path = require('path');
|
|
|
|
const config = require('config');
|
|
|
|
const express = require('express');
|
2019-12-15 04:42:51 +00:00
|
|
|
const { postgraphile } = require('postgraphile');
|
2019-05-06 00:01:57 +00:00
|
|
|
const Router = require('express-promise-router');
|
2019-06-03 03:31:38 +00:00
|
|
|
const bodyParser = require('body-parser');
|
2019-05-06 00:01:57 +00:00
|
|
|
|
2020-01-04 01:51:58 +00:00
|
|
|
const PgConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
|
2019-12-15 04:42:51 +00:00
|
|
|
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
2020-01-04 01:51:58 +00:00
|
|
|
const PgOrderByRelatedPlugin = require('@graphile-contrib/pg-order-by-related');
|
2019-12-15 04:42:51 +00:00
|
|
|
|
2020-03-11 02:03:19 +00:00
|
|
|
const logger = require('../logger')(__filename);
|
2020-01-07 03:23:28 +00:00
|
|
|
const { ActorPlugins, SitePlugins, ReleasePlugins } = require('./plugins/plugins');
|
2019-12-16 01:39:13 +00:00
|
|
|
|
2019-11-10 03:20:22 +00:00
|
|
|
const {
|
2020-05-19 23:38:58 +00:00
|
|
|
fetchScene,
|
|
|
|
fetchScenes,
|
|
|
|
fetchMovie,
|
|
|
|
fetchMovies,
|
2019-11-10 03:20:22 +00:00
|
|
|
} = require('./releases');
|
|
|
|
|
2020-05-19 23:38:58 +00:00
|
|
|
const {
|
|
|
|
fetchActor,
|
|
|
|
fetchActors,
|
|
|
|
} = require('./actors');
|
2020-05-19 23:11:32 +00:00
|
|
|
|
2019-05-06 00:01:57 +00:00
|
|
|
function initServer() {
|
2020-05-14 02:26:05 +00:00
|
|
|
const app = express();
|
|
|
|
const router = Router();
|
|
|
|
|
|
|
|
const connectionString = `postgres://${config.database.user}:${config.database.password}@${config.database.host}:5432/${config.database.database}`;
|
|
|
|
|
|
|
|
app.use(postgraphile(
|
|
|
|
connectionString,
|
|
|
|
'public',
|
|
|
|
{
|
|
|
|
// watchPg: true,
|
|
|
|
dynamicJson: true,
|
|
|
|
graphiql: true,
|
|
|
|
enhanceGraphiql: true,
|
|
|
|
allowExplain: () => true,
|
|
|
|
simpleCollections: 'only',
|
|
|
|
graphileBuildOptions: {
|
|
|
|
pgOmitListSuffix: true,
|
|
|
|
connectionFilterRelations: true,
|
|
|
|
},
|
|
|
|
appendPlugins: [
|
|
|
|
PgSimplifyInflectorPlugin,
|
|
|
|
PgConnectionFilterPlugin,
|
|
|
|
PgOrderByRelatedPlugin,
|
|
|
|
...ActorPlugins,
|
|
|
|
...SitePlugins,
|
|
|
|
...ReleasePlugins,
|
|
|
|
],
|
|
|
|
},
|
|
|
|
));
|
|
|
|
|
|
|
|
app.set('view engine', 'ejs');
|
|
|
|
|
|
|
|
router.use('/media', express.static(config.media.path));
|
|
|
|
router.use(express.static('public'));
|
|
|
|
|
|
|
|
router.use('/img', (req, res) => {
|
|
|
|
res.status(404).send();
|
|
|
|
});
|
|
|
|
|
|
|
|
router.use(bodyParser.json({ strict: false }));
|
|
|
|
|
2020-05-19 23:38:58 +00:00
|
|
|
router.get('/api/scenes', fetchScenes);
|
|
|
|
router.get('/api/scenes/:releaseId', fetchScene);
|
|
|
|
|
|
|
|
router.get('/api/movies', fetchMovies);
|
|
|
|
router.get('/api/movies/:releaseId', fetchMovie);
|
2020-05-19 23:11:32 +00:00
|
|
|
|
2020-05-19 23:38:58 +00:00
|
|
|
router.get('/api/actors', fetchActors);
|
2020-05-19 23:11:32 +00:00
|
|
|
router.get('/api/actors/:actorId', fetchActor);
|
2020-05-14 02:26:05 +00:00
|
|
|
|
|
|
|
router.get('*', (req, res) => {
|
|
|
|
res.render(path.join(__dirname, '../../assets/index.ejs'), {
|
|
|
|
env: JSON.stringify({
|
|
|
|
sfw: !!req.headers.sfw || Object.prototype.hasOwnProperty.call(req.query, 'sfw'),
|
|
|
|
}),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
app.use(router);
|
|
|
|
|
|
|
|
const server = app.listen(config.web.port, config.web.host, () => {
|
|
|
|
const { address, port } = server.address();
|
|
|
|
|
|
|
|
logger.info(`Web server listening on ${address}:${port}`);
|
|
|
|
});
|
2019-05-06 00:01:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = initServer;
|