Esempio n. 1
0
 public function Output()
 {
     $V = "";
     /* If this is a POST, then process the request. */
     $groupname = GetParm('groupname', PARM_TEXT);
     if (!empty($groupname)) {
         try {
             /* @var $userDao UserDao */
             $userDao = $GLOBALS['container']->get('dao.user');
             $groupId = $userDao->addGroup($groupname);
             $userDao->addGroupMembership($groupId, Auth::getUserId());
             $text = _("Group");
             $text1 = _("added");
             $this->vars['message'] = "{$text} {$groupname} {$text1}.";
         } catch (Exception $e) {
             $this->vars['message'] = $e->getMessage();
         }
     }
     /* Build HTML form */
     $text = _("Add a Group");
     $V .= "<h4>{$text}</h4>\n";
     $V .= "<form name='formy' method='POST' action=" . Traceback_uri() . "?mod=group_add>\n";
     $Val = htmlentities(GetParm('groupname', PARM_TEXT), ENT_QUOTES);
     $text = _("Enter the groupname:");
     $V .= "{$text}\n";
     $V .= "<input type='text' value='{$Val}' name='groupname' size=20>\n";
     $text = _("Add");
     $V .= "<input type='submit' value='{$text}'>\n";
     $V .= "</form>\n";
     return $V;
 }
Esempio n. 2
0
 /**
  * \brief queue the job
  *
  * \param
  * \returns status string
  **/
 function QueueJob()
 {
     global $SysConf;
     /* Find all the maintagent options specified by the user.
      * They look like _REQUEST["a"] = "a", _REQUEST["b"]="b", ...
      */
     $options = "-";
     foreach ($_REQUEST as $key => $value) {
         if ($key == $value) {
             $options .= $value;
         }
     }
     /* Create the maintenance job */
     $user_pk = Auth::getUserId();
     $groupId = Auth::getGroupId();
     $job_pk = JobAddJob($user_pk, $groupId, "Maintenance");
     if (empty($job_pk) || $job_pk < 0) {
         return _("Failed to insert job record");
     }
     $jq_pk = JobQueueAdd($job_pk, "maintagent", NULL, NULL, NULL, NULL, $options);
     if (empty($jq_pk)) {
         return _("Failed to insert task 'Maintenance' into job queue");
     }
     /* Tell the scheduler to check the queue. */
     $success = fo_communicate_with_scheduler("database", $output, $error_msg);
     if (!$success) {
         return $error_msg . "\n" . $output;
     }
     return _("The maintenance job has been queued");
 }
Esempio n. 3
0
 /**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     $userId = Auth::getUserId();
     $vars = array();
     /** @var UserDao $userDao */
     $userDao = $this->getObject('dao.user');
     $groupMap = $userDao->getDeletableAdminGroupMap($userId, $_SESSION[Auth::USER_LEVEL]);
     $groupId = $request->get('grouppk');
     if (!empty($groupId)) {
         try {
             $userDao->deleteGroup($groupId);
             $vars['message'] = _("Group") . ' ' . $groupMap[$groupId] . ' ' . _("deleted") . '.';
             unset($groupMap[$groupId]);
         } catch (\Exception $e) {
             $vars['message'] = $e->getMessage();
         }
     }
     if (empty($groupMap)) {
         $vars['content'] = _("You have no groups you can delete.");
         return $this->render('include/base.html.twig', $this->mergeWithDefault($vars));
     }
     $vars['groupMap'] = $groupMap;
     $vars['uri'] = Traceback_uri() . "?mod=group_delete";
     $vars['groupMap'] = $groupMap;
     return $this->render('admin_group_delete.html.twig', $this->mergeWithDefault($vars));
 }
 /**
  * \brief Delete
  * Creates a job to detele the folder
  *
  * \param $folderpk - the folder_pk to remove
  * \return NULL on success, string on failure.
  */
 function Delete($folderpk, $Depends = NULL)
 {
     /* Can't remove top folder */
     if ($folderpk == FolderGetTop()) {
         $text = _("Can Not Delete Root Folder");
         return $text;
     }
     /* Get the folder's name */
     $FolderName = FolderGetName($folderpk);
     /* Prepare the job: job "Delete" */
     $userId = Auth::getUserId();
     $groupId = Auth::getGroupId();
     $jobpk = JobAddJob($userId, $groupId, "Delete Folder: {$FolderName}");
     if (empty($jobpk) || $jobpk < 0) {
         $text = _("Failed to create job record");
         return $text;
     }
     /* Add job: job "Delete" has jobqueue item "delagent" */
     $jqargs = "DELETE FOLDER {$folderpk}";
     $jobqueuepk = JobQueueAdd($jobpk, "delagent", $jqargs, NULL, NULL);
     if (empty($jobqueuepk)) {
         $text = _("Failed to place delete in job queue");
         return $text;
     }
     /* Tell the scheduler to check the queue. */
     $success = fo_communicate_with_scheduler("database", $output, $error_msg);
     if (!$success) {
         return $error_msg . "\n" . $output;
     }
     return NULL;
 }
Esempio n. 5
0
 protected function getJobAndJobqueue($groupId, $upload, $addUploads)
 {
     $uploadId = $upload->getId();
     $readMeOssAgent = plugin_find('agent_readmeoss');
     $userId = Auth::getUserId();
     $jqCmdArgs = $readMeOssAgent->uploadsAdd($addUploads);
     $dbManager = $this->getObject('db.manager');
     $sql = 'SELECT jq_pk,job_pk FROM jobqueue, job ' . 'WHERE jq_job_fk=job_pk AND jq_type=$1 AND job_group_fk=$4 AND job_user_fk=$3 AND jq_args=$2 AND jq_endtime IS NULL';
     $params = array($readMeOssAgent->AgentName, $uploadId, $userId, $groupId);
     $log = __METHOD__;
     if ($jqCmdArgs) {
         $sql .= ' AND jq_cmd_args=$5';
         $params[] = $jqCmdArgs;
         $log .= '.args';
     } else {
         $sql .= ' AND jq_cmd_args IS NULL';
     }
     $scheduled = $dbManager->getSingleRow($sql, $params, $log);
     if (!empty($scheduled)) {
         return array($scheduled['job_pk'], $scheduled['jq_pk']);
     }
     $jobId = JobAddJob($userId, $groupId, $upload->getFilename(), $uploadId);
     $error = "";
     $jobQueueId = $readMeOssAgent->AgentAdd($jobId, $uploadId, $error, array(), $jqCmdArgs);
     if ($jobQueueId < 0) {
         throw new Exception(_("Cannot schedule") . ": " . $error);
     }
     return array($jobId, $jobQueueId);
 }
Esempio n. 6
0
 /**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     $userId = Auth::getUserId();
     $vars = array();
     $folderContentId = intval($request->get('foldercontent'));
     $parentFolderId = intval($request->get('toFolder'));
     if ($folderContentId && $parentFolderId && $request->get('copy')) {
         try {
             $this->folderDao->copyContent($folderContentId, $parentFolderId);
         } catch (Exception $ex) {
             $vars['message'] = $ex->getMessage();
         }
     } elseif ($folderContentId && $parentFolderId) {
         try {
             $this->folderDao->moveContent($folderContentId, $parentFolderId);
         } catch (Exception $ex) {
             $vars['message'] = $ex->getMessage();
         }
     }
     $rootFolderId = $this->folderDao->getRootFolder($userId)->getId();
     /* @var $uiFolderNav FolderNav */
     $uiFolderNav = $this->getObject('ui.folder.nav');
     $vars['folderTree'] = $uiFolderNav->showFolderTree($rootFolderId);
     $vars['folderStructure'] = $this->folderDao->getFolderStructure($rootFolderId);
     return $this->render('admin_content_move.html.twig', $this->mergeWithDefault($vars));
 }
 /**
  * \brief Given a folder_pk, add a job.
  * \param $uploadpk - the upload(upload_id) you want to delete
  * \param $Depends - Depends is not used for now
  *
  * \return NULL on success, string on failure.
  */
 function Delete($uploadpk, $Depends = NULL)
 {
     global $SysConf;
     /* Prepare the job: job "Delete" */
     $user_pk = Auth::getUserId();
     $group_pk = Auth::getGroupId();
     $jobpk = JobAddJob($user_pk, $group_pk, "Delete", $uploadpk);
     if (empty($jobpk) || $jobpk < 0) {
         $text = _("Failed to create job record");
         return $text;
     }
     /* Add job: job "Delete" has jobqueue item "delagent" */
     $jqargs = "DELETE UPLOAD {$uploadpk}";
     $jobqueuepk = JobQueueAdd($jobpk, "delagent", $jqargs, NULL, NULL);
     if (empty($jobqueuepk)) {
         $text = _("Failed to place delete in job queue");
         return $text;
     }
     /* Tell the scheduler to check the queue. */
     $success = fo_communicate_with_scheduler("database", $output, $error_msg);
     if (!$success) {
         $error_msg = _("Is the scheduler running? Your jobs have been added to job queue.");
         $URL = Traceback_uri() . "?mod=showjobs&upload={$uploadpk} ";
         $LinkText = _("View Jobs");
         $msg = "{$error_msg} <a href={$URL}>{$LinkText}</a>";
         return $msg;
     }
     return NULL;
 }
