CinemaPress/app.js

195 lines
5.2 KiB
JavaScript
Raw Permalink Normal View History

2019-10-01 21:34:02 +02:00
'use strict';
process.env['UV_THREADPOOL_SIZE'] = '128';
process.env['CP_VER'] = new Date().getTime().toString();
2019-10-08 20:29:17 +02:00
require('events').EventEmitter.defaultMaxListeners = 15;
2019-10-01 21:34:02 +02:00
/**
* Configuration dependencies.
*/
var config = require('./config/production/config');
2020-09-16 03:47:49 +02:00
Object.keys(config).length === 0 &&
(config = require('./config/production/config.backup'));
2021-04-06 02:32:12 +02:00
var modules = require('./config/production/modules');
Object.keys(modules).length === 0 &&
(modules = require('./config/production/modules.backup'));
/**
* Global configuration.
*/
process.env['CP_CONFIG_MD5'] = require('md5')(JSON.stringify(config));
process.env['CP_MODULES_MD5'] = require('md5')(JSON.stringify(modules));
2019-10-01 21:34:02 +02:00
/**
* Module dependencies.
*/
var CP_cache = require('./lib/CP_cache');
2019-10-01 21:34:02 +02:00
/**
* Node dependencies.
*/
var path = require('path');
2021-01-19 03:50:07 +01:00
var fs = require('fs');
2019-10-01 21:34:02 +02:00
var lookup = {};
try {
var MaxMindReader = require('maxmind').Reader;
2020-04-07 03:11:00 +02:00
lookup.country = new MaxMindReader(
2021-01-19 03:50:07 +01:00
fs.readFileSync(
2019-10-01 21:34:02 +02:00
path.join(path.dirname(__filename), 'files', 'GeoLite2-Country.mmdb')
)
);
2020-04-07 03:11:00 +02:00
lookup.asn = new MaxMindReader(
2021-01-19 03:50:07 +01:00
fs.readFileSync(
2020-04-07 03:11:00 +02:00
path.join(path.dirname(__filename), 'files', 'GeoLite2-ASN.mmdb')
)
);
2019-10-01 21:34:02 +02:00
} catch (err) {
2020-04-07 03:11:00 +02:00
console.log('NOT FILE GeoLite2-Country.mmdb OR GeoLite2-ASN.mmdb');
2019-10-01 21:34:02 +02:00
}
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
app.use(function(req, res, next) {
if (process.env.NODE_ENV !== 'production') {
req.start_request = new Date();
console.log('GET:', req.originalUrl);
}
next();
});
2019-11-11 02:12:38 +01:00
app.use(function(req, res, next) {
res.setHeader('X-Powered-By', 'CinemaPress');
next();
});
2020-05-03 01:46:17 +02:00
app.use('/ping', function(req, res) {
return res.send('pong');
});
app.use('/flush-cache-' + config.urls.admin, function(req, res) {
CP_cache.flush(function() {
return res.send('OK');
});
});
2019-11-11 02:12:38 +01:00
2019-10-01 21:34:02 +02:00
/**
* Route dependencies.
*/
var files = require('./routes/files');
2021-05-09 01:25:18 +02:00
var embed = require('./routes/embed');
2019-10-01 21:34:02 +02:00
var iframe = require('./routes/iframe');
2021-05-21 22:49:06 +02:00
var cinemaplayer = require('./routes/cinemaplayer');
2019-10-01 21:34:02 +02:00
var player = require('./routes/player');
var episode = require('./routes/episode');
var robots = require('./routes/robots');
2019-12-13 23:19:45 +01:00
var opensearch = require('./routes/opensearch');
2019-10-01 21:34:02 +02:00
var rss = require('./routes/rss');
var admin = require('./routes/admin');
var website = require('./routes/website');
var api = require('./routes/api');
2020-05-28 20:21:30 +02:00
var telegram = require('./routes/telegram');
2019-10-01 21:34:02 +02:00
/**
* Middleware dependencies.
*/
2020-03-08 04:42:33 +01:00
var rebooting = require('./lib/CP_rebooting');
2019-10-01 21:34:02 +02:00
var userinfo = require('./lib/CP_userinfo');
var loadavg = require('./lib/CP_loadavg');
2021-01-09 09:55:31 +01:00
var defence = require('./lib/CP_defense');
2019-10-01 21:34:02 +02:00
var nginx = require('./lib/CP_nginx');
2021-01-09 01:12:50 +01:00
var bots = require('./lib/CP_bots');
2019-10-01 21:34:02 +02:00
/**
* Port.
*/
var port = process.env.PORT || 3000;
2019-10-01 21:34:02 +02:00
/**
* Template engine.
*/
app.set('views', [
path.join(__dirname, 'themes', 'default', 'views'),
path.join(__dirname, 'themes', config.theme, 'views')
]);
app.set('view engine', 'ejs');
/**
* Middleware functions.
*/
app.enable('trust proxy');
2020-06-01 02:27:47 +02:00
app.use(cookieParser(config.domain));
2019-10-01 21:34:02 +02:00
app.use(bodyParser.json({ limit: '64mb' }));
app.use(bodyParser.urlencoded({ limit: '64mb', extended: true }));
2020-03-08 04:42:33 +01:00
//app.use(rebooting());
2019-10-01 21:34:02 +02:00
app.use(nginx());
app.use(
2020-06-27 21:45:35 +02:00
/^(?:\/mobile-version|\/tv-version|)?\//,
2019-10-01 21:34:02 +02:00
express.static(path.join(path.dirname(__filename), '/'))
);
2021-05-21 22:49:06 +02:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/api/, api);
app.use(/^(?:\/mobile-version|\/tv-version|)?\/cinemaplayer/, cinemaplayer);
2021-05-09 01:25:18 +02:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/telegram/, telegram);
app.use(/^(?:\/mobile-version|\/tv-version|)?\/files/, files);
2021-01-09 01:12:50 +01:00
app.use(bots());
2021-01-09 09:55:31 +01:00
app.use(defence());
2020-02-25 21:10:58 +01:00
app.use(userinfo(lookup));
app.use(/^(?:\/mobile-version|\/tv-version|)?\/player.*$/, player);
app.use(/^(?:\/mobile-version|\/tv-version|)?\/episode.*$/, episode);
2019-10-01 21:34:02 +02:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/robots\.txt$/, robots);
2019-12-13 23:19:45 +01:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/opensearch\.xml$/, opensearch);
2021-05-09 01:25:18 +02:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/embed/, embed);
app.use(/^(?:\/mobile-version|\/tv-version|)?\/iframe/, iframe);
2019-10-01 21:34:02 +02:00
app.use(/^(?:\/mobile-version|\/tv-version|)?\/rss\.xml.*$/, rss);
app.use('/' + config.urls.admin, admin);
app.use(loadavg());
app.use(/^(?:\/mobile-version|\/tv-version|)?/, website);
app.use(function(err, req, res, next) {
2019-10-09 03:51:57 +02:00
if (res.headersSent) return next();
2019-10-01 21:34:02 +02:00
err.status = err.status ? err.status : 404;
err.message = err.message ? err.message : 'Not Found';
2019-10-13 03:13:56 +02:00
if (err.status === 301 || err.status === 302) {
2019-10-15 04:43:47 +02:00
res.writeHead(err.status, { Location: err.message });
return res.end();
2019-10-13 03:13:56 +02:00
}
2019-10-01 21:34:02 +02:00
return res.status(err.status).render('error', {
search: config.urls.search,
status: err.status,
message: err.message,
language: config.language
});
});
app.use(function(req, res) {
2019-10-09 03:51:57 +02:00
if (res.headersSent) return;
2019-10-01 21:34:02 +02:00
return res.status(404).render('error', {
search: config.urls.search,
status: 404,
message: 'Not Found',
language: config.language
});
});
process.stdout.on('error', function(err) {
if (err.code === 'EPIPE') {
console.error('---------------', 'ERROR EPIPE', '---------------');
process.exit(0);
}
if (err.code === 'ENOMEM') {
console.error('---------------', 'ERROR ENOMEM', '---------------');
process.exit(0);
}
});
2019-10-01 21:34:02 +02:00
app.listen(port);