/** * multi * * @param $action */ function dispatcher_multi($action) { global $cfg; // is enabled ? if ($cfg["enable_multiops"] != 1) { AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use multi-op " . $action); @error("multiops are disabled", "", ""); } // messages-ary $dispatcherMessages = array(); // loop if (empty($_POST['transfer'])) { return; } foreach ($_POST['transfer'] as $key => $element) { // url-decode $transfer = urldecode($element); // is valid transfer ? + check permissions $invalid = true; if (tfb_isValidTransfer($transfer) === true) { if (substr($transfer, -8) == ".torrent") { // this is a torrent-client $invalid = false; } else { if (substr($transfer, -5) == ".wget") { // this is wget. $invalid = false; // is enabled ? if ($cfg["enable_wget"] == 0) { $invalid = true; AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use wget"); array_push($dispatcherMessages, "wget is disabled : " . $transfer); } else { if ($cfg["enable_wget"] == 1) { if (!$cfg['isAdmin']) { $invalid = true; AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use wget"); array_push($dispatcherMessages, "wget is disabled for users : " . $transfer); } } } } else { if (substr($transfer, -4) == ".nzb") { // This is nzbperl. $invalid = false; if ($cfg["enable_nzbperl"] == 0) { $invalid = true; AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use nzbperl"); array_push($dispatcherMessages, "nzbperl is disabled : " . $transfer); } else { if ($cfg["enable_nzbperl"] == 1) { if (!$cfg['isAdmin']) { $invalid = true; AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use nzbperl"); array_push($dispatcherMessages, "nzbperl is disabled for users : " . $transfer); } } } } } } } if ($invalid) { AuditAction($cfg["constants"]["error"], "INVALID TRANSFER: " . $cfg["user"] . " tried to " . $action . " " . $transfer); array_push($dispatcherMessages, "Invalid Transfer : " . $transfer); continue; } // client $client = getTransferClient($transfer); // is transfer running ? $tRunningFlag = isTransferRunning($transfer); // action switch switch ($action) { case "transferStart": /* transferStart */ if (!$tRunningFlag) { $ch = ClientHandler::getInstance($client); $ch->start($transfer, false, FluxdQmgr::isRunning()); if (count($ch->messages) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages); } } break; case "transferStop": /* transferStop */ if ($tRunningFlag) { $ch = ClientHandler::getInstance($client); $ch->stop($transfer); if (count($ch->messages) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages); } } break; case "transferEnQueue": /* transferEnQueue */ if (!$tRunningFlag) { // enqueue it $ch = ClientHandler::getInstance($client); $ch->start($transfer, false, true); if (count($ch->messages) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages); } } break; case "transferDeQueue": /* transferDeQueue */ if (!$tRunningFlag) { // dequeue it FluxdQmgr::dequeueTransfer($transfer, $cfg['user']); } break; case "transferResetTotals": /* transferResetTotals */ $msgs = resetTransferTotals($transfer, false); if (count($msgs) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $msgs); } break; default: if ($tRunningFlag) { // stop first $ch = ClientHandler::getInstance($client); $ch->stop($transfer); if (count($ch->messages) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages); } // is transfer running ? $tRunningFlag = isTransferRunning($transfer); } // if it was running... hope the thing is down... // only continue if it is if (!$tRunningFlag) { switch ($action) { case "transferWipe": /* transferWipe */ $msgsDelete = deleteTransferData($transfer); if (count($msgsDelete) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $msgsDelete); } $msgsReset = resetTransferTotals($transfer, true); if (count($msgsReset) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $msgsReset); } break; case "transferData": /* transferData */ $msgsDelete = deleteTransferData($transfer); if (count($msgsDelete) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $msgsDelete); } case "transfer": /* transfer */ $ch = ClientHandler::getInstance($client); $ch->delete($transfer); if (count($ch->messages) > 0) { $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages); } } } } // end switch } // end loop // error if messages if (count($dispatcherMessages) > 0) { @error("There were Problems", "", "", $dispatcherMessages); } }
/** * Wipe Transfer * * @param $transfer * @return mixed */ function _transferWipe($transfer) { global $cfg; // check transfer if (!transferExists($transfer)) { $this->_outputError("transfer does not exist.\n"); return false; } $this->_outputMessage("Wipe " . $transfer . " ...\n"); // set user $cfg["user"] = getOwner($transfer); // wipe $ch = ClientHandler::getInstance(getTransferClient($transfer)); $tRunningFlag = isTransferRunning($transfer); if ($tRunningFlag) { // stop transfer first $this->_outputMessage("transfer is running, stopping first...\n"); $ch->stop($transfer); $tRunningFlag = isTransferRunning($transfer); } if (!$tRunningFlag) { $this->_outputMessage("Deleting...\n"); $msgsDelete = deleteTransferData($transfer); $countDelete = count($msgsDelete); $msgsReset = resetTransferTotals($transfer, true); $countReset = count($msgsReset); if ($countDelete + $countReset == 0) { $this->_outputMessage("done.\n"); return true; } else { $this->_outputError("there were problems: " . ($countDelete > 0 ? implode("\n", $msgsDelete) . "\n" : "") . ($countReset > 0 ? implode("\n", $msgsReset) : "") . "\n"); return false; } } else { $this->_outputError("transfer still up... cannot delete\n"); return false; } }