Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
<?php // ************************************************************************************************** // Linklok URL V2.01 // Copyright (c) 2003-2008 Vibralogix // www.vibralogix.com // sales@vibralogix.com // You are licensed to use this product on one domain only. // Please contact us for extra licenses if required. // ************************************************************************************************** // General settings $LinklokKey=""; // Set to random string used to encrypt links $LinklokLocation=""; // Location where files are securely stored $ManualPassword=""; // password used to access manual entry form $ErrorTemplate=""; // Optional error page template (html) // The following variables must be set if you wish to use the email links feature of Linklok $YourCompany=""; // Your company name $YourEmail=""; // Your email address $EmailTemplate=""; // Optional html or text format email template $HTMLEmail="Y"; // Set to Y to send the default email in HTML formator N to send in text format $LinklokLog=""; // Optional text log file to store form entry fields $NotifyEmail=""; // Optional email template sent to admin. Leave blank for default template $LinklokDownloadLog=""; // Optional text log to store downloads $RequireTuring=0; // Set to 1 to use Turing code. Set to 0 to disable $NotifyDownloadEmail=""; // Email address to receive download notificaton email // Optional list of email addresses / services to block if required. You can add delete from this list $FreeEmail[]="yahoo."; $FreeEmail[]="hotmail."; $FreeEmail[]="gmail."; $FreeEmail[]="altavista."; $FreeEmail[]="prontomail."; $FreeEmail[]="talk21."; $FreeEmail[]="address."; $FreeEmail[]="@mail."; $FreeEmail[]="@australia."; $FreeEmail[]="boardermail."; $FreeEmail[]="@canada."; $FreeEmail[]="bolt."; $FreeEmail[]="dbzmail."; $FreeEmail[]="etoast."; $FreeEmail[]="fastmail."; $FreeEmail[]="freemail."; $FreeEmail[]="icqmail."; $FreeEmail[]="jaydemail."; $FreeEmail[]="keromail."; $FreeEmail[]="linuxmail."; $FreeEmail[]="lycos."; $FreeEmail[]="myrealbox."; $FreeEmail[]="netscape."; $FreeEmail[]="popmail."; $FreeEmail[]="themail."; $FreeEmail[]="toast."; $FreeEmail[]="webcity."; // Supported mime types. These are only required for displaying these file types inline. // Linklok can download any file type using the Save As dialog box in the browser. // You can add to this list as required. $mt['.jpg']="image/jpeg"; $mt['.gif']="image/gif"; $mt['.cgm']="image/cgm"; $mt['.gif']="image/gif"; $mt['.htm']="text/html"; $mt['.html']="text/html"; $mt['.txt']="text/plain"; $mt['.pdf']="application/pdf"; $mt['.mpg']="video/mpeg"; $mt['.mpeg']="video/mpeg"; $mt['.rm']="audio/x-pn-realaudio"; $mt['.wmv']="application/x-ms-wmv"; $mt['.swf']="application/x-shockwave-flash"; $mt['.mov']="video/quicktime"; $mt['.asf']="video/x-ms-asf"; $mt['.asx']="video/x-ms-asf"; $mt['.rm']="audio/x-realaudio"; $mt['.ram']="audio/x-pn-realaudio"; $mt['.zip']="application/zip"; // Code beloe this point should not need modifying /////////////////////////////////////////////////////////////////////////////////////////////////////// @error_reporting (E_ALL ^ E_NOTICE); if ($YourEmail!="") { if (!isset($EmailHeaderNoSlashR)) $EmailHeaderNoSlashR=1; if ((!isset($ExtraMailParam)) && (strtolower(@ini_get("safe_mode")) != 'on') && (@ini_get("safe_mode") != '1')) $ExtraMailParam="-f ".$YourEmail; @ini_set(sendmail_from,$YourEmail); } if (!empty($_GET)) while(list($name, $value) = each($_GET)) $$name = $value; if (!empty($_POST)) while(list($name, $value) = each($_POST)) $$name = $value; $found = false; if (!empty($_REQUEST)) { reset($_REQUEST); while (list($namepair, $valuepair) = each($_REQUEST)) { if ($namepair == "LinklokKey") $found = true; if ($namepair == "ManualPassword") $found = true; if ($namepair == "EmailTemplate") $found = true; if ($namepair == "LinklokLog") $found = true; if ($namepair == "LinklokDownloadLog") $found = true; if ($namepair == "YourEmail") $found = true; if ($namepair == "YourCompany") $found = true; if ($namepair == "RequireTuring") $found = true; if ($namepair == "AllowEmailOnce") $found = true; if ($namepair == "AllowIPOnce") $found = true; if (substr($namepair, 0, 15) == "LinklokLocation") $found = true; if (substr($namepair, 0, 9) == "FreeEmail") $found = true; } } if ($found) { linklokShowMessage($ErrorTemplate, "Access Denied.", $ErrorEmail); exit; } if (isset($_REQUEST['linklokauth'])) $linklokauth=$_REQUEST['linklokauth']; if (isset($_REQUEST['linklokauthe'])) $linklokauthe=$_REQUEST['linklokauthe']; if (isset($_REQUEST['linklokform'])) $linklokform=$_REQUEST['linklokform']; $ipaddr=$_SERVER['REMOTE_ADDR']; $thispage=$_SERVER['PHP_SELF']; $thisurl="http://".$_SERVER['HTTP_HOST'].$thispage; // If ?orderform them request password if ((isset($manualentry)) || (isset($MANUALENTRY))) { print "<html><head><title>Linklok URL Manual Entry Form</title></head><body>\n"; print "<script language=\"JavaScript\">\n"; print "<!-- JavaScript\n"; print "function validateform(form)\n"; print "{\n"; print " if (form.linklokpassword.value==\"\")\n"; print " {\n"; print " alert(\"Please enter the password\")\n"; print " form.linklokpassword.focus()\n"; print " return false\n"; print " }\n"; print " return true;\n"; print "}\n"; print "// - JavaScript - -->\n"; print "</script>\n"; print "<form name=\"form1\" method=\"post\" action=\"$thisurl\" onSubmit=\"return validateform(this)\">\n"; print "<p align=\"left\"><font face=\"Arial\" color=\"#333399\"><span style=\"font-size:16pt;\"><b>Linklok Manual Entry Form</b></span></font></p>\n"; print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"10\" bgcolor=\"#FFFFCC\">\n"; print "<tr><td><p><font face=\"Arial\" size=\"2\">Password</font></p></td>\n"; print "<td><p><input type=\"password\" name=\"linklokpassword\" maxlength=\"50\" size=\"30\"></p></td></tr><tr><td><p> </p></td>\n"; print "<td align=\"right\"><p><input type=\"submit\" name=\"button1\" value=\"Login\"></p></td>\n"; print "</tr></table></form><script language=\"JavaScript\">document.forms[0].linklokpassword.focus()</script></body></html>\n"; exit; } if (($ManualPassword!="") && (isset($linklokpassword)) && ($ManualPassword!=$linklokpassword)) { linklokShowMessage($ErrorTemplate,"Incorrect password."); exit; } if (isset($linklokauthe)) { if ($DownloadBackground!="") { if (($fh = @fopen($DownloadBackground, "r"))) { $page = fread ($fh, 200000); fclose($fh); $page = eregi_replace("!!!link!!!", $LinklokURL."?linklokauth=".$linklokauthe, $page); $page = eregi_replace("<body", "<body onLoad=\"download()\"", $page); $redirectcode ="<script language=\"JavaScript\" type=\"text/javascript\">\n"; $redirectcode.="function download()\n"; $redirectcode.="{\n"; $redirectcode.=" window.location=\"".$LinklokURL."?linklokauth=".$linklokauthe."\"\n"; $redirectcode.="}\n"; $redirectcode.="</script>\n"; $redirectcode.="</body>\n"; $page = eregi_replace("</body>", $redirectcode, $page); print $page; exit; } else $linklokauth=$linklokauthe; } else $linklokauth=$linklokauthe; } if ($linklokauth!="") { // Request to access file linklokgetfile($linklokauth); } if ($linklokform!="") { // Request to send email with links linklokemaillinks($FreeEmail); } // If password entered and correct then display manual order form if (($ManualPassword!="") && ($ManualPassword==$linklokpassword)) { print "<html><head><title>Linklok URL Manual Entry Form</title></head><body>\n"; print "<script language=\"JavaScript\">\n"; print "<!-- JavaScript\n"; print "function validateform(form)\n"; print "{\n"; print " if (form.f0.value==\"\")\n"; print " {\n"; print " alert(\"Please enter at least one file\")\n"; print " form.f0.focus()\n"; print " return false\n"; print " }\n"; print " if (form.newexpiry2.value!=\"\")\n"; print " {\n"; print " if (ValidChars(form.newexpiry2.value,\"0123456789\")==false)\n"; print " {\n"; print " alert(\"Please enter a valid expiry time or select from the menu\")\n"; print " form.newexpiry2.focus()\n"; print " return(false)\n"; print " }\n"; print " form.x.value=form.newexpiry2.value\n"; print " }\n"; print " else\n"; print " {\n"; print " form.x.value=form.newexpiry1.value\n"; print " }\n"; print " if (form.email.value!=\"\")\n"; print " {\n"; print " if (ValidateEmail(form.email.value)==false)\n"; print " {\n"; print " alert(\"Please enter a valid email address\")\n"; print " form.email.focus()\n"; print " return false\n"; print " }\n"; print " }\n"; print " if (ValidateIP(form.i.value)==false)\n"; print " {\n"; print " alert(\"Please enter a valid IP address or leave blank\")\n"; print " form.i.focus()\n"; print " return false\n"; print " }\n"; print " if (form.i.value==\"\")\n"; print " form.i.value=\"0.0.0.0\";\n"; print " if (form.email.value==\"\")\n"; print " form.linklokform.value=\"\";\n"; print " return true\n"; print "}\n"; print "\n"; print "function ValidateEmail(str)\n"; print "{\n"; print " // are regular expressions supported?\n"; print " var supported = 0;\n"; print " if (window.RegExp) {\n"; print " var tempStr = \"a\";\n"; print " var tempReg = new RegExp(tempStr);\n"; print " if (tempReg.test(tempStr)) supported = 1;\n"; print " }\n"; print " if (!supported)\n"; print " return (str.indexOf(\".\") > 2) && (str.indexOf(\"@\") > 0);\n"; print " var r1 = new RegExp(\"(@.*@)|(\\\.\\\.)|(@\\\.)|(^\\\.)\");\n"; print " var r2 = new RegExp(\"^.+\\\@(\\\[?)[a-zA-Z0-9\\\-\\\.]+\\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\\]?)$\");\n"; print " return (!r1.test(str) && r2.test(str));\n"; print "}\n"; print "function ValidateIP(ip)\n"; print "{\n"; print " if (ip!=\"\")\n"; print " {\n"; print " var ni\n"; print " if (ValidChars(ip,\"0123456789.\")==false)\n"; print " return(false)\n"; print " var ipparts=ip.split(\".\")\n"; print " if (ipparts.length!=4)\n"; print " return(false)\n"; print " for (var k=0; k<4; k++)\n"; print " {\n"; print " if (ipparts[k].length<1)\n"; print " return(false)\n"; print " if ((ipparts[k].charAt(0)==\"0\") && (ipparts[k].length>1))\n"; print " return(false)\n"; print " ni=parseInt(ipparts[k],10)\n"; print " if ((ni<0) || (ni>255))\n"; print " return (false)\n"; print " }\n"; print " }\n"; print " return(true)\n"; print "}\n"; print "\n"; print "function ValidChars(str,valid)\n"; print "{\n"; print " var v=true\n"; print " for (i=0;i<str.length;i++)\n"; print " {\n"; print " if (valid.indexOf(str.charAt(i))==-1)\n"; print " {\n"; print " v=false\n"; print " break\n"; print " }\n"; print " }\n"; print " return(v)\n"; print "}\n"; print "// - JavaScript - -->\n"; print "</script>\n"; print "<form name=\"form1\" method=\"post\" action=\"$thisurl\" onSubmit=\"return validateform(this)\">\n"; print "<input type=\"hidden\" name=\"linklokpassword\" value=\"$linklokpassword\">\n"; print "<input name=\"m\" type=\"hidden\" value=\"0\">\n"; print "<input name=\"a\" type=\"hidden\" value=\"$linklokpassword\">\n"; print "<input name=\"g\" type=\"hidden\" value=\"\">\n"; print "<input name=\"linklokform\" type=\"hidden\" value=\"1\">\n"; print "<p align=\"left\"><font face=\"Arial\" color=\"#333399\"><span style=\"font-size:16pt;\"><b>Linklok Manual Entry Form</b></span></font></p>\n"; print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"10\" bgcolor=\"#FFFFCC\">\n"; for ($k=0;$k<=19;$k++) { print "<tr>\n"; print "<td><p><font face=\"Arial\" size=\"2\">File ".($k+1)."</font></p></td>\n"; $fnum="f".$k; $loc="l".$k; print "<td><p>"; if ($$fnum!="") { print "<input name=\"f$k\" type=\"text\" value=\"".$$fnum."\">"; if (!empty($LinklokLocations)) { print "<font face=\"Arial\" size=\"2\"> in location </font><select name=\"l$k\" size=\"1\">\n"; if (($LinklokLocation!="") && ($$loc=="")) print "<option selected value=\"\">Default</option>\n"; if (($LinklokLocation!="") && ($$loc!="")) print "<option selected value=\"\">Default</option>\n"; reset($LinklokLocations); while(list($namepair, $valuepair) = each($LinklokLocations)) { $$namepair = $valuepair; if ($$loc==$namepair) print "<option selected value=\"".$namepair."\">".$namepair."</option>\n"; else print "<option value=\"".$namepair."\">".$namepair."</option>\n"; } print "</select>\n"; } if ($email=="") { if ($x != 0) { if (strlen($x) == 12) $expirytime = mktime(substr($x, 8, 2), substr($x, 10, 2), 0, substr($x, 4, 2), substr($x, 6, 2), substr($x, 0, 4), -1); else $expirytime = time() + ($x * 60); } else $expirytime = 0; $plink=linkokGetSecureLink($$fnum, $$loc,$expirytime, "LL_1", $i, $l, $LinklokKey, "1", $thisurl); $fnameonly=linklokfilename($$fnum); print " <a href=\"$plink\" target=\"_linklok\">$fnameonly</a>"; } } else { print "<input name=\"f$k\" type=\"text\" value=\"\">"; if (!empty($LinklokLocations)) { print "<font face=\"Arial\" size=\"2\"> in location </font><select name=\"l$k\" size=\"1\">\n"; if (($LinklokLocation!="") && ($$loc=="")) print "<option selected value=\"\">Default</option>\n"; if (($LinklokLocation!="") && ($$loc!="")) print "<option selected value=\"\">Default</option>\n"; reset($LinklokLocations); while(list($namepair, $valuepair) = each($LinklokLocations)) { $$namepair = $valuepair; if ($$loc==$namepair) print "<option selected value=\"".$namepair."\">".$namepair."</option>\n"; else print "<option value=\"".$namepair."\">".$namepair."</option>\n"; } print "</select>\n"; } } print"</p></td>\n"; print "</tr>\n"; } print "<tr><td><p><font face=\"Arial\" size=\"2\">Expiry Time</font></p></td>\n"; print "<input type=\"hidden\" name=\"x\" value=\"\">\n"; print "<td><p><select name=\"newexpiry1\" size=\"1\">\n"; if ($newexpiry1=="10") print "<option selected value=\"10\">10 minutes</option>\n"; else print "<option value=\"10\">10 minutes</option>\n"; if ($newexpiry1=="60") print "<option selected value=\"60\">1 Hour</option>\n"; else print "<option value=\"60\">1 Hour</option>\n"; if ($newexpiry1=="180") print "<option selected value=\"180\">3 Hours</option>\n"; else print "<option value=\"180\">3 Hours</option>\n"; if (($newexpiry1=="1440") || (!isset($x))) print "<option selected value=\"1440\">24 Hours</option>\n"; else print "<option value=\"1440\">24 Hours</option>\n"; if ($newexpiry1=="43200") print "<option selected value=\"43200\">30 Days</option>\n"; else print "<option value=\"43200\">30 Days</option>\n"; if ($newexpiry1=="525600") print "<option selected value=\"525600\">1 Year</option>\n"; else print "<option value=\"525600\">1 Year</option>\n"; if ($newexpiry1=="0") print "<option selected value=\"0\">No Expiry</option>\n"; else print "<option value=\"0\">No Expiry</option>\n"; print "</select>\n"; print "<font face=\"Arial\" size=\"2\"> or </font><input type=\"text\" name=\"newexpiry2\" value=\"$newexpiry2\" maxlength=\"12\" size=\"15\">\n"; print "</p></td></tr>\n"; print "<tr><td><p><font face=\"Arial\" size=\"2\">IP address</font></p></td><td><p>\n"; print "<font face=\"Arial\"><span style=\"font-size:10pt;\"><input type=\"text\" name=\"i\" maxlength=\"15\" size=\"30\">\n"; print "<select name=\"l\" size=\"1\">\n"; print " <option selected value=\"0\">Level 0 (off)</option>\n"; print " <option value=\"1\">Level 1</option>\n"; print " <option value=\"2\">Level 2</option>\n"; print " <option value=\"3\">Level 3</option>\n"; print " <option value=\"4\">Level 4</option>\n"; print "</select>\n"; print "</span></font></p></td></tr>\n"; print "<tr><td><p><font face=\"Arial\" size=\"2\">Email address</font></p></td><td><p>\n"; print "<font face=\"Arial\"><span style=\"font-size:10pt;\"><input type=\"text\" name=\"email\" size=\"30\"> Leave blank to display links only</span></font></p></td></tr>\n"; if ($Emails!="") { print "<tr><td><p><font face=\"Arial\" size=\"2\">Email Template</font></p></td>\n"; print "<td><p><select name=\"t\" size=\"1\">\n"; if ($EmailTemplate!="") { if ($t=="") print "<option selected value=\"\">".linklokfilename($EmailTemplate)."</option>\n"; else print "<option value=\"\">".linklokfilename($EmailTemplate)."</option>\n"; } $hDirectory=opendir("$Emails"); if ($hDirectory!=false) { while($entryname=readdir($hDirectory)) { if (($entryname!=".") && ($entryname!="..") && ($entryname!="")) print "<option value=\"$entryname\">$entryname</option>"; } closedir($hDirectory); } print "</select></p></td></tr>\n"; } print "<tr><td><p><font face=\"Arial\"><span style=\"font-size:10pt;\">\n"; print " </span></font></p></td>\n"; print "<td><p align=\"right\"><font face=\"Arial\"><span style=\"font-size:10pt;\">\n"; if ($email!="") print "Download links sent to $email "; print "<input type=\"submit\" name=\"submit\" value=\"Submit\">\n"; print "</span></font></p></td></tr></table></form>\n"; print "<script language=\"JavaScript\">document.forms[0].f0.focus()</script>\n"; print "</body></html>\n"; exit; } function linklokurl($fname,$expiry,$dialog,$iplevel=0) { global $LinklokKey,$thispage,$ipaddr; if ($expiry != 0) { if (strlen($expiry) == 12) $expirytime = mktime(substr($expiry, 8, 2), substr($expiry, 10, 2), 0, substr($expiry, 4, 2), substr($expiry, 6, 2), substr($expiry, 0, 4), -1); else $expirytime = time() + ($expiry * 60); } else $expirytime = 0; $locs=explode(":",$fname); $plink=linkokGetSecureLink($locs[0], $locs[1], $expirytime, "LL_0", $ipaddr, $iplevel, $LinklokKey, $dialog, $thispage); print($plink); } function linklokurl_api($fname,$expiry,$dialog,$ip="",$iplevel=0) { global $LinklokKey,$thispage,$NoExtraPath,$ipaddr; if ($ip=="") $ip=$ipaddr; if ($expiry != 0) { if (strlen($expiry) == 12) $expirytime = mktime(substr($expiry, 8, 2), substr($expiry, 10, 2), 0, substr($expiry, 4, 2), substr($expiry, 6, 2), substr($expiry, 0, 4), -1); else $expirytime = time() + ($expiry * 60); } else $expirytime = 0; $locs=explode(":",$fname); $plink=linkokGetSecureLink($locs[0], $locs[1], $expirytime, "LL_0", $ip, $iplevel, $LinklokKey, $dialog, $thispage); return($plink); } function linklokemail($files,$expiry,$filter,$goto,$iplevel=0,$temp="") { global $LinklokKey,$ipaddr; $created=(string)time(); $fnames=explode(",",$files); $tohash=$LinklokKey; for ($k=0;$k<count($fnames);$k++) { $locs=explode(":",$fnames[$k]); print("<input name=\"f$k\" type=\"hidden\" value=\"$locs[0]\">\n"); print("<input name=\"l$k\" type=\"hidden\" value=\"$locs[1]\">\n"); $tohash.=$locs[0].$locs[1]; } print("<input name=\"x\" type=\"hidden\" value=\"$expiry\">\n"); $tohash.=$expiry; print("<input name=\"m\" type=\"hidden\" value=\"$filter\">\n"); $tohash.=$filter; print("<input name=\"l\" type=\"hidden\" value=\"$iplevel\">\n"); $tohash.=$iplevel; print("<input name=\"t\" type=\"hidden\" value=\"$temp\">\n"); $tohash.=$temp; print("<input name=\"c\" type=\"hidden\" value=\"$created\">\n"); $tohash.=$created; $hash=md5($tohash); print("<input name=\"g\" type=\"hidden\" value=\"$goto\">\n"); print("<input name=\"a\" type=\"hidden\" value=\"$hash\">\n"); print("<input name=\"linklokform\" type=\"hidden\" value=\"1\">\n"); } function linklokemail_api($email,$files,$expiry,$ip="",$iplevel=0,$template="") { global $LinklokKey,$ipaddr,$Emails,$EmailTemplate; $fnames=explode(",",$files); for ($k=0;$k<count($fnames);$k++) { $loc=explode(":",$fnames[$k]); $fnames[$k]=$loc[0]; $floc[$k]=$loc[1]; } if ($ip=="") $ip=$ipaddr; if ($template!="") $template=$Emails.$template; if (($template=="") && ($EmailTemplate!="")) $template=$EmailTemplate; if ($template=="") { $res=linklokSendEmail($email, $email, $expiry, $ip, $iplevel, $fnames, $floc); return($res); } else { $res=linkloklinklokSendEmailUsingTemplate($email, $template, $email, $expiry, $ip, $iplevel, $fnames, $floc); return($res); } } function linkokGetSecureLink($fname, $loc, $expirytime, $id, $ip, $ipl, $lkey, $dlog, $lurl) { global $NoFilename, $DownloadURL; $auth=md5($lkey.$fname.$expirytime.$ip.$ipl.$id.$loc); $plink=$fname.",".$expirytime.",".$ip.",".$ipl.",".$dlog.",".$id.",".$loc.",".$auth; $plink=base64_encode($plink); $plink=rawurlencode($plink); if ($DownloadURL!="") $lurl=$DownloadURL; if ($NoFilename == 1) $plink = "$lurl?linklokauth=".$plink; else { // Get filename only $fnameonly=linklokfilename($fname); // See if alternative save filename required $pos=strpos($fnameonly,"^"); if (is_integer($pos)) $fnameonly=substr($fnameonly,$pos+1); $plink = "$lurl?linklokauth=".$plink."/".$fnameonly; } return($plink); } function linklokgetfile($linklokauth) { global $LinklokKey, $LinklokLocation,$ErrorTemplate,$ipaddr,$LinklokLocations,$NotifyDownloadEmail,$LinklokDownloadLog; // Remove any /filename from end $pos = strpos($linklokauth, "/"); if (is_integer($pos)) $linklokauth = substr($linklokauth, 0, $pos); // Split linklokauth into its parts $linklokauth=rawurldecode($linklokauth); $oldlink=false; if (is_integer(strpos($linklokauth,","))) $oldlink=true; if ($oldlink==false) { $linklokauth=base64_decode($linklokauth); } $ip=""; $iplevel=""; $id=""; $loc=""; $fields=explode(",",$linklokauth); $fname=$fields[0]; $expirytime=$fields[1]; if (count($fields)==4) { $dialog=$fields[2]; $auth=$fields[3]; } if (count($fields)==6) { $ip=$fields[2]; $iplevel=$fields[3]; $dialog=$fields[4]; $auth=$fields[5]; } if (count($fields)==8) { $ip=$fields[2]; $iplevel=$fields[3]; $dialog=$fields[4]; $id=$fields[5]; $loc=$fields[6]; $auth=$fields[7]; } // Verify hash value to ensure nothing tampered wth if (md5($LinklokKey.$fname.$expirytime.$ip.$iplevel.$id.$loc)!=$auth) { linklokShowMessage($ErrorTemplate,"Linklok URL authentication failed"); exit; } // Check link hasn't expired if ($expirytime!=0) { $curtime=time(); if ($curtime>$expirytime) { linklokShowMessage($ErrorTemplate,"Sorry but this Linklok link has expired.\n"); exit; } } if (($iplevel!=0) && ($ip!="0.0.0.0")) { $ipo[1]=strtok($ip,"."); $ipo[2]=strtok("."); $ipo[3]=strtok("."); $ipo[4]=strtok("."); $ipn[1]=strtok($ipaddr,"."); $ipn[2]=strtok("."); $ipn[3]=strtok("."); $ipn[4]=strtok("."); for ($k=1;$k<=$iplevel;$k++) { if ($ipo[$k]!=$ipn[$k]) { linklokShowMessage($ErrorTemplate,"Linklok link IP address is not valid.\n"); exit; } } } // Make full path or url to file // If $loc blank then use default location if ($loc=="") $link=$LinklokLocation.$fname; else $link=$LinklokLocations[$loc].$fname; $ext=linklokfileextension($link); $fname=linklokfilename($link); $actualfname=$fname; // See if alternative save filename required $pos=strpos($fname,"^"); if (is_integer($pos)) { $fname=substr($fname,$pos+1); $link=str_replace("^".$fname,"",$link); $actualfname=linklokfilename($link); } // If download link is php page then just include it. if ($ext==".php") { if ($NotifyDownloadEmail != "") linklokEmailDownloadNotify($actualfname, $id, $_SERVER['REMOTE_ADDR'],$expirytime); if ($LinklokDownloadLog!="") linkloklogdownload($LinklokDownloadLog,$actualfname,$id); include $link; exit; } // If download link is html page then just display it. if (($ext==".html") || ($ext==".htm")) { if (!($fh=@fopen($link,"rb"))) { linklokShowMessage($ErrorTemplate,"Could not open file."); exit; } if ($NotifyDownloadEmail != "") linklokEmailDownloadNotify($actualfname, $id, $_SERVER['REMOTE_ADDR'],$expirytime); if ($LinklokDownloadLog!="") linkloklogdownload($LinklokDownloadLog,$actualfname,$id); header("Content-type: text/html\n"); header("Content-transfer-encoding: binary\n"); @linklokxfpassthru($fh); exit; } // See if link is local path or URL $pos=strpos(strtolower($link),"http://"); if (!is_integer($pos)) { // If link is a local path then get local path and handle resume & download managers $fsize=@filesize($link); /* is resume requested? */ $headers = linklokxgetallheaders(); if(isset($headers["Range"])) { header("HTTP/1.1 206 Partial content"); $val=split("=",$headers["Range"]); if(ereg("^-",$val[1])) { $slen = ereg_replace("-","",$val[1]); $sfrom = $fsize - $slen; header("Content-Length: ".$slen); } else if(ereg("-$",$val[1])) { $sfrom = ereg_replace("-","",$val[1]); $slen = $fsize - $sfrom; header("Content-Length: ".(string)((int)$fsize-(int)$sfrom)); } else if(is_integer(strpos($val[1],"-"))) { $ranges=split("-",$val[1]); $sfrom = $ranges[0]; $slen = $ranges[1]-$ranges[0]; header("Content-Length: ".(string)((int)$fsize-(int)$sfrom)); } $br = $sfrom."-".(string)($fsize-1)."/".$fsize; header("Content-Range: bytes $br"); $mimetype=linklokgetmimetype($link); if ($mimetype!="") header("Content-type: $mimetype\n"); else header("Content-type: application/octet-stream\n"); header("Connection: close"); if (!($fh=@fopen($link,"rb"))) { linklokShowMessage($ErrorTemplate,"Linklok could not open the file."); exit; } if ($NotifyDownloadEmail != "") { if ($sfrom == 0) linklokEmailDownloadNotify($actualfname, $id, $_SERVER['REMOTE_ADDR'],$expirytime); } if ($LinklokDownloadLog!="") { if ($sfrom == 0) linkloklogdownload($LinklokDownloadLog,$actualfname,$id); } fseek($fh, $sfrom); @linklokxfpassthru($fh); } else { $size=@filesize($link); if (!($fh=@fopen($link,"rb"))) { linklokShowMessage($ErrorTemplate,"Linklok could not open the file."); exit; } $mimetype=linklokgetmimetype($link); if ($dialog==1) header("Content-disposition: attachment; filename=".$fname."\n"); if ($mimetype!="") header("Content-type: $mimetype\n"); else header("Content-type: application/octet-stream\n"); header("Content-transfer-encoding: binary\n"); header("Content-Length: ".$size."\n"); if ($NotifyDownloadEmail != "") linklokEmailDownloadNotify($actualfname, $id, $_SERVER['REMOTE_ADDR'],$expirytime); if ($LinklokDownloadLog!="") linkloklogdownload($LinklokDownloadLog,$actualfname,$id); @linklokxfpassthru($fh); } } else { // link is a URL rather than local path so do simple download $link=str_replace(" ","%20",$link); $size=filesize_remote($link); if (!($fh=@fopen($link,"rb"))) { linklokShowMessage($ErrorTemplate,"Linklok could not open the file."); exit; } if ($NotifyDownloadEmail != "") linklokEmailDownloadNotify($actualfname, $id, $_SERVER['REMOTE_ADDR'],$expirytime); if ($LinklokDownloadLog!="") linkloklogdownload($LinklokDownloadLog,$actualfname,$id); $mimetype=linklokgetmimetype($link); if ($dialog==1) header("Content-disposition: attachment; filename=".$fname."\n"); if ($mimetype!="") header("Content-type: $mimetype\n"); else header("Content-type: application/octet-stream\n"); header("Content-transfer-encoding: binary\n"); if ((int)$size>0) header("Content-Length: ".$size."\n"); @linklokxfpassthru($fh); } exit; } function linklokemaillinks($freem) { global $LinklokKey,$EmailTemplate,$YourCompany,$YourEmail,$LinklokLog,$NoExtraPath,$ManualPassword; global $LinklokLocation,$LinklokLocations,$ErrorTemplate,$ipaddr,$Emails; global $NotifyEmail,$NotifyTemplate,$FormExpire; global $AllowEmailOnce, $AllowIPOnce, $RequireTuring, $turing, $manualentryused; $tohash=$LinklokKey; for ($k=0;$k<100;$k++) { $fvar="f".$k; $lvar="l".$k; if ((isset($_REQUEST[$fvar])) && ($_REQUEST[$fvar]!="")) { $fname[]=$_REQUEST[$fvar]; $tohash.=$fname[$k]; $floc[]=$_REQUEST[$lvar]; $tohash.=$floc[$k]; } } if (isset($_REQUEST['x'])) { $expiry=$_REQUEST['x']; $tohash.=$expiry; } if (isset($_REQUEST['m'])) { $filter=$_REQUEST['m']; $tohash.=$filter; } if (isset($_REQUEST['l'])) { $iplevel=$_REQUEST['l']; $tohash.=$iplevel; } if (isset($_REQUEST['t'])) { $template=$_REQUEST['t']; $tohash.=$template; } if (isset($_REQUEST['c'])) { $created=$_REQUEST['c']; $tohash.=$created; } if (isset($_REQUEST['email'])) $clientemail=$_REQUEST['email']; if (isset($_REQUEST['turing'])) $turing=$_REQUEST['turing']; $goto=""; if (isset($_REQUEST['g'])) $goto=$_REQUEST['g']; if (isset($_REQUEST['a'])) $auth=$_REQUEST['a']; // See if called from the manual entry form $manualentryused=false; if (($auth==$ManualPassword) && ($ManualPassword!="")) { $manualentryused=true; } // Check email address entered is valid if (!linklokvalidemail($clientemail)) { linklokShowMessage($ErrorTemplate,"Please enter a valid email address.<BR><BR>Click your browsers BACK button and try again."); exit; } // if filter set to 1 then block free email services listed above if ($filter=="1") { for ($k=0; $k<count($freem);$k++) { $pos=strpos(strtolower($clientemail),strtolower($freem[$k])); if (is_integer($pos)) { linklokShowMessage($ErrorTemplate,"Linklok does not accept free email addresses.<BR><BR>Click your browsers BACK button and try again."); exit; } } } // If required check turing code (unless called from the manual entry form if (($RequireTuring==1) && ($manualentryused==false)) { session_start(); $turingmatch=false; if ((strtolower($_SESSION['ses_llurlturingcode'])==strtolower(trim($turing))) && ($_SESSION['ses_llurlturingcode']!="")) { $turingmatch=true; $_SESSION['ses_llurlturingcode']=""; } else if ((strtolower($_SESSION['ses_llurlpreviousturingcode'])==strtolower(trim($turing))) && ($_SESSION['ses_llurlpreviousturingcode']!="")) { $turingmatch=true; $_SESSION['ses_llurlpreviousturingcode']=""; } if (!$turingmatch) { linklokShowMessage($ErrorTemplate,"The turing (CAPTCHA)code entered was not correct.<BR><BR>Click your browsers BACK button and try again."); exit; } } // if required block if email address is already listed in log file within the days specified if (($LinklokLog!="") && ((isset($AllowEmailOnce)) || (isset($AllowIPOnce)))) { $limitemailtimestamp=mktime()-($AllowEmailOnce*60); $limitiptimestamp=mktime()-($AllowIPOnce*60); $testemail=strtolower($clientemail); $fh=@fopen($LinklokLog,"r"); if ($fh) { while (!feof($fh)) { $lne = fgets($fh, 2048); $lne = strtolower($lne); if (is_integer(strpos($lne,$testemail))) { $lnearray=explode(",",$lne); $entrytimestamp=mktime(substr($lnearray[3],0,2),substr($lnearray[3],3,2),substr($lnearray[3],6,2),substr($lnearray[1],3,2),substr($lnearray[1],0,2),substr($lnearray[1],6,2)); if ((isset($AllowEmailOnce)) && ($entrytimestamp<=$limitemailtimestamp)) { linklokShowMessage($ErrorTemplate,"This email address has already been used."); exit; } } if (is_integer(strpos($lne,$ipaddr))) { $lnearray=explode(",",$lne); $entrytimestamp=mktime(substr($lnearray[3],0,2),substr($lnearray[3],3,2),substr($lnearray[3],6,2),substr($lnearray[1],3,2),substr($lnearray[1],0,2),substr($lnearray[1],6,2)); if ((isset($AllowIPOnce)) && ($entrytimestamp<=$limitiptimestamp)) { linklokShowMessage($ErrorTemplate,"This IP address has already been used."); exit; } } } fclose($fh); } } $hash=md5($tohash); // If manual order password then override hash check if ($manualentryused) { $hash=$auth; if (isset($_REQUEST['i'])) $ipaddr=$_REQUEST['i']; } if ($hash!=$auth) { linklokShowMessage($ErrorTemplate,"Linklok form authentication failed"); exit; } if ($FormExpire>0) { if (time()>($created+60*$FormExpire)) { linklokShowMessage($ErrorTemplate,"Linklok form has expired"); exit; } } // Now send email with download links to client if ($template!="") $template=$Emails.$template; if (($template=="") && ($EmailTemplate!="")) $template=$EmailTemplate; if ($template=="") { $res=linklokSendEmail($clientemail, $clientemail, $expiry, $ipaddr, $iplevel, $fname, $floc); if ($res!=true) { linklokShowMessage($ErrorTemplate,"Email could not be sent"); exit; } } else { $res=linkloklinklokSendEmailUsingTemplate($clientemail, $template, $clientemail, $expiry, $ipaddr, $iplevel, $fname, $floc); if ($res!=true) { linklokShowMessage($ErrorTemplate,"Email could not be sent"); exit; } } // If manual form entry then don't send email to site or log entry. if ($manualentryused==True) return; // Send email to site with form details if ($NotifyEmail=="") $NotifyEmail=$YourEmail; if ($NotifyEmail!="") { if ($NotifyTemplate=="") { $subject = "Website download request"; $mailBody="The following files were requested.\n\n"; for($k=0;$k<count($fname);$k++) { $mailBody.=$fname[$k]; if ($floc[$k]!="") $mailBody.=" from ".$floc[$k]; $mailBody.="\n"; } $mailBody.="\nData from other form fields:-\n\n"; if (!empty($_GET)) { reset($_GET); while(list($namepair, $valuepair) = each($_GET)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform") && ($namepair!="turing")) $mailBody.=$namepair." : ".$valuepair."\n"; } } if (!empty($_POST)) { reset($_POST); while(list($namepair, $valuepair) = each($_POST)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform") && ($namepair!="turing")) $mailBody.=$namepair." : ".$valuepair."\n"; } } $mailBody.="IP : ".$ipaddr."\n"; $mailBody.="\n"; linklokSendEmailOut($NotifyEmail,$NotifyEmail,$YourCompany,$subject,$mailBody,"N"); } else { $res=linkloklinklokSendEmailUsingTemplate($NotifyEmail, $NotifyTemplate, $clientemail, $expiry, $ipaddr, $iplevel, $fname, $floc); if ($res!=true) { linklokShowMessage($ErrorTemplate,"Email could not be sent"); exit; } } } // if Logfile required add a line to it containing details of this request if ($LinklokLog!="") { if (is_writeable($LinklokLog)) { $fh=@fopen($LinklokLog,"a"); if ($fh) { $logstr="Date,".date("d/m/y").",Time,".date("H:i:s").",IP,".$ipaddr; // Date,time,IP // Add filenames File0,test.zip,File1,demo.pdf etc for($k=0;$k<count($fname);$k++) $logstr.=",File".$k.",".$fname[$k]; // Add other form fields Name,Adrian,Email,test@mysite.com etc if (!empty($_GET)) { reset($_GET); while(list($namepair, $valuepair) = each($_GET)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform") && ($namepair!="turing")) $logstr.=",".$namepair.",".$valuepair; } } if (!empty($_POST)) { reset($_POST); while(list($namepair, $valuepair) = each($_POST)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform") && ($namepair!="turing")) $logstr.=",".$namepair.",".$valuepair; } } $logstr.="\n"; fputs($fh,$logstr); fclose($fh); } } } if ($goto!="") { header("Location: ".$goto); } } function linkloklinklokSendEmailUsingTemplate($toemail,$template,$clientemail, $expiry, $ipaddr, $iplevel, $fname,$floc) { global $thisurl,$LinklokLocation,$LinklokLocations,$EmailHeaderNoSlashR,$LinklokKey; global $YourCompany,$YourEmail,$DownloadBackground; $usehtmlformat="Y"; // See if template exists as a file. If not assume it is a buffer if (is_file($template)) { $ext=linklokfileextension($template); if ($ext == ".php") { ob_start(); include $template; $mailBody = ob_get_contents(); ob_end_clean(); } else { if (!($fh = @fopen($template, "r"))) return(false); $mailBody = fread ($fh, 200000); fclose($fh); } if ($ext==".txt") $usehtmlformat="N"; } else { $mailBody=$template; if ((!is_integer(strpos($mailBody,"<html"))) && (!is_integer(strpos($mailBody,"<HTML")))) $usehtmlformat="N"; } if ($expiry != 0) { if (strlen($expiry) == 12) $expirytime = mktime(substr($expiry, 8, 2), substr($expiry, 10, 2), 0, substr($expiry, 4, 2), substr($expiry, 6, 2), substr($expiry, 0, 4), -1); else $expirytime = time() + ($expiry * 60); } else $expirytime = 0; // Create secure links and get size and filename for each file for ($k=0;$k<count($fname);$k++) { $ProdLink[$k]=linkokGetSecureLink($fname[$k], $floc[$k], $expirytime, $clientemail, $ipaddr, $iplevel, $LinklokKey, "1", $thisurl); $ProdFile[$k]=linklokfilename($fname[$k]); if ($floc[$k]=="") $reallocation=$LinklokLocation.$fname[$k]; else $reallocation=$LinklokLocations[$floc[$k]].$fname[$k]; // See if link is local path or URL $pos=strpos(strtolower($reallocation),"http://"); if (!is_integer($pos)) $fsize=@filesize($reallocation); else $fsize=linklokfilesize_remote($reallocation); $ProdSize[$k]=$fsize; } $max=30; if (count($fname)>$max) $max=count($fname); // First deal with any !!!link_n!!! that is part of hyperlink $start=0; do { $pos=strpos($mailBody,"<a",$start); if (!is_integer($pos)) $pos=strpos($mailBody,"<A",$start); $pos2=strpos($mailBody,"</a>",$pos); if (!is_integer($pos2)) $pos2=strpos($mailBody,"</A>",$pos); $found=0; if ((is_integer($pos)) && (is_integer($pos2))) { $found=1; for ($k=1; $k<=$max; $k++) { if ($ProdLink[$k-1]=="") { // See if !!!link_k!!! is within the hyperlink $hl=substr($mailBody,$pos,$pos2-$pos); $pos3=strpos($hl,"!!!link_".$k."!!!"); if (!is_integer($pos3)) $pos3=strpos($hl,"!!!link_".$k."!!!"); if (is_integer($pos3)) { $start=$pos; $mailBody=substr_replace($mailBody,"",$pos,$pos2-$pos); break; } else $start=$pos2; } else $start=$pos2; } } } while($found==1); // Now replace all other variables for ($k=1; $k<=$max; $k++) { if ($ProdLink[$k-1]!="") { $mailBody=eregi_replace("!!!filename_".$k."!!!",$ProdFile[$k-1],$mailBody); $mailBody=eregi_replace("!!!link_".$k."!!!",$ProdLink[$k-1],$mailBody); $mailBody=eregi_replace("!!!size_".$k."!!!",linklokFriendlyFileSize($ProdSize[$k-1]),$mailBody); $mailBody=eregi_replace("!!!expires_".$k."!!!",linklokFriendlyExpiryTime($expiry),$mailBody); if($usehtmlformat=="Y") { $tot="To download ".$ProdFile[$k-1]." click the link below:<BR>"; $tot.="<a href=\"".$ProdLink[$k-1]."\">".$ProdFile[$k-1]."</a>"; if ($ProdSize[$k-1]!="0") $tot.=" (".linklokFriendlyFileSize($ProdSize[$k-1]).")"; if ($expiry!="0") $tot.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry); } else { $tot="To download ".$ProdFile[$k-1]." click the link below:\n".$ProdLink[$k-1]."\n"; $tot.=$ProdFile[$k-1]; if ($ProdSize[$k-1]!="0") $tot.=" (".linklokFriendlyFileSize($ProdSize[$k-1]).")"; if ($expiry!="0") $tot.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry); } $mailBody=eregi_replace("!!!download_".$k."!!!",$tot,$mailBody); } else { $mailBody=eregi_replace("!!!filename_".$k."!!!","",$mailBody); $mailBody=eregi_replace("!!!size_".$k."!!!","",$mailBody); $mailBody=eregi_replace("!!!expires_".$k."!!!","",$mailBody); $mailBody=eregi_replace("!!!download_".$k."!!!","",$mailBody); $mailBody=eregi_replace("!!!link_".$k."!!!","",$mailBody); } } // Replace form variables if (!empty($_GET)) { reset($_GET); while(list($namepair, $valuepair) = each($_GET)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform") && ($namepair!="turing")) $mailBody=eregi_replace("!!!".$namepair."!!!",$valuepair,$mailBody); } } if (!empty($_POST)) { reset($_POST); while(list($namepair, $valuepair) = each($_POST)) { $$namepair = $valuepair; if ((strlen($namepair)>2) && ($namepair!="linklokform")) $mailBody=eregi_replace("!!!".$namepair."!!!",$valuepair,$mailBody); } } $mailBody=eregi_replace("!!!ip!!!",$ipaddr,$mailBody); // Now we should see if !!!eachfilestart!!! sections exists $start=0; do { $found=0; $pos=strpos($mailBody,"<!--eachfilestart-->"); $pos2=strpos($mailBody,"<!--eachfileend-->"); if ((is_integer($pos)) && (is_integer($pos2))) { $found=1; $buf=substr($mailBody,$pos+20,$pos2-$pos-20); // Now remove this section $mailBody1=substr($mailBody,0,$pos); $mailBody2=substr($mailBody,$pos2+18,strlen($mailBody)-$pos2-18); $mailBody=$mailBody1; for ($k=1; $k<=count($ProdLink); $k++) { $repeatbuf=$buf; $repeatbuf=eregi_replace("!!!filename!!!",$ProdFile[$k-1],$repeatbuf); $repeatbuf=eregi_replace("!!!link!!!",$ProdLink[$k-1],$repeatbuf); $repeatbuf=eregi_replace("!!!size!!!",linklokFriendlyFileSize($ProdSize[$k-1]),$repeatbuf); $repeatbuf=eregi_replace("!!!expires!!!",linklokFriendlyExpiryTime($expiry),$repeatbuf); if($usehtmlformat=="Y") { $tot="To download ".$ProdFile[$k-1]." click the link below:<BR>"; $tot.="<a href=\"".$ProdLink[$k-1]."\">".$ProdFile[$k-1]."</a>"; if ($ProdSize[$k-1]!="0") $tot.=" (".linklokFriendlyFileSize($ProdSize[$k-1]).")"; if ($expiry!="0") $tot.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry); } else { $tot="To download ".$ProdFile[$k-1]." click the link below:\n".$ProdLink[$k-1]."\n"; $tot.=$ProdFile[$k-1]; if ($ProdSize[$k-1]!="0") $tot.=" (".linklokFriendlyFileSize($ProdSize[$k-1]).")"; if ($expiry!="0") $tot.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry); } $repeatbuf=eregi_replace("!!!download!!!",$tot,$repeatbuf); $mailBody.=$repeatbuf; } $mailBody.=$mailBody2; } } while($found==1); // Now handle any !!!link(filename,expiry)!!! template variables $itemids=linklokgetitemvars($mailBody,"link"); $items=explode("|",$itemids); for ($k=0;$k<count($items);$k++) { // Split item into filename and expiry time. $filename=strtok($items[$k],","); $exp=strtok(","); // Now split filename and file location if used $filename=strtok($filename,":"); $flocation=strtok(":"); if ($exp != 0) { if (strlen($exp)==12) $expiry=mktime(substr($exp,8,2),substr($exp,10,2),0,substr($exp,4,2),substr($exp,6,2),substr($exp,0,4),-1); else $expiry = time() + ($exp * 60); } $plink=linkokGetSecureLink($filename, $flocation, $expiry, $clientemail, $ipaddr, $iplevel, $LinklokKey, "1", $thisurl); $mailBody = str_replace("!!!link(".$items[$k].")!!!",$plink, $mailBody); } // Now handle any !!!size(filename)!!! template variables $itemids=linklokgetitemvars($mailBody,"size"); $items=explode("|",$itemids); for ($k=0;$k<count($items);$k++) { $filename=strtok($items[$k],":"); $flocation=strtok(":"); if ($flocation=="") $fullpath=$LinklokLocation.$filename; else $fullpath=$LinklokLocations[$flocation].$filename; $pos = strpos(strtolower($fullpath), "http://"); if (is_integer($pos)) { $s=linklokfilesize_remote($fullpath); if (is_integer($s)) $size=$s; } else $size = @filesize($fullpath); $mailBody = str_replace("!!!size(".$items[$k].")!!!",linklokFriendlyFileSize($size), $mailBody); } // Get subject for email if ($usehtmlformat!="Y") { $pos=strpos($mailBody,"\n"); $subject=substr($mailBody,0,$pos); $mailBody=substr($mailBody,$pos+1,strlen($mailBody)-$pos-1); } else { $subject="Download Links"; $pos=strpos($mailBody,"<TITLE>"); if (!is_integer($pos)) $pos=strpos($mailBody,"<title>"); $pos2=strpos($mailBody,"</TITLE>"); if (!is_integer($pos2)) $pos2=strpos($mailBody,"</title>"); if ((is_integer($pos)) && (is_integer($pos2))) { $subject=substr($mailBody,$pos+7,$pos2-$pos-7); } } // If using a download background page replace auth with authe if ($DownloadBackground!="") $mailBody = str_replace("?linklokauth=", "?linklokauthe=", $mailBody); if($usehtmlformat=="Y") $mailBody="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD W3 HTML//EN\">\n".$mailBody; $result=linklokSendEmailOut($toemail,$YourEmail,$YourCompany,$subject,$mailBody,$usehtmlformat); return($result); } function linklokgetitemvars($buf,$n) { $start = 0; $itemids=""; do { $pos = strpos($buf, "!!!".$n."(", $start); $found = 0; if (is_integer($pos)) { $found = 1; $pos2=strpos($buf, ")!!!", $pos); if (is_integer($pos2)) { if ($itemids!="") $itemids.="|"; $itemids.=substr($buf,$pos+strlen($n)+4,$pos2-($pos+strlen($n)+4)); } $start=$pos2; } } while ($found==1); return($itemids); } function linklokSendEmail($toemail,$clientemail, $expiry, $ipaddr, $iplevel, $fname,$floc) { global $thisurl,$LinklokLocation,$LinklokLocations,$EmailHeaderNoSlashR,$LinklokKey,$HTMLEmail; global $YourCompany,$YourEmail,$DownloadBackground; if ($expiry != 0) { if (strlen($expiry) == 12) $expirytime = mktime(substr($expiry, 8, 2), substr($expiry, 10, 2), 0, substr($expiry, 4, 2), substr($expiry, 6, 2), substr($expiry, 0, 4), -1); else $expirytime = time() + ($expiry * 60); } else $expirytime = 0; $subject = "Download Links from ".$YourCompany; $mailBody="Please use the link(s) below to begin downloading.\n\n"; for ($k=0;$k<count($fname);$k++) { $plink=linkokGetSecureLink($fname[$k], $floc[$k], $expirytime, $clientemail, $ipaddr, $iplevel, $LinklokKey, "1", $thisurl); $fnameonly=linklokfilename($fname[$k]); if ($floc[$k]=="") $reallocation=$LinklokLocation.$fname[$k]; else $reallocation=$LinklokLocations[$floc[$k]].$fname[$k]; // See if link is local path or URL $pos=strpos(strtolower($reallocation),"http://"); if (!is_integer($pos)) $fsize=@filesize($reallocation); else $fsize=linklokfilesize_remote($reallocation); if($HTMLEmail == "Y") { $mailBody.="To download ".$fnameonly." click the link below:\n"; $mailBody.="<a href=\"".$plink."\">".$fnameonly."</a>"; if ($fsize!=0) $mailBody.=" (".linklokFriendlyFileSize($fsize).")"; if ($expiry!="0") $mailBody.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry).".\n"; else $mailBody.=" \n"; $mailBody.=" \n"; } else { $mailBody.="To download ".$fnameonly." click the link below:\n".$plink."\n"; $mailBody.=$fnameonly; if ($fsize!=0) $mailBody.=" (".linklokFriendlyFileSize($fsize).")"; if ($expiry!="0") $mailBody.=" ~ Download link will expire in ".linklokFriendlyExpiryTime($expiry).".\n"; else $mailBody.=" \n"; $mailBody.=" \n"; } } $mailBody.="\n"; $mailBody.=$YourCompany."\n"; $mailBody.=$YourEmail."\n"; // If using a download background page replace auth with authe if ($DownloadBackground!="") $mailBody = str_replace("?linklokauth=", "?linklokauthe=", $mailBody); if($HTMLEmail == "Y") { $mailBody = eregi_replace("\n","<br>\n",$mailBody); $mailBody="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD W3 HTML//EN\">\n<HTML>\n<HEAD>\n<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">\n<TITLE>Download Information</TITLE>\n</HEAD\n<BODY>\n".$mailBody; $mailBody.="</BODY>\n</HTML>\n"; } $result=linklokSendEmailOut($toemail,$YourEmail,$YourCompany,$subject,$mailBody,$HTMLEmail); return($result); } function linklokgetmimetype($fn) { global $mt; $ext=linklokfileextension($fn); if (isset($mt[$ext])) $mimetype=$mt[$ext]; else $mimetype=""; return("$mimetype"); } function linklokFriendlyExpiryTime($exp) { if ($exp==0) return(""); if (($exp>=1) && ($exp<=59)) { if ($exp==1) return("$exp minute"); else return("$exp minutes"); } if (($exp>=60) && ($exp<=1440)) { $hours=intval($exp/60); $mins=$exp % 60; if ($hours==1) $ret=$hours." hour"; else $ret=$hours." hours"; if ($mins>0) { if ($mins==1) $ret.=" & ".$mins." minute"; else $ret.=" & ".$mins." minutes"; } return($ret); } if ($exp>=1441) { $days=intval($exp/1440); $exp=$exp-($days*1440); $hours=intval($exp/60); $mins=$exp % 60; if ($days==1) $ret=$days." day"; else $ret=$days." days"; if ($hours>0) { if ($mins==0) $ret.=" &"; if ($hours==1) $ret.=" ".$hours." hour"; else $ret.=" ".$hours." hours"; } if ($mins>0) { if ($mins==1) $ret.=" & ".$mins." minute"; else $ret.=" & ".$mins." minutes"; } return($ret); } } function linklokFriendlyFileSize($sz) { if ($sz<=1023) return($sz." Bytes"); if (($sz>=1024) && ($sz<=1048575)) { $sz=intval($sz/1024); return($sz." KB"); } if ($sz>=1048576) { $sz=$sz/1048576; $sz=intval($sz*100)/100; return($sz." MB"); } } function linklokfileextension($fname) { if ($fname == "") return(""); $pos = strrpos($fname, "."); if (is_integer($pos)) return(strtolower(substr($fname, $pos))); return(""); } function linklokfilename($fname) { if ($fname == "") return(""); $pos1 = strrpos($fname, "/"); $pos2 = strrpos($fname, "\\"); if ($pos1 === false) $pos1 = -1; if ($pos2 === false) $pos2 = -1; if ($pos1 > $pos2) $pos = $pos1; else $pos = $pos2; if ($pos > -1) { $name = substr($fname, $pos + 1); return($name); } return($fname); } function linklokCustomMessage($Template,$msg) { if ($Template == "") return(0); $ext = linklokfileextension($Template); if ($ext == ".php") { ob_start(); include $Template; $page = ob_get_contents(); ob_end_clean(); } else { if (!($fh = @fopen($Template, "r"))) return(0); $page = fread ($fh, 200000); fclose($fh); } $page = eregi_replace("!!!message!!!", $msg, $page); print $page; return(1); } function linklokShowMessage($Template,$msg) { if (0==linklokCustomMessage($Template,$msg)) { print ("<HTML>\n"); print ("<HEAD>\n"); print ("<TITLE>Linklok URL</TITLE>\n"); print ("</HEAD>\n"); print ("<BODY>\n"); print("$msg<BR>"); print ("</BODY>\n"); print ("</HTML>\n"); } } function linklokvalidemail($email) { // Create the syntactical validation regular expression $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"; // Presume that the email is invalid $valid =false; // Validate the syntax if (eregi($regexp, $email)) $valid=true; return $valid; } function linklokxgetallheaders() { global $_SERVER; $headers = array(); while (list($key, $value) = each ($_SERVER)) { if (strncmp($key, "HTTP_", 5) == 0) { $key = strtr(ucwords(strtolower(strtr(substr($key, 5), "_", " "))), " ", "-"); $headers[$key] = $value; } } return $headers; } function linklokSendEmailOut($toemail, $fromemail, $fromname, $subject, $mailBody, $htmlformat) { global $EmailHeaderNoSlashR, $ExtraMailParam, $ErrorTemplate, $ErrorEmail, $UsePHPmailer; // Remove any comma in from name $fromname = str_replace(",", " ", $fromname); // Handle multiple email addresses $sendtoemail=explode(",",$toemail); // If phpmailer setup then use it otherwise handle with PHP mail() function if ($UsePHPmailer == 1) { global $EmailUsername, $EmailPassword, $EmailServer; require_once("class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = $EmailServer; $mail->SMTPAuth = true; // This line is important for smtp authentication $mail->Username = $EmailUsername; $mail->Password = $EmailPassword; $mail->From = $fromemail; $mail->FromName = $fromname; for ($k=0; $k<count($sendtoemail); $k++) $mail->AddAddress($sendtoemail[$k]); if ($htmlformat == "Y") $mail->IsHTML(true); else $mail->IsHTML(false); $mail->Subject = $subject; $mail->Body = $mailBody; $mail->Send(); if ($mail->isError()) return(false); return(true); } else { $headers = "From: " . $fromname . " <" . $fromemail . ">\r\n"; $headers.= "Reply-To: " . $fromname . " <" . $fromemail . ">\r\n"; $headers.= "MIME-Version: 1.0\r\n"; if ($htmlformat=="Y") { $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "Content-Transfer-Encoding: base64\r\n"; $mailBody=chunk_split(base64_encode($mailBody)); } else $headers .= "Content-type: text/plain\r\n"; if ($EmailHeaderNoSlashR == 1) $headers = eregi_replace("\r", "", $headers); if ($EmailHeaderNoSlashR == 1) $headers = eregi_replace("\r", "", $headers); for ($k=0; $k<count($sendtoemail); $k++) { if ($ExtraMailParam != "") $sent = mail($sendtoemail[$k], $subject, $mailBody, $headers, $ExtraMailParam); else $sent = mail($sendtoemail[$k], $subject, $mailBody, $headers); if ($sent==false) return(false); } return(true); } } function linklokxfpassthru($file) { global $downloadbuffer; if ($downloadbuffer>0) { while(!feof($file)) { print(fread($file, $downloadbuffer)); ob_flush(); flush(); sleep(1); } fclose($file); } else @fpassthru($file); } function linklokfilesize_remote($url, $timeout=2) { $url = parse_url($url); if ($fp = @fsockopen($url['host'], ($url['port'] ? $url['port'] : 80), $errno, $errstr, $timeout)) { fwrite($fp, 'HEAD '.$url['path'].$url['query']." HTTP/1.0\r\nHost: ".$url['host']."\r\n\r\n"); @stream_set_timeout($fp, $timeout); while (!feof($fp)) { $size = fgets($fp, 4096); if (stristr($size, 'Content-Length') !== false) { $size = trim(substr($size, 16)); break; } } fclose ($fp); } return is_numeric($size) ? intval($size) : false; } function linkloklogdownload($logfile,$fname,$email) { global $ipaddr; if (is_writeable($logfile)) { $fh=@fopen($logfile,"a"); if ($fh) { $logstr=date("d/m/y").",".date("H:i:s").",".$fname.",".$email.",".$ipaddr; // date,time,filename,email,IP $logstr.="\n"; fputs($fh,$logstr); fclose($fh); } } } function linklokEmailDownloadNotify($fname, $id, $ipaddr, $expiry) { global $NotifyDownloadEmail, $YourCompany, $YourEmail; $subject = "Linklok URL Download of $fname"; $mailBody = "Download notification.\n\n"; $mailBody .= "Filename : " . $fname . "\n"; $mailBody .= "ID : " . $id . "\n"; $mailBody .= "IP : " . $ipaddr . "\n"; $mailBody .= "Download time : " . date("d M Y H:i:s") . "\n"; $mailBody .= "Expiry time : " . date("d M Y H:i:s", $expiry) . "\n"; $mailBody .= "User agent : " . $_SERVER['HTTP_USER_AGENT'] . "\n"; $mailBody .= "\n"; linklokSendEmailOut($NotifyDownloadEmail, $YourEmail, $YourCompany, $subject, $mailBody, "N"); return; } ?>
This paste will be private.
From the Design Piracy series on my blog: