openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

dav.php (3287B)


      1 <?php
      2 
      3 /**
      4  * WebDAV für OpenRat Content Management System<br>
      5  * 
      6  * Das virtuelle Ordnersystem dieses CMS kann ueber das WebDAV-Protokoll
      7  * dargestellt werden.
      8  * 
      9  * Diese Klasse nimmt die Anfragen von WebDAV-Clients entgegen, zerlegt die
     10  * Anfrage und erzeugt eine Antwort, die im HTTP-Body zurueck uebertragen
     11  * wird.
     12  * <br>
     13  * WebDAV ist spezifiziert in der RFC 2518.<br>
     14  * Siehe <code>http://www.ietf.org/rfc/rfc2518.txt</code><br>
     15  * 
     16  * Implementiert wird DAV-Level 1 (d.h. ohne LOCK).
     17  * 
     18  * Der Zugang über WebDAV beinhaltet einige Nachteile:
     19  * - Login ist nur mit Name/Kennwort möglich (kein OpenId)
     20  * - Nur die Standard-Datenbank kann verwendet werden
     21  * - Der Client muss Cookies unterstützen
     22  * 
     23  * @author Jan Dankert
     24  * @package openrat.actions
     25  */
     26 
     27 
     28 
     29 if (!defined('E_STRICT'))
     30 	define('E_STRICT', 2048);
     31 
     32 define('TIME_20000101',946681200);
     33 
     34 
     35 $config = array('dav.enable'               => false,
     36                    'dav.create'               => true,
     37                    'dav.readonly'             => false,
     38                    'dav.expose_openrat'       => true,
     39                    'dav.compliant_to_redmond' => true,
     40                    'dav.realm'                =>'OpenRat CMS WebDAV Login',
     41 		           'dav.anonymous'            => false,
     42                    'cms.host'                 => 'localhost',
     43 		           'cms.port'                 => 80,
     44                    'cms.username'             => null,
     45                    'cms.password'             => null,
     46 		           'cms.database'             => 'db1',
     47 		           'cms.path'                 => '/',
     48 		           'cms.max_file_size'        => 1000,
     49 		           'log.level'                => 'info',
     50 		           'log.file'                 => null
     51                    );
     52 
     53 foreach( array( 'dav-'.$_SERVER['HTTP_HOST'].'.ini',
     54                 'dav-custom.ini',
     55                 'dav.ini') as $iniFile )
     56     if   ( is_file($iniFile))
     57         $config = array_merge($config,parse_ini_file( $iniFile) );
     58 
     59 
     60 require('Logger.class.php');
     61 require('Client.class.php');
     62 require('CMS.class.php');
     63 require('WebDAV.class.php');
     64 
     65 //Logger::info( print_r($config,true));
     66 
     67 
     68 
     69 // PHP-Fehler ins Log schreiben, damit die Ausgabe nicht zerstoert wird.
     70 if (version_compare(PHP_VERSION, '5.0.0', '>'))
     71     set_error_handler('webdavErrorHandler',E_ERROR | E_WARNING);
     72 else
     73     set_error_handler('webdavErrorHandler');
     74 
     75 
     76 $dav = new WebDAV();
     77 
     78 $httpMethod = strtoupper($_SERVER['REQUEST_METHOD']);
     79 $davMethodName  = 'dav'.$httpMethod;
     80 
     81 $dav->$davMethodName();
     82 
     83 
     84 /**
     85  * Fehler-Handler fuer WEBDAV.<br>
     86  * Bei einem Laufzeitfehler ist eine Ausgabe des Fehlers auf der Standardausgabe sinnlos,
     87  * da der WebDAV-Client dies nicht lesen oder erkennen kann.
     88  * Daher wird der Fehler-Handler umgebogen, so dass nur ein Logeintrag sowie ein
     89  * Server-Fehler erzeugt wird.
     90  */
     91 function webdavErrorHandler($errno, $errstr, $errfile, $errline) 
     92 {
     93 	error_log('WEBDAV ERROR: '.$errno.'/'.$errstr.'/file:'.$errfile.'/line:'.$errline);
     94 
     95 
     96     header('HTTP/1.1 503 Internal WebDAV Server Error');
     97 
     98     // Wir teilen dem Client mit, dass auf dem Server was schief gelaufen ist.
     99 	echo 'WebDAV-Request failed with "'.$errstr.'"';
    100 	exit;
    101 }
    102 
    103 
    104 
    105 ?>