Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var express = require('express');
- var bodyParser = require('body-parser');
- var assert = require('assert');
- var MongoClient = require('mongodb').MongoClient;
- var ObjectID = require('mongodb').ObjectID;
- var createHash = require('./hash.js').createHash;
- var createRandomBytes = require('./hash.js').createRandomBytes;
- var http = require('http');
- var fs = require('fs');
- var mkdirp = require('mkdirp');
- var zlib = require('zlib');
- var download = require('download');
- var readline = require('readline');
- // Global vars
- var app = express();
- var mongoUrl = 'mongodb://miyava.de:27017/Miyava';
- // Session object
- var sessions = {};
- // Middleware
- app.use(bodyParser.json());
- // Authorize middleware
- app.use(function(req, res, next) {
- req.is_authorized = false;
- if(req.body.session_id == null) {
- req.authorized_error = { error: 'Not logged in' };
- }
- else {
- var user = sessions[req.body.session_id];
- if(user == null) {
- req.authorized_error = { error: 'Session invalid' };
- }
- else {
- req.is_authorized = true;
- }
- }
- next();
- });
- // Used to register a user
- app.post('/register', function(req, res) {
- assert.notEqual(req.body.username, undefined);
- assert.notEqual(req.body.password, undefined);
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('users', function(err, collection) {
- assert.equal(err, null);
- var hash = createHash(req.body.password);
- collection.insertOne({username: req.body.username, password: hash, firstname: req.body.firstname, lastname: req.body.lastname, roles: ['user'] }, function(err, result) {
- assert.equal(err, null);
- res.send(result);
- db.close();
- });
- });
- });
- });
- // Used to login as a specified user
- app.post('/login', function(req, res) {
- assert.notEqual(req.body.username, undefined);
- assert.notEqual(req.body.password, undefined);
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('users', function(err, collection) {
- assert.equal(err, null);
- var sessionBase = req.body.username + '_' + Date.now() + '_' + createRandomBytes();
- var sessionId = createHash(sessionBase);
- collection.findOneAndUpdate({username: req.body.username}, { '$set': { 'session_id': sessionId } }, { upsert: false }, function(err, document) {
- assert.equal(err, null);
- if(document.value == null) {
- res.send('{"error":"Username does not exist"}');
- }
- else {
- var hash = createHash(req.body.password);
- if(document.value.password == hash) {
- var user = {
- id: document.value._id,
- username: document.value.username,
- session_id: document.value.session_id,
- firstname: document.value.firstname,
- lastname: document.value.lastname,
- roles: document.value.roles
- };
- sessions[user.session_id] = user;
- res.send(user);
- }
- else {
- res.send({success: false, error: 'Password is wrong'});
- }
- }
- db.close();
- });
- });
- });
- });
- app.post('/logout', function(req, res) {
- if(!req.is_authorized) {
- res.send(req.authorized_error);
- }
- else {
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('users', function(err, collection) {
- assert.equal(err, null);
- var user = sessions[req.body.session_id];
- collection.findOneAndUpdate({_id: user.id}, { '$unset': { 'session_id': '' } }, { upsert: false }, function(err, document) {
- assert.equal(err, null);
- if(document.value == null) {
- res.send({success: false, error: 'Unknown error'});
- }
- else {
- res.send({success: true});
- }
- db.close();
- });
- });
- });
- }
- });
- // List all users (if logged in atleast :D)
- app.post('/users', function(req, res) {
- if(!req.is_authorized) {
- res.send(req.authorized_error);
- }
- else {
- var user = sessions[req.body.session_id];
- if(user.roles === undefined || !user.roles.includes('user')) {
- res.send('{"error":"User does not have enough roles"}');
- }
- else {
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('users', function(err, collection) {
- assert.equal(err, null);
- collection.find({}).toArray(function(err, documents) {
- assert.equal(err, null);
- res.send(documents);
- db.close();
- });
- });
- });
- }
- }
- });
- // DEV ONLY :D
- app.get('/users', function(req, res) {
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('users', function(err, collection) {
- assert.equal(err, null);
- collection.find({}).toArray(function(err, documents) {
- assert.equal(err, null);
- res.send(documents);
- db.close();
- });
- });
- });
- });
- app.get('/movies', function(req, res){
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('movies', function(err, collection) {
- assert.equal(err, null);
- collection.find({}).toArray(function(err, documents) {
- assert.equal(err, null);
- res.send(documents);
- db.close();
- });
- });
- });
- });
- app.get('/movies_ids', function(req, res){
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('movies_ids', function(err, collection) {
- assert.equal(err, null);
- collection.find({}).toArray(function(err, documents) {
- assert.equal(err, null);
- res.send(documents);
- db.close();
- });
- });
- });
- });
- app.get('/movies/:id/delete', function(req, res) {
- MongoClient.connect(mongoUrl, function(err, db) {
- assert.equal(err, null);
- db.collection('movies', function(err, collection) {
- assert.equal(err, null);
- collection.remove({_id: ObjectID(req.params.id)}, function(err, result) {
- if (err) {
- console.log(err);
- }
- console.log(result);
- db.close();
- });
- });
- });
- });
- app.get('/movies/startDownload',function(req,res){
- var downloadDir ='./download';
- mkdirSync(downloadDir);
- var movieDir = './download/movie';
- mkdirSync(movieDir);
- if (!fs.existsSync('download/movie/movie_ids_04_28_2017.json.gz')) {
- downloadFile("http://files.tmdb.org/p/exports/movie_ids_04_28_2017.json.gz","download/movie/");
- }
- if (!fs.existsSync('movie_ids_04_28_2017.json')) {
- unzipFile(dest + "/movie_ids_04_28_2017.json.gz", "movie_ids_04_28_2017.json");
- }
- var myInterface = readline.createInterface({
- input: fs.createReadStream("movie_ids_04_28_2017.json")
- });
- myInterface.on('line', function (line) {
- var fileLine = JSON.parse(line);
- var notFind = false;
- MongoClient.connect(mongoUrl, function(err, db) {
- if (err) throw err;
- var query = { id: fileLine.id };
- db.collection("movies_ids").find(query).toArray(function(err, result) {
- if (err) throw err;
- if(result == null || result.length == 0){
- notFind = true;
- } else {
- notFind = false;
- }
- });
- });
- setTimeout(function() {
- if(notFind){
- MongoClient.connect(mongoUrl, function(err, db) {
- if (err) throw err;
- var query = { id: fileLine.id };
- console.log(query);
- db.collection('movies_ids', function(err, collection) {
- assert.equal(err, null);
- collection.insertOne({
- adult:fileLine.adult,
- id:fileLine.id,
- original_title:fileLine.original_title,
- popularity:fileLine.popularity,
- video:fileLine.video
- }, function(err, result) {
- assert.equal(err, null);
- res.send(result);
- });
- });
- db.close();
- });
- }
- }, 3000);
- //process.exit();
- });
- });
- function mkdirSync (dirPath) {
- if (!fs.existsSync(dirPath)){
- fs.mkdirSync(dirPath);
- }
- }
- function downloadFile(url, dest) {
- console.log("start Download");
- // for download more then one file
- Promise.all([
- url
- ].map(x => download(x, dest))).then(() => {
- console.log('files downloaded!');
- unzipFile(dest + "/movie_ids_04_28_2017.json.gz", "movie_ids_04_28_2017.json");
- readFileLineByLine(dest + "/movie_ids_04_28_2017.json");
- });
- }
- function unzipFile(dir, name) {
- const gzip = zlib.Unzip();
- const inp = fs.createReadStream(dir);
- const out = fs.createWriteStream(name);
- inp.pipe(gzip).pipe(out);
- }
- app.listen(3500, '0.0.0.0');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement