var fs = require('fs') var fileUpload = require('express-fileupload') module.exports = function(s,config,lang,app,io){ if(!config.facesFolder)config.facesFolder = s.mainDirectory + '/plugins/face/faces/' config.facesFolder = s.checkCorrectPathEnding(config.facesFolder) if(!fs.existsSync(config.facesFolder)){ fs.mkdirSync(config.facesFolder) } const sendDataToConnectedSuperUsers = (data) => { return s.tx(data,'$') } const getFaceFolderNames = (callback) => { fs.readdir(config.facesFolder,(err,folders) => { var faces = [] folders.forEach((folder)=>{ var stats = fs.statSync(config.facesFolder + folder) if(stats.isDirectory()){ faces.push(folder) } }) callback(faces) }) } const getFaceImages = (callback) => { fs.readdir(config.facesFolder,(err,folders)=>{ var faces = {} folders.forEach((name)=>{ var stats = fs.statSync(config.facesFolder + name) if(stats.isDirectory()){ faces[name] = [] var images try{ images = fs.readdirSync(config.facesFolder + name) }catch(err){ images = [] } images.forEach((image)=>{ faces[name].push(image) }) } }) callback(faces) }) } app.get(config.webPaths.superApiPrefix+':auth/faceManager/names', function (req,res){ s.superAuth(req.params,function(resp){ getFaceFolderNames((faces)=>{ res.setHeader('Content-Type', 'application/json') res.end(s.prettyPrint({ ok: true, faces: faces })) }) },res,req) }) app.get(config.webPaths.superApiPrefix+':auth/faceManager/images', function (req,res){ s.superAuth(req.params,function(resp){ getFaceImages((faces)=>{ res.setHeader('Content-Type', 'application/json') res.end(s.prettyPrint({ ok: true, faces: faces })) }) },res,req) }) app.get(config.webPaths.superApiPrefix+':auth/faceManager/image/:name/:image', function (req,res){ s.superAuth(req.params,function(resp){ const imagePath = config.facesFolder + req.params.name + '/' + req.params.image if(fs.existsSync(imagePath)){ res.setHeader('Content-Type', 'image/jpeg') fs.createReadStream(imagePath).pipe(res) }else{ res.setHeader('Content-Type', 'application/json') res.end(s.prettyPrint({ ok: false, msg: lang['File Not Found'] })) } },res,req) }) app.get(config.webPaths.superApiPrefix+':auth/faceManager/image/:name/:image/delete', function (req,res){ s.superAuth(req.params,function(resp){ res.setHeader('Content-Type', 'application/json') const imagePath = config.facesFolder + req.params.name + '/' + req.params.image if(fs.existsSync(imagePath)){ fs.unlink(imagePath,() => { s.file('delete',imagePath) sendDataToConnectedSuperUsers({ f:'faceManagerImageDeleted', faceName: req.params.name, fileName: req.params.image, }) getFaceFolderNames((faces) => { s.sendToAllDetectors({ f: 'recompileFaceDescriptors', faces: faces }) }) }) } res.end(s.prettyPrint({ ok: true, })) },res,req) }) app.get(config.webPaths.superApiPrefix+':auth/faceManager/image/:name/:image/move/:newName/:newImage', function (req,res){ s.superAuth(req.params,function(resp){ res.setHeader('Content-Type', 'application/json') const oldImagePath = config.facesFolder + req.params.name + '/' + req.params.image const newImagePath = config.facesFolder + req.params.newName + '/' + req.params.newImage const fileExists = fs.existsSync(oldImagePath) if(fileExists){ fs.readFile(oldImagePath,(err,data) => { fs.writeFile(newImagePath,data,() => { fs.unlink(oldImagePath,() => { s.file('delete',oldImagePath) if(req.query.websocketResponse){ sendDataToConnectedSuperUsers({ f:'faceManagerImageDeleted', faceName: req.params.name, fileName: req.params.image, }) var fileLink = config.webPaths.superApiPrefix + req.params.auth + `/faceManager/image/${req.params.newName}/${req.params.newImage}` sendDataToConnectedSuperUsers({ f:'faceManagerImageUploaded', faceName: req.params.newName, fileName: req.params.newImage, url: fileLink }) } getFaceFolderNames((faces) => { s.sendToAllDetectors({ f: 'recompileFaceDescriptors', faces: faces }) }) }) }) }) } res.end(s.prettyPrint({ ok: fileExists, })) },res,req) }) app.post(config.webPaths.superApiPrefix+':auth/faceManager/image/:name', fileUpload(), function (req,res){ s.superAuth(req.params,function(resp){ res.setHeader('Content-Type', 'application/json') var fileKeys = Object.keys(req.files || {}) if(fileKeys.length == 0){ return res.status(400).send('No files were uploaded.') } var filesUploaded = [] var checkFile = (file) => { if(file.name.indexOf('.jpg') > -1 || file.name.indexOf('.jpeg') > -1){ filesUploaded.push(file.name) if(!fs.existsSync(config.facesFolder + req.params.name)){ fs.mkdirSync(config.facesFolder + req.params.name) } file.mv(config.facesFolder + req.params.name + '/' + file.name, function(err) { var fileLink = config.webPaths.superApiPrefix + req.params.auth + `/faceManager/image/${req.params.name}/${file.name}` sendDataToConnectedSuperUsers({ f:'faceManagerImageUploaded', faceName: req.params.name, fileName: file.name, url: fileLink }) }) } } fileKeys.forEach(function(key){ var file = req.files[key] try{ if(file instanceof Array){ file.forEach(function(fileOfFile){ checkFile(fileOfFile) }) }else{ checkFile(file) } }catch(err){ console.log(file) console.log(err) } }) var response = { ok: true, filesUploaded: filesUploaded } res.send(s.prettyPrint(response)) getFaceFolderNames((faces) => { s.sendToAllDetectors({ f: 'recompileFaceDescriptors', faces: faces }) }) },res,req) }) }