340 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			340 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | /* | ||
|  | This is the include file for the website and includes functions used by other programs. | ||
|  | */ | ||
|  | 
 | ||
|  | require "/home/hpr/php/credentials.php"; | ||
|  | 
 | ||
|  | $pos = strpos($_SERVER['REQUEST_URI'], '/', 1 ); | ||
|  | if ( ! $pos === false) { | ||
|  |   $pos = strpos($_SERVER['REQUEST_URI'], '/cms/', 1 ); | ||
|  |   if ( ! $pos === false) { | ||
|  |     http_response_code(404); | ||
|  |     mysqli_close(); | ||
|  |     exit; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | date_default_timezone_set("UTC");  | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if (!($connection = @ mysqli_connect("$databaseHostName", "$databaseUsername", "$databasePassword"))) | ||
|  | die("Could not connect to database"); | ||
|  | 
 | ||
|  | if (!mysqli_select_db($connection, "$databaseName")) { | ||
|  |     error_log($msg, 3, "/home/site/logs/sql_error_log"); | ||
|  |     return "Requested page is temporarily unavailable, please try again later."; | ||
|  | } | ||
|  | 
 | ||
|  | $connection->set_charset('utf8'); | ||
|  | 
 | ||
|  | function rrmdir($src) { | ||
|  |   $dir = opendir($src); | ||
|  |   while(false !== ( $file = readdir($dir)) ) { | ||
|  |     if (( $file != '.' ) && ( $file != '..' )) { | ||
|  |       $full = $src . '/' . $file; | ||
|  |       if ( is_dir($full) ) { | ||
|  |         rrmdir($full); | ||
|  |       } | ||
|  |       else { | ||
|  |         unlink($full); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   closedir($dir); | ||
|  |   rmdir($src); | ||
|  | } | ||
|  | 
 | ||
|  | function call412($error){ | ||
|  |   usleep(rand(10000000,30000000)); | ||
|  | 	global $HPR_Name, $HPR_Names, $naughtyfile; | ||
|  | 	header("Status: 412 Precondition Failed"); | ||
|  | 	print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
|  | <html xmlns="https://www.w3.org/1999/xhtml"> | ||
|  | <head> | ||
|  | <meta http-equiv="content-type" content="text/html; charset=utf-8" /> | ||
|  | <title>'.$HPR_Name.' Public Radio</title> | ||
|  | </head> | ||
|  | <body> | ||
|  | <h1>412 Precondition Failed</h1> | ||
|  | <h2>ERROR CODE</h2> | ||
|  | <p> | ||
|  | <strong>'.$error.'</strong> | ||
|  | </p> | ||
|  | <p> | ||
|  | If you believe this to be an error, then please copy this error code and send it to admin@hpr. | ||
|  | </p> | ||
|  | <p> | ||
|  | <small>'.date('Y-m-d\TH:i:s') . "\t" . getUserIP() . "\t" . $_SERVER["HTTP_USER_AGENT"] .'</small> | ||
|  | </p> | ||
|  | <!--  | ||
|  | If however you are checking out how our site works then  | ||
|  | please record a show telling us about what you were  | ||
|  | trying to do. | ||
|  | 
 | ||
|  | We are always looking for help from the community and  | ||
|  | over the years many hackers have helped us improve the site. | ||
|  | ${baseurl}contribute.html | ||
|  | 
 | ||
|  | Thanks. | ||
|  | --> | ||
|  | </body> | ||
|  | </html>'; | ||
|  | 	file_put_contents($naughtyfile, date('Y-m-d\TH:i:s\Z') . "\t" . getUserIPAdress() ."\t" . $error . "\t" . $_SERVER['REQUEST_URI'] . "\t" . $_SERVER["HTTP_USER_AGENT"] . "\n", FILE_APPEND | LOCK_EX ); | ||
|  | 	exit; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function problem($error){ | ||
|  |   global $HPR_Name, $HPR_Names, $naughtyfile; | ||
|  | 	file_put_contents($naughtyfile, date('Y-m-d\TH:i:s\Z') . "\t" . getUserIPAdress() ."\tERROR: " . $error . "\t" . $_SERVER['REQUEST_URI'] . "\t" . $_SERVER["HTTP_USER_AGENT"] . "\n", FILE_APPEND | LOCK_EX ); | ||
|  |   #usleep(2000000);
 | ||
|  |   header("Status: 412 Precondition Failed"); | ||
|  |   print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
|  | <head> | ||
|  | <meta http-equiv="content-type" content="text/html; charset=utf-8" /> | ||
|  | <title>'.$HPR_Name.' Public Radio</title> | ||
|  | </head> | ||
|  | <body> | ||
|  | <h1>412 Precondition Failed</h1> | ||
|  | <h2>ERROR CODE</h2> | ||
|  | <p> | ||
|  | <strong>'.$error.'</strong> | ||
|  | </p> | ||
|  | <p> | ||
|  | If you believe this to be an error, then please copy this error code and send it to admin@hpr. | ||
|  | </p> | ||
|  | <p> | ||
|  | <small>'.date('Y-m-d\TH:i:s') . "\t" . getUserIP() . "\t" . $_SERVER["HTTP_USER_AGENT"] .'</small> | ||
|  | </p> | ||
|  | <!--  | ||
|  | If however you are checking out how our site works then  | ||
|  | please record a show telling us about what you were  | ||
|  | trying to do. | ||
|  | 
 | ||
|  | We are always looking for help from the community and  | ||
|  | over the years many hackers have helped us improve the site. | ||
|  | ${baseurl}contribute.html | ||
|  | 
 | ||
|  | Thanks. | ||
|  | --> | ||
|  | </body> | ||
|  | </html>'; | ||
|  | 	exit; | ||
|  | } | ||
|  | 
 | ||
|  | function naughty($error){ | ||
|  |   global $HPR_Name, $HPR_Names, $naughtyfile; | ||
|  | 	file_put_contents($naughtyfile, date('Y-m-d\TH:i:s\Z') . "\t" . getUserIPAdress() ."\t" . $error . "\t" . $_SERVER['REQUEST_URI'] . "\t" . $_SERVER["HTTP_USER_AGENT"] . "\n", FILE_APPEND | LOCK_EX ); | ||
|  |   #usleep(rand(10000000,30000000));
 | ||
|  |   header("Status: 412 Precondition Failed"); | ||
|  |   print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
|  | <head> | ||
|  | <meta http-equiv="content-type" content="text/html; charset=utf-8" /> | ||
|  | <title>'.$HPR_Name.' Public Radio</title> | ||
|  | </head> | ||
|  | <body> | ||
|  | <h1>412 Precondition Failed</h1> | ||
|  | <h2>ERROR CODE</h2> | ||
|  | <p> | ||
|  | <strong>'.$error.'</strong> | ||
|  | </p> | ||
|  | <p> | ||
|  | If you believe this to be an error, then please copy this error code and send it to admin@hpr. | ||
|  | </p> | ||
|  | <p> | ||
|  | <small>'.date('Y-m-d\TH:i:s') . "\t" . getUserIP() . "\t" . $_SERVER["HTTP_USER_AGENT"] .'</small> | ||
|  | </p> | ||
|  | <!--  | ||
|  | If however you are checking out how our site works then  | ||
|  | please record a show telling us about what you were  | ||
|  | trying to do. | ||
|  | 
 | ||
|  | We are always looking for help from the community and  | ||
|  | over the years many hackers have helped us improve the site. | ||
|  | ${baseurl}contribute.html | ||
|  | 
 | ||
|  | Thanks. | ||
|  | --> | ||
|  | </body> | ||
|  | </html>'; | ||
|  | 	exit; | ||
|  | } | ||
|  | 
 | ||
|  | function logextra($message){ | ||
|  |     global $HPR_Name, $HPR_Names, $naughtyfile; | ||
|  | 	file_put_contents($naughtyfile, date('Y-m-d\TH:i:s\Z') . "\t" . getUserIPAdress() ."\t" . $message . "\t" . $_SERVER['REQUEST_URI'] . "\t" . $_SERVER["HTTP_USER_AGENT"] . "\n", FILE_APPEND | LOCK_EX ); | ||
|  | } | ||
|  | 
 | ||
|  | function convertSecToTime($sec){ | ||
|  | 	$date1 = new DateTime("@0"); //starting seconds
 | ||
|  | 	$date2 = new DateTime("@$sec"); // ending seconds
 | ||
|  | 	$interval =  date_diff($date1, $date2); //the time difference
 | ||
|  | 	return $interval->format('%y Years, %m months, %d days, %h hours, %i minutes and %s seconds'); // convert into Years, Months, Days, Hours, Minutes and Seconds
 | ||
|  | } | ||
|  | 
 | ||
|  | function fixid($id){ | ||
|  |     return sprintf('%04d',$id); | ||
|  | } | ||
|  | 
 | ||
|  | function navtext($id,$curr_ep_id){ | ||
|  |     if ( $id <= 1 ) { | ||
|  |         echo "<< First, < Previous, "; | ||
|  |     } | ||
|  |     else { | ||
|  |         echo "<a href=\"".$_SERVER['PHP_SELF']."?id=0001\" rel=\"first\"><< First, </a>"; | ||
|  |         echo "<a href=\"".$_SERVER['PHP_SELF']."?id=" . (fixid($id-1)) . "\" rel=\"previous\">< Previous, </a>"; | ||
|  |     } | ||
|  |     if ( $id >= $curr_ep_id ) { | ||
|  |         echo "Next >, "; | ||
|  |         echo "Latest >>"; | ||
|  |     } | ||
|  |     else { | ||
|  |         echo "<a href=\"".$_SERVER['PHP_SELF']."?id=".(fixid($id+1))."\" rel=\"next\">Next >, </a> "; | ||
|  |         echo "<a href=\"".$_SERVER['PHP_SELF']."?id=$curr_ep_id\" rel=\"last\">Latest >></a>"; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function formatemail($email) { | ||
|  |     // Miminal spam protection 
 | ||
|  |   if (!stristr($email, '.nospam@nospam.')){ | ||
|  |     $part = explode("@", $email); | ||
|  |     $email = $part[0] . ".nospam@nospam." . $part[1]; | ||
|  |   } | ||
|  |   return $email; | ||
|  | } | ||
|  | 
 | ||
|  | function unformatemail($email) { | ||
|  |   // Miminal spam protection 
 | ||
|  |   if (stristr($email, '.nospam@nospam.')){ | ||
|  |     $part = explode(".nospam@nospam.", $email); | ||
|  |     $email = $part[0] . "@" . $part[1]; | ||
|  |   } | ||
|  |   return $email; | ||
|  | } | ||
|  | 
 | ||
|  | function makeClickableLinks($string) { | ||
|  |     # Used to display links from test urls 
 | ||
|  |     $pattern = '/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/i'; | ||
|  |     $replacement = '<a href="$1" target="_blank">$1</a>'; | ||
|  |     return preg_replace($pattern, $replacement, $string); | ||
|  | } | ||
|  | 
 | ||
|  | function get_gravatar( $email, $s = 80, $d = '404', $r = 'x', $img = false, $atts = array() ) { | ||
|  |     /** | ||
|  |     * Get either a Gravatar URL or complete image tag for a specified email address. | ||
|  |     * | ||
|  |     * @param string $email The email address | ||
|  |     * @param string $s Size in pixels, defaults to 80px [ 1 - 512 ] | ||
|  |     * @param string $d Default imageset to use [ 404 | mm | identicon | monsterid | wavatar ] | ||
|  |     * @param string $r Maximum rating (inclusive) [ g | pg | r | x ] | ||
|  |     * @param boole $img True to return a complete IMG tag False for just the URL | ||
|  |     * @param array $atts Optional, additional key/value attributes to include in the IMG tag | ||
|  |     * @return String containing either just a URL or a complete image tag | ||
|  |     * @source http://gravatar.com/site/implement/images/php/ | ||
|  |     */ | ||
|  |     $url = 'https://secure.gravatar.com/avatar/'; | ||
|  |     $url .= md5( strtolower( trim( $email ) ) ); | ||
|  |     $url .= "?s=${s}&d=${d}.png"; | ||
|  |     if ( $img ) { | ||
|  |         $url = '<img src="' . $url . '"'; | ||
|  |         foreach ( $atts as $key => $val ) | ||
|  |             $url .= ' ' . $key . '="' . $val . '"'; | ||
|  |             $url .= '.png />'; | ||
|  |     } | ||
|  |     return $url; | ||
|  | } | ||
|  | 
 | ||
|  | function getUserIPAdress() { | ||
|  | 	$ip = ''; | ||
|  | 	if (getenv('HTTP_CLIENT_IP')) { | ||
|  | 		$ip = getenv('HTTP_CLIENT_IP'); | ||
|  | 	} | ||
|  | 	else if(getenv('HTTP_X_FORWARDED_FOR')) { | ||
|  | 		$ip = getenv('HTTP_X_FORWARDED_FOR'); | ||
|  | 	} | ||
|  | 	else if(getenv('HTTP_X_FORWARDED')) { | ||
|  | 		$ip = getenv('HTTP_X_FORWARDED'); | ||
|  | 	} | ||
|  | 	else if(getenv('HTTP_FORWARDED_FOR')) { | ||
|  | 		$ip = getenv('HTTP_FORWARDED_FOR'); | ||
|  | 	} | ||
|  | 	else if(getenv('HTTP_FORWARDED')) { | ||
|  | 		$ip = getenv('HTTP_FORWARDED'); | ||
|  | 	} | ||
|  | 	else if(getenv('REMOTE_ADDR')) { | ||
|  | 		$ip = getenv('REMOTE_ADDR'); | ||
|  | 	} | ||
|  | 	else { | ||
|  | 		$ip = 'UNKNOWN'; | ||
|  | 	} | ||
|  | 	return $ip; | ||
|  | } | ||
|  | 
 | ||
|  | function getUserIP() | ||
|  | { | ||
|  |     //check ip from share internet
 | ||
|  |     if (!empty($_SERVER['HTTP_CLIENT_IP'])) | ||
|  |     { | ||
|  |       $ip=$_SERVER['HTTP_CLIENT_IP']; | ||
|  |     } | ||
|  |     else | ||
|  |     { | ||
|  |       $ip=$_SERVER['REMOTE_ADDR']; | ||
|  |     } | ||
|  |     return $ip . "\t" . $_SERVER['REQUEST_URI'] . "\t" . $_SERVER["HTTP_USER_AGENT"] . "\n"; | ||
|  | } | ||
|  | $naughtyfile = '/home/hpr/logs/naughty-ip.txt'; | ||
|  | # Read more: http://vidiame.com/php/how-to-block-multiple-ip-addresses-using-php
 | ||
|  | 
 | ||
|  | if ( strlen($_SERVER['QUERY_STRING']) > 15 ) { | ||
|  |   file_put_contents($naughtyfile, getUserIP(), FILE_APPEND | LOCK_EX ); | ||
|  | } | ||
|  | 
 | ||
|  | function GetFirstFreeSlot() { | ||
|  |     // --------------------------------------------
 | ||
|  |     // Get first free slot
 | ||
|  |     $query = mysqli_query("SELECT  id + 1 FROM eps mo
 | ||
|  |     WHERE   NOT EXISTS | ||
|  |             ( | ||
|  |             SELECT  NULL | ||
|  |             FROM    eps mi  | ||
|  |             WHERE   mi.id = mo.id + 1 | ||
|  |             ) | ||
|  |     ORDER BY | ||
|  |             id | ||
|  |     LIMIT 1");
 | ||
|  |     $next_show_num_array = mysqli_fetch_row($query); | ||
|  |     return $next_show_num_array[0]; | ||
|  | } | ||
|  | 
 | ||
|  | function GetLatestPublishedShow($connection){ | ||
|  |   // --------------------------------------------
 | ||
|  |   // Get latest published show
 | ||
|  |   $query = mysqli_query($connection, "SELECT max(date), max(id) from eps WHERE eps.date <= UTC_DATE()"); | ||
|  |   $current_episode_array = mysqli_fetch_row($query); | ||
|  |   return array($current_episode_array[0], $current_episode_array[1]); | ||
|  | } | ||
|  | 
 | ||
|  | $PROTOCOL = ''; | ||
|  | if ((!empty($_SERVER['HTTPS'])) && ($_SERVER['HTTPS'] !== 'off')) { | ||
|  |   $PROTOCOL .= 'https://'; | ||
|  | } else { | ||
|  |   $PROTOCOL .= 'http://'; | ||
|  | } | ||
|  | 
 | ||
|  | $HTTP_HOST = $_SERVER['HTTP_HOST']; | ||
|  | $pos = strpos($HTTP_HOST, "hobbypublicradio"); | ||
|  | if ($pos !== false) { | ||
|  |     $HPR_Name = "Hobby"; | ||
|  |     $HPR_Names = "hobbyists"; | ||
|  | } else { | ||
|  |     $HPR_Name = "Hacker"; | ||
|  |     $HPR_Names = "Hackers"; | ||
|  | } | ||
|  | 
 | ||
|  | ?>
 |