Esempio n. 8
0
 /**
  * @brief Allow user to change their account settings (users db table).  
  *        If the user is an Admin, they can change settings for any user.\n
  *        This is called in the following circumstances:\n
  *        1) User clicks on Admin > Edit User Account\n
  *        2) User has chosen a user to edit from the 'userid' select list  \n
  *        3) User hit submit to update user data\n
  */
 protected function handle(Request $request)
 {
     /* Is the session owner an admin?  */
     $user_pk = Auth::getUserId();
     $SessionUserRec = $this->GetUserRec($user_pk);
     $SessionIsAdmin = $this->IsSessionAdmin($SessionUserRec);
     $user_pk_to_modify = intval($request->get('user_pk'));
     if (!($SessionIsAdmin or empty($user_pk_to_modify) or $user_pk == $user_pk_to_modify)) {
         $vars['content'] = _("Your request is not valid.");
         return $this->render('include/base.html.twig', $this->mergeWithDefault($vars));
     }
     $vars = array('refreshUri' => Traceback_uri() . "?mod=" . self::NAME);
     /* If this is a POST (the submit button was clicked), then process the request. */
     $BtnText = $request->get('UpdateBtn');
     if (!empty($BtnText)) {
         /* Get the form data to in an associated array */
         $UserRec = $this->CreateUserRec($request, "");
         $rv = $this->UpdateUser($UserRec, $SessionIsAdmin);
         if (empty($rv)) {
             // Successful db update
             $vars['message'] = "User {$UserRec['user_name']} updated.";
             /* Reread the user record as update verification */
             $UserRec = $this->CreateUserRec($request, $UserRec['user_pk']);
         } else {
             $vars['message'] = $rv;
         }
     } else {
         $NewUserpk = intval($request->get('newuser'));
         $UserRec = empty($NewUserpk) ? $this->CreateUserRec($request, $user_pk) : $this->CreateUserRec($request, $NewUserpk);
     }
     /* display the edit form with the requested user data */
     $vars = array_merge($vars, $this->DisplayForm($UserRec, $SessionIsAdmin));
     $vars['userId'] = $UserRec['user_pk'];
     return $this->render('user_edit.html.twig', $this->mergeWithDefault($vars));
 }
Esempio n. 9
0
 protected function handleUpload(Request $request)
 {
     $folderId = intval($request->get(self::FOLDER_PARAMETER_NAME));
     $description = stripslashes($request->get(self::DESCRIPTION_INPUT_NAME));
     $description = $this->basicShEscaping($description);
     $getUrlThatMightIncludeSpaces = trim($request->get(self::GETURL_PARAM));
     $getURL = str_replace(" ", "%20", $getUrlThatMightIncludeSpaces);
     if (empty($getURL)) {
         return array(false, _("Invalid URL"), $description);
     }
     if (preg_match("@^((http)|(https)|(ftp))://([[:alnum:]]+)@i", $getURL) != 1) {
         return array(false, _("Invalid URL"), $description);
     }
     $getUrl = $this->basicShEscaping($getUrl);
     $name = $request->get(self::NAME_PARAM);
     if (empty($name)) {
         $name = basename($getURL);
     }
     $shortName = basename($name);
     if (empty($shortName)) {
         $shortName = $name;
     }
     /* Create an upload record. */
     $mode = 1 << 2;
     // code for "it came from wget"
     $userId = Auth::getUserId();
     $groupId = Auth::getGroupId();
     $public = $request->get('public');
     $publicPermission = $public == self::PUBLIC_ALL ? Auth::PERM_READ : Auth::PERM_NONE;
     $uploadId = JobAddUpload($userId, $groupId, $shortName, $getURL, $description, $mode, $folderId, $publicPermission);
     if (empty($uploadId)) {
         $text = _("Failed to insert upload record");
         return array(false, $text, $description);
     }
     $level = intval($request->get(self::LEVEL_PARAM));
     if ($level < 0) {
         $level = 1;
     }
     /* first trim, then get rid of whitespaces before and after each comma letter */
     $accept = preg_replace('/\\s*,\\s*/', ',', trim($request->get(self::ACCEPT_PARAM)));
     $accept = $this->basicShEscaping($accept);
     $reject = preg_replace('/\\s*,\\s*/', ',', trim($request->get(self::REJECT_PARAM)));
     $reject = $this->basicShEscaping($reject);
     /* Create the job: job "wget" */
     $jobId = JobAddJob($userId, $groupId, "wget", $uploadId);
     if (empty($jobId) || $jobId < 0) {
         return array(false, _("Failed to insert job record"), $description);
     }
     $jqArgs = "{$uploadId} - {$getURL} -l {$level} ";
     if (!empty($accept)) {
         $jqArgs .= "-A {$accept} ";
     }
     $jqArgs .= empty($reject) ? "-R index.html* " : "-R {$reject},index.html* ";
     $jobqueueId = JobQueueAdd($jobId, "wget_agent", $jqArgs, NULL, NULL);
     if (empty($jobqueueId)) {
         return array(false, "Failed to insert task 'wget_agent' into job queue", $description);
     }
     $message = $this->postUploadAddJobs($request, $shortName, $uploadId, $jobId, $jobqueueId);
     return array(true, $message, $description);
 }
Esempio n. 10
0
 /**
  * \brief Find out who I am from my user record.
  * \returns user name
  */
 protected function WhoAmI()
 {
     $user_pk = Auth::getUserId();
     if (empty($user_pk)) {
         return _("You are not logged in");
     }
     $userDao = $this->getObject('dao.user');
     return $userDao->getUserName($user_pk);
 }
Esempio n. 11
0
 protected function getDefaultBucketPool()
 {
     $user_pk = Auth::getUserId();
     if (empty($user_pk)) {
         return 0;
     }
     /* @var $dbManager DbManager */
     $dbManager = $GLOBALS['container']->get('db.manager');
     $usersRec = $dbManager->getSingleRow('SELECT default_bucketpool_fk FROM users WHERE user_pk=$1', array($user_pk));
     return $usersRec['default_bucketpool_fk'];
 }
Esempio n. 12
0
 /**
  * \brief Generate the text for this plugin.
  */
 public function Output()
 {
     /* If this is a POST, then process the request. */
     $folder = GetParm('folder', PARM_INTEGER);
     if (!empty($folder)) {
         $userId = Auth::getUserId();
         $sql = "SELECT folder_name FROM folder join users on (users.user_pk = folder.user_fk or users.user_perm = 10) where folder_pk = \$1 and users.user_pk = \$2;";
         $Folder = $this->dbManager->getSingleRow($sql, array($folder, $userId), __METHOD__ . "GetRowWithFolderName");
         if (!empty($Folder['folder_name'])) {
             $rc = $this->Delete($folder, $userId);
             if (empty($rc)) {
                 /* Need to refresh the screen */
                 $text = _("Deletion of folder ");
                 $text1 = _(" added to job queue");
                 $this->vars['message'] = $text . $Folder['folder_name'] . $text1;
             } else {
                 $text = _("Deletion of ");
                 $text1 = _(" failed: ");
                 $this->vars['message'] = $text . $Folder['folder_name'] . $text1 . $rc;
             }
         } else {
             $text = _("Cannot delete this folder :: Permission denied");
             $this->vars['message'] = $text;
         }
     }
     $V = "<form method='post'>\n";
     // no url = this url
     $text = _("Select the folder to");
     $text1 = _("delete");
     $V .= "{$text} <em>{$text1}</em>.\n";
     $V .= "<ul>\n";
     $text = _("This will");
     $text1 = _("delete");
     $text2 = _("the folder, all subfolders, and all uploaded files stored within the folder!");
     $V .= "<li>{$text} <em>{$text1}</em> {$text2}\n";
     $text = _("Be very careful with your selection since you can delete a lot of work!");
     $V .= "<li>{$text}\n";
     $text = _("All analysis only associated with the deleted uploads will also be deleted.");
     $V .= "<li>{$text}\n";
     $text = _("THERE IS NO UNDELETE. When you select something to delete, it will be removed from the database and file repository.");
     $V .= "<li>{$text}\n";
     $V .= "</ul>\n";
     $text = _("Select the folder to delete:  ");
     $V .= "<P>{$text}\n";
     $V .= "<select name='folder'>\n";
     $text = _("select folder");
     $V .= "<option value=''>[{$text}]</option>\n";
     $V .= FolderListOption(-1, 0);
     $V .= "</select><P />\n";
     $text = _("Delete");
     $V .= "<input type='submit' value='{$text}'>\n";
     $V .= "</form>\n";
     return $V;
 }
