<?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 "&lt;&lt; First, &lt; Previous, ";
    }
    else {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=0001\" rel=\"first\">&lt;&lt; First, </a>";
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=" . (fixid($id-1)) . "\" rel=\"previous\">&lt; Previous, </a>";
    }
    if ( $id >= $curr_ep_id ) {
        echo "Next &gt;, ";
        echo "Latest &gt;&gt;";
    }
    else {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=".(fixid($id+1))."\" rel=\"next\">Next &gt;, </a> ";
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=$curr_ep_id\" rel=\"last\">Latest &gt;&gt;</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", "image/webp", "text/plain", "text/x-c" );

$allowed_extensions = array("wav", "flac", "opus", "ogg", "mp3", "jpg", "jpeg", "png", "webp", "srt", "txt" );

$allowed_extensions_common = array("opus", "ogg", "mp3", "jpg", "jpeg", "png", "webp", "srt", "txt" );

#$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" );

?>
