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);
 | |
| ?>
 | |
| 
 |