Esempio n. 13
0
 /**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     $vars = array('licenseCount' => $this->licenseDao->getLicenseCount(), 'project' => _("FOSSology"), 'copyright' => _("Copyright (C) 2007-2014 Hewlett-Packard Development Company, L.P.<br>\nCopyright (C) 2014-2016 Siemens AG."));
     if (Auth::isAdmin()) {
         $repositoryApi = new RepositoryApi();
         $latestRelease = $repositoryApi->getLatestRelease();
         $commits = $repositoryApi->getCommitsOfLastDays(30);
         $commit = empty($commits) ? '' : substr($commits[0]['sha'], 0, 6);
         $vars = array_merge($vars, array('latestVersion' => $latestRelease, 'lastestCommit' => $commit));
     }
     return $this->render('about.html.twig', $this->mergeWithDefault($vars));
 }
Esempio n. 14
0
 /**
  * @param int $jobId
  * @param int $uploadId
  * @param string $errorMsg
  * @param Request $request
  */
 public function scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
 {
     $reuseUploadPair = explode(',', $request->get(self::UPLOAD_TO_REUSE_SELECTOR_NAME), 2);
     if (count($reuseUploadPair) == 2) {
         list($reuseUploadId, $reuseGroupId) = $reuseUploadPair;
     } else {
         $errorMsg .= 'no reuse upload id given';
         return -1;
     }
     $groupId = $request->get('groupId', Auth::getGroupId());
     $reuseModeVal = $request->get('reuseMode');
     $reuseMode = empty($reuseModeVal) ? 0 : 1;
     $this->createPackageLink($uploadId, $reuseUploadId, $groupId, $reuseGroupId, $reuseMode);
     return $this->doAgentAdd($jobId, $uploadId, $errorMsg, array("agent_adj2nest"), $uploadId);
 }
Esempio n. 15
0
 /**
  * 
  * @param int $uploadTreeId
  * @param Request $request
  * @return int $jobQueueId
  */
 private function getJobQueueId($uploadTreeId, Request $request)
 {
     $uploadEntry = $this->uploadDao->getUploadEntry($uploadTreeId);
     $uploadId = intval($uploadEntry['upload_fk']);
     $userId = Auth::getUserId();
     $groupId = Auth::getGroupId();
     if ($uploadId <= 0 || !$this->uploadDao->isAccessible($uploadId, $groupId)) {
         throw new Exception('permission denied');
     }
     $bulkScope = $request->get('bulkScope');
     switch ($bulkScope) {
         case 'u':
             $uploadTreeTable = $this->uploadDao->getUploadtreeTableName($uploadId);
             $topBounds = $this->uploadDao->getParentItemBounds($uploadId, $uploadTreeTable);
             $uploadTreeId = $topBounds->getItemId();
             break;
         case 'f':
             if (!Isdir($uploadEntry['ufile_mode']) && !Iscontainer($uploadEntry['ufile_mode']) && !Isartifact($uploadEntry['ufile_mode'])) {
                 $uploadTreeId = $uploadEntry['parent'] ?: $uploadTreeId;
             }
             break;
         default:
             throw new InvalidArgumentException('bad scope request');
     }
     $refText = $request->get('refText');
     $actions = $request->get('bulkAction');
     $licenseRemovals = array();
     foreach ($actions as $licenseAction) {
         $licenseRemovals[$licenseAction['licenseId']] = $licenseAction['action'] == 'remove';
     }
     $bulkId = $this->licenseDao->insertBulkLicense($userId, $groupId, $uploadTreeId, $licenseRemovals, $refText);
     if ($bulkId <= 0) {
         throw new Exception('cannot insert bulk reference');
     }
     $upload = $this->uploadDao->getUpload($uploadId);
     $uploadName = $upload->getFilename();
     $job_pk = JobAddJob($userId, $groupId, $uploadName, $uploadId);
     /** @var DeciderJobAgentPlugin $deciderPlugin */
     $deciderPlugin = plugin_find("agent_deciderjob");
     $dependecies = array(array('name' => 'agent_monk_bulk', 'args' => $bulkId));
     $conflictStrategyId = intval($request->get('forceDecision'));
     $errorMsg = '';
     $jqId = $deciderPlugin->AgentAdd($job_pk, $uploadId, $errorMsg, $dependecies, $conflictStrategyId);
     if (!empty($errorMsg)) {
         throw new Exception(str_replace('<br>', "\n", $errorMsg));
     }
     return $jqId;
 }
