stuart: server/kolab-resource-handlers/kolab-resource-handlers/resmgr resmgr.php, 1.5, 1.6
cvs at intevation.de
cvs at intevation.de
Fri Jul 16 01:06:04 CEST 2004
Author: stuart
Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv19038
Modified Files:
resmgr.php
Log Message:
Updated the resource manager to use the new XML data object
Some style fixups as well
*** !!!THIS NEEDS TO BE TESTED W/ KONTACT!!! ***
Index: resmgr.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/resmgr.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- resmgr.php 13 Jul 2004 07:31:44 -0000 1.5
+++ resmgr.php 15 Jul 2004 23:06:01 -0000 1.6
@@ -151,7 +151,7 @@
$errors = imap_alerts();
if ($errors !== false) {
while ($error = array_pop($errors)) {
- myLog("(IMAP) $error", LOG_WARNING);
+ myLog("(IMAP) $error", RM_LOG_WARN);
}
}
@@ -208,42 +208,47 @@
*/
function getImapPassword()
{
- global $resource;
- global $params;
+ global $resource, $params;
- // Connect to LDAP server end get the password
- $ldap = ldap_connect( $params['ldap_uri'] );
- if( !ldap_bind( $ldap, $params['bind_dn'], $params['bind_pw'] ) ) {
- myLog("Could not contact LDAP server: ".$ldap_error($ldap));
- return false;
- }
- $result = ldap_search( $ldap, $params['base_dn'], "(mail=$resource)", array("encryptedPassword"));
- if( !$result ) {
- myLog("Could not perform seearch: ".$ldap_error($ldap));
- return false;
- }
- $entries = ldap_get_entries( $ldap, $result );
- if( $entries['count'] != 1 ) {
- myLog("More than one object returned for $resource");
- return false;
- }
- $encpw = base64_decode($entries[0]['encryptedpassword'][0]);
- ldap_close($ldap);
-
- // Now get private key and decrypt pw:
- $pkd=file_get_contents("@l_prefix@/etc/kolab/res_priv.pem" );
- $pkey = openssl_pkey_get_private( $pkd );
- if( $pkey === false ) {
- while( $msg = openssl_error_string() )
- myLog( "Error reading private key: $msg" );
- }
- if( !openssl_private_decrypt( $encpw, $cleartext, $pkey ) ) {
- while( $msg = openssl_error_string() )
- myLog( "Error decrypting: $msg" );
- return false;
- }
- openssl_free_key($pkey);
- return $cleartext;
+ // Connect to the LDAP server and retrieve the users' password
+ $ldap = ldap_connect($params['ldap_uri']);
+ if (!ldap_bind($ldap, $params['bind_dn'], $params['bind_pw'])) {
+ myLog('Unable to contact LDAP server: ' . $ldap_error($ldap));
+ return false;
+ }
+
+ $result = ldap_search($ldap, $params['base_dn'], "(mail=$resource)", array("encryptedPassword"));
+ if (!$result) {
+ myLog('Unable to perform LDAP search: ' . $ldap_error($ldap));
+ return false;
+ }
+
+ $entries = ldap_get_entries($ldap, $result);
+ if ($entries['count'] != 1) {
+ myLog("More than one object returned for $resource");
+ return false;
+ }
+
+ $encpw = base64_decode($entries[0]['encryptedpassword'][0]);
+ ldap_close($ldap);
+
+ // Now get private key and decrypt the password
+ $pkd = file_get_contents('/kolab/etc/kolab/res_priv.pem');
+ $pkey = openssl_pkey_get_private($pkd);
+ if ($pkey === false) {
+ while ($msg = openssl_error_string())
+ myLog("Error reading private key: $msg");
+ }
+
+ if (!openssl_private_decrypt($encpw, $cleartext, $pkey)) {
+ while ($msg = openssl_error_string())
+ myLog("Error decrypting password: $msg");
+ return false;
+ }
+
+ openssl_free_key($pkey);
+
+ return $cleartext;
}
function getRequest()
@@ -287,18 +292,32 @@
}
/** Helper function */
-function glue_url($parsed)
-{
- if (! is_array($parsed)) return false;
- $uri = $parsed['scheme'] ? $parsed['scheme'].':'.((strtolower($parsed['scheme']) == 'mailto') ? '':'//'): '';
- $uri .= $parsed['user'] ? urlencode($parsed['user']).($parsed['pass']? ':'.urlencode($parsed['pass']):'').'@':'';
- $uri .= $parsed['host'] ? $parsed['host'] : '';
- $uri .= $parsed['port'] ? ':'.$parsed['port'] : '';
- $uri .= $parsed['path'] ? $parsed['path'] : '';
- $uri .= $parsed['query'] ? '?'.$parsed['query'] : '';
- $uri .= $parsed['fragment'] ? '#'.$parsed['fragment'] : '';
- return $uri;
-}
+function assembleUri($parsed)
+{
+ if (!is_array($parsed)) return false;
+
+ $uri = empty($parsed['scheme']) ? '' :
+ $parsed['scheme'] . ':' . ((strtolower($parsed['scheme']) == 'mailto') ? '' : '//');
+
+ $uri .= empty($parsed['user']) ? '' :
+ urlencode($parsed['user']) .
+ (empty($parsed['pass']) ? '' : urlencode($parsed['pass']))
+ . '@';
+
+ $uri .= empty($parsed['host']) ? '' :
+ $parsed['host'];
+ $uri .= empty($parsed['port']) ? '' :
+ ':' . $parsed['port'];
+
+ $uri .= empty($parsed['path']) ? '' :
+ $parsed['path'];
+ $uri .= empty($parsed['query']) ? '' :
+ '?' . $parsed['query'];
+ $uri .= empty($parsed['anchor']) ? '' :
+ '#' . $parsed['anchor'];
+
+ return $uri;
+}
function &getFreeBusy()
{
@@ -310,7 +329,7 @@
$parsed = parse_url($url);
$parsed['user'] = $params['calendar_user'];
$parsed['pass'] = $params['calendar_pass'];
- $url = glue_url($parsed);
+ $url = assembleUri($parsed);
myLog("Using f/b URL $url", RM_LOG_DEBUG);
@@ -470,31 +489,30 @@
} else {
$mailbox = "user/$prefix/" . $params['calendar_store'] . "$suffix";
}
- #$mailbox = "INBOX/Calendar";
+ //$mailbox = "INBOX/Calendar";
$fullmbox = $server . $mailbox;
- myLog("Opening connection to $server for ".$params['calendar_user'], RM_LOG_DEBUG);
+ myLog("Opening connection to $server for " . $params['calendar_user'], RM_LOG_DEBUG);
// Open an IMAP connection to the requested users' calendar
$imap = @imap_open($fullmbox, $params['calendar_user'], $params['calendar_pass'], OP_HALFOPEN);
testIMAPError();
- @imap_reopen( $imap, $fullmbox, CL_EXPUNGE );
+
+ @imap_reopen($imap, $fullmbox, CL_EXPUNGE);
$errors = imap_errors();
- if( $errors ) myLog( "IMAP Errors from reopen: ".join(", ", $errors ) );
- if( !empty($errors) ) {
- // slurp up errors
- // Create Calendar folder
- @imap_createmailbox( $imap, $fullmbox );
- myLog( "IMAP Errors from createmailbox: ".join(", ", imap_errors() ) );
+ if (count($errors)) {
+ myLog('IMAP Errors from reopen: ' . join(', ', $errors));
- $status = @imap_status($imap, $fullmbox, SA_ALL);
- myLog( "Info about new folder: ".print_r($status,true));
+ // Try create the Calendar folder
+ @imap_createmailbox($imap, $fullmbox);
+ myLog('IMAP Errors from createmailbox: ' . join(', ', imap_errors()));
- @imap_reopen( $imap, $fullmbox, CL_EXPUNGE );
- if( imap_last_error() ) {
- myLog( "IMAP Error from imap_reopen on new mailbox $fullmbox: ".imap_last_error());
- }
+ $status = @imap_status($imap, $fullmbox, SA_ALL);
+ myLog('New folder status: ' . print_r($status, true));
+
+ myLog('Trying to reopen calendar box...');
+ @imap_reopen($imap, $fullmbox, CL_EXPUNGE);
+ testIMAPError();
}
- testIMAPError();
$connected = true;
}
@@ -525,6 +543,49 @@
testIMAPError();
}
+function iCalDate2Kolab($ical_date)
+{
+ // $ical_date should be a timestamp
+ return strftime('%Y-%m-%dT%H:%M:%SZ', $ical_date);
+}
+
+function &buildKolabEvent()
+{
+ global $organiser, $itip, $resource, $uid;
+
+ $kolab_xml = domxml_new_doc('1.0');
+ $kolab_event = $kolab_xml->append_child($kolab_xml->create_element('event'));
+ $kolab_event->set_attribute('version', '1.0');
+
+ // We're not interested in too much information about the event; the only
+ // critical things are the UID and the time spans. We include the
+ // summary and body for display purposes (e.g. in the free/busy viewer).
+ $kolab_node = $kolab_event->append_child($kolab_xml->create_element('uid'));
+ $kolab_node->append_child($kolab_xml->create_text_node($uid));
+
+ $kolab_node = $kolab_event->append_child($kolab_xml->create_element('summary'));
+ $kolab_node->append_child($kolab_xml->create_text_node(
+ $itip->getAttributeDefault('SUMMARY', '')
+ ));
+
+ $kolab_node = $kolab_event->append_child($kolab_xml->create_element('body'));
+ $kolab_node->append_child($kolab_xml->create_text_node(
+ $itip->getAttributeDefault('DESCRIPTION', '')
+ ));
+
+ $kolab_node = $kolab_event->append_child($kolab_xml->create_element('start-date'));
+ $kolab_node->append_child($kolab_xml->create_text_node(
+ iCalDate2Kolab($itip->getAttributeDefault('DTSTART', 0))
+ ));
+
+ $kolab_node = $kolab_event->append_child($kolab_xml->create_element('end-date'));
+ $kolab_node->append_child($kolab_xml->create_text_node(
+ iCalDate2Kolab($itip->getAttributeDefault('DTSTART', 0))
+ ));
+
+ return $kolab_xml;
+}
+
@@ -686,8 +747,41 @@
myLog("Adding event $uid");
- $iCalendar = &new Horde_iCalendar();
- // Update our status within the vEvent
+ $kolab_xml = &buildKolabEvent();
+
+ $message = &new MIME_Message();
+
+ $kolabinfo = 'This is a Kolab Groupware object. To view this object you will need a client that understands the Kolab Groupware format. For a list of such clients please visit http:://www.kolab.org/kolab-clients.html';
+
+ $body = &new MIME_Part('text/plain', Text::wrap($kolabinfo, 76, "\n"));
+
+ $part = &new MIME_Part('application/x-vnd.kolab.event', $kolab_xml->dump_mem(true));
+ $part->setName('kolab.event');
+ $part->setDisposition('attachment');
+
+ $message->addPart($body);
+ $message->addPart($part);
+
+ $headers = &new MIME_Headers();
+ $headers->addHeader("From", $resource);
+ $headers->addHeader("To", $resource);
+ $headers->addHeader("Subject", $uid);
+ $headers->addHeader("User-Agent", "proko2/resmgr");
+ $headers->addHeader("Reply-To", "");
+ $headers->addHeader("Date", date("r"));
+ $headers->addMIMEHeaders($message);
+
+ $message = preg_replace("/\r\n|\n|\r/s", "\r\n",
+ $headers->toString() .
+ $body->toString(false) .
+ $part->toString(false)
+ );
+
+ myLog("Appending message to $fullmbox", RM_LOG_DEBUG);
+ @imap_append($imap, $fullmbox, $message);
+ testIMAPError();
+
+ // Update our status within the iTip request and send the reply
$itip->setAttribute('STATUS', 'CONFIRMED', array(), false);
$attendees = $itip->getAttribute('ATTENDEE');
if (!is_array($attendees)) {
@@ -714,30 +808,6 @@
$itip->setAttribute('ATTENDEE', $attendee, $attparams[$i]);
}
- $iCalendar->addComponent($itip);
-
- $message = &new MIME_Message();
- $part = &new MIME_Part('text/calendar', $iCalendar->exportvCalendar());
- $part->setName('kolab-calendar-entry.ics');
- $part->setDisposition('attachment');
- $message->addPart($part);
-
- $headers = &new MIME_Headers();
- $headers->addHeader("From", $resource);
- $headers->addHeader("To", $resource);
- $headers->addHeader("Subject", $uid);
- $headers->addHeader("User-Agent", "proko2/resmgr");
- $headers->addHeader("Reply-To", "");
- $headers->addHeader("Date", date("r"));
- $headers->addMIMEHeaders($message);
-
- $message = preg_replace("/\r\n|\n|\r/s", "\r\n",
- $headers->toString() . $part->toString(false));
-
- myLog("Appending message to $fullmbox", RM_LOG_DEBUG);
- @imap_append($imap, $fullmbox, $message);
- testIMAPError();
-
sendITipReply(RM_ITIP_ACCEPT);
shutdown(0);
@@ -748,7 +818,7 @@
imapConnect();
// Delete the event
- $messages = @imap_sort($imap, SORTDATE, 0, SE_UID, 'BODY "UID" BODY "' . $uid . '"');
+ $messages = @imap_sort($imap, SORTDATE, 0, SE_UID, 'BODY "<uid>" BODY "' . $uid . '" BODY "</uid>"');
testIMAPError();
if (!is_array($messages)) {
More information about the commits
mailing list