added code to start fawkes and capture output (not yet finished)
This commit is contained in:
		
							parent
							
								
									af72bcb51f
								
							
						
					
					
						commit
						48fe04c4a9
					
				@ -59,8 +59,11 @@
 | 
			
		||||
				<tbody>
 | 
			
		||||
				</tbody>
 | 
			
		||||
			</table>
 | 
			
		||||
			
 | 
			
		||||
			<p id="text-no-images" style="text-align: center;">You haven't uploaded any images yet.</p>
 | 
			
		||||
 | 
			
		||||
			<button class="button button-primary" id="button-start"><i class="fas fa-check"></i>   Start Fawkes</button>
 | 
			
		||||
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="footer">
 | 
			
		||||
@ -85,7 +88,11 @@ document.getElementById("button-upload").addEventListener("click", function(){
 | 
			
		||||
 | 
			
		||||
		// Add file to files list
 | 
			
		||||
		var id = Date.now();
 | 
			
		||||
		files[id] = file;
 | 
			
		||||
		files[id] = {
 | 
			
		||||
			file: file,
 | 
			
		||||
			uploading: true,
 | 
			
		||||
			error: false
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		// Add file to table
 | 
			
		||||
		var table = document.getElementById("table-images").getElementsByTagName("tbody")[0];
 | 
			
		||||
@ -109,6 +116,8 @@ document.getElementById("button-upload").addEventListener("click", function(){
 | 
			
		||||
 | 
			
		||||
socket.on("FILE_ERROR", function(data){
 | 
			
		||||
	// When error while uploading
 | 
			
		||||
	files[data.name].uploading = false;
 | 
			
		||||
	files[data.name].error = true;
 | 
			
		||||
	document.getElementById("status-"+data.name).innerHTML = "<i class='fas fa-exclamation-triangle'></i>   Upload Error";
 | 
			
		||||
	document.getElementById("status-"+data.name).title = data.error;
 | 
			
		||||
});
 | 
			
		||||
@ -117,7 +126,7 @@ socket.on("FILE_ACK", function(data){
 | 
			
		||||
	// When can send next file segment
 | 
			
		||||
	var file = files[data.name];
 | 
			
		||||
	var offset = data.nextSegment * 100000;
 | 
			
		||||
	var fileSegment = file.slice(offset, Math.min(offset + 100000, file.size));
 | 
			
		||||
	var fileSegment = file.file.slice(offset, Math.min(offset + 100000, file.file.size));
 | 
			
		||||
	var fileReader = new FileReader();
 | 
			
		||||
	fileReader.onload = function(event){
 | 
			
		||||
		socket.emit("FILE_DATA", {name:data.name, data:event.target.result, segment:data.nextSegment});
 | 
			
		||||
@ -130,9 +139,55 @@ socket.on("FILE_ACK", function(data){
 | 
			
		||||
 | 
			
		||||
socket.on("FILE_DONE", function(data){
 | 
			
		||||
	// File upload done
 | 
			
		||||
	files[data.name].uploading = false;
 | 
			
		||||
	document.getElementById("status-"+data.name).innerHTML = "<i class='fas fa-check'></i>   Upload Complete";
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
document.getElementById("button-start").addEventListener("click", function(){
 | 
			
		||||
	// When start button clicked
 | 
			
		||||
 | 
			
		||||
	// Check if all files uploaded
 | 
			
		||||
	var num = 0;
 | 
			
		||||
	for(let id in files){
 | 
			
		||||
		if(files[id].uploading){
 | 
			
		||||
			alert("Not all files have been uploaded!");
 | 
			
		||||
			return;
 | 
			
		||||
		}else if(!files[id].error){
 | 
			
		||||
			num++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(num == 0){
 | 
			
		||||
		alert("You haven't uploaded any files yet!");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Disable button
 | 
			
		||||
	document.getElementById("button-start").style.display = "none";
 | 
			
		||||
 | 
			
		||||
	// Send server request to start Fawkes
 | 
			
		||||
	socket.emit("FAWKES_START");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
socket.on("FAWKES_STARTED", function(){
 | 
			
		||||
	// Update all states
 | 
			
		||||
	for(let id in files){
 | 
			
		||||
		if(!files[id].uploading && !files[id].error){
 | 
			
		||||
			document.getElementById("status-"+id).innerHTML = "<i class='fas fa-hourglass-half'></i>   In Queue";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
socket.on("FAWKES_STATE", function(data){
 | 
			
		||||
	// Update state
 | 
			
		||||
	if(data.done){
 | 
			
		||||
		document.getElementById("status-"+data.name).innerHTML = "<i class='fas fa-check'></i>   Processing Complete";
 | 
			
		||||
	}else if(data.numFaces == 0){
 | 
			
		||||
		document.getElementById("status-"+data.name).innerHTML = "<i class='fas fa-check'></i>   No Faces Detected";
 | 
			
		||||
	}else{
 | 
			
		||||
		document.getElementById("status-"+data.name).innerHTML = "<i class='fas fa-spinner fa-pulse'></i>   Processing Faces ("+data.face+"/"+data.numFaces+")";
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								main.js
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								main.js
									
									
									
									
									
								
							@ -23,12 +23,14 @@ const url = require("url");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const util = require("util");
 | 
			
		||||
const crypto = require("crypto");
 | 
			
		||||
const spawn = require("child_process").spawn;
 | 
			
		||||
 | 
			
		||||
// Vars
 | 
			
		||||
const hostname = "192.168.0.128"; // Enter your local IP address here
 | 
			
		||||
const port = 8001; // Enter a port number here
 | 
			
		||||
 | 
			
		||||
var files = {};
 | 
			
		||||
var lastImageId;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Create HTTP server
 | 
			
		||||
@ -159,6 +161,56 @@ io.on("connection", (socket) => {
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	// Fawkes start
 | 
			
		||||
	socket.on("FAWKES_START", () => {
 | 
			
		||||
		// Start binary
 | 
			
		||||
		var process = spawn("fawkes/protection", ["-d", "fawkes/files/"+userId, "--mode", "low"]);
 | 
			
		||||
 | 
			
		||||
		// Add listeners
 | 
			
		||||
		process.stdout.setEncoding("utf8");
 | 
			
		||||
		process.stdout.on("data", function(data){
 | 
			
		||||
			// Received output from process
 | 
			
		||||
			console.log("fawkes stdout: "+data);
 | 
			
		||||
 | 
			
		||||
			// Parse output
 | 
			
		||||
			data = data.replace("\n", " ");
 | 
			
		||||
			var splices = data.split(" ");
 | 
			
		||||
			if(data.startsWith("Find ")){
 | 
			
		||||
				var numFaces = splices[1];
 | 
			
		||||
				var imageId = splices[4];
 | 
			
		||||
				console.log("fawkes found "+numFaces+" faces in image "+imageId);
 | 
			
		||||
 | 
			
		||||
				// Update file info
 | 
			
		||||
				files[userId+imageId].numFaces = numFaces;
 | 
			
		||||
				lastImageId = imageId;
 | 
			
		||||
 | 
			
		||||
				// Update client states
 | 
			
		||||
				socket.emit("FAWKES_STATE", {name:imageId, face:1, numFaces:numFaces});
 | 
			
		||||
 | 
			
		||||
			}else if(splices[0] == "processing"){
 | 
			
		||||
				var face = splices[2];
 | 
			
		||||
				console.log("fawkes processing face "+face);
 | 
			
		||||
 | 
			
		||||
				// Update client states
 | 
			
		||||
				socket.emit("FAWKES_STATE", {name:lastImageId, face:face, numFaces:files[lastImageId].numFaces});
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		});
 | 
			
		||||
		process.stderr.setEncoding("utf8");
 | 
			
		||||
		process.stderr.on("data", function(data){
 | 
			
		||||
			// Received output from process
 | 
			
		||||
			console.log("fawkes stderr: "+data);
 | 
			
		||||
		});
 | 
			
		||||
		process.on("close", function(code){
 | 
			
		||||
			// Fawkes exited
 | 
			
		||||
			console.log("Fawkes exited with code "+code);
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// Update file states
 | 
			
		||||
		socket.emit("FAWKES_STARTED");
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user