You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							2.9 KiB
						
					
					
				| <?php
 | |
| $realm = 'Restricted area - Public Imeji Listing';
 | |
| 
 | |
| //user => password
 | |
| $users = array('admin' => 'sekihou4imeji');
 | |
| 
 | |
| 
 | |
| if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
 | |
|     header('HTTP/1.1 401 Unauthorized');
 | |
|     header('WWW-Authenticate: Digest realm="'.$realm.
 | |
|            '",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
 | |
| 
 | |
|     die('401 Unauthorized: Operation Cancelled!');
 | |
| }
 | |
| 
 | |
| 
 | |
| // analyze the PHP_AUTH_DIGEST variable
 | |
| if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
 | |
|     !isset($users[$data['username']]))
 | |
|     die('401 Unauthorized: Invalid Credentials!');
 | |
| 
 | |
| 
 | |
| // generate the valid response
 | |
| $A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
 | |
| $A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
 | |
| $valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);
 | |
| 
 | |
| if ($data['response'] != $valid_response)
 | |
|     die('401 Unauthorized: Invalid Credentials!');
 | |
| 
 | |
| // ok, valid username & password
 | |
| echo 'Authenticated as: ' . $data['username'];
 | |
| 
 | |
| 
 | |
| // function to parse the http auth header
 | |
| function http_digest_parse($txt)
 | |
| {
 | |
|     // protect against missing data
 | |
|     $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
 | |
|     $data = array();
 | |
|     $keys = implode('|', array_keys($needed_parts));
 | |
| 
 | |
|     preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
 | |
| 
 | |
|     foreach ($matches as $m) {
 | |
|         $data[$m[1]] = $m[3] ? $m[3] : $m[4];
 | |
|         unset($needed_parts[$m[1]]);
 | |
|     }
 | |
| 
 | |
|     return $needed_parts ? false : $data;
 | |
| }
 | |
| ?>
 | |
| 
 | |
| <html><head><title>Public Uploaded Files Listing</title></head></html>
 | |
| 
 | |
| <?php 
 | |
| 
 | |
| if (!empty($_FILES["file"]))
 | |
| {
 | |
|     if ($_FILES["file"]["error"] > 0)
 | |
|        {echo "Error: " . $_FILES["file"]["error"] . "<br>";}
 | |
|     else
 | |
|        {echo "Stored file:".$_FILES["file"]["name"]."<br/>Size:".($_FILES["file"]["size"]/1024)." kB<br/>";
 | |
|        move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
 | |
|        }
 | |
| }
 | |
| 
 | |
|     // open this directory 
 | |
|     $myDirectory = opendir(".");
 | |
|     // get each entry
 | |
|     while($entryName = readdir($myDirectory)) {$dirArray[] = $entryName;} closedir($myDirectory);
 | |
|     $indexCount = count($dirArray);
 | |
|         echo "$indexCount files<br/>";
 | |
|     sort($dirArray);
 | |
| 
 | |
|     echo "<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks><TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th><th>Preview</th></TR>\n";
 | |
| 
 | |
|         for($index=0; $index < $indexCount; $index++) 
 | |
|         {
 | |
|             if (substr("$dirArray[$index]", 0, 1) != ".")
 | |
|             {
 | |
|             echo "<TR>
 | |
|             <td><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>
 | |
|             <td>".filetype($dirArray[$index])."</td>
 | |
|             <td>".filesize($dirArray[$index])."</td>
 | |
|             <td><img src=\"$dirArray[$index]\">$dirArray[$index]</a></td>
 | |
|                 </TR>";
 | |
|             }
 | |
|         }
 | |
|     echo "</TABLE>";
 | |
|     ?>
 | 
