Advertisement
Guest User

api.js

a guest
Jun 4th, 2018
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.88 KB | None | 0 0
  1. var mongoose = require('mongoose');
  2. var passport = require('passport');
  3. var config = require('../config/database');
  4. require('../config/passport')(passport);
  5. //require('../auth/facebook')(passport);
  6. var express = require('express');
  7. var jwt = require('jsonwebtoken');
  8. var router = express.Router();
  9. var User = require("../models/user");
  10. var FileMongo = require("../models/FileMongo");
  11. var FileSaveMongo = require("../models/FileSaveMongo");
  12. var ChunkFileSaveMongo = require("../models/ChunkFileSaveMongo");
  13. var FolderMongo = require("../models/FolderMongo");
  14. var Book = require("../models/book");
  15. var fs = require('fs');
  16. var multer = require('multer');
  17. //var upload = multer({ dest: './public/' });
  18. //var mongo = require('mongodb');
  19. var passportFacebook = require('../auth/facebook');
  20. var passportGoogle = require('../auth/google');
  21. var passportGitHub = require('../auth/github');
  22.  
  23. var path = require('path');
  24. var crypto = require('crypto');
  25. var Grid = require('gridfs-stream');
  26. var GridFsStorage = require('multer-gridfs-storage');
  27. var methodOverride = require('method-override');
  28. //var Grid = require('gridfs-stream');
  29. //var router = express.Router([options]);
  30. //var db = new mongo.Db('supfile', new mongo.Server("127.0.0.1", 27017));
  31.  
  32.  
  33. //var FileReader = require('filereader');
  34. //mongoose.connect('mongodb://localhost:27017/supfile');//, function (err, db) {
  35.  
  36.  
  37. //var conn = mongoose.connection;
  38.  
  39. //var mongoURI = 'mongodb://localhost:27017/supfile';
  40.  
  41. // db.open(function (err) {
  42. // if (err) return handleError(err);
  43.  
  44.  
  45. //var conn = mongoose.createConnection(config.database);
  46.  
  47.  
  48. // })
  49.  
  50.  
  51.  
  52. //mongoose.connect('mongodb://localhost:27017/supfile');
  53.  
  54.  
  55.  
  56.  
  57.  
  58. getStringExtention = function(monFile){
  59. return ( monFile.name.indexOf('.') > 0 ) ? '.' + monFile.name.split('.').pop().toLowerCase() : '';
  60. };
  61.  
  62. /* creation Token */
  63. getToken = function (headers) {
  64. if (headers && headers.authorization) {
  65. var parted = headers.authorization.split(' ');
  66. if (parted.length === 2) {
  67. return parted[1];
  68. } else {
  69. return null;
  70. }
  71. } else {
  72. return null;
  73. }
  74. };
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. /* GET home page. */
  83. router.get('/', function(req, res, next) {
  84. res.send('Express RESTful API');
  85. });
  86.  
  87.  
  88. router.post('/signup', function(req, res) {
  89.  
  90. if (!req.body.username || !req.body.password) {
  91. res.json({success: false, msg: 'Please pass username and password.'});
  92. } else {
  93. var newUser = new User({
  94. username: req.body.username,
  95. password: req.body.password
  96. });
  97. // save the user
  98. newUser.save(function(err) {
  99. if (err) {
  100. //mongoose.disconnect();
  101. return res.json({success: false, msg: 'Username already exists.'});
  102.  
  103. }
  104. //mongoose.disconnect();
  105. res.json({success: true, msg: 'Successful created new user.'});
  106. //mongoose.disconnect();
  107. });
  108. }
  109.  
  110. });
  111.  
  112. /* SAVE FILE */
  113. router.post('/uploadFileMongo', function(req, res, next) {
  114. //mongoose.connect(config.database);
  115. FileMongo.create(req.body, function (err, post) {
  116. if (err){
  117. //mongoose.disconnect();
  118. return next(err);
  119. }
  120. //mongoose.disconnect();
  121. res.json(post);
  122. });
  123.  
  124. });
  125.  
  126.  
  127.  
  128.  
  129. //////////////////////////
  130. router.post('/file', function(req, res){
  131. //mongoose.connect(config.database);
  132. console.log('teubbb : ');
  133. //var ObjectId = mongoose.Types.ObjectId;
  134. //var gege = ObjectId('5b1440847a35ae2974861db7');
  135. ChunkFileSaveMongo.find({}, function (err, tabb) {
  136. if(tabb!==undefined){
  137. //console.log('chunk.readAsDataURL().toString() : '+tabb[0]);
  138. console.log('chunk.readAsDataURL().toString() : '+tabb[0].files_id);
  139. var allProductsArray = tabb.sort({'n':1});
  140. console.log('oppppppeen 0'+allProductsArray[1].n);
  141. var allProductsArrayyy = tabb[0].files_id;
  142.  
  143. var tabChunkFile=[];
  144. var tabTemp;
  145. for (var i = 0; i < allProductsArray.length; i++) {
  146. //str = str + i;
  147. console.log('allProductsArray[i].index : ' + allProductsArray[i].n);
  148. if(allProductsArray[i].files_id === '5b15451859ce310c84c7e374'){
  149. console.log('allProductsArray[i].index : ');
  150. //console.log('allProductsArray[i].index : ' + i + ' allProductsArray[i].n :' + allProductsArray[i].n);
  151. //if(element.n === 1){
  152.  
  153. //}
  154. tabChunkFile.push(allProductsArray[i]) ;
  155.  
  156. }
  157.  
  158. // if(allProductsArray[i].files_id === '5b15451859ce310c84c7e374'){
  159. // console.log('allProductsArray[i].index : ' + i + ' allProductsArray[i].n :' + allProductsArray[i].n);
  160. // //if(element.n === 1){
  161. //
  162. // //}
  163. // if(allProductsArray[i].n === '1'){
  164. // console.log('cou');
  165. // tabTemp=allProductsArray[i].data;
  166. // //console.log('oppppppeen 0 : '+tabTemp[0]);
  167. // var fbuf = Buffer.from(tabTemp);
  168. // var base64 = fbuf.toString('base64');
  169. // //console.log(base64);
  170. // //mongoose.disconnect();
  171. // //console.log('coucou tabTemp' + '<img src="data:image/jpeg;base64,' + tabTemp + '">');
  172. //
  173. // res.json(base64);
  174. // }
  175. // }
  176. }
  177. tabChunkFile.sort(function (a, b) {
  178. return a.n - b.n;
  179. });
  180. //tabTemp.sort({'n':1});
  181.  
  182. for (var i = 0; i < tabChunkFile.length; i++) {
  183. console.log('allProductsArray[i].index : ' + i + ' allProductsArray[i].n :' + tabChunkFile[i].n);
  184. console.log('cou');
  185. //tabTemp.push(allProductsArray[i]);
  186. //console.log('oppppppeen 0 : '+tabTemp[0]);
  187. //var fbuf = Buffer.from([]);
  188. //var base64 = fbuf.toString('base64');
  189. //console.log(base64);
  190. //mongoose.disconnect();
  191. //console.log('coucou tabTemp' + '<img src="data:image/jpeg;base64,' + tabTemp + '">');
  192. //res.json(base64);
  193. }
  194.  
  195. var tabTemp='';
  196. tabChunkFile.forEach(function(element) {
  197. console.log('cou');
  198. tabTemp+=element.data;
  199. //console.log('oppppppeen 0 : '+tabTemp[0]);
  200.  
  201. });
  202.  
  203. var fbuf = Buffer.from(tabTemp);
  204. var base64 = fbuf.toString('base64');
  205. //console.log(base64);
  206. //mongoose.disconnect();
  207. //console.log('coucou tabTemp' + '<img src="data:image/jpeg;base64,' + tabTemp + '">');
  208.  
  209. res.json(base64);
  210.  
  211. allProductsArray.forEach(function(element) {
  212. //console.log(element.n);
  213.  
  214. // if(element.files_id === '5b15451859ce310c84c7e374'){
  215. // console.log('element.index : ' + element.index + ' element.n :' + element.n);
  216. // //if(element.n === 1){
  217. //
  218. // //}
  219. // if(element.n === '1'){
  220. // console.log('cou');
  221. // tabTemp=element.data;
  222. // //console.log('oppppppeen 0 : '+tabTemp[0]);
  223. // var fbuf = Buffer.from(tabTemp);
  224. // var base64 = fbuf.toString('base64');
  225. // //console.log(base64);
  226. // //mongoose.disconnect();
  227. // //console.log('coucou tabTemp' + '<img src="data:image/jpeg;base64,' + tabTemp + '">');
  228. //
  229. // res.json(base64);
  230. // }
  231. // }
  232. });
  233.  
  234. //res.json('');
  235.  
  236.  
  237.  
  238. }
  239.  
  240. });
  241. });
  242.  
  243.  
  244.  
  245. /* config multer dossier cible et nom du file */
  246. const storage = multer.diskStorage({
  247. destination: function (req, file, cb) {
  248. cb(null, './public/')
  249. },
  250. filename: function (req, file, cb) {
  251. cb(null, file.originalname)
  252. }
  253. });
  254.  
  255. // conn.once('open', ()=> {
  256. var gfs = Grid('mongodb://localhost:27017/supfile', mongoose.mongo);
  257.  
  258. // var storage = GridFsStorage({
  259. // url: 'mongodb://localhost:27017/supfile',
  260. // gfs: gfs,
  261. // filename: 'tata.jpg',
  262. // /** With gridfs we can store aditional meta-data along with the file */
  263. // // metadata: function(req, file, cb) {
  264. // // cb(null, { originalname: file.originalname });
  265. // // },
  266. // root: 'filemongos' //root name for collection to store files into
  267. // });
  268. // var upload = multer({storage: storage}).single('file');
  269.  
  270.  
  271.  
  272.  
  273. //////////
  274. /* Multer upload */
  275. router.post('/upload' , multer({storage: storage, limits: {fileSize: 30000000000}}).array("public[]", 12) ,function(req,res,next){
  276. res.send(req.files);
  277. });
  278. //////important
  279. // router.post('/uploadFileMongoGridFs', upload, function (req, res) {
  280. // console.log('req.file' + JSON.stringify({file: req.file}));
  281. // console.log('req.chunk' + req.file);
  282. // console.log('req.chunk' + req.file.originalname);
  283. // FileMongo.create(req.file, function (err, post) {
  284. // if (err) {
  285. // return next(err);
  286. // }
  287. // //res.json(post);
  288. // });
  289. // res.json({file: req.file});
  290. //
  291. //
  292. // });
  293. //
  294. // });
  295.  
  296. /* SAVE URL FILE */
  297. router.post('/saveURLFileMongo', function(req, res, next) {
  298. //mongoose.connect(config.database);
  299. FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {url: req.body.url},{new: true}).then((data) =>{
  300. if(data === null){
  301. throw new Error('File Not Found');
  302. }
  303. //mongoose.disconnect();
  304. res.json({ message: 'File updated!' });
  305. }).catch( (error) => {
  306. //Deal with all your errors here with your preferred error handle middleware / method
  307. res.status(500).json({ message: 'Some Error!' });
  308. console.log(error);
  309. //mongoose.disconnect();
  310. });
  311. });
  312.  
  313. /* SAVE FOLDER */
  314. router.post('/createFolder', function(req, res, next) {
  315. //mongoose.connect(config.database);
  316. FolderMongo.create(req.body, function (err, post) {
  317. if (err){
  318. //mongoose.disconnect();
  319. return next(err);
  320. }
  321. //mongoose.disconnect();
  322. res.json(post);
  323. });
  324. //mongoose.disconnect();
  325. });
  326.  
  327.  
  328.  
  329. /* DELETE FILE */
  330. router.post('/deleteFileMongo', function(req, res, next) {
  331. //mongoose.connect(config.database);
  332. console.log('nana : ' + JSON.stringify(req.body));
  333. FileMongo.remove({_id : req.body._id, name: req.body.name, owner: req.body.owner}, function (err, post) {
  334. if (err){
  335. console.log('nana err : ' + err);
  336. //mongoose.disconnect();
  337. return next(err);
  338. }
  339. //Delete file multer dans Public
  340. console.log('this.getStringExtention(req.body) : ' + getStringExtention(req.body));
  341. //fs.unlink('./public/' + req.body._id + getStringExtention(req.body));
  342. //mongoose.disconnect();
  343. res.json(post);
  344.  
  345. });
  346. //mongoose.disconnect();
  347. });
  348.  
  349. /* DELETE FOLDER */
  350. router.post('/deleteFolderMongo', function(req, res, next) {
  351. //mongoose.connect(config.database);
  352. FolderMongo.remove({_id : req.body._id, name: req.body.name, owner: req.body.owner}, function (err, post) {
  353. if (err){
  354. //mongoose.disconnect();
  355. return next(err);
  356. }
  357. //mongoose.disconnect();
  358. res.json(post);
  359.  
  360. });
  361. //mongoose.disconnect();
  362. });
  363.  
  364. /* Rename FOLDER */
  365. router.post('/renameFolderMongo', function(req, res, next) {
  366. //mongoose.connect(config.database);
  367. FolderMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {name: req.body.name},{new: true}).then((data) =>{
  368. if(data === null){
  369. throw new Error('Folder Not Found');
  370. }
  371. //mongoose.disconnect();
  372. res.json({ message: 'Folder updated!' });
  373. }).catch( (error) => {
  374. //Deal with all your errors here with your preferred error handle middleware / method
  375. res.status(500).json({ message: 'Some Error!' });
  376. console.log(error);
  377. //mongoose.disconnect();
  378. });
  379. //mongoose.disconnect();
  380. });
  381.  
  382. /* Move Folder */
  383. router.post('/moveFolder', function(req, res, next) {
  384. //mongoose.connect(config.database);
  385. FolderMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {path: req.body.path, parent: req.body.parent},{new: true}).then((data) =>{
  386. if(data === null){
  387. throw new Error('Folder Not Found');
  388. }
  389. //mongoose.disconnect();
  390. res.json({ message: 'Folder updated!' });
  391. }).catch( (error) => {
  392. //Deal with all your errors here with your preferred error handle middleware / method
  393. res.status(500).json({ message: 'Some Error!' });
  394. console.log(error);
  395. //mongoose.disconnect();
  396. });
  397. //mongoose.disconnect();
  398. });
  399.  
  400. /* Move File */
  401. router.post('/moveFile', function(req, res, next) {
  402. //mongoose.connect(config.database);
  403. FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {path: req.body.path},{new: true}).then((data) =>{
  404. if(data === null){
  405. throw new Error('File Not Found');
  406. }
  407. //mongoose.disconnect();
  408. res.json({ message: 'File updated!' });
  409. }).catch( (error) => {
  410. //Deal with all your errors here with your preferred error handle middleware / method
  411. res.status(500).json({ message: 'Some Error!' });
  412. console.log(error);
  413. //mongoose.disconnect();
  414. });
  415. //mongoose.disconnect();
  416. });
  417.  
  418.  
  419. /* Rename FILE */
  420. router.post('/renameFileMongo', function(req, res, next) {
  421. //mongoose.connect(config.database);
  422. FileMongo.findOneAndUpdate({_id : req.body._id, owner: req.body.owner}, {name: req.body.name},{new: true}).then((data) =>{
  423. if(data === null){
  424. throw new Error('File Not Found');
  425. }
  426. //mongoose.disconnect();
  427. res.json({ message: 'File updated!' });
  428. }).catch( (error) => {
  429. //Deal with all your errors here with your preferred error handle middleware / method
  430. res.status(500).json({ message: 'Some Error!' });
  431. console.log(error);
  432. //mongoose.disconnect();
  433. });
  434. //mongoose.disconnect();
  435. });
  436.  
  437. /* Get Current folder */
  438. router.post('/getMainFolder', function(req, res) {
  439. //mongoose.connect(config.database);
  440. FolderMongo.findOne({
  441. path: req.body.path,
  442. owner: req.body.owner
  443. }, function(err, folder) {
  444. //mongoose.disconnect();
  445. res.json(folder);
  446. });
  447. //mongoose.disconnect();
  448. });
  449.  
  450. /* Get tout les folders du mainFolder */
  451. router.post('/getFolderList', function(req, res) {
  452. //mongoose.connect(config.database);
  453. FolderMongo.find({
  454. parent: req.body.mainPath,
  455. owner: req.body.owner
  456. }, function(err, folder) {
  457. //mongoose.disconnect();
  458. res.json(folder);
  459.  
  460. });
  461. //mongoose.disconnect(config.database);
  462. });
  463.  
  464. /* Get tout les folders du user */
  465. router.post('/getFolderAppList', function(req, res) {
  466. //mongoose.connect(config.database);
  467. FolderMongo.find({
  468. owner: req.body.owner
  469. }, function(err, folder) {
  470. res.json(folder);
  471. });
  472. //mongoose.disconnect();
  473. });
  474.  
  475. /* Get tout les files du user */
  476. router.post('/getFileAppList', function(req, res) {
  477. //mongoose.connect(config.database);
  478. FileMongo.find({
  479. owner: req.body.owner
  480. }, function(err, file) {
  481. res.json(file);
  482. });
  483. //mongoose.disconnect();
  484. });
  485.  
  486. /* Get tout les files du mainFolder */
  487. router.post('/getFileList', function(req, res) {
  488. //mongoose.connect(config.database);
  489. FileMongo.find({
  490. path: req.body.mainPath,
  491. owner: req.body.owner
  492. }, function(err, files) {
  493. res.json(files);
  494. });
  495. //mongoose.disconnect();
  496. });
  497.  
  498. /* Login */
  499. router.post('/signin', function(req, res) {
  500. //mongoose.connect(config.database);
  501. User.findOne({
  502. username: req.body.username
  503. }, function(err, user) {
  504. if (err) throw err;
  505.  
  506. if (!user) {
  507. res.status(401).send({success: false, msg: 'Authentication failed. User not found.'});
  508. } else {
  509. // check if password matches
  510. user.comparePassword(req.body.password, function (err, isMatch) {
  511. if (isMatch && !err) {
  512. console.log('req.user.username log : ' + JSON.stringify(user));
  513. // if user is found and password is right create a token
  514. var token = jwt.sign(user.toJSON(), config.secret);
  515. // return the information including token as JSON
  516. res.json({success: true, token: 'JWT ' + token});
  517. } else {
  518. res.status(401).send({success: false, msg: 'Authentication failed. Wrong password.'});
  519. }
  520. });
  521. }
  522. });
  523. //mongoose.disconnect();
  524. });
  525.  
  526.  
  527.  
  528. /* Get utilisateur courant */
  529. router.get('/getCurrentUser', passport.authenticate('jwt', { session: false}), function(req, res) {
  530. //mongoose.connect(config.database);
  531. var token = getToken(req.headers);
  532.  
  533. if (token) {
  534. res.json(req.user);
  535. } else {
  536. return res.status(403).send({success: false, msg: 'Unauthorized.'});
  537. }
  538. //mongoose.disconnect();
  539. });
  540.  
  541.  
  542.  
  543. ////////////
  544.  
  545.  
  546.  
  547. /* GET users listing. */
  548. router.get('/', ensureAuthenticated, function(req, res, next) {
  549. //mongoose.connect(config.database);
  550. res.render('user', { user: req.user });
  551. //mongoose.disconnect();
  552. });
  553.  
  554. function ensureAuthenticated(req, res, next) {
  555. if (req.isAuthenticated()) { return next(); }
  556. res.redirect('/api/login');
  557. }
  558.  
  559. /* FACEBOOK ROUTER */
  560. router.get('/facebook', passportFacebook.authenticate('facebook'));
  561.  
  562.  
  563. ///////////////////
  564. router.get('/facebook/callback',
  565. passportFacebook.authenticate('facebook', { failureRedirect: 'api/' }),
  566. function(req, res) {
  567. console.log('faceeeeboookk !!');
  568. // Successful authentication, redirect home.
  569. res.redirect('/api/main');
  570. });
  571. // router.get('/facebook/callback/:id', passport.authenticate('facebook'), function(req, res, err, user, info){
  572. // console.log('faceeeeboookk !!');
  573. //
  574. // //console.log('faceeeeboookk !!' + JSON.stringify(req));
  575. // //console.log('faceeeeboookk !!' + JSON.stringify(res));
  576. // //console.log('faceeeeboookk !!' + next);
  577. //
  578. // // console.log('yaaaaaaTTTTa ' + JSON.stringify(user));
  579. // // if(err){
  580. // // console.log('errrrooor : ' + err);
  581. // // //if(res){
  582. // // //res.json({ error: err });
  583. // // return next(err);
  584. // // //}
  585. // //
  586. // // }
  587. // // console.log('req.user.username log : ' + err + info);
  588. // // // Successful authentication, redirect home.
  589. // // if(user){
  590. // // User.findOne({username: user.profile.displayName},function(err,result){
  591. // // if(!result){
  592. // // var newUser = new User({username: user.profile.displayName, id: user.profile.id, password: 'couille'});
  593. // // // save the user
  594. // // console.log('rererer : '+ JSON.stringify(newUser));
  595. // // newUser.save(function(err) {
  596. // // if (err) {
  597. // // console.log('err already exists.' + err);
  598. // // }
  599. // // console.log('Successful created new user.');
  600. // // return req.res.redirect('/main');
  601. // //
  602. // // });
  603. // // }else{
  604. // // return next(err);
  605. // // }
  606. // // });
  607. // // }else{
  608. // // return req.res.redirect('/login');
  609. // // }
  610. //
  611. //
  612. //
  613. // });
  614.  
  615.  
  616.  
  617. // router.get('/facebook',
  618. // passportFacebook.authenticate('facebook', { scope: ['read_stream', 'publish_actions'] })
  619. // );
  620.  
  621. /* GOOGLE ROUTER */
  622. router.get('/google', passportGoogle.authenticate('google', { scope: 'https://www.google.com/m8/feeds' }));
  623.  
  624. router.get('/google/callback', passportGoogle.authenticate('google', { successRedirect : '/', failureRedirect: '/login' }), function(req, res) {
  625. res.redirect('/');
  626. });
  627. router.get('/google',
  628. passport.authenticate('google', { scope: ['read_stream', 'publish_actions'] })
  629. );
  630.  
  631. /* GITHUB ROUTER */
  632. router.get('/github', passportGitHub.authenticate('github', { scope: [ 'user:email' ] }));
  633.  
  634. router.get('/auth/github/callback', passportGitHub.authenticate('github', { successRedirect : '/', failureRedirect: '/login' }), function(req, res) {
  635. // Successful authentication, redirect home.
  636. res.redirect('/');
  637. });
  638. router.get('/github',
  639. passport.authenticate('github', { scope: ['read_stream', 'publish_actions'] })
  640. );
  641.  
  642.  
  643.  
  644.  
  645.  
  646. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement