-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapiServer.js
100 lines (84 loc) · 2.72 KB
/
apiServer.js
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
const express = require('express');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const validator = require('express-validator');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const schedule = require('node-schedule');
const fs = require('fs');
const Library = require('./models/video.js');
let app = express();
const dev = process.env.NODE_ENV === 'development' ? true : false;
// MIDDLEWARE
app.use(bodyParser.json());
app.use(validator());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// APIs
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/hypertube', {
useMongoClient: true
});
let db = mongoose.connection;
db.on('error', console.error.bind(console, '# MongoDB - connection error: '));
//---->>> SET UP SESSIONS <<<-----
app.use(
session({
secret: 'ferEFdf_dsvVaas',
resave: false,
saveUninitialized: false,
cookie: { maxAge: 1000 * 60 * 60 * 24 * 2 },
store: new MongoStore({ mongooseConnection: db, ttl: 2 * 24 * 60 * 60 }),
unset: 'destroy'
//ttl: 2 days * 24 hours * 60 minutes * 60 seconds
})
);
app.use(passport.initialize());
app.use(passport.session());
let User = require('./models/user');
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
// ROUTES API
app.use('/users', require('./API/users'));
app.use('/auth', require('./API/auth'));
app.use('/collection', require('./API/collection'));
app.use('/torrent', require('./API/torrent'));
app.use('/comments', require('./API/comments'));
// GET LIST MOVIES IN DB
const importLibrary = require('./models/importLibrary');
importLibrary();
// PARSE MOVIES OLDER THAN 1 MONTH FOR DELETING THEM (Everyday at 11:59 PM)
schedule.scheduleJob('00 59 23 * * *', () => {
console.log('Old movies cleaning begins...');
let count = 0;
Library.find(
{ lastWatchingDate: { $lte: Date.now() - 2629800000 /* 1 month in milliseconds */ } },
(err, movies) => {
movies.map((movie) => {
if (movie.filePath) {
for (let key in movie.filePath) {
fs.unlinkSync(movie.filePath[key]);
movie.filePath[key] = undefined;
count++;
}
movie.lastWatchingDate = undefined;
movie.save().catch((err) => {
if (dev) console.error(err);
});
}
});
console.log('End of cleaning, ' + count + ' movies deleted.');
}
);
});
// END APIs
app.listen(3001, (err) => {
if (err) {
return console.error(err);
}
console.log('API Server is listening in http://localhost:3001');
});