Esempio n. 16
0
 /**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     $userId = Auth::getUserId();
     $vars = array();
     $folderContentId = intval($request->get('foldercontent'));
     if ($folderContentId) {
         try {
             $this->folderDao->removeContent($folderContentId);
         } catch (Exception $ex) {
             $vars['message'] = $ex->getMessage();
         }
     }
     $rootFolderId = $this->folderDao->getRootFolder($userId)->getId();
     /* @var $uiFolderNav FolderNav */
     $uiFolderNav = $GLOBALS['container']->get('ui.folder.nav');
     $vars['folderTree'] = $uiFolderNav->showFolderTree($rootFolderId);
     return $this->render('admin_content_delete.html.twig', $this->mergeWithDefault($vars));
 }
 /**
  * \brief Display the loaded menu and plugins.
  */
 public function Output()
 {
     global $Plugins;
     global $PG_CONN;
     $UploadPk = GetParm("upload", PARM_INTEGER);
     $Agent = GetParm("agent", PARM_STRING);
     if (empty($UploadPk) || empty($Agent)) {
         return new Response('missing parameter', Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain'));
     }
     $sql = "SELECT upload_pk, upload_filename FROM upload WHERE upload_pk = '{$UploadPk}'";
     $result = pg_query($PG_CONN, $sql);
     DBCheckResult($result, $sql, __FILE__, __LINE__);
     if (pg_num_rows($result) < 1) {
         $errMsg = __FILE__ . ":" . __LINE__ . " " . _("Upload") . " " . $UploadPk . " " . _("not found");
         return new Response($errMsg, Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain'));
     }
     $UploadRow = pg_fetch_assoc($result);
     $ShortName = $UploadRow['upload_filename'];
     pg_free_result($result);
     $user_pk = Auth::getUserId();
     $group_pk = Auth::getGroupId();
     $job_pk = JobAddJob($user_pk, $group_pk, $ShortName, $UploadPk);
     $Dependencies = array();
     $P =& $Plugins[plugin_find_id($Agent)];
     $rv = $P->AgentAdd($job_pk, $UploadPk, $ErrorMsg, $Dependencies);
     if ($rv <= 0) {
         $text = _("Scheduling of Agent(s) failed: ");
         return new Response($text . $rv . $ErrorMsg, Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain'));
     }
     /** check if the scheudler is running */
     $status = GetRunnableJobList();
     $scheduler_msg = "";
     if (empty($status)) {
         $scheduler_msg .= _("Is the scheduler running? ");
     }
     $URL = Traceback_uri() . "?mod=showjobs&upload={$UploadPk}";
     /* Need to refresh the screen */
     $text = _("Your jobs have been added to job queue.");
     $LinkText = _("View Jobs");
     $msg = "{$scheduler_msg}" . "{$text} <a href={$URL}>{$LinkText}</a>";
     $this->vars['message'] = $msg;
     return new Response($msg, Response::HTTP_OK, array('Content-type' => 'text/plain'));
 }
Esempio n. 18
0
 protected function handle(Request $request)
 {
     $folderId = intval($request->get('folder'));
     /* @var $folderDao FolderDao */
     $folderDao = $this->getObject('dao.folder');
     $results = array();
     $childFolders = $folderDao->getFolderChildFolders($folderId);
     foreach ($childFolders as $folder) {
         $results[$folder['foldercontents_pk']] = '/' . $folder['folder_name'];
     }
     $childUploads = $folderDao->getFolderChildUploads($folderId, Auth::getGroupId());
     foreach ($childUploads as $upload) {
         $results[$upload['foldercontents_pk']] = $upload['upload_filename'];
     }
     if (!$request->get('removable')) {
         return new JsonResponse($results);
     }
     $filterResults = array();
     foreach ($folderDao->getRemovableContents($folderId) as $content) {
         $filterResults[$content] = $results[$content];
     }
     return new JsonResponse($filterResults);
 }
Esempio n. 19
0
 /**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     $upload = intval($request->get("upload"));
     $groupId = Auth::getGroupId();
     if (!$this->uploadDao->isAccessible($upload, $groupId)) {
         throw new \Exception("Permission Denied");
     }
     $item = intval($request->get("item"));
     $this->uploadtree_tablename = $this->uploadDao->getUploadtreeTableName($upload);
     $itemTreeBounds = $this->uploadDao->getItemTreeBounds($item, $this->uploadtree_tablename);
     $left = $itemTreeBounds->getLeft();
     if (empty($left)) {
         throw new \Exception("Job unpack/adj2nest hasn't completed.");
     }
     $scannerAgents = array_keys($this->agentNames);
     $scanJobProxy = new ScanJobProxy($this->agentDao, $upload);
     $scanJobProxy->createAgentStatus($scannerAgents);
     $selectedAgentId = intval($request->get('agentId'));
     $tag_pk = intval($request->get('tag'));
     $UniqueTagArray = array();
     $this->licenseProjector = new LicenseMap($this->getObject('db.manager'), $groupId, LicenseMap::CONCLUSION, true);
     $vars = $this->createFileListing($tag_pk, $itemTreeBounds, $UniqueTagArray, $selectedAgentId, $groupId, $scanJobProxy);
     return new JsonResponse(array('sEcho' => intval($request->get('sEcho')), 'aaData' => $vars['fileData'], 'iTotalRecords' => intval($request->get('totalRecords')), 'iTotalDisplayRecords' => $vars['iTotalDisplayRecords']));
 }
 /**
  * @brief Display the loaded menu and plugins.
  */
 function Output()
 {
     if ($this->State != PLUGIN_STATE_READY) {
         return;
     }
     $itemId = $_POST['uploadTreeId'];
     if (empty($itemId)) {
         return $this->errorJson("bad item id");
     }
     $userId = Auth::getUserId();
     $groupId = Auth::getGroupId();
     $decisionMark = @$_POST['decisionMark'];
     if (!empty($decisionMark)) {
         $itemTableName = $this->uploadDao->getUploadtreeTableName($itemId);
         /** @var ItemTreeBounds */
         $itemTreeBounds = $this->uploadDao->getItemTreeBounds($itemId, $itemTableName);
         $errMsg = $this->clearingDao->markDirectoryAsIrrelevant($itemTreeBounds, $groupId, $userId);
         if (empty($errMsg)) {
             return new JsonResponse(array('result' => 'success'));
         }
         return $this->errorJson($errMsg, $errMsg);
     }
     return $this->doEdit($userId, $groupId, $itemId);
 }
Esempio n. 21
0
 /**
  * \brief This function returns the scheduler status.
  */
 public function Output()
 {
     $uTime = microtime(true);
     $V = "";
     $Upload = GetParm("upload", PARM_INTEGER);
     /** @var UploadDao $uploadDao */
     $uploadDao = $GLOBALS['container']->get('dao.upload');
     if (!$uploadDao->isAccessible($Upload, Auth::getGroupId())) {
         $text = _("Permission Denied");
         return "<h2>{$text}</h2>";
     }
     $Item = GetParm("item", PARM_INTEGER);
     if (!$Item) {
         return _('No item selected');
     }
     $updcache = GetParm("updcache", PARM_INTEGER);
     $tagbucket = GetParm("tagbucket", PARM_INTEGER);
     $this->uploadtree_tablename = GetUploadtreeTableName($Upload);
     /* Remove "updcache" from the GET args and set $this->UpdCache
      * This way all the url's based on the input args won't be
      * polluted with updcache
      * Use Traceback_parm_keep to ensure that all parameters are in order 
      */
     $CacheKey = "?mod=" . $this->Name . Traceback_parm_keep(array("upload", "item", "folder", "ars"));
     if ($updcache) {
         $_SERVER['REQUEST_URI'] = preg_replace("/&updcache=[0-9]*/", "", $_SERVER['REQUEST_URI']);
         unset($_GET['updcache']);
         $V = ReportCachePurgeByKey($CacheKey);
     } else {
         $V = ReportCacheGet($CacheKey);
     }
     if (!empty($tagbucket)) {
         $bucketagent_pk = GetParm("bapk", PARM_INTEGER);
         $bucket_pk = GetParm("bpk", PARM_INTEGER);
         $bucketpool_pk = GetParm("bp", PARM_INTEGER);
         $nomosagent_pk = GetParm("napk", PARM_INTEGER);
         $this->TagBucket($Upload, $Item, $bucketagent_pk, $bucket_pk, $bucketpool_pk, $nomosagent_pk);
     }
     $Cached = !empty($V);
     if (!$Cached) {
         $V .= "<font class='text'>\n";
         $Children = GetNonArtifactChildren($Item, $this->uploadtree_tablename);
         if (count($Children) == 0) {
             // no children, display View-Meta micromenu
             $V .= Dir2Browse($this->Name, $Item, NULL, 1, "View-Meta", -1, '', '', $this->uploadtree_tablename) . "<P />\n";
         } else {
             // has children, display Browse micormenu
             $V .= Dir2Browse($this->Name, $Item, NULL, 1, "Browse", -1, '', '', $this->uploadtree_tablename) . "<P />\n";
         }
         if (!empty($Upload)) {
             $Uri = preg_replace("/&item=([0-9]*)/", "", Traceback());
             $V .= $this->ShowUploadHist($Item, $Uri);
         }
         $V .= "</font>\n";
         $text = _("Loading...");
     }
     $Time = microtime(true) - $uTime;
     // convert usecs to secs
     $text = _("Elapsed time: %.2f seconds");
     $V .= sprintf("<p><small>{$text}</small>", $Time);
     if ($Cached) {
         $text = _("cached");
         $text1 = _("Update");
         echo " <i>{$text}</i>   <a href=\"{$_SERVER['REQUEST_URI']}&updcache=1\"> {$text1} </a>";
     } else {
         if ($Time > 0.5) {
             ReportCachePut($CacheKey, $V);
         }
     }
     return $V;
 }
Esempio n. 22
0
 /**
  * @brief Process the upload request.
  */
 protected function handleUpload(Request $request)
 {
     global $MODDIR;
     global $SYSCONFDIR;
     define("UPLOAD_ERR_EMPTY", 5);
     define("UPLOAD_ERR_INVALID_FOLDER_PK", 100);
     define("UPLOAD_ERR_RESEND", 200);
     $uploadErrors = array(UPLOAD_ERR_OK => _("No errors."), UPLOAD_ERR_INI_SIZE => _("Larger than upload_max_filesize ") . ini_get('upload_max_filesize'), UPLOAD_ERR_FORM_SIZE => _("Larger than form MAX_FILE_SIZE."), UPLOAD_ERR_PARTIAL => _("Partial upload."), UPLOAD_ERR_NO_FILE => _("No file selected."), UPLOAD_ERR_NO_TMP_DIR => _("No temporary directory."), UPLOAD_ERR_CANT_WRITE => _("Can't write to disk."), UPLOAD_ERR_EXTENSION => _("File upload stopped by extension."), UPLOAD_ERR_EMPTY => _("File is empty or you don't have permission to read the file."), UPLOAD_ERR_INVALID_FOLDER_PK => _("Invalid Folder."), UPLOAD_ERR_RESEND => _("This seems to be a resent file."));
     $folderId = intval($request->get(self::FOLDER_PARAMETER_NAME));
     $description = stripslashes($request->get(self::DESCRIPTION_INPUT_NAME));
     $description = $this->basicShEscaping($description);
     $uploadedFile = $request->files->get(self::FILE_INPUT_NAME);
     if ($uploadedFile === null) {
         return array(false, $uploadErrors[UPLOAD_ERR_NO_FILE], $description);
     }
     if ($request->getSession()->get(self::UPLOAD_FORM_BUILD_PARAMETER_NAME) != $request->get(self::UPLOAD_FORM_BUILD_PARAMETER_NAME)) {
         return array(false, $uploadErrors[UPLOAD_ERR_RESEND], $description);
     }
     if ($uploadedFile->getSize() == 0 && $uploadedFile->getError() == 0) {
         return array(false, $uploadErrors[UPLOAD_ERR_EMPTY], $description);
     } else {
         if ($uploadedFile->getSize() >= UploadedFile::getMaxFilesize()) {
             return array(false, $uploadErrors[UPLOAD_ERR_INI_SIZE] . _(" is  really ") . $uploadedFile->getSize() . " bytes.", $description);
         }
     }
     if (empty($folderId)) {
         return array(false, $uploadErrors[UPLOAD_ERR_INVALID_FOLDER_PK], $description);
     }
     if (!$uploadedFile->isValid()) {
         return array(false, $uploadedFile->getErrorMessage(), $description);
     }
     $originalFileName = $uploadedFile->getClientOriginalName();
     $originalFileName = $this->basicShEscaping($originalFileName);
     $public = $request->get('public');
     $publicPermission = $public == self::PUBLIC_ALL ? Auth::PERM_READ : Auth::PERM_NONE;
     /* Create an upload record. */
     $uploadMode = 1 << 3;
     // code for "it came from web upload"
     $userId = Auth::getUserId();
     $groupId = Auth::getGroupId();
     $uploadId = JobAddUpload($userId, $groupId, $originalFileName, $originalFileName, $description, $uploadMode, $folderId, $publicPermission);
     if (empty($uploadId)) {
         return array(false, _("Failed to insert upload record"), $description);
     }
     try {
         $uploadedTempFile = $uploadedFile->move($uploadedFile->getPath(), $uploadedFile->getFilename() . '-uploaded')->getPathname();
     } catch (FileException $e) {
         return array(false, _("Could not save uploaded file"), $description);
     }
     $projectGroup = $GLOBALS['SysConf']['DIRECTORIES']['PROJECTGROUP'] ?: 'fossy';
     $wgetAgentCall = "{$MODDIR}/wget_agent/agent/wget_agent -C -g {$projectGroup} -k {$uploadId} '{$uploadedTempFile}' -c '{$SYSCONFDIR}'";
     $wgetOutput = array();
     exec($wgetAgentCall, $wgetOutput, $wgetReturnValue);
     unlink($uploadedTempFile);
     if ($wgetReturnValue != 0) {
         $message = implode(' ', $wgetOutput);
         if (empty($message)) {
             $message = _("File upload failed.  Error:") . $wgetReturnValue;
         }
         return array(false, $message, $description);
     }
     $message = $this->postUploadAddJobs($request, $originalFileName, $uploadId);
     return array(true, $message, $description);
 }
Esempio n. 23
0
 /**
  * @brief Returns an upload job status in html
  * @param $jobData
  * @return Returns an upload job status in html
  **/
 protected function show($jobData, $page)
 {
     global $container;
     /** @var DbManager */
     $dbManager = $container->get('db.manager');
     $outBuf = '';
     $pagination = '';
     $numJobs = count($jobData);
     if ($numJobs == 0) {
         return array('showJobsData' => "There are no jobs to display");
     }
     $uri = Traceback_uri() . "?mod=showjobs";
     $uriFull = $uri . Traceback_parm_keep(array("upload"));
     $uriFullMenu = $uri . Traceback_parm_keep(array("allusers"));
     /* Next/Prev menu */
     $next = $numJobs > $this->maxUploadsPerPage;
     if ($numJobs > $this->maxUploadsPerPage) {
         $pagination .= MenuEndlessPage($page, $next, $uriFullMenu);
     }
     /*****************************************************************/
     /* Now display the summary */
     /*****************************************************************/
     $job = -1;
     $uploadStyle = "style='font:bold 10pt verdana, arial, helvetica; background:gold; color:white;'";
     $noUploadStyle = "style='font:bold 10pt verdana, arial, helvetica; background:gold; color:black;'";
     $jobStyle = "style='font:bold 8pt verdana, arial, helvetica; background:lavender; color:black;'";
     $prevupload_pk = "";
     $firstJob = $page * $this->maxUploadsPerPage;
     $lastJob = $page * $this->maxUploadsPerPage + $this->maxUploadsPerPage;
     $jobNumber = -1;
     /** if $single_browse is 1, represent alread has an upload browse link, if single_browse is 0, no upload browse link */
     $single_browse = 0;
     foreach ($jobData as $job) {
         /* Upload  */
         if (!empty($job["upload"])) {
             $uploadName = GetArrayVal("upload_filename", $job["upload"]);
             $uploadDesc = GetArrayVal("upload_desc", $job["upload"]);
             $upload_pk = GetArrayVal("upload_pk", $job["upload"]);
             $jobId = GetArrayVal("job_pk", $job["job"]);
             /** the column pfile_fk of the record in the table(upload) is NULL when this record is inserted */
             if (!empty($upload_pk) && $prevupload_pk != $upload_pk || empty($upload_pk) && 0 == $single_browse) {
                 $prevupload_pk = $upload_pk;
                 $jobNumber++;
                 /* Only display the jobs for this page */
                 if ($jobNumber >= $lastJob) {
                     break;
                 }
                 if ($jobNumber < $firstJob) {
                     continue;
                 }
                 /* blank line separator between pfiles */
                 $outBuf .= "<tr><td colspan=8> <hr> </td></tr>";
                 $outBuf .= "<tr>";
                 $outBuf .= "<th {$uploadStyle}></th>";
                 $outBuf .= "<th colspan=6 {$uploadStyle}>";
                 if (!empty($job['uploadtree'])) {
                     $uploadtree_pk = $job['uploadtree']['uploadtree_pk'];
                     $outBuf .= "<a title='Click to browse' href='" . Traceback_uri() . "?mod=browse&upload=" . $job['job']['job_upload_fk'] . "&item=" . $uploadtree_pk . "'>";
                 } else {
                     $outBuf .= "<a {$noUploadStyle}>";
                 }
                 /* get $userName if all jobs are shown */
                 $userName = "";
                 $allusers = GetParm("allusers", PARM_INTEGER);
                 if ($allusers > 0) {
                     $statementName = __METHOD__ . "UploadRec";
                     $uploadRec = $dbManager->getSingleRow("select * from upload where upload_pk=\$1", array($job['job']['job_upload_fk']), $statementName);
                     if (!empty($uploadRec['user_fk'])) {
                         $statementName = __METHOD__ . "UserRec";
                         $userRec = $dbManager->getSingleRow("select * from users where user_pk=\$1", array($uploadRec['user_fk']), $statementName);
                         $userName = "******";
                     } else {
                         $statementName = __METHOD__ . "UserRec1";
                         $userRec = $dbManager->getSingleRow("select * from users where user_pk=\$1", array($job['job']['job_user_fk']), $statementName);
                         $userName = "******";
                     }
                 }
                 $outBuf .= $uploadName . $userName;
                 if (!empty($uploadDesc)) {
                     $outBuf .= " (" . $uploadDesc . ")";
                 }
                 $outBuf .= "</a>";
                 $outBuf .= "</th>";
                 $outBuf .= "<th {$uploadStyle}><a>" . $this->showJobsDao->getEstimatedTime($jobId) . "</a></th>";
                 $outBuf .= "</tr>";
                 $single_browse = 1;
             } else {
                 if ($jobNumber < $firstJob) {
                     continue;
                 }
             }
         } else {
             /* Show Jobs that are not attached to an upload */
             $jobNumber++;
             /* Only display the jobs for this page */
             if ($jobNumber >= $lastJob) {
                 break;
             }
             if ($jobNumber < $firstJob) {
                 continue;
             }
             /* blank line separator between pfiles */
             $outBuf .= "<tr><td colspan=8> <hr> </td></tr>";
             $outBuf .= "<tr>";
             $outBuf .= "<th {$noUploadStyle}></th>";
             $outBuf .= "<th colspan=6 {$noUploadStyle}>";
             $outBuf .= htmlentities($job["job"]["job_name"], ENT_QUOTES);
             $outBuf .= "</th>";
             $outBuf .= "<th {$noUploadStyle}></th>";
             $outBuf .= "</tr>";
         }
         /* Job data */
         $outBuf .= "<tr>";
         $outBuf .= "<th {$jobStyle}>";
         $outBuf .= _("Job/Dependency");
         $outBuf .= "</th>";
         $outBuf .= "<th {$jobStyle}>";
         $outBuf .= _("Status");
         $outBuf .= "</th>";
         $outBuf .= "<th colspan=3 {$jobStyle}>";
         $outBuf .= htmlentities($job["job"]["job_name"], ENT_QUOTES);
         $outBuf .= "</th>";
         $outBuf .= "<th {$jobStyle}>";
         $outBuf .= _("Average items/sec");
         $outBuf .= "</th>";
         $outBuf .= "<th {$jobStyle}>";
         $outBuf .= _("ETA");
         $outBuf .= "</th>";
         $outBuf .= "<th {$jobStyle}>";
         $outBuf .= "</th></tr>";
         /* Job queue */
         foreach ($job['jobqueue'] as $jq_pk => $jobqueueRec) {
             $varJobQueueRow = array('jqId' => $jq_pk, 'jobId' => $jobqueueRec['jq_job_fk'], 'class' => $this->getClass($jobqueueRec), 'uriFull' => $uriFull, 'depends' => $jobqueueRec['jdep_jq_depends_fk'] ? $jobqueueRec['depends'] : array(), 'status' => $jobqueueRec['jq_endtext'], 'agentName' => $jobqueueRec['jq_type'], 'itemsProcessed' => $jobqueueRec['jq_itemsprocessed'], 'startTime' => substr($jobqueueRec['jq_starttime'], 0, 16), 'endTime' => empty($jobqueueRec["jq_endtime"]) ? '' : substr($jobqueueRec['jq_endtime'], 0, 16), 'endText' => $jobqueueRec['jq_endtext']);
             if (!empty($jobqueueRec["jq_endtime"])) {
                 $numSecs = strtotime($jobqueueRec['jq_endtime']) - strtotime($jobqueueRec['jq_starttime']);
             } else {
                 $numSecs = time() - strtotime($jobqueueRec['jq_starttime']);
             }
             $itemsPerSec = null;
             if ($jobqueueRec['jq_starttime']) {
                 $itemsPerSec = $this->showJobsDao->getNumItemsPerSec($jobqueueRec['jq_itemsprocessed'], $numSecs);
                 $varJobQueueRow['itemsPerSec'] = $itemsPerSec;
             }
             if (empty($jobqueueRec['jq_endtime'])) {
                 $varJobQueueRow['eta'] = $this->showJobsDao->getEstimatedTime($jobId, $jobqueueRec['jq_type'], $itemsPerSec, $job['job']['job_upload_fk']);
             }
             $varJobQueueRow['canDoActions'] = $_SESSION[Auth::USER_LEVEL] == PLUGIN_DB_ADMIN || Auth::getUserId() == $job['job']['job_user_fk'];
             $varJobQueueRow['isInProgress'] = $jobqueueRec['jq_end_bits'] == 0;
             $varJobQueueRow['isReady'] = $jobqueueRec['jq_end_bits'] == 1;
             switch ($jobqueueRec['jq_type']) {
                 case 'readmeoss':
                     $varJobQueueRow['download'] = "ReadMeOss";
                     break;
                 case 'spdx2':
                     $varJobQueueRow['download'] = "SPDX2 report";
                     break;
                 case 'spdx2tv':
                     $varJobQueueRow['download'] = "SPDX2 tag/value report";
                     break;
                 case 'dep5':
                     $varJobQueueRow['download'] = "DEP5 copyright file";
                     break;
                 default:
                     $varJobQueueRow['download'] = "";
             }
             $outBuf .= $this->renderString('ui-showjobs-jobqueue-row.html.twig', $varJobQueueRow);
         }
     }
     if ($numJobs > $this->maxUploadsPerPage) {
         $pagination = "<p>" . MenuEndlessPage($page, $next, $uriFullMenu);
     }
     return array('showJobsData' => $outBuf, 'pagination' => $pagination);
 }
Esempio n. 24
0
 public function Output()
 {
     $OutBuf = "";
     $uploadId = GetParm("upload", PARM_INTEGER);
     $item = GetParm("item", PARM_INTEGER);
     $filter = GetParm("filter", PARM_STRING);
     /* check upload permissions */
     if (!$this->uploadDao->isAccessible($uploadId, Auth::getGroupId())) {
         $text = _("Permission Denied");
         return "<h2>{$text}</h2>";
     }
     /* Get uploadtree_tablename */
     $uploadtree_tablename = GetUploadtreeTableName($uploadId);
     $this->uploadtree_tablename = $uploadtree_tablename;
     /************************/
     /* Show the folder path */
     /************************/
     $this->vars['dir2browse'] = Dir2Browse($this->Name, $item, NULL, 1, "Browse", -1, '', '', $uploadtree_tablename);
     if (empty($uploadId)) {
         return 'no item selected';
     }
     /** advanced interface allowing user to select dataset (agent version) */
     $dataset = $this->agentName . "_dataset";
     $arstable = $this->agentName . "_ars";
     /** get proper agent_id */
     $agentId = GetParm("agent", PARM_INTEGER);
     if (empty($agentId)) {
         $agentId = LatestAgentpk($uploadId, $arstable);
     }
     if ($agentId == 0) {
         /** schedule copyright */
         $OutBuf .= ActiveHTTPscript("Schedule");
         $OutBuf .= "<script language='javascript'>\n";
         $OutBuf .= "function Schedule_Reply()\n";
         $OutBuf .= "  {\n";
         $OutBuf .= "  if ((Schedule.readyState==4) && (Schedule.status==200 || Schedule.status==400))\n";
         $OutBuf .= "    document.getElementById('msgdiv').innerHTML = Schedule.responseText;\n";
         $OutBuf .= "  }\n";
         $OutBuf .= "</script>\n";
         $OutBuf .= "<form name='formy' method='post'>\n";
         $OutBuf .= "<div id='msgdiv'>\n";
         $OutBuf .= _("No data available.");
         $OutBuf .= "<input type='button' name='scheduleAgent' value='Schedule Agent'";
         $OutBuf .= "onClick=\"Schedule_Get('" . Traceback_uri() . "?mod=schedule_agent&upload={$uploadId}&agent=agent_{$this->agentName}')\">\n";
         $OutBuf .= "</input>";
         $OutBuf .= "</div> \n";
         $OutBuf .= "</form>\n";
         $this->vars['pageContent'] = $OutBuf;
         return;
     }
     $AgentSelect = AgentSelect($this->agentName, $uploadId, $dataset, $agentId, "onchange=\"addArsGo('newds', 'copyright_dataset');\"");
     /** change the copyright  result when selecting one version of copyright */
     if (!empty($AgentSelect)) {
         $action = Traceback_uri() . '?mod=' . GetParm('mod', PARM_RAW) . Traceback_parm_keep(array('upload', 'item'));
         $OutBuf .= "<script type='text/javascript'>\n        function addArsGo(formid, selectid)\n        {\n          var selectobj = document.getElementById(selectid);\n          var Agent_pk = selectobj.options[selectobj.selectedIndex].value;\n          document.getElementById(formid).action='{$action}'+'&agent='+Agent_pk;\n          document.getElementById(formid).submit();\n          return;\n        }\n      </script>";
         $OutBuf .= "<form action=\"{$action}\" id=\"newds\" method=\"POST\">{$AgentSelect}</form>";
     }
     $selectKey = $filter == 'nolic' ? 'nolic' : 'all';
     $OutBuf .= "<select name='view_filter' id='view_filter' onchange='ChangeFilter(this,{$uploadId}, {$item});'>";
     foreach (array('all' => _("Show all"), 'nolic' => _("Show files without licenses")) as $key => $text) {
         $selected = $selectKey == $key ? "selected" : "";
         $OutBuf .= "<option {$selected} value=\"{$key}\">{$text}</option>";
     }
     $OutBuf .= "</select>";
     $uri = preg_replace("/&item=([0-9]*)/", "", Traceback());
     list($tables, $tableVars) = $this->ShowUploadHist($uploadId, $item, $uri, $selectKey, $uploadtree_tablename, $agentId);
     $this->vars['tables'] = $tableVars;
     $this->vars['pageContent'] = $OutBuf . $tables;
     $this->vars['scriptBlock'] = $this->createScriptBlock();
     return;
 }
Esempio n. 25
0
 public function Output()
 {
     $uploadId = GetParm("upload", PARM_INTEGER);
     if (!$this->uploadDao->isAccessible($uploadId, Auth::getGroupId())) {
         return;
     }
     $itemId = GetParm("item", PARM_INTEGER);
     $this->vars['micromenu'] = Dir2Browse("browse", $itemId, NULL, $showBox = 0, "View-Meta");
     $V = "";
     $V .= $this->ShowTagInfo($uploadId, $itemId);
     $V .= $this->ShowPackageinfo($uploadId, $itemId, 1);
     $V .= $this->ShowMetaView($uploadId, $itemId);
     $V .= $this->ShowSightings($uploadId, $itemId);
     $V .= $this->ShowView($uploadId, $itemId);
     return $V;
 }
Esempio n. 26
0
 /**
  * \brief This function is called when user output is
  * requested.  This function is responsible for content.
  */
 protected function getPathAndName()
 {
     if ($this->State != \PLUGIN_STATE_READY) {
         throw new Exception('Download plugin is not ready');
     }
     global $container;
     /** @var DbManager $dbManager */
     $dbManager = $container->get('db.manager');
     if (!$dbManager->getDriver()) {
         throw new Exception("Missing database connection.");
     }
     $reportId = GetParm("report", PARM_INTEGER);
     $item = GetParm("item", PARM_INTEGER);
     $logJq = GetParm('log', PARM_INTEGER);
     if (!empty($reportId)) {
         $row = $dbManager->getSingleRow("SELECT * FROM reportgen WHERE job_fk = \$1", array($reportId), "reportFileName");
         if ($row === false) {
             throw new Exception("Missing report");
         }
         $path = $row['filepath'];
         $filename = basename($path);
         $uploadId = $row['upload_fk'];
     } elseif (!empty($logJq)) {
         $sql = "SELECT jq_log, job_upload_fk FROM jobqueue LEFT JOIN job ON job.job_pk = jobqueue.jq_job_fk WHERE jobqueue.jq_pk =\$1";
         $row = $dbManager->getSingleRow($sql, array($logJq), "jqLogFileName");
         if ($row === false) {
             throw new Exception("Missing report");
         }
         $path = $row['jq_log'];
         $filename = basename($path);
         $uploadId = $row['job_upload_fk'];
     } elseif (empty($item)) {
         throw new Exception("Invalid item parameter");
     } else {
         $path = RepPathItem($item);
         if (empty($path)) {
             throw new Exception("Invalid item parameter");
         }
         $fileHandle = @fopen(RepPathItem($item), "rb");
         /* note that CheckRestore() does not return. */
         if (empty($fileHandle)) {
             $this->CheckRestore($item, $path);
         }
         $row = $dbManager->getSingleRow("SELECT ufile_name, upload_fk FROM uploadtree WHERE uploadtree_pk = \$1", array($item));
         if ($row === false) {
             throw new Exception("Missing item");
         }
         $filename = $row['ufile_name'];
         $uploadId = $row['upload_fk'];
     }
     /* @var $uploadDao UploadDao */
     $uploadDao = $GLOBALS['container']->get('dao.upload');
     if (!Auth::isAdmin() && !$uploadDao->isAccessible($uploadId, Auth::getGroupId())) {
         throw new Exception("No Permission: {$uploadId}");
     }
     if (!file_exists($path)) {
         throw new Exception("File does not exist");
     }
     if (!is_file($path)) {
         throw new Exception("Not a regular file");
     }
     return array($path, $filename);
 }
Esempio n. 27
0
/**
 * @brief Get uploads and folder info, starting from $ParentFolder.
 * The array is sorted by folder and upload name.
 * Folders that are empty do not show up.
 * This is recursive!
 * NOTE: If there is a recursive loop in the folder table, then
 * this will loop INFINITELY.
 *
 * @param int $ParentFolder folder_pk, -1 for users root folder
 * @param string $FolderPath Used for recursion, caller should not specify.
 * @param Auth::PERM_READ | Auth::PERM_WRITE
 * @return array of {upload_pk, upload_desc, name, folder}
 */
function FolderListUploadsRecurse($ParentFolder = -1, $FolderPath = '', $perm = Auth::PERM_READ)
{
    global $PG_CONN;
    if (empty($PG_CONN)) {
        return array();
    }
    if (empty($ParentFolder)) {
        return array();
    }
    if ($perm != Auth::PERM_READ && ($perm = Auth::PERM_WRITE)) {
        return array();
    }
    if ($ParentFolder == "-1") {
        $ParentFolder = FolderGetTop();
    }
    $groupId = Auth::getGroupId();
    /* @var $uploadDao UploadDao */
    $uploadDao = $GLOBALS['container']->get('dao.upload');
    $List = array();
    /* Get list of uploads */
    /** mode 1<<1 = upload_fk **/
    $sql = "SELECT upload_pk, upload_desc, ufile_name, folder_name FROM folder,foldercontents,uploadtree, upload\n    WHERE \n        foldercontents.parent_fk = '{$ParentFolder}'\n    AND foldercontents.foldercontents_mode = " . FolderDao::MODE_UPLOAD . "\n    AND foldercontents.child_id = upload.upload_pk\n    AND folder.folder_pk = {$ParentFolder}\n    AND uploadtree.upload_fk = upload.upload_pk\n    AND uploadtree.parent is null\n    ORDER BY uploadtree.ufile_name,upload.upload_desc";
    $result = pg_query($PG_CONN, $sql);
    DBCheckResult($result, $sql, __FILE__, __LINE__);
    while ($R = pg_fetch_assoc($result)) {
        if (empty($R['upload_pk'])) {
            continue;
        }
        if ($perm == Auth::PERM_READ && !$uploadDao->isAccessible($R['upload_pk'], $groupId)) {
            continue;
        }
        if ($perm == Auth::PERM_WRITE && !$uploadDao->isEditable($R['upload_pk'], $groupId)) {
            continue;
        }
        $New['upload_pk'] = $R['upload_pk'];
        $New['upload_desc'] = $R['upload_desc'];
        $New['name'] = $R['ufile_name'];
        $New['folder'] = $FolderPath . "/" . $R['folder_name'];
        array_push($List, $New);
    }
    pg_free_result($result);
    /* Get list of subfolders and recurse */
    /** mode 1<<0 = folder_pk **/
    $sql = "SELECT A.child_id AS id,B.folder_name AS folder,B.folder_name AS subfolder\n\tFROM foldercontents AS A\n\tINNER JOIN folder AS B ON A.parent_fk = B.folder_pk\n\tAND A.foldercontents_mode = " . FolderDao::MODE_FOLDER . "\n\tAND A.parent_fk = '{$ParentFolder}'\n  AND B.folder_pk = {$ParentFolder}\n\tORDER BY B.folder_name;";
    $result = pg_query($PG_CONN, $sql);
    DBCheckResult($result, $sql, __FILE__, __LINE__);
    while ($R = pg_fetch_assoc($result)) {
        if (empty($R['id'])) {
            continue;
        }
        /* RECURSE! */
        $SubList = FolderListUploadsRecurse($R['id'], $FolderPath . "/" . $R['folder'], $perm);
        $List = array_merge($List, $SubList);
    }
    pg_free_result($result);
    /* Return findings */
    return $List;
}
Esempio n. 28
0
 /**
  * @brief Delete a group (for constraint, see http://www.fossology.org/projects/fossology/wiki/GroupsPerms )
  * @param $groupId
  * @throws \Exception
  * @return bool true on success
  */
 function deleteGroup($groupId)
 {
     $groupArray = $this->dbManager->getSingleRow('SELECT group_pk, group_name FROM groups WHERE group_pk=$1', array($groupId), __METHOD__ . '.exists');
     if ($groupArray === false) {
         throw new \Exception(_("Group does not exist.  Not deleted."));
     }
     $groupConstraint = $this->dbManager->getSingleRow('SELECT count(*) cnt FROM users WHERE user_name=$1', array($groupArray['group_name']), __METHOD__ . '.contraint');
     if ($groupConstraint['cnt']) {
         throw new \Exception(_("Group must not be deleted due to name constraint."));
     }
     if ($_SESSION[Auth::USER_LEVEL] != PLUGIN_DB_ADMIN) {
         $userId = Auth::getUserId();
         $adminLevel = $this->dbManager->getSingleRow("SELECT count(*) cnt FROM group_user_member WHERE group_fk=\$1 and user_fk=\$2 and group_perm=1", array($groupId, $userId), __METHOD__ . '.admin_lvl');
         if ($adminLevel['cnt'] < 1) {
             $text = _("Permission Denied.");
             throw new \Exception($text);
         }
     }
     $this->dbManager->begin();
     $this->dbManager->getSingleRow("DELETE FROM perm_upload WHERE group_fk=\$1", array($groupId), __METHOD__ . '.perm_upload');
     $this->dbManager->getSingleRow("DELETE FROM group_user_member WHERE group_fk=\$1", array($groupId), __METHOD__ . '.gum');
     $this->dbManager->getSingleRow("UPDATE users SET new_upload_group_fk=NULL, new_upload_perm=NULL WHERE new_upload_group_fk=\$1", array($groupId), __METHOD__ . '.upload_group');
     $newGroupIdStmt = '(SELECT group_fk FROM group_user_member WHERE user_fk=user_pk LIMIT 1)';
     $this->dbManager->getSingleRow("UPDATE users SET group_fk={$newGroupIdStmt} WHERE group_fk=\$1", array($groupId), __METHOD__ . '.active_group');
     $this->dbManager->getSingleRow("DELETE FROM groups WHERE group_pk=\$1", array($groupId), __METHOD__ . '.delete');
     $this->dbManager->commit();
     return true;
 }
Esempio n. 29
0
 /**
  * \brief Given a filename, return all uploadtree.
  * \param $Item     uploadtree_pk of tree to search, if empty, do global search
  * \param $Filename filename or pattern to search for, false if unused
  * \param $tag      tag (or tag pattern mytag%) to search for, false if unused
  * \param $Page     display page number
  * \param $SizeMin  Minimum file size, -1 if unused
  * \param $SizeMax  Maximum file size, -1 if unused
  * \param $searchtype "containers" or "allfiles"
  * \return array of uploadtree recs.  Each record contains uploadtree_pk, parent, 
  *         upload_fk, pfile_fk, ufile_mode, and ufile_name
  */
 function GetResults($Item, $Filename, $tag, $Page, $SizeMin, $SizeMax, $searchtype, $License, $Copyright)
 {
     global $PG_CONN;
     $UploadtreeRecs = array();
     // uploadtree record array to return
     $NeedTagfileTable = true;
     $NeedTaguploadtreeTable = true;
     if ($Item) {
         /* Find lft and rgt bounds for this $Uploadtree_pk  */
         $row = $this->uploadDao->getUploadEntry($Item);
         if (empty($row)) {
             $text = _("Invalid URL, nonexistant item");
             return "<h2>{$text} {$Item}</h2>";
         }
         $lft = $row["lft"];
         $rgt = $row["rgt"];
         $upload_pk = $row["upload_fk"];
         /* Check upload permission */
         if (!$this->uploadDao->isAccessible($upload_pk, Auth::getGroupId())) {
             return $UploadtreeRecs;
         }
     }
     /* Start the result select stmt */
     $SQL = "SELECT DISTINCT uploadtree_pk, parent, upload_fk, uploadtree.pfile_fk, ufile_mode, ufile_name FROM uploadtree";
     if (!empty($License)) {
         $SQL .= ", ( SELECT license_ref.rf_shortname, license_file.rf_fk, license_file.pfile_fk\n                  FROM license_file JOIN license_ref ON license_file.rf_fk = license_ref.rf_pk) AS pfile_ref";
     }
     if (!empty($Copyright)) {
         $SQL .= ",copyright";
     }
     /* Figure out the tag_pk's of interest */
     if (!empty($tag)) {
         $sql = "select tag_pk from tag where tag ilike '{$tag}'";
         $result = pg_query($PG_CONN, $sql);
         DBCheckResult($result, $sql, __FILE__, __LINE__);
         if (pg_num_rows($result) < 1) {
             /* tag doesn't match anything, so no results are possible */
             pg_free_result($result);
             return $UploadtreeRecs;
         }
         /* Make a list of the tag_pk's that satisfy the criteria */
         $tag_pk_array = pg_fetch_all($result);
         pg_free_result($result);
         /* add the tables needed for the tag query */
         $sql = "select tag_file_pk from tag_file limit 1";
         $result = pg_query($PG_CONN, $sql);
         DBCheckResult($result, $sql, __FILE__, __LINE__);
         if (pg_num_rows($result) < 1) {
             /* tag_file didn't have data, don't add the tag_file table for tag query */
             $NeedTagfileTable = false;
         } else {
             $SQL .= ", tag_file";
         }
         pg_free_result($result);
         /* add the tables needed for the tag query */
         $sql = "select tag_uploadtree_pk from tag_uploadtree limit 1";
         $result = pg_query($PG_CONN, $sql);
         DBCheckResult($result, $sql, __FILE__, __LINE__);
         if (pg_num_rows($result) < 1) {
             /* tag_uploadtree didn't have data, don't add the tag_uploadtree table for tag query */
             $NeedTaguploadtreeTable = false;
         } else {
             $SQL .= ", tag_uploadtree";
         }
         pg_free_result($result);
         if (!$NeedTagfileTable && !$NeedTaguploadtreeTable) {
             $SQL .= ", tag_file, tag_uploadtree";
         }
     }
     /* do we need the pfile table? Yes, if any of these are a search critieria.  */
     if (!empty($SizeMin) or !empty($SizeMax)) {
         $SQL .= ", pfile where pfile_pk=uploadtree.pfile_fk ";
         $NeedAnd = true;
     } else {
         $SQL .= " where ";
         $NeedAnd = false;
     }
     /* add the tag conditions */
     if (!empty($tag)) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= "(";
         $NeedOr = false;
         foreach ($tag_pk_array as $tagRec) {
             if ($NeedOr) {
                 $SQL .= " OR";
             }
             $SQL .= "(";
             $tag_pk = $tagRec['tag_pk'];
             if ($NeedTagfileTable && $NeedTaguploadtreeTable) {
                 $SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}) ";
             } else {
                 if ($NeedTaguploadtreeTable) {
                     $SQL .= "uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}";
                 } else {
                     if ($NeedTagfileTable) {
                         $SQL .= "uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}";
                     } else {
                         $SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}) ";
                     }
                 }
             }
             $SQL .= ")";
             $NeedOr = 1;
         }
         $NeedAnd = 1;
         $SQL .= ")";
     }
     if ($Filename) {
         $Filename = str_replace("'", "''", $Filename);
         // protect DB
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " ufile_name ilike '{$Filename}'";
         $NeedAnd = 1;
     }
     if (!empty($SizeMin)) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " pfile.pfile_size >= {$SizeMin}";
         $NeedAnd = 1;
     }
     if (!empty($SizeMax)) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " pfile.pfile_size <= {$SizeMax}";
         $NeedAnd = 1;
     }
     if ($Item) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= "  upload_fk = {$upload_pk} AND lft >= {$lft} AND rgt <= {$rgt}";
         $NeedAnd = 1;
     }
     /* search only containers */
     $dir_ufile_mode = 536888320;
     if ($searchtype == 'containers') {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0)";
         $NeedAnd = 1;
     }
     if ($searchtype == 'directory') {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0) AND (ufile_mode != {$dir_ufile_mode}) and pfile_fk != 0";
         $NeedAnd = 1;
     }
     /** license and copyright */
     if (!empty($License)) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " uploadtree.pfile_fk=pfile_ref.pfile_fk and pfile_ref.rf_shortname ilike '{$License}'";
         $NeedAnd = 1;
     }
     if (!empty($Copyright)) {
         if ($NeedAnd) {
             $SQL .= " AND";
         }
         $SQL .= " uploadtree.pfile_fk=copyright.pfile_fk and copyright.content ilike '%{$Copyright}%'";
     }
     $Offset = $Page * $this->MaxPerPage;
     $SQL .= " ORDER BY ufile_name, uploadtree.pfile_fk";
     $SQL .= " LIMIT {$this->MaxPerPage} OFFSET {$Offset};";
     $result = pg_query($PG_CONN, $SQL);
     DBCheckResult($result, $SQL, __FILE__, __LINE__);
     if (pg_num_rows($result)) {
         while ($row = pg_fetch_assoc($result)) {
             if (!$this->uploadDao->isAccessible($row['upload_fk'], Auth::getGroupId())) {
                 continue;
             }
             $UploadtreeRecs[] = $row;
         }
     }
     pg_free_result($result);
     return $UploadtreeRecs;
 }
