diff --git a/XUP-File-Uploader b/XUP-File-Uploader new file mode 160000 index 0000000..73ddbfc --- /dev/null +++ b/XUP-File-Uploader @@ -0,0 +1 @@ +Subproject commit 73ddbfca24ef94d2ba4669072615202bf58ba190 diff --git a/file.php b/file.php index 559a5ad..6853fc9 100644 --- a/file.php +++ b/file.php @@ -4,29 +4,6 @@ require_once(__DIR__.DIRECTORY_SEPARATOR."src".DIRECTORY_SEPARATOR."XUP".DIRECTORY_SEPARATOR."adapters".DIRECTORY_SEPARATOR."dropbox.php"); require_once(__DIR__.DIRECTORY_SEPARATOR."src".DIRECTORY_SEPARATOR."XUP".DIRECTORY_SEPARATOR."adapters".DIRECTORY_SEPARATOR."amazonwebservices.php"); -use XUP\Uploader\Main; -use XUP\Uploader\Drive; -use XUP\Uploader\Dropbox; -use XUP\Uploader\AmazonWebServices; -$output = array(); -$services = array("Drive","Dropbox","AmazonWebServices"); -$action = $_POST["action"]; -foreach ($services as $service) { - $class = "XUP\Uploader\\".$service; - $adapter = new $class(); - $output[$service] = $action($adapter,$_POST); -} -exit(json_encode($output)); - -function upload($adapter,$post) { - $params = json_encode(array("formid" => injection($post["formid"]),"folder"=>injection($post["folder"]),"qid" => injection($post["qid"]), "key" => $post["key"], "file" => injection($post["file"]),"folderKey" => injection($post["folderKey"]))); - return $adapter->upload($params); -} -function deleteFile($adapter,$post) { - $params = json_encode(array("formid" => injection($post["formid"]),"qid" => injection($post["qid"]),"remove" => $post["remove"],"aws" => $post["aws"])); - return $adapter->deleteFile($params); -} - function injection($str) { $bad = array( '', @@ -66,3 +43,170 @@ function injection($str) { while ($old !== $str); return $str; } + +if($_POST["action"] == "save"){ + function fileNameExist($path,$filename){ + while(file_exists($path.DIRECTORY_SEPARATOR.$filename) != false) { + $filename = "1_".$filename; + } + return $filename; + } + + function type($str){ + $neverAllow = array( + 'php', + 'pl', + 'cgi', + 'rb', + 'asp', + 'aspx', + 'exe', + 'scr', + 'dll', + 'msi', + 'vbs', + 'bat', + 'com', + 'pif', + 'cmd', + 'vxd', + 'cpl' + ); + foreach ($neverAllow as $fft){ + if(stripos($str,$fft) !== FALSE) + { + return false; + } + } + return true; + } + function mime($str){ + $neverAllow = array( + "application/octet-stream", + "application/javascript", + "text/javascript" + ); + foreach ($neverAllow as $fmt){ + if(stripos($fmt, $str)) + { + return false; + } + else + { + return true; + } + } + } + function getFolder($formid,$key){ + $file = fopen("/tmp/$formid/$key.txt","r"); + $date = fgets($file); + fclose($file); + return $date; + } + function saveFolder($formid,$key,$date){ + $file = fopen("/tmp/$formid/$key.txt","wr") or die ("Unable to open file"); + fwrite($file,$date."-".$key) or die ("Unable to write file!"); + fclose($file); + return true; + } + function save($fileTmpName,$filePath,$fileName,$folder){ + if(move_uploaded_file($fileTmpName, $filePath. DIRECTORY_SEPARATOR .$fileName)){ + if(mime($filePath. DIRECTORY_SEPARATOR .$fileName.DIRECTORY_SEPARATOR.$fileName) != true) + { + exit(json_encode(array("succes"=>false,"error"=>"mime_content_type($fileName)"))); + } + chmod($filePath. DIRECTORY_SEPARATOR .$fileName, 0776); + header("HTTP/1.1 200"); + exit(json_encode(array("succes"=>true,"filename" => $fileName,"folder" => $folder,"error"=>null))); + } + else{ + var_dump($fileTmpName . " " . $fileName . " ".$filePath); + header("HTTP/1.1 500"); + exit(json_encode(array("succes"=>false,"error"=>"Internal Server Error!"))); + } + } + $formid = injection($_POST["formid"]); + $key = injection($_POST["filekey"]); + $folder = null; + if(realpath("/tmp/$formid") !== true){ + if(file_exists("/tmp/$formid" !== true)){ + $oldumask = umask(0);//kalkacak + mkdir("/tmp/$formid",0777,true);//644 + umask($oldumask);//kalkacak + } + } + if(file_exists(DIRECTORY_SEPARATOR."tmp".DIRECTORY_SEPARATOR."$formid".DIRECTORY_SEPARATOR."$key.txt")){ + $folder = getFolder($formid,$key); + } + else{ + $folder = date("h-ia d-m-Y"); + saveFolder($formid,$key,$folder); + $folder = $folder."-".$key; + } + $qid = injection($_POST["qid"]); + $path = DIRECTORY_SEPARATOR . "tmp"; + $file_path = implode(DIRECTORY_SEPARATOR, array($path,$formid,$folder,"questionid".$qid)); + if(realpath($file_path) !== true){ + if(file_exists($file_path) !== true){ + $oldumask = umask(0);//kalkacak + mkdir($file_path,0777,true);//644 + umask($oldumask);//kalkacak + } + } + foreach ($_FILES as $key => $value) { + $file_name = injection($_FILES[$key]["name"]); + $array = explode('.', $file_name); + $extension = end($array); + if(type($extension) != true){ + exit(json_encode(array("succes"=>false,"error"=>"type"))); + } + + $chars = range("a","z"); + $numbers= range("0","9"); + foreach ($chars as $char){ + if(stripos($file_name, $char)){ + break; + } + else{ + foreach ($numbers as $number) { + if(stripos($file_name, $number)){ + $tmp = explode(".", $file_name); + $extension = ".".end($tmp); + $file_name = $formid.$extension; + } + } + } + } + if(file_exists($file_path.DIRECTORY_SEPARATOR.$file_name)){ + $newFileName = fileNameExist($file_path,$file_name); + save($_FILES[$key]["tmp_name"],$file_path,$newFileName,$folder); + } + else{ + save($_FILES[$key]["tmp_name"],$file_path,$file_name,$folder); + } + } + +} + +use XUP\Uploader\Main; +use XUP\Uploader\Drive; +use XUP\Uploader\Dropbox; +use XUP\Uploader\AmazonWebServices; +$output = array(); +$services = array("Drive","Dropbox","AmazonWebServices"); +$action = $_POST["action"]; +foreach ($services as $service) { + $class = "XUP\Uploader\\".$service; + $adapter = new $class(); + $output[$service] = $action($adapter,$_POST); +} +exit(json_encode($output)); + +function upload($adapter,$post) { + $params = json_encode(array("formid" => injection($post["formid"]),"folder"=>injection($post["folder"]),"qid" => injection($post["qid"]), "key" => $post["key"], "file" => injection($post["file"]),"folderKey" => injection($post["folderKey"]))); + return $adapter->upload($params); +} +function deleteFile($adapter,$post) { + $params = json_encode(array("formid" => injection($post["formid"]),"qid" => injection($post["qid"]),"remove" => $post["remove"],"aws" => $post["aws"])); + return $adapter->deleteFile($params); +} diff --git a/gearman/workers/amazonWorker.php b/gearman/workers/amazonWorker.php index 0d4a55c..28deba0 100644 --- a/gearman/workers/amazonWorker.php +++ b/gearman/workers/amazonWorker.php @@ -14,6 +14,14 @@ function toprakAwsUpload($job) { try{ $params = (array)json_decode($job->workload()); + var_dump($params); + $params["folderKey"] = "isAbsolutelyNotNull"; + foreach ($params as $param => $value) { + if(empty($value) || $value == "null" || $value == "{}"){ + var_dump($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); + } + } $formid = $params["formid"]; $folder = $params["folder"]; $qid = $params["qid"]; @@ -21,9 +29,6 @@ function toprakAwsUpload($job) { $keys = (array)json_decode($params["key"]); var_dump($params); var_dump($keys); - if(empty($keys)){ - return json_encode(array("Error" => "Key Does Not Exist","File" => null,'Folder' => null,"Url" => null, "Remove" => null)); - } var_dump($params); $access = $keys["access"]; $secret = $keys["secret"]; @@ -66,6 +71,12 @@ function toprakAwsUpload($job) { } function toprakAwsRemove($job){ try{ + foreach ($params as $param => $value) { + if(empty($value) || $value == "null" || $value == "{}"){ + var_dump($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); + } + } $params = (array)json_decode($job->workload()); var_dump($params); $keys = (array)json_decode($params["key"]); diff --git a/gearman/workers/driveWorker.php b/gearman/workers/driveWorker.php index 1d9b8b5..99330fa 100644 --- a/gearman/workers/driveWorker.php +++ b/gearman/workers/driveWorker.php @@ -18,12 +18,22 @@ function toprakDriveUpload($job) { try{ $params = (array)json_decode($job->workload()); var_dump($params); - // foreach ($params as $param) { - // if(empty($param)){ - // return json_encode(array("Error" => 2,"File" => null,"Url" => null)); - // } - // } + foreach ($params as $param => $value) { + if(empty($value) || $value == "null" || $value == "{}" || $value == ""){ + if($params["folderKey"] == null){ + + } + else{ + var_dump($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); + } + } + } $tokens = (array)json_decode($params["key"]); + if(empty($tokens["access_token"]) || empty($tokens["refresh_token"])){ + var_dump("Tokens are null!"); + return json_encode(array("Error" => "Tokens Are Null","File" => null,"Url" => null)); + } $formid = $params["formid"]; $file = $params["file"]; $qid = $params["qid"]; @@ -32,7 +42,6 @@ function toprakDriveUpload($job) { $base_path = DIRECTORY_SEPARATOR . "tmp"; $path = $folder . DIRECTORY_SEPARATOR. "questionid".$qid; $file_path = $base_path.DIRECTORY_SEPARATOR . $formid . DIRECTORY_SEPARATOR .$path.DIRECTORY_SEPARATOR.$file; - var_dump($params,"\n\n\n"); if(!file_exists($file_path)){ return json_encode(array("Error" => "File Does Not Exist","File" => null,'Folder' => null,"Url" => null, "Remove" => null)); } @@ -44,10 +53,11 @@ function toprakDriveUpload($job) { $client->setApplicationName("XUP_File_Uploader"); $client->setAccessToken((string)$tokens["access_token"]); if($client->isAccessTokenExpired()) { - $refresh = $client->refreshToken((string)$tokens["refresh_token"]); $drive = new Drive(); - $drive->save($formid,$qid,json_encode(array("access_token" => (string)$refresh["access_token"],"refresh_token" => (string)$tokens["refresh_token"]))); - echo "\nKey Updated\n\n"; + $refresh = $client->refreshToken((string)$tokens["refresh_token"]); + $keys = json_encode(array("access_token" => (string)$refresh["access_token"],"refresh_token" => (string)$tokens["refresh_token"])); + var_dump($drive->insert($formid,$qid,$keys)); + echo "\nKey Updated\n \n"; } $service = new Google_Service_Drive($client); $pagetoken = null; @@ -113,9 +123,10 @@ function toprakDriveRemove($job) { try{ $params = (array)json_decode($job->workload()); var_dump($params); - foreach ($params as $param) { - if(empty($param)){ - return json_encode(array("Error" => "Please Check Input Variables")); + foreach ($params as $param => $value) { + if(empty($value) || $value == "null" || $value == "{}"){ + var_dump($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); } } $tokens = (array)json_decode($params["key"]); @@ -132,7 +143,7 @@ function toprakDriveRemove($job) { if($client->isAccessTokenExpired()){ $refresh = $client->refreshToken($refreshKey); $drive = new Drive(); - $drive->save($formid,$qid,json_encode(array("access_token" => (string)$refresh["access_token"],"refresh_token" => (string)$tokens["refresh_token"]))); + $drive->insert($formid,$qid,json_encode(array("access_token" => (string)$refresh["access_token"],"refresh_token" => (string)$tokens["refresh_token"]))); echo "\nKey Updated\n\n"; } $service = new Google_Service_Drive($client); diff --git a/gearman/workers/dropboxWorker.php b/gearman/workers/dropboxWorker.php index 00e56dc..62c442c 100644 --- a/gearman/workers/dropboxWorker.php +++ b/gearman/workers/dropboxWorker.php @@ -16,7 +16,8 @@ function toprakDbxUpload($job) { var_dump($params); foreach ($params as $param) { if(empty($param)){ - return json_encode(array("Error" => "File Does Not Exist","File" => null,'Folder' => null,"Url" => null, "Remove" => null)); + echo($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); } } $token = (string)$params["key"]; @@ -50,12 +51,12 @@ function toprakDbxUpload($job) { function toprakDbxRemove($job){ try{ $params = (array)json_decode($job->workload()); - foreach ($params as $param) { - if(empty($param)){ - return json_encode(array("Error" => "Please Check Input Variables")); - } + foreach ($params as $param => $value) { + if(empty($value) || $value == "null" || $value == "{}"){ + var_dump($param." is null!"); + return json_encode(array("Error" => $param." is null","File" => null,"Url" => null)); } - + } $token = $params["key"]; $remove = (array)json_decode($params["remove"]); $remove = $remove["Dropbox"]; diff --git a/index.html b/index.html index a441f38..b1fcbe0 100644 --- a/index.html +++ b/index.html @@ -161,7 +161,6 @@ if((clouds.toLowerCase()).indexOf("amazonwebservices") != -1){ if(empty(getAwsKeys())){ document.getElementById("upload").disable = true; - // document.getElementById("text").innerHTML = "

Please check your AWS integration!

"; document.getElementById("aws").value = getAwsKeys(); } else{ @@ -169,14 +168,6 @@ document.getElementById("aws").value = null; } } - // if(!document.getElementById(e.toLowerCase()).value){ - // // document.getElementById("add").style.display = "none"; - // document.getElementById("text").innerHTML = "Please check your integrations"; - // } - // else{ - // // document.getElementById("add").style.display = "inline-flex"; - // document.getElementById("text").innerHTML = ""; - // } }) $("#upload").change(function(e) { e.preventDefault(); @@ -202,7 +193,6 @@ var children = document.getElementById("xup").children; console.log(children); console.log(children.length); - for(let i = 0; i <= children.length - 1; i++){ if(children[i].id.indexOf("uploadItem") == -1){ if(i == (children.length-1)){ @@ -222,7 +212,7 @@ } }) function empty(input) { - if(input == "" || input == 0 || input == "0" || input == null || input == false || input == undefined || input == "null") { + if(input == "" || input == 0 || input == "0" || input == null || input == false || input == undefined || input == "null" || input == "{}") { return true; } else { @@ -237,6 +227,7 @@ formdata.append("file", file); formdata.append("formid",formid); formdata.append("filekey",filekey); + formdata.append("action","save"); formdata.append("key",document.getElementById("aws").value); var progressBar = "progressBar-"+id; save(formdata,filekey,progressBar).done(function(result){ @@ -249,7 +240,7 @@ folder = document.getElementById("folder").value; var callback = null; var folderKey = document.getElementById("folderKey").value; - callBack = JSON.parse(sendJob(qid,file.name,formid,folder,folderKey,getAwsKeys())); //key, + callBack = JSON.parse(sendJob(qid,file.name,formid,folder,folderKey, getAwsKeys())); // debugger; if(empty(document.getElementById('folderKey').value)){ let folderId = JSON.parse(callBack.Drive); @@ -259,20 +250,23 @@ console.log(callBack); dropbox = JSON.parse(callBack.Dropbox); dropboxUrl = dropbox.Url; + dropboxError = dropbox.Error; dropboxRemove = dropbox.Remove; - console.log(dropboxUrl +"\n"+dropboxRemove); + console.log("----DBX----\n" + dropboxError +"\n"+ dropboxUrl +"\n"+ dropboxRemove+"\n----DBX----"); drive = JSON.parse(callBack.Drive); driveUrl = drive.Url; + driveError = drive.Error; driveRemove = drive.Remove; - console.log(driveUrl +"\n"+driveRemove); + console.log("----GDR----\n"+driveError +"\n"+ driveUrl +"\n"+ driveRemove+"\n----GDR----"); amazon = JSON.parse(callBack.AmazonWebServices); amazonUrl = amazon.Url; + amazonError = amazon.Error; amazonRemove = amazon.Remove; - console.log(amazonUrl +"\n"+amazonRemove); + console.log("----AWS----\n"+amazonError +"\n"+ amazonUrl +"\n"+ amazonRemove+"\n----AWS----"); document.getElementById("url").value = "Dropbox:" + dropboxUrl +"
Drive:" + driveUrl + "
Amazon Web Services:" + amazonUrl; var remove = JSON.parse(JSON.stringify({"Dropbox": dropboxRemove,"Drive": driveRemove,"Amazon": amazonRemove})); - document.getElementById("remove-"+id).value = JSON.stringify({"formid": formid,"qid": qid,"Remove":remove}); + document.getElementById("remove-"+id).value = JSON.stringify({"formid": formid,"qid": qid,"Remove":remove}); $("#url").trigger("change"); }).fail(function(){ console.log("An Error Occured"); @@ -282,7 +276,7 @@ function save(formdata,filekey,progressId){ return jQuery.ajax({ type: "POST", - url: "save.php", + url: "file.php", enctype: "multipart/form-data", data: formdata, cache: false, diff --git a/save.php b/save.php index 90258a8..62d3e1a 100644 --- a/save.php +++ b/save.php @@ -2,6 +2,13 @@ $formid = injection($_POST["formid"]); $key = injection($_POST["filekey"]); $folder = null; +if(realpath("/tmp/$formid") !== true){ + if(file_exists("/tmp/$formid") !== true){ + $oldumask = umask(0);//kalkacak + mkdir("/tmp/$formid",0777,true);//644 + umask($oldumask);//kalkacak + } +} if(file_exists(DIRECTORY_SEPARATOR."tmp".DIRECTORY_SEPARATOR."$formid".DIRECTORY_SEPARATOR."$key.txt")){ $folder = getFolder($formid,$key); } @@ -14,10 +21,8 @@ $path = DIRECTORY_SEPARATOR . "tmp"; $file_path = implode(DIRECTORY_SEPARATOR, array($path,$formid,$folder,"questionid".$qid)); -if(realpath($file_path) !== true) -{ - if(file_exists($file_path) !== true) - { +if(realpath($file_path) !== true){ + if(file_exists($file_path) !== true){ $oldumask = umask(0);//kalkacak mkdir($file_path,0777,true);//644 umask($oldumask);//kalkacak @@ -27,8 +32,7 @@ $file_name = injection($_FILES[$key]["name"]); $array = explode('.', $file_name); $extension = end($array); - if(type($extension) != true) - { + if(type($extension) != true){ exit(json_encode(array("succes"=>false,"error"=>"type"))); } @@ -64,8 +68,7 @@ function fileNameExist($path,$filename){ return $filename; } -function injection($str) -{ +function injection($str){ $bad = array( '', "'", '"', @@ -99,16 +102,14 @@ function injection($str) do{ $old = $str; $str = str_replace($bad, ' ', $str); - if(stripos($str, '4647')) - { + if(stripos($str, '4647')){ $str = str_replace('4647', '', $str); } } while ($old !== $str); return $str; } -function type($str) -{ +function type($str){ $neverAllow = array( 'php', 'pl', @@ -136,8 +137,7 @@ function type($str) } return true; } -function mime($str) -{ +function mime($str){ $neverAllow = array( "application/octet-stream", "application/javascript", diff --git a/src/XUP/adapters/drive.php b/src/XUP/adapters/drive.php index 5e02b29..70a91f0 100644 --- a/src/XUP/adapters/drive.php +++ b/src/XUP/adapters/drive.php @@ -31,8 +31,9 @@ public function insert($formid,$qid,$key) { if(empty($formid) || empty($qid) || empty($key) || empty($this->value)) { return "Error"; } - $key = $this->tokens($formid,$qid,$key); - $formid = addslashes($formid); + if($this->select(addslashes($formid),addslashes($qid)) == null){ + $key = $this->tokens($formid,$qid,$key); + } $sql = "REPLACE INTO widget_access_keys (`formId`,`questionId`,`value`,`key`) VALUES (".addslashes($formid).",".addslashes($qid).",'".addslashes($this->value)."','".$key."')"; $result = $this->query($sql); if ($result == true) { @@ -45,7 +46,7 @@ public function insert($formid,$qid,$key) { } public function upload($params) { $params = (array)json_decode($params); - $job = json_encode(array("formid" => $params["formid"],"folder"=> $params["folder"],"qid" => $params["qid"], "key" => $this->get($params["formid"],$params["qid"]), "file" => $params["file"], "folderKey" => $params["folderKey"])); + $job = json_encode(array("formid" => $params["formid"],"folder"=> $params["folder"],"qid" => $params["qid"], "key" => $this->select($params["formid"],$params["qid"]), "file" => $params["file"], "folderKey" => $params["folderKey"])); $client = new \GearmanClient(); $client->addServer("127.0.0.1","4730"); return $client->doNormal("toprakDrive",$job); @@ -55,7 +56,7 @@ public function deleteKey($params){ } public function deleteFile($params) { $params = (array)json_decode($params); - $job = json_encode(array("key" => $this->get($params["formid"],$params["qid"]),"remove" => $params["remove"])); + $job = json_encode(array("key" => $this->select($params["formid"],$params["qid"]),"remove" => $params["remove"])); $client = new \GearmanClient(); $client->addServer("127.0.0.1","4730"); return $client->doBackground("toprakDriveRemove",$job); diff --git a/src/XUP/adapters/dropbox.php b/src/XUP/adapters/dropbox.php index e81e2b3..85c25d8 100644 --- a/src/XUP/adapters/dropbox.php +++ b/src/XUP/adapters/dropbox.php @@ -44,7 +44,7 @@ public function insert($formid,$qid,$key) { } public function upload($params) { $params = (array)json_decode($params); - $job = json_encode(array("formid" => $params["formid"],"folder"=> $params["folder"],"qid" => $params["qid"], "key" => $this->get($params["formid"],$params["qid"]), "file" => $params["file"])); + $job = json_encode(array("formid" => $params["formid"],"folder"=> $params["folder"],"qid" => $params["qid"], "key" => $this->select($params["formid"],$params["qid"]), "file" => $params["file"])); $client = new \GearmanClient(); $client->addServer("127.0.0.1","4730"); return $client->doNormal("toprakDBX",$job); @@ -54,7 +54,7 @@ public function deleteKey($params){ } public function deleteFile($params) { $params = (array)json_decode($params); - $job = json_encode(array("key" => $this->get($params["formid"],$params["qid"]),"remove" => $params["remove"])); + $job = json_encode(array("key" => $this->select($params["formid"],$params["qid"]),"remove" => $params["remove"])); $client = new \GearmanClient(); $client->addServer("127.0.0.1","4730"); return $client->doBackground("toprakDBXRemove",$job);