<?php
  error_reporting
(E_ALL);
  require_once(
'auth.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="pl">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="description" content="programistrz.pl">
  <title>Automatyczne uwierzytelnianie NTLM - sprawdzenie środowiska i test konfiguracji</title>
<style>
span        { font-weight: bold; }
span.ok     { color: green; }
span.error  { color: red; }
span.header { color: blue; font-weight: normal; }
</style>
</head>
<body>
<h2>Automatyczne uwierzytelnianie NTLM - sprawdzenie środowiska i test konfiguracji</h2>
<?php
  $totalErrors
=0;
?>
<b>Sprawdzenie wersji PHP:</b><br>
<?php
  $ok
=version_compare(phpversion(),'4.3.0','>=');
  echo 
"PHP version ".($ok?"<span class=\"ok\">":"<span class=\"error\">").phpversion()."</span>";
  if (!
$ok)
  {
    echo 
" - wersja zbyt stara";
    
$totalErrors++;
  }
?>
<br>
<br>
<b>Sprawdzenie dostępności biblioteki <i>cURL</i>:</b><br>
<?php
  $function
=array('curl_init','curl_setopt','curl_exec','curl_close');
  for (
$i=0;$i<count($function);$i++)
  {
    
$ok=function_exists($function[$i]);
    echo 
"<i>".$function[$i]."</i>: ".($ok?"<span class=\"ok\">dostępna</span>":"<span class=\"error\">niedostępna</span>")."<br>";
  }
  if (!
$ok$totalErrors++;
  if (
function_exists('curl_version')) { $version=curl_version(); if (is_array($version)) $version=$version['version']; echo "cURL version: <span class=\"ok\">".$version."</span><br>"; }
  elseif (
function_exists('fsockopen')) echo "<span class=\"ok\">Funkcja <i>fsockopen</i> jest dostępna, więc możesz skorzystać z <a href=\"http://programistrz.pl/projekty/curl/\" target=\"_blank\">alternatywnej biblioteki cURL</a></span><br>";
?>
<br>
<b>Test uprawnień do zapisu w bieżącym folderze:</b><br>
<?php
  
echo "Bieżący folder: <i><span class=\"header\">".htmlspecialchars(dirname(__FILE__))."</span></i><br>";
  
$ok=ntlm_file_put_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp','check.tmp');
  if (
$ok!==false$ok=(@ntlm_file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp')=='check.tmp');
  
unlink(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp');
  echo 
"Folder ten ".($ok?"<span class=\"ok\">posiada uprawnienia do zapisu</span>":"<span class=\"error\">nie posiada uprawnień do zapisu</span>")."<br>";
  if (!
$ok$totalErrors++;
?>
<br>
<b>Test poprawnego działania funkcji komunikacyjnych:</b><br>
<?php
  ntlm_openHandler
('check.tmp');
  
$ok=(@ntlm_file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp.lock')=='0');
  echo 
"<i>ntlm_openHandler</i>: ".($ok?"<span class=\"ok\">w porządku</span>":"<span class=\"error\">błąd działania</span>")."<br>";
  if (!
$ok$totalErrors++;
  
ntlm_sendData('check.tmp',0,'check.tmp');
  
$ok=(@ntlm_file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp.data')=='check.tmp');
  echo 
"<i>ntlm_sendData</i>: ".($ok?"<span class=\"ok\">w porządku</span>":"<span class=\"error\">błąd działania</span>")."<br>";
  if (!
$ok$totalErrors++;
  
$ok=(ntlm_receiveData('check.tmp',1)=='check.tmp');
  echo 
"<i>ntlm_receiveData</i>: ".($ok?"<span class=\"ok\">w porządku</span>":"<span class=\"error\">błąd działania</span>")."<br>";
  if (!
$ok$totalErrors++;
  
$ok=(@ntlm_file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp.lock')=='2');
  
ntlm_closeHandler('check.tmp');
  if (
$ok$ok=!file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR.'check.tmp.lock');
  echo 
"<i>ntlm_closeHandler</i>: ".($ok?"<span class=\"ok\">w porządku</span>":"<span class=\"error\">błąd działania</span>")."<br>";
  if (!
$ok$totalErrors++;
?>
<br>
<b>Sprawdzenie poprawnego działania odczytywania przesyłanych nagłówków HTTP:</b><br>
<?php
  $ok
=ntlm_getRequestHeaders();
  echo 
"Nagłówki pobrane przez funkcję <i>ntlm_getRequestHeaders</i>, wysłane przez przeglądarkę użytkownika:<br><span class=\"header\">&nbsp; ";
  echo 
str_replace("\n",'<br>&nbsp; ',htmlspecialchars($ok))."</span>";
  if (!
$ok$totalErrors++;
?>
<br>
<b>Sprawdzenia ustawienia poprawnej wartości stałej <i>DEF_NTLM_THIS_SCRIPT_URL</i>:</b><br>
<?php
  
echo "Adres URL skryptu <i><span class=\"header\">auth.php</span></i> wyliczony automatycznie przez funkcję <i>ntlm_computeThisScriptUrl</i>: \"<span class=\"header\">".htmlspecialchars(ntlm_computeThisScriptUrl())."</span>\"<br>";
  if (
defined('DEF_NTLM_THIS_SCRIPT_URL'))
  {
    echo 
"Wartość stałej <i>DEF_NTLM_THIS_SCRIPT_URL</i>: \"".htmlspecialchars(DEF_NTLM_THIS_SCRIPT_URL)."\"<br>";
    
$ok=(DEF_NTLM_THIS_SCRIPT_URL!='http://intranet/this/script/url/auth.php');
    echo 
"Stała ta ".($ok?"<span class=\"ok\">została ustawiona przez użytkownika</span>":"<span class=\"error\">nie została ustawiona przez użytkownika</span>")."<br>";
    if (!
$ok$totalErrors++;
  }
  else
    echo 
"W przypadku, gdy podany adres URL jest nieprawidłowy, wpisz jego właściwy adres w definicji stałej <i>DEF_NTLM_THIS_SCRIPT_URL</i>.<br>";
?>
<br>
<b>Test dostępności strony "<i><?php echo ntlm_computeThisScriptUrl(); ?></i>":</b><br>
<?php
  
if (function_exists('curl_init'))
  {
    list(
$errno,$error,$body)=getRemotePage(ntlm_computeThisScriptUrl());
    echo 
"Status pobrania strony: ".($errno?"<span class=\"error\">błąd nr ".$errno." (".$error.")</span>":"<span class=\"ok\">OK</span>")."<br>";
    if (!
$errno)
    {
      
$ok=($body=="auth.php");
      echo 
"Odebrane dane: \"<span class=\"".($ok?"ok":"error")."\">".htmlspecialchars($body)."</span>\"<br>";
      if (!
$ok)
      {
        echo 
"<span class=\"error\">Wykryto niepoprawne działanie skryptu <i>auth.php</i> jako proxy</span> (wiersze 24-67)<br>";
        
$totalErrors++;
      }
    }
    else 
$totalErrors++;
  }
  else
    echo 
"<span class=\"error\">Nie testowano - biblioteka cURL jest niedostępna</span><br>";
?>
<br>
<b>Sprawdzenia ustawienia poprawnej wartości stałej <i>DEF_NTLM_AUTHENTICATE_URL</i>:</b><br>
<?php
  
echo "Wartość stałej <i>DEF_NTLM_AUTHENTICATE_URL</i>: \"<span class=\"header\">".htmlspecialchars(DEF_NTLM_AUTHENTICATE_URL)."</span>\"<br>";
  
$ok=(DEF_NTLM_AUTHENTICATE_URL!='http://intranet/path/verify.html');
  echo 
"Stała ta ".($ok?"<span class=\"ok\">została ustawiona przez użytkownika</span>":"<span class=\"error\">nie została ustawiona przez użytkownika</span>")."<br>";
  if (!
$ok$totalErrors++;
?>
<br>
<b>Odczytanie nagłówków HTTP przesłanych przez serwer IIS:</b><br>
<?php
  
if (function_exists('curl_init'))
  {
    list(
$errno,$error,$header)=getRemotePage(DEF_NTLM_AUTHENTICATE_URL,true);
    echo 
"Status pobrania strony: ".($errno?"<span class=\"error\">błąd nr ".$errno." (".$error.")</span>":"<span class=\"ok\">OK</span>")."<br>";
    if (!
$errno)
    {
      echo 
"Odebrane nagłówki:<br><span class=\"header\">&nbsp; ";
      echo 
str_replace("\n",'<br>&nbsp; ',htmlspecialchars($header))."</span><br>";
    }
    else 
$totalErrors++;
  }
  else
    echo 
"<span class=\"error\">Nie testowano - biblioteka cURL jest niedostępna</span><br>";
?>
<br>
<b>Zakończono sprawdzanie środowiska i testy konfiguracji: </b>
<?php
  
if ($totalErrors)
    echo 
"<span class=\"error\">znaleziono ".($totalErrors==1?"błąd uniemożliwiający":"błędy uniemożliwiające")." poprawne działanie skryptu do automatycznego uwierzytelniania NTLM</span>.<br>";
  else
    echo 
"<span class=\"ok\">nie znaleziono żadnych błędów</span>.<br>";
  exit;


function 
getRemotePage($url,$header=false)
{
  
$ch=curl_init();
  
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  
curl_setopt($ch,CURLOPT_URL,$url);
  
curl_setopt($ch,CURLOPT_HEADER,$header?1:0);
  
curl_setopt($ch,CURLOPT_NOBODY,$header?1:0);
  
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
  
curl_setopt($ch,CURLOPT_TIMEOUT,3);
  
$page=curl_exec($ch);
  
$errno=curl_errno($ch);
  
$error=curl_error($ch);
  
curl_close($ch);
  return array(
$errno,$error,str_replace("\r",'',trim($page)));
}
?>
</body>
</html>