forked from HPR/hpr_hub
		
	
		
			
				
	
	
		
			350 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			350 lines
		
	
	
		
			11 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";
 | 
						|
}
 | 
						|
 | 
						|
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";
 | 
						|
}
 | 
						|
 | 
						|
// General allowed Settings
 | 
						|
 | 
						|
$allowed_content_type = array( "application/json", "application/octet-stream", "application/ogg", "application/x-subrip", "audio/flac", "audio/mpeg", "audio/ogg", "audio/x-flac", "audio/x-wav", "image/jpeg", "image/png", "text/plain", "text/plain", "text/vtt", "text/x-c" );
 | 
						|
 | 
						|
$allowed_extensions = array("wav", "flac", "opus", "ogg", "spx", "mp3", "jpg", "png", "json", "srt", "tsv", "txt", "vtt");
 | 
						|
 | 
						|
$allowed_extensions_common = array("opus", "ogg", "spx", "mp3", "jpg", "png", "json", "srt", "tsv", "txt", "vtt");
 | 
						|
 | 
						|
#$ccdn_hosts_common = array("alpha.nl.eu.mirror.hackerpublicradio.org", "hpr.nyc3.cdn.digitaloceanspaces.com" );
 | 
						|
$ccdn_hosts_common = array("alpha.nl.eu.mirror.hackerpublicradio.org", "hpr.nyc3.cdn.digitaloceanspaces.com" );
 | 
						|
#$ccdn_hosts_common = array( "hpr.nyc3.cdn.digitaloceanspaces.com" );
 | 
						|
 | 
						|
$ccdn_hosts_complete = array( "archive.org" );
 | 
						|
 | 
						|
?>
 |