Esempio n. 30
0
 /**
  * \brief This function returns the scheduler status.
  */
 function Output()
 {
     global $PG_CONN;
     global $SysConf;
     $V = "";
     $formVars = array();
     if (!$PG_CONN) {
         echo _("NO DB connection");
     }
     if ($this->State != PLUGIN_STATE_READY) {
         return 0;
     }
     $uploadtree_pk = GetParm("item", PARM_INTEGER);
     if (empty($uploadtree_pk)) {
         return;
     }
     $upload_pk = GetParm("upload", PARM_INTEGER);
     if (empty($upload_pk)) {
         return;
     }
     if (!$this->uploadDao->isAccessible($upload_pk, Auth::getGroupId())) {
         $text = _("Permission Denied");
         return "<h2>{$text}</h2>";
     }
     $uploadtreeTablename = GetUploadtreeTableName($upload_pk);
     $warnings = array();
     $agent_pks_dict = $this->getAgentPksFromRequest($upload_pk);
     $agent_pks = array();
     foreach ($agent_pks_dict as $agent_name => $agent_pk) {
         if ($agent_pk === false) {
             $warnings[] = _("No information for agent: {$agent_name}");
         } else {
             $agent_pks[] = $agent_pk;
             $formVars["agentToInclude_" . $agent_name] = "1";
         }
     }
     $dltext = GetParm("output", PARM_STRING) == 'dltext';
     $formVars["dltext"] = $dltext;
     $NomostListNum = @$SysConf['SYSCONFIG']['NomostListNum'];
     $formVars["NomostListNum"] = $NomostListNum;
     $includeSubfolder = GetParm("doNotIncludeSubfolder", PARM_STRING) !== "yes";
     $formVars["includeSubfolder"] = $includeSubfolder;
     $ignore = GetParm("showContainers", PARM_STRING) !== "yes";
     $formVars["showContainers"] = !$ignore;
     $exclude = GetParm("exclude", PARM_STRING);
     $formVars["exclude"] = $exclude;
     $V .= $this->renderString("ui-license-list-form.html.twig", $formVars);
     $V .= "<hr/>";
     $lines = $this->createListOfLines($uploadtreeTablename, $uploadtree_pk, $agent_pks, $NomostListNum, $includeSubfolder, $exclude, $ignore);
     if (array_key_exists("warn", $lines)) {
         $warnings[] = $lines["warn"];
         unset($lines["warn"]);
     }
     foreach ($warnings as $warning) {
         $V .= "<br><b>{$warning}</b><br>";
     }
     if ($dltext) {
         $request = $this->getRequest();
         $itemId = intval($request->get('item'));
         $path = Dir2Path($itemId, $uploadtreeTablename);
         $fileName = $path[count($path) - 1]['ufile_name'] . ".txt";
         $headers = array("Content-Type" => "text", "Content-Disposition" => "attachment; filename=\"{$fileName}\"");
         $response = new Response(implode("\n", $lines), Response::HTTP_OK, $headers);
         return $response;
     } else {
         return $V . '<pre>' . implode("\n", $lines) . '</pre>';
     }
 }