function render() { $spotnntp_hdr = new SpotNntp($this->_settings['nntp_hdr']); # Haal de volledige spotinhoud op $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($this->_messageid, $spotnntp_hdr); # sluit de connectie voor de header, en open een nieuwe connectie voor de nzb $spotnntp_hdr->quit(); $spotnntp_img = new SpotNntp($this->_settings['nntp_nzb']); # # is het een array met een segment nummer naar de image, of is het # een string met de URL naar de image? # if (is_array($fullSpot['image'])) { Header("Content-Type: image/jpeg"); echo $spotnntp_img->getImage($fullSpot['image']['segment']); } else { $x = file_get_contents($fullSpot['image']); foreach ($http_response_header as $hdr) { if (substr($hdr, 0, strlen('Content-Type: ')) == 'Content-Type: ') { header($hdr); } # if } # foreach echo $x; } # else }
function render() { $spotnntp = new SpotNntp($this->_settings['nntp_hdr']); # Haal de volledige spotinhoud op $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($this->_messageid, $spotnntp); $comments = $spotsOverview->getSpotComments($this->_messageid, $spotnntp); # zet de page title $this->_pageTitle = "spot: " . $fullSpot['title']; #- display stuff -# $this->template('spotinfo', array('spot' => $fullSpot, 'comments' => $comments)); }
public function postComment($user, $comment) { $errorList = array(); # haal de spot op waar dit een reply op is $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($comment['inreplyto'], $user['userid'], $this->_nntp_post); # als de hashcash al niet klopt, doen we verder geen moeite if (substr(sha1('<' . $comment['newmessageid'] . '>'), 0, 4) != '0000') { $errorList[] = array('postcomment_invalidhashcash', array()); } # if # Body mag niet leeg zijn of heel kort $comment['body'] = trim($comment['body']); if (strlen($comment['body']) < 2) { $errorList[] = array('postcomment_bodytooshort', array()); } # if # Rating mag niet uit de range vallen if (($comment['rating'] > 10) || ($comment['rating'] < 0)) { $errorList[] = array('postcomment_ratinginvalid', array()); } # if # controleer dat de messageid waarop we replyen overeenkomt # met het newMessageid om replay-attacks te voorkomen. $replyToPart = substr($comment['inreplyto'], 0, strpos($comment['inreplyto'], '@')); if (substr($comment['newmessageid'], 0, strlen($replyToPart)) != $replyToPart) { $errorList[] = array('postcomment_replayattack', array()); } # if # controleer dat het random getal niet recentelijk ook al gebruikt # is voor deze messageid (hiermee voorkomen we dat de hashcash niet # steeds herberekend wordt voor het volspammen van 1 spot). if (!$this->_db->isCommentMessageIdUnique($comment['newmessageid'])) { $errorList[] = array('postcomment_replayattack', array()); } # if # en post daadwerkelijk de comment if (empty($errorList)) { $this->_nntp_post->postComment($user, $this->_settings->get('privatekey'), # Server private key $this->_settings->get('comment_group'), $fullSpot['title'], $comment); $this->_db->addPostedComment($user['userid'], $comment); } # if return $errorList; } # postComment
function render() { $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $filter = $spotsOverview->filterToQuery($this->_params['search']); $pageNr = $this->_params['page']; # laad de spots $spotsTmp = $spotsOverview->loadSpots($pageNr, $this->_prefs['perpage'], $filter, array('field' => $this->_params['sortby'], 'direction' => $this->_params['sortdir'])); $fullSpots = array(); $spotnntp = new SpotNntp($this->_settings['nntp_hdr'], $this->_settings['use_openssl']); foreach ($spotsTmp['list'] as $spot) { try { $fullSpots[] = $spotsOverview->getFullSpot($spot['messageid'], $spotnntp); } catch (Exception $x) { // Article not found. ignore. } } $this->template('atom', array('spots' => $fullSpots)); }
function handleNzbAction($messageids, $userSession, $action, $hdr_spotnntp, $nzb_spotnntp) { if (!is_array($messageids)) { $messageids = array($messageids); } # if # Controleer de security $userSession['security']->fatalPermCheck(SpotSecurity::spotsec_retrieve_nzb, ''); if ($action != 'display') { $userSession['security']->fatalPermCheck(SpotSecurity::spotsec_download_integration, $action); } # if # Haal de volledige spot op en gebruik de informatie daarin om de NZB file op te halen $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $nzbList = array(); foreach($messageids as $thisMsgId) { $fullSpot = $spotsOverview->getFullSpot($thisMsgId, $userSession['user']['userid'], $hdr_spotnntp); if (!empty($fullSpot['nzb'])) { $nzbList[] = array('spot' => $fullSpot, 'nzb' => $spotsOverview->getNzb($fullSpot['nzb'], $nzb_spotnntp)); } # if } # foreach # send nzblist to NzbHandler plugin $nzbHandlerFactory = new NzbHandler_Factory(); $nzbHandler = $nzbHandlerFactory->build($this->_settings, $action, $userSession['user']['prefs']['nzbhandling']); $nzbHandler->processNzb($fullSpot, $nzbList); # en voeg hem toe aan de lijst met downloads if ($userSession['user']['prefs']['keep_downloadlist']) { if ($userSession['security']->allowed(SpotSecurity::spotsec_keep_own_downloadlist, '')) { foreach($messageids as $thisMsgId) { $this->_db->addToSpotStateList(SpotDb::spotstate_Down, $thisMsgId, $userSession['user']['userid']); } # foreach } # if } # if # en verstuur een notificatie $spotsNotifications = new SpotNotifications($this->_db, $this->_settings, $userSession); $spotsNotifications->sendNzbHandled($action, $fullSpot); } # handleNzbAction
function handleNzbAction($messageid, $action, $hdr_spotnntp, $nzb_spotnntp) { # Haal de volledige spot op en gebruik de informatie daarin om de NZB file op te halen $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($messageid, $hdr_spotnntp); $nzb = $spotsOverview->getNzb($fullSpot['nzb'], $nzb_spotnntp); # handel dit alles af naar gelang de actie die gekozen is switch ($action) { case 'disable': break; # gewoon nzb file output geven # gewoon nzb file output geven case 'display': Header("Content-Type: application/x-nzb"); Header("Content-Disposition: attachment; filename=\"" . urlencode($fullSpot['title']) . ".nzb\""); echo $nzb; break; # display # Voor deze acties moeten we de NZB file op het FS wegschrijven, dus dan doen we dat # display # Voor deze acties moeten we de NZB file op het FS wegschrijven, dus dan doen we dat case 'save': $this->saveNzbFile($fullSpot, $nzb); break; case 'runcommand': $this->saveNzbFile($fullSpot, $nzb); $this->runCommand($fullSpot); break; # runcommand # runcommand case 'push-sabnzbd': $this->runHttp($fullSpot, $nzb, $action); break; # push-sabnzbd # push-sabnzbd default: throw new Exception("Invalid action: " . $action); } # switch # en voeg hem toe aan de lijst met downloads if ($this->_settings['keep_downloadlist']) { $this->_db->addDownload($fullSpot['messageid']); } # if }
public function reportSpotAsSpam($user, $report) { $errorList = array(); # Controleer eerst of de user al een report heeft aangemaakt, dan kunnen we gelijk stoppen. if ($this->_db->isReportPlaced($report['inreplyto'], $user['userid'])) { $errorList[] = array('postreport_alreadyreported', array()); } # if # haal de spot op waar dit een reply op is $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($report['inreplyto'], $user['userid'], $this->_nntp_post); # als de hashcash al niet klopt, doen we verder geen moeite if (substr(sha1('<' . $report['newmessageid'] . '>'), 0, 4) != '0000') { $errorList[] = array('postcomment_invalidhashcash', array()); } # if # Body mag niet leeg zijn of heel kort $report['body'] = trim($report['body']); if (strlen($report['body']) < 2) { $errorList[] = array('postcomment_bodytooshort', array()); } # if # controleer dat de messageid waarop we replyen overeenkomt # met het newMessageid om replay-attacks te voorkomen. $replyToPart = substr($report['inreplyto'], 0, strpos($report['inreplyto'], '@')); if (substr($report['newmessageid'], 0, strlen($replyToPart)) != $replyToPart) { $errorList[] = array('postcomment_replayattack', array()); } # if # controleer dat het random getal niet recentelijk ook al gebruikt # is voor deze messageid (hiermee voorkomen we dat de hashcash niet # steeds herberekend wordt voor het volspammen van 1 spot). if (!$this->_db->isReportMessageIdUnique($report['newmessageid'])) { $errorList[] = array('postcomment_replayattack', array()); } # if # Body komt vanuit het form als UTF-8, maar moet verzonden worden als ISO-8859-1 # De database wil echter alleen UTF-8, dus moeten we dat even opsplitsen $dbReport = $report; $report['body'] = utf8_decode($report['body']); $report['title'] = 'REPORT <' . $report['inreplyto'] . '> ' . $fullSpot['title']; # en post daadwerkelijk de report if (empty($errorList)) { $this->_nntp_post->reportSpotAsSpam($user, $this->_settings->get('privatekey'), $this->_settings->get('report_group'), $report); $this->_db->addPostedReport($user['userid'], $dbReport); } # if return $errorList; }
function handleNzbAction($messageids, $action, $hdr_spotnntp, $nzb_spotnntp) { if (!is_array($messageids)) { $messageids = array($messageids); } # if # Haal de volledige spot op en gebruik de informatie daarin om de NZB file op te halen $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $nzbList = array(); foreach($messageids as $thisMsgId) { $fullSpot = $spotsOverview->getFullSpot($thisMsgId, $hdr_spotnntp); $nzbList[] = $spotsOverview->getNzb($fullSpot['nzb'], $nzb_spotnntp); } # foreach # nu we alle nzb files hebben, trekken we de 'file' secties eruit, # en plakken die in onze overkoepelende nzb $nzbXml = simplexml_load_string('<?xml version="1.0" encoding="iso-8859-1" ?> <!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.0//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.0.dtd"> <nzb xmlns="http://www.newzbin.com/DTD/2003/nzb"></nzb>'); $domNzbXml = dom_import_simplexml($nzbXml); foreach($nzbList as $nzb) { $oneNzbFile = simplexml_load_string($nzb); # add each file section to the larger XML object foreach($oneNzbFile->file as $file) { # Import the file into the larger NZB object $domFile = $domNzbXml->ownerDocument->importNode(dom_import_simplexml($file), TRUE); $domNzbXml->appendChild($domFile); } # foreach } # foreach $nzb = $nzbXml->asXml(); # handel dit alles af naar gelang de actie die gekozen is switch ($action) { case 'disable' : break; # gewoon nzb file output geven case 'display' : { Header("Content-Type: application/x-nzb"); Header("Content-Disposition: attachment; filename=\"" . urlencode($fullSpot['title']) . ".nzb\""); echo $nzb; break; } # display # Voor deze acties moeten we de NZB file op het FS wegschrijven, dus dan doen we dat case 'save' : $this->saveNzbFile($fullSpot, $nzb); break; case 'runcommand' : { $this->saveNzbFile($fullSpot, $nzb); $this->runCommand($fullSpot); break; } # runcommand case 'push-sabnzbd' : { $this->runHttp($fullSpot, $nzb, $action); break; } # push-sabnzbd default : throw new Exception("Invalid action: " . $action); } # switch # en voeg hem toe aan de lijst met downloads if ($this->_settings['keep_downloadlist']) { foreach($messageids as $thisMsgId) { $this->_db->addDownload($thisMsgId); } # foreach } # if } # handleNzbAction
function handleNzbAction($messageids, $action, $hdr_spotnntp, $nzb_spotnntp) { if (!is_array($messageids)) { $messageids = array($messageids); } # if # Haal de volledige spot op en gebruik de informatie daarin om de NZB file op te halen $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $nzbList = array(); foreach ($messageids as $thisMsgId) { $fullSpot = $spotsOverview->getFullSpot($thisMsgId, $hdr_spotnntp); if (!empty($fullSpot['nzb'])) { $nzbList[] = array('spot' => $fullSpot, 'nzb' => $spotsOverview->getNzb($fullSpot['nzb'], $nzb_spotnntp)); } # if } # foreach # nu we alle nzb files hebben, trekken we de 'file' secties eruit, # en plakken die in onze overkoepelende nzb switch ($this->_settings['nzbhandling']['prepare_action']) { case 'zip': $nzb = $this->zipNzbList($nzbList); $mimeType = 'application/x-zip-compressed'; $fileName = 'SpotWeb_' . microtime(true) . '.zip'; break; # zip # zip default: $nzb = $this->mergeNzbList($nzbList); $mimeType = 'application/x-nzb'; $fileName = urlencode($fullSpot['title']) . '.nzb'; break; # merge } # switch # handel dit alles af naar gelang de actie die gekozen is switch ($action) { case 'disable': break; # gewoon nzb file output geven # gewoon nzb file output geven case 'display': Header("Content-Type: " . $mimeType); Header("Content-Disposition: attachment; filename=\"" . $fileName . "\""); echo $nzb; break; # display # Voor deze acties moeten we de NZB file op het FS wegschrijven, dus dan doen we dat # display # Voor deze acties moeten we de NZB file op het FS wegschrijven, dus dan doen we dat case 'save': $this->saveNzbFile($fullSpot, $nzb); break; case 'runcommand': $this->saveNzbFile($fullSpot, $nzb); $this->runCommand($fullSpot); break; # runcommand # runcommand case 'push-sabnzbd': $fileParams = array('content' => $nzb, 'name' => $fileName, 'mimetype' => $mimeType); $this->runHttp($fullSpot, $fileParams, $action); break; # push-sabnzbd # push-sabnzbd default: throw new Exception("Invalid action: " . $action); } # switch # en voeg hem toe aan de lijst met downloads if ($this->_settings['keep_downloadlist']) { foreach ($messageids as $thisMsgId) { $this->_db->addDownload($thisMsgId); } # foreach } # if }
function getFullSpot($msgId, $markAsRead) { # Controleer de users' rechten $this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_view_spotdetail, ''); $spotnntp = new SpotNntp($this->_settings->get('nntp_hdr')); $spotsOverview = new SpotsOverview($this->_db, $this->_settings); $fullSpot = $spotsOverview->getFullSpot($msgId, $this->_currentSession['user']['userid'], $spotnntp); # seen list if ($markAsRead) { if ($this->_spotSec->allowed(SpotSecurity::spotsec_keep_own_seenlist, '')) { if ($this->_currentSession['user']['prefs']['keep_seenlist']) { if ($fullSpot['seenstamp'] == NULL) { $this->_db->addToSpotStateList(SpotDb::spotstate_Seen, $msgId, $this->_currentSession['user']['userid']); } # if } # if } # if allowed } # if return $fullSpot; } # getFullSpot