var mongoose = require('mongoose'); var passport = require('passport'); var config = require('../config/database'); require('../config/passport')(passport); //require('../auth/facebook')(passport); var express = require('express'); var jwt = require('jsonwebtoken'); var router = express.Router(); var User = require("../models/user"); var FileMongo = require("../models/FileMongo"); var FolderMongo = require("../models/FolderMongo"); var Book = require("../models/book"); var fs = require('fs'); var multer = require('multer'); var upload = multer({ dest: './public/' }); var passportFacebook = require('../auth/facebook'); var passportGoogle = require('../auth/google'); var passportGitHub = require('../auth/github'); // recuperer l'extention d'un fichier en fonction de son nom, par exemple : exemple.pdf recupera juste ".pdf" getStringExtention = function(monFile){ return ( monFile.name.indexOf('.') > 0 ) ? '.' + monFile.name.split('.').pop().toLowerCase() : ''; }; /* creation Token */ getToken = function (headers) { if (headers && headers.authorization) { var parted = headers.authorization.split(' '); if (parted.length === 2) { return parted[1]; } else { return null; } } else { return null; } }; router.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); res.setHeader('Access-Control-Allow-Credentials', true); next(); }); /* GET home page. */ router.get('/', function(req, res, next) { res.send('Express RESTful API'); }); //inscription email/password le username est l'email router.post('/signup', function(req, res) { if (!req.body.username || !req.body.password) { res.json({success: false, msg: 'Please pass username and password.'}); } else { var newUser = new User({ username: req.body.username, password: req.body.password }); // save the user newUser.save(function(err) { if (err) { return res.json({success: false, msg: 'Username already exists.'}); } res.json({success: true, msg: 'Successful created new user.'}); }); } }); /* SAVE FILE */ router.post('/uploadFileMongo', function(req, res, next) { FileMongo.create(req.body, function (err, post) { if (err){ return next(err); } res.json(post); }); }); /* SAVE URL FILE */ router.post('/saveURLFileMongo', function(req, res, next) { FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {url: req.body.url},{new: true}).then((data) =>{ if(data === null){ throw new Error('File Not Found'); } res.json({ message: 'File updated!' }); }).catch( (error) => { //Deal with all your errors here with your preferred error handle middleware / method res.status(500).json({ message: 'Some Error!' }); console.log(error); }); }); /* SAVE FOLDER */ router.post('/createFolder', function(req, res, next) { FolderMongo.create(req.body, function (err, post) { if (err){ return next(err); } res.json(post); }); }); /* DELETE FILE */ router.post('/deleteFileMongo', function(req, res, next) { console.log(JSON.stringify(req.body)); FileMongo.remove({_id : req.body._id, name: req.body.name, owner: req.body.owner}, function (err, post) { if (err){ return next(err); } //Delete file multer dans Public fs.unlink('./public/' + req.body._id + getStringExtention(req.body)); res.json(post); }); }); /* DELETE FILE */ router.post('/deleteUserMongo', function(req, res, next) { console.log(JSON.stringify(req.body)); User.remove({_id : req.body._id, name: req.body.name}, function (err, post) { if (err){ return next(err); } res.json(post); }); }); /* DELETE FOLDER */ router.post('/deleteFolderMongo', function(req, res, next) { FolderMongo.remove({_id : req.body._id, name: req.body.name, owner: req.body.owner}, function (err, post) { if (err){ return next(err); } res.json(post); }); }); /* Rename FOLDER */ router.post('/renameFolderMongo', function(req, res, next) { FolderMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {name: req.body.name},{new: true}).then((data) =>{ if(data === null){ throw new Error('Folder Not Found'); } res.json({ message: 'Folder updated!' }); }).catch( (error) => { //Deal with all your errors here with your preferred error handle middleware / method res.status(500).json({ message: 'Some Error!' }); console.log(error); }); }); /* Move Folder */ router.post('/moveFolder', function(req, res, next) { FolderMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {path: req.body.path, parent: req.body.parent},{new: true}).then((data) =>{ if(data === null){ throw new Error('Folder Not Found'); } res.json({ message: 'Folder updated!' }); }).catch( (error) => { //Deal with all your errors here with your preferred error handle middleware / method res.status(500).json({ message: 'Some Error!' }); console.log(error); }); }); /* Move File */ router.post('/moveFile', function(req, res, next) { FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {path: req.body.path},{new: true}).then((data) =>{ if(data === null){ throw new Error('File Not Found'); } res.json({ message: 'File updated!' }); }).catch( (error) => { //Deal with all your errors here with your preferred error handle middleware / method res.status(500).json({ message: 'Some Error!' }); console.log(error); }); }); /* Rename FILE */ router.post('/renameFileMongo', function(req, res, next) { FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {name: req.body.name},{new: true}).then((data) =>{ if(data === null){ throw new Error('File Not Found'); } res.json({ message: 'File updated!' }); }).catch( (error) => { //Deal with all your errors here with your preferred error handle middleware / method res.status(500).json({ message: 'Some Error!' }); console.log(error); }); }); /* Get Current folder */ router.post('/getMainFolder', function(req, res) { FolderMongo.findOne({ path: req.body.path, owner: req.body.owner }, function(err, folder) { res.json(folder); }); }); /* Get tout les folders du mainFolder */ router.post('/getFolderList', function(req, res) { FolderMongo.find({ parent: req.body.mainPath, owner: req.body.owner }, function(err, folder) { res.json(folder); }); }); /* Get tout les folders du user */ router.post('/getFolderAppList', function(req, res) { FolderMongo.find({ owner: req.body.owner }, function(err, folder) { res.json(folder); }); }); /* Get tout les files du user */ router.post('/getFileAppList', function(req, res) { FileMongo.find({ owner: req.body.owner }, function(err, file) { res.json(file); }); }); /* Get tout les files du mainFolder */ router.post('/getFileList', function(req, res) { FileMongo.find({ path: req.body.mainPath, owner: req.body.owner }, function(err, files) { res.json(files); }); }); router.post('/getUserById', function(req, res) { User.findOne({ _id: req.body.id }, function (err, user) { res.json(user); }); }); router.post('/getFileById', function(req, res) { console.log('yaa' + req.body.id); FileMongo.find({ _id: req.body.id }, function (err, file) { res.json(file); }); }); /* Login */ router.post('/signin', function(req, res) { User.findOne({ username: req.body.username }, function(err, user) { if (err) throw err; if (!user) { res.status(401).send({success: false, msg: 'Authentication failed. User not found.'}); } else { // check if password matches user.comparePassword(req.body.password, function (err, isMatch) { if (isMatch && !err) { console.log('user logged : ' + JSON.stringify(user)); // if user is found and password is right create a token var token = jwt.sign(user.toJSON(), config.secret); // return the information including token as JSON res.json({success: true, token: 'JWT ' + token}); } else { res.status(401).send({success: false, msg: 'Authentication failed. Wrong password.'}); } }); } }); }); /* config multer dossier cible et nom du file : enregistrement du fichier dans le dossier public*/ const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './public/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }); /* Multer upload */ router.post('/upload' , multer({storage: storage, limits: {fileSize: 30000000000}}).array("public[]", 12) ,function(req,res,next){ res.send(req.files); }); /* Get utilisateur courant */ router.get('/getCurrentUser', passport.authenticate('jwt'), function(req, res) { var token = getToken(req.headers); if (token) { res.json(req.user); } else { return res.status(403).send({success: false, msg: 'Unauthorized.'}); } }); /* GET users listing. */ router.get('/', ensureAuthenticated, function(req, res, next) { res.render('user', { user: req.user }); }); function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/api/login'); } /* FACEBOOK ROUTER */ router.get('/facebook', passportFacebook.authenticate('facebook'), function(req, res) { console.log('facebook user : '+ req.user ); // Successful authentication, redirect home. res.json({user: req.user}); }); router.get('/facebook/callback', passportFacebook.authenticate('facebook'), function(req, res) { console.log('facebook user : '+ req.user ); JSON.stringify(req.user); var myUser = req.user.toString(); //res.json({user: myUser}); res.redirect('/main/'+req.user._id); // Successful authentication, redirect home. }); /* GOOGLE ROUTER */ router.get('/google', passportGoogle.authenticate('google', { scope: 'https://www.google.com/m8/feeds' })); router.get('/google/callback', passportGoogle.authenticate('google', { successRedirect : '/', failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }); router.get('/google', passport.authenticate('google', { scope: ['read_stream', 'publish_actions'] }) ); /* GITHUB ROUTER */ router.get('/github', passportGitHub.authenticate('github', { scope: [ 'user:email' ] })); router.get('/auth/github/callback', passportGitHub.authenticate('github', { successRedirect : '/', failureRedirect: '/login' }), function(req, res) { // Successful authentication, redirect home. res.redirect('/'); }); router.get('/github', passport.authenticate('github', { scope: ['read_stream', 'publish_actions'] }) ); module.exports = router;