forked from HPR/hpr_hub
		
	
		
			
	
	
		
			165 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			165 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								header('Content-Type: application/json');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require "/home/hpr/php/include.php";
							 | 
						||
| 
								 | 
							
								$pos = strpos($_SERVER['REQUEST_URI'], '?');
							 | 
						||
| 
								 | 
							
								if ( ! $pos === false) {
							 | 
						||
| 
								 | 
							
								  header("Status: 412 Precondition Failed");
							 | 
						||
| 
								 | 
							
								  include '412.shtml';
							 | 
						||
| 
								 | 
							
								  file_put_contents($naughtyfile, getUserIP(), FILE_APPEND | LOCK_EX );
							 | 
						||
| 
								 | 
							
								  exit;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// --------------------------------------------
							 | 
						||
| 
								 | 
							
								// Clean up stale reservations
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ip = $_SERVER["REMOTE_ADDR"];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Remove any stale requests. 
							 | 
						||
| 
								 | 
							
								# This should be enough to deter attackers while been short enough to allow real hosts to request a show.
							 | 
						||
| 
								 | 
							
								$query_delete_old = "DELETE
							 | 
						||
| 
								 | 
							
								FROM
							 | 
						||
| 
								 | 
							
								  reservations
							 | 
						||
| 
								 | 
							
								WHERE
							 | 
						||
| 
								 | 
							
								  reservations.timestamp + INTERVAL 1 HOUR <= UTC_TIMESTAMP()
							 | 
						||
| 
								 | 
							
								  AND reservations.status = 'REQUEST_UNVERIFIED'";
							 | 
						||
| 
								 | 
							
								$result_delete_old = @mysqli_query($connection, $query_delete_old);
							 | 
						||
| 
								 | 
							
								logextra( "Deleting requests older than 1 hour" . $result_delete_old );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Remove stale requests from this IP Address after 15 minutes. 
							 | 
						||
| 
								 | 
							
								# This should be enough to deter attackers while been short enough to allow real hosts to request a show.
							 | 
						||
| 
								 | 
							
								$query_delete = "DELETE FROM reservations WHERE reservations.ip = '$ip' AND reservations.timestamp + INTERVAL 15 MINUTE <= UTC_TIMESTAMP() AND reservations.status = 'REQUEST_UNVERIFIED'";
							 | 
						||
| 
								 | 
							
								$result_delete = @mysqli_query($connection, $query_delete);
							 | 
						||
| 
								 | 
							
								logextra( "Remove stale requests from this \"${ip}\" IP Address after 15 minutes. " . $result_delete_old );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$query = mysqli_query($connection, "SELECT max(date), max(id) from eps WHERE eps.date <= UTC_DATE()");
							 | 
						||
| 
								 | 
							
								$current_episode_array = mysqli_fetch_row($query);
							 | 
						||
| 
								 | 
							
								$current_episode_date = $current_episode_array[0];
							 | 
						||
| 
								 | 
							
								$current_episode_number = $current_episode_array[1];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// --------------------------------------------
							 | 
						||
| 
								 | 
							
								// Populate array with future shows and reservations
							 | 
						||
| 
								 | 
							
								$show_array = array ();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// REQUEST_UNVERIFIED → SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET
							 | 
						||
| 
								 | 
							
								$ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date FROM eps, hosts WHERE eps.valid=1 AND eps.hostid = hosts.hostid AND eps.date >= '$current_episode_date' ORDER BY date DESC";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ep_retrieve = "SELECT
							 | 
						||
| 
								 | 
							
								  hosts.host,
							 | 
						||
| 
								 | 
							
								  eps.id,
							 | 
						||
| 
								 | 
							
								  eps.title,
							 | 
						||
| 
								 | 
							
								  eps.date,
							 | 
						||
| 
								 | 
							
								  COUNT( assets.extension) AS numfiles
							 | 
						||
| 
								 | 
							
								FROM
							 | 
						||
| 
								 | 
							
								  eps
							 | 
						||
| 
								 | 
							
								  LEFT JOIN hosts ON eps.hostid = hosts.hostid
							 | 
						||
| 
								 | 
							
								  LEFT JOIN assets ON eps.id = assets.episode_id
							 | 
						||
| 
								 | 
							
								WHERE
							 | 
						||
| 
								 | 
							
								  eps.valid = 1
							 | 
						||
| 
								 | 
							
								  AND eps.date >= '$current_episode_date'
							 | 
						||
| 
								 | 
							
								GROUP BY eps.id;";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($result = mysqli_query($connection, $ep_retrieve)) {
							 | 
						||
| 
								 | 
							
								  while ($row = mysqli_fetch_array($result)) {
							 | 
						||
| 
								 | 
							
								    $id = $row['id'];
							 | 
						||
| 
								 | 
							
								    $date = $row['date'];
							 | 
						||
| 
								 | 
							
								    $title = $row['title'];
							 | 
						||
| 
								 | 
							
								    $host = $row['host'];
							 | 
						||
| 
								 | 
							
								    $numfiles = $row['numfiles'];
							 | 
						||
| 
								 | 
							
								    if( isset($numfiles) and $numfiles >= 3 ) {
							 | 
						||
| 
								 | 
							
								      $status = "Finished";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								      $status = "Reserved";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    $show_array[$id]  = array ( "date" => date('Y-m-d', strtotime($date) ), 
							 | 
						||
| 
								 | 
							
								                                "title" => $title,
							 | 
						||
| 
								 | 
							
								                                "host" => $host,
							 | 
						||
| 
								 | 
							
								                                "status" => $status
							 | 
						||
| 
								 | 
							
								                              );
							 | 
						||
| 
								 | 
							
								  } 
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// REQUEST_UNVERIFIED → SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Populate array with currently processing shows EMAIL_LINK_CLICKED
							 | 
						||
| 
								 | 
							
								$ep_retrieve = "
							 | 
						||
| 
								 | 
							
								SELECT
							 | 
						||
| 
								 | 
							
								  reservations.ep_num,
							 | 
						||
| 
								 | 
							
								  reservations.ep_date,
							 | 
						||
| 
								 | 
							
								  reservations.status
							 | 
						||
| 
								 | 
							
								FROM
							 | 
						||
| 
								 | 
							
								  reservations
							 | 
						||
| 
								 | 
							
								WHERE
							 | 
						||
| 
								 | 
							
								  reservations.verified = 1
							 | 
						||
| 
								 | 
							
								  AND reservations.ep_date >= '$current_episode_date'
							 | 
						||
| 
								 | 
							
								ORDER BY
							 | 
						||
| 
								 | 
							
								  reservations.ep_date DESC";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($result = mysqli_query($connection, $ep_retrieve)) {
							 | 
						||
| 
								 | 
							
								  while ($row = mysqli_fetch_array($result)) {
							 | 
						||
| 
								 | 
							
								    $id = $row['ep_num'];
							 | 
						||
| 
								 | 
							
								    $date = $row['ep_date'];
							 | 
						||
| 
								 | 
							
								    $status = $row['status'];
							 | 
						||
| 
								 | 
							
								    $show_array[$id]  = array ( "date" => date('Y-m-d', strtotime($date) ), 
							 | 
						||
| 
								 | 
							
								                                "title" => $status,
							 | 
						||
| 
								 | 
							
								                                "host" => "Unverified",
							 | 
						||
| 
								 | 
							
								                                "status" => "Processing"
							 | 
						||
| 
								 | 
							
								                              );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Populate array with temporary reservations.
							 | 
						||
| 
								 | 
							
								$ep_retrieve = "SELECT r.ep_num, r.ep_date, r.timestamp + INTERVAL 1 HOUR - UTC_TIMESTAMP() AS seconds_to_expiration FROM reservations r
							 | 
						||
| 
								 | 
							
								WHERE r.timestamp + INTERVAL 1 HOUR > UTC_TIMESTAMP() AND r.verified =0 AND r.ep_date >= '$current_episode_date' ORDER BY r.ep_date DESC";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($result = mysqli_query($connection, $ep_retrieve)) {
							 | 
						||
| 
								 | 
							
								  while ($row = mysqli_fetch_array($result)) {
							 | 
						||
| 
								 | 
							
								    $id = $row['ep_num'];
							 | 
						||
| 
								 | 
							
								    $date = $row['ep_date'];
							 | 
						||
| 
								 | 
							
								    $seconds_to_expiration = $row['seconds_to_expiration'];
							 | 
						||
| 
								 | 
							
								    $minutes = floor($seconds_to_expiration / 60) + 1;
							 | 
						||
| 
								 | 
							
								    $show_array[$id]  = array ( "date" => date('Y-m-d', strtotime($date) ), 
							 | 
						||
| 
								 | 
							
								                                "title" => " Available again in $minutes minutes",
							 | 
						||
| 
								 | 
							
								                                "host" => "Unverified",
							 | 
						||
| 
								 | 
							
								                                "status" => "Locked"
							 | 
						||
| 
								 | 
							
								                              );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ep_retrieve = "SELECT
							 | 
						||
| 
								 | 
							
								  hosts.host,
							 | 
						||
| 
								 | 
							
								  eps.id,
							 | 
						||
| 
								 | 
							
								  eps.title,
							 | 
						||
| 
								 | 
							
								  eps.date 
							 | 
						||
| 
								 | 
							
								FROM
							 | 
						||
| 
								 | 
							
								  eps,
							 | 
						||
| 
								 | 
							
								  hosts,
							 | 
						||
| 
								 | 
							
								  assets
							 | 
						||
| 
								 | 
							
								WHERE
							 | 
						||
| 
								 | 
							
								  eps.valid = 1
							 | 
						||
| 
								 | 
							
								  AND eps.hostid = hosts.hostid
							 | 
						||
| 
								 | 
							
								  AND eps.id = assets.episode_id
							 | 
						||
| 
								 | 
							
								  AND assets.extension = 'ogg'
							 | 
						||
| 
								 | 
							
								  AND eps.date >= '$current_episode_date'
							 | 
						||
| 
								 | 
							
								ORDER BY
							 | 
						||
| 
								 | 
							
								  date DESC";
							 | 
						||
| 
								 | 
							
								if ($result = mysqli_query($connection, $ep_retrieve)) {
							 | 
						||
| 
								 | 
							
								  while ($row = mysqli_fetch_array($result)) {
							 | 
						||
| 
								 | 
							
								    $id = $row['id'];
							 | 
						||
| 
								 | 
							
								    $date = $row['date'];
							 | 
						||
| 
								 | 
							
								    $title = $row['title'];
							 | 
						||
| 
								 | 
							
								    $host = $row['host'];
							 | 
						||
| 
								 | 
							
								    $show_array[$id]  = array ( "date" => date('Y-m-d', strtotime($date) ), 
							 | 
						||
| 
								 | 
							
								                                "title" => $title,
							 | 
						||
| 
								 | 
							
								                                "host" => $host,
							 | 
						||
| 
								 | 
							
								                                "status" => "Finished"
							 | 
						||
| 
								 | 
							
								                              );
							 | 
						||
| 
								 | 
							
								  } 
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo json_encode($show_array, JSON_FORCE_OBJECT);
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								
							 |