Beispiel #1
0
 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));
 }
Beispiel #3
0
	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));
 }
Beispiel #5
0
	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
Beispiel #6
0
 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
 }
Beispiel #7
0
 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;
 }
Beispiel #8
0
	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
Beispiel #9
0
 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