203 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
|   $recaptcha_key = trim(file_get_contents("../recaptcha.key"));
 | |
|   $ch = curl_init();
 | |
|   curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_key."&response=".$_POST["g-recaptcha-response"]);
 | |
|   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 | |
|   $response = curl_exec($ch);
 | |
|   curl_close($ch);
 | |
|   $response = json_decode($response);
 | |
| 
 | |
|   if($response->success) {
 | |
|     // OK
 | |
|   } else {
 | |
|     echo "reCAPTHCA verification failed, please try again.";
 | |
|     exit(0);
 | |
|   }
 | |
| 
 | |
|   error_reporting(E_ALL);
 | |
|   ini_set("display_errors", "On");
 | |
|   $uploaded = [];
 | |
|   $paths = [];
 | |
| 
 | |
|   function randnumb($length = 3) {
 | |
|     return substr(str_shuffle(str_repeat($x="0123456789", ceil($length/strlen($x)) )),1,$length);
 | |
|   }
 | |
| 
 | |
|   $ok = true;
 | |
|   $num_images = 1;
 | |
|   $images = [];
 | |
| 
 | |
|   for ($i = 1; $i <= 4; $i++) {
 | |
|     $error = $_FILES["image_" . $i]['error'];
 | |
|     if($error == UPLOAD_ERR_OK) {
 | |
|       array_push($images, $_FILES["image_" . $i]);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if(count($images) == 0) {
 | |
|     echo "No image was provided.";
 | |
|     $ok = false;
 | |
|   }
 | |
| 
 | |
|   if(count($images) > 4) {
 | |
|     echo "Too many images were provided.";
 | |
|     $ok = false;
 | |
|   }
 | |
| 
 | |
|   for ($i = 0; $i < count($images); $i++) {
 | |
|     if($images[$i]["size"] > 9999999) {
 | |
|       echo "File is too large.";
 | |
|       $ok = false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if($ok) {
 | |
|     $fstring = "";
 | |
|     $start = true;
 | |
| 
 | |
|     for ($i = 0; $i < count($images); $i++) {
 | |
|       $fname = basename($images[$i]["name"]);
 | |
|       $ext = substr($fname, strrpos($fname, '.') + 1);
 | |
|       $fname2 = time() . "_" . randnumb() . "_" . $i . "." . $ext;
 | |
|       $target = "uploads/" . $fname2;
 | |
|       global $uploaded;
 | |
| 
 | |
|       if(move_uploaded_file($images[$i]["tmp_name"], $target)) {
 | |
|         array_push($uploaded, $target);
 | |
|         $fstring = trim($fstring . " " . $target);
 | |
|       } else {
 | |
|         echo "There was an error uploading the image(s).";
 | |
|         $start = false;
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if($start) {
 | |
|       process($fstring);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function process($filestring) {
 | |
|     $modes = [];
 | |
|     $num_effects = 8;
 | |
|     $delay = 0.25;
 | |
| 
 | |
|     for ($i = 1; $i <= $num_effects; $i++) {
 | |
|       if(isset($_POST["effect_" . $i])) {
 | |
|         array_push($modes, $i);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if(count($modes) == 0) {
 | |
|       echo "No effects selected.";
 | |
|       exit(0);
 | |
|     }
 | |
| 
 | |
|     $modestring = implode(",", $modes);
 | |
| 
 | |
|     if(isset($_POST["delay"])) {
 | |
|       $delay = $_POST["delay"];
 | |
|     }
 | |
| 
 | |
|     $date1 = microtime(true);
 | |
| 
 | |
|     try {
 | |
|       $cmd = "rust/target/release/mutant " . $modestring . " " . $delay . " " . $filestring;
 | |
|     } catch (Exception $e) {
 | |
|       cleanup();
 | |
|       exit(0);
 | |
|     }
 | |
| 
 | |
|     global $paths;
 | |
|     $paths = explode(" ", exec($cmd));
 | |
|     $date2 = microtime(true);
 | |
| 
 | |
|     $style = "body, html {
 | |
|       background-color: black;
 | |
|       color: white;
 | |
|       font-family: sans-serif;
 | |
|       font-size: 18px;
 | |
|     } 
 | |
|       
 | |
|     .item {
 | |
|       display: inline-block;
 | |
|       padding: 20px;
 | |
|     } 
 | |
|       
 | |
|     .title {
 | |
|       padding-bottom: 5px;
 | |
|       display: block;
 | |
|     }
 | |
|       
 | |
|     .info {
 | |
|       margin-left: 20px;
 | |
|       margin-right: 20px;
 | |
|       margin-top: 20px;
 | |
|       margin-bottom: 15px;
 | |
|       padding: 5px;
 | |
|       background-color: #32343d
 | |
|     }";
 | |
| 
 | |
|     $topheader = "<title>Mutant Result</title>
 | |
|     <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
 | |
|     <link rel='shortcut icon' href='guy.png?v=1' type='image/x-icon'>";
 | |
| 
 | |
|     $diff = round(($date2 - $date1), 2);
 | |
|     $seconds = "seconds";
 | |
| 
 | |
|     if($diff == 1) {
 | |
|       $seconds = "second";
 | |
|     }
 | |
| 
 | |
|     echo "<head>" . $topheader . "<style>" . $style . "</style></head>";
 | |
| 
 | |
|     $effects = "effects";
 | |
| 
 | |
|     if(count($modes) == 1) {
 | |
|       $effects = "effect";
 | |
|     }
 | |
| 
 | |
|     $imgs = "The images";
 | |
| 
 | |
|     if(count($modes) == 1) {
 | |
|       $imgs = "The image";
 | |
|     }
 | |
| 
 | |
|     echo "<div class='info'>" . count($modes) . " " . $effects . " processed in " . $diff . " " . $seconds . "</div>";
 | |
| 
 | |
|     $effect_name_1 = "Glitch";
 | |
|     $effect_name_2 = "Wave";
 | |
|     $effect_name_3 = "Mirror";
 | |
|     $effect_name_4 = "Static";
 | |
|     $effect_name_5 = "Glow";
 | |
|     $effect_name_6 = "Glass";
 | |
|     $effect_name_7 = "Color";
 | |
|     $effect_name_8 = "Chalk";
 | |
| 
 | |
|     try {
 | |
|       for ($i = 0; $i < count($modes); $i++) {
 | |
|         echo "<div class='item'><div class='title'>" . ${"effect_name_" . $modes[$i]} . " | Size: " . round(filesize($paths[$i]) / 1024 / 1024, 1) . " MiB</div>";
 | |
|         $data = file_get_contents($paths[$i]);
 | |
|         echo "<img class='image' src='data:image/gif;base64," . base64_encode($data) . "'></div>";
 | |
|       }
 | |
|     } catch (Exception $e) {
 | |
|       cleanup();
 | |
|       exit(0);
 | |
|     }
 | |
| 
 | |
|     cleanup();
 | |
|   }
 | |
| 
 | |
|   function cleanup() {
 | |
|     global $uploaded;
 | |
|     global $paths;
 | |
| 
 | |
|     for ($i = 0; $i < count($paths); $i++) {
 | |
|       unlink($paths[$i]);
 | |
|     }
 | |
| 
 | |
|     for ($i = 0; $i < count($uploaded); $i++) {
 | |
|       unlink($uploaded[$i]);
 | |
|     }
 | |
|   }
 | |
| ?>
 | 
