aboutsummaryrefslogtreecommitdiffstats
path: root/calendars
diff options
context:
space:
mode:
authorChad Little <clittle@users.sourceforge.net>2004-05-13 18:30:22 +0000
committerChad Little <clittle@users.sourceforge.net>2004-05-13 18:30:22 +0000
commit3e70622a7eaead6d7474de9fd6bb3751df89cc0f (patch)
treedd5a33f0576ca040fa48d17b24d63ec94ac133f0 /calendars
parent8eaaff004d688ade47bcc421415c80dbe9883b26 (diff)
downloadphpicalendar-3e70622a7eaead6d7474de9fd6bb3751df89cc0f.tar.gz
phpicalendar-3e70622a7eaead6d7474de9fd6bb3751df89cc0f.tar.bz2
phpicalendar-3e70622a7eaead6d7474de9fd6bb3751df89cc0f.zip
Fix for [ 904534 ] Publish.php workaround for Mozilla Calendar. Needs testing.
Diffstat (limited to 'calendars')
-rw-r--r--calendars/publish.php174
1 files changed, 102 insertions, 72 deletions
diff --git a/calendars/publish.php b/calendars/publish.php
index 68856bd..5910a1c 100644
--- a/calendars/publish.php
+++ b/calendars/publish.php
@@ -27,6 +27,22 @@ Usage (Apple iCal):
3. Configure to your liking, and set the URL to (eg): http://localhost/~dietricha/calendar/calendars/publish.php
4. Click the "Publish" button
+Usage (Mozilla Calendar):
+1. Your version of php and apache MUST support $_SERVER['PATH_INFO']
+2. You must have supplied a username and password in your config.php
+2. Create your calendar in Mozilla
+3. Add something to it (it must not be empty)
+4. Manually upload it to your calendars directory.
+5. Make sure that the webserver can write to the calendar file.
+(Mozilla will not save to the remote location without first downloading a copy
+from the remote location)
+6. Edit your calendar setup in mozilla
+ Location http://example.com/path/to/publish.php/calendarname.ics
+ calendarname.ics should be a unique filename and must end with .ics
+7. Username (username from config.php)
+8. Password (password from config.php)
+9. Check "publish changes automatically"
+
Security:
The calendars directory should be configured to require authentication. This can be done via any methods
supported by your webserver. There is much documentation available on the web for doing per-directory
@@ -62,89 +78,103 @@ if($_SERVER['REQUEST_METHOD'] == 'GET')
return;
}
*/
-// only allow publishing if explicitly enabled
-if(PHPICALENDAR_PUBLISHING == 1)
-{
+if (!isset($_SERVER['PHP_AUTH_USER'])) {
+ header('WWW-Authenticate: Basic realm="My Realm"');
+ header('HTTP/1.0 401 Unauthorized');
+ echo 'You must be authorized!';
+ exit;
+} else {
+ // logmsg($_SERVER['PHP_AUTH_PW'] . '|' . $_SERVER['PHP_AUTH_USER']);
+ if ($_SERVER['PHP_AUTH_USER'] != $auth_internal_username || $_SERVER['PHP_AUTH_PW'] != $auth_internal_password) {
+ header('WWW-Authenticate: Basic realm="My Realm"');
+ header('HTTP/1.0 401 Unauthorized');
+ echo 'You must be authorized!';
+ exit;
+ }
+ // only allow publishing if explicitly enabled
+ if(PHPICALENDAR_PUBLISHING == 1) {
// unpublishing
- if($_SERVER['REQUEST_METHOD'] == 'DELETE')
- {
- // get calendar filename
- $calendar_file = $calendar_path.substr($_SERVER['REQUEST_URI'] , ( strrpos($_SERVER['REQUEST_URI'], '/') + 1) ) ;
-
- logmsg('received request to delete '.$calendar_file);
-
- // remove calendar file
- if(!unlink($calendar_file))
- {
- logmsg('unable to delete the calendar file');
- }
- else
- {
- logmsg('deleted');
- }
- return;
+ if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
+ // get calendar filename
+ $calendar_file = $calendar_path.substr($_SERVER['REQUEST_URI'] , ( strrpos($_SERVER['REQUEST_URI'], '/') + 1) ) ;
+ logmsg('received request to delete '.$calendar_file);
+ // remove calendar file
+ if(!unlink($calendar_file)) {
+ logmsg('unable to delete the calendar file');
+ } else {
+ logmsg('deleted');
+ }
+ return;
}
// publishing
- if($_SERVER['REQUEST_METHOD'] == 'PUT')
- {
- // get calendar data
- if($fp = fopen('php://input','r'))
- {
- while(!@feof($fp))
- {
- $data .= fgets($fp,4096);
- }
-
- @fclose($fp);
+ if($_SERVER['REQUEST_METHOD'] == 'PUT') {
+ // get calendar data
+ if($fp = fopen('php://input','r')) {
+ while(!@feof($fp)) {
+ $data .= fgets($fp,4096);
}
- else
- {
- logmsg('unable to read input data');
+
+ @fclose($fp);
+ } else {
+ logmsg('unable to read input data');
+ }
+ if(isset($data)) {
+ // get calendar name
+ $cal_arr = explode("\n",$data);
+
+ foreach($cal_arr as $k => $v) {
+ if(strstr($v,'X-WR-CALNAME:')) {
+ $arr = explode(':',$v);
+ $calendar_name = trim($arr[1]);
+ break;
+ }
}
- if(isset($data))
- {
-
- // get calendar name
- $cal_arr = explode("\n",$data);
-
- foreach($cal_arr as $k => $v)
- {
- if(strstr($v,'X-WR-CALNAME:'))
- {
- $arr = explode(':',$v);
- $calendar_name = trim($arr[1]);
- break;
- }
- }
-
- $calendar_name = isset($calendar_name) ? $calendar_name : 'default';
-
- // write to file
- if($fp = fopen($calendar_path.$calendar_name.'.ics','w+'))
- {
- fputs($fp, $data, strlen($data) );
- @fclose($fp);
- }
- else
- {
- logmsg( 'couldnt open file '.$calendar_path.$calendar_name.'.ics' );
- }
+ $calendar_name = isset($calendar_name) ? $calendar_name : 'default';
+
+ if (isset($_SERVER['PATH_INFO'])) {
+ preg_match("/\/([ A-Za-z0-9.]*).ics/i",$_SERVER['PATH_INFO'],$matches);
+ $calendar_name = $matches[1];
}
+
+ // write to file
+ if($fp = fopen($calendar_path.$calendar_name.'.ics','w+')) {
+
+ fputs($fp, $data, strlen($data) );
+ @fclose($fp);
+ }
+ else {
+ logmsg( 'couldnt open file '.$calendar_path.$calendar_name.'.ics' );
+ }
+ }
}
-}
+ if ($_SERVER['REQUEST_METHOD'] == 'GET') {
+ if (isset($_SERVER['PATH_INFO'])) {
+ preg_match("/\/([ A-Za-z0-9._]*).ics/i",$_SERVER['PATH_INFO'],$matches);
+ $icsfile = $matches[1];
+ // get calendar data
+ if (file_exists($calendar_path . $icsfile . '.ics') &&
+ is_readable($calendar_path . $icsfile . '.ics') &&
+ is_file($calendar_path . $icsfile . '.ics')
+ ) {
+ echo file_get_contents($calendar_path . $icsfile . '.ics');
+ } else {
+ }
+ }
+ }
+ }
+}
// for logging
function logmsg($str){
- if(defined('PHPICALENDAR_LOG_PUBLISHING') && PHPICALENDAR_LOG_PUBLISHING == 1)
- {
- if($fp = fopen('publish_log.txt','a+'))
- {
- $str .= "\n";
- fputs($fp, $str, strlen($str) );
- fclose($fp);
- }
+ if(defined('PHPICALENDAR_LOG_PUBLISHING') &&
+ PHPICALENDAR_LOG_PUBLISHING == 1) {
+ if($fp = fopen('publish_log.txt','a+')) {
+ $str .= "\n";
+ fputs($fp, $str, strlen($str) );
+ fclose($fp);
}
+ }
}
-?>
+?> \ No newline at end of file

© 2014-2024 Faster IT GmbH | imprint | privacy policy