diff --git a/addressbook/inc/class.addressbook_bo.inc.php b/addressbook/inc/class.addressbook_bo.inc.php index f924b0313c..81f7e40ef2 100755 --- a/addressbook/inc/class.addressbook_bo.inc.php +++ b/addressbook/inc/class.addressbook_bo.inc.php @@ -607,6 +607,8 @@ class addressbook_bo extends addressbook_so */ function db2data($data, $date_format='ts') { + static $fb_url = false; + // convert timestamps from server-time in the db to user-time foreach ($this->timestamps as $name) { @@ -620,10 +622,12 @@ class addressbook_bo extends addressbook_so // set freebusy_uri for accounts if (!$data['freebusy_uri'] && !$data['owner'] && $data['account_id'] && !is_object($GLOBALS['egw_setup'])) { - static $fb_url; - if (!$fb_url && @is_dir(EGW_SERVER_ROOT.'/calendar/inc')) $fb_url = calendar_bo::freebusy_url(''); - if ($fb_url) $data['freebusy_uri'] = $fb_url.urlencode( - isset($data['account_lid']) ? $data['account_lid'] : $GLOBALS['egw']->accounts->id2name($data['account_id'])); + if ($fb_url || @is_dir(EGW_SERVER_ROOT.'/calendar/inc')) + { + $fb_url = true; + $user = isset($data['account_lid']) ? $data['account_lid'] : $GLOBALS['egw']->accounts->id2name($data['account_id']); + $data['freebusy_uri'] = calendar_bo::freebusy_url($user); + } } return $data; } diff --git a/calendar/freebusy.php b/calendar/freebusy.php index eb7c124b05..21d68b98d0 100644 --- a/calendar/freebusy.php +++ b/calendar/freebusy.php @@ -43,6 +43,7 @@ if (strpos($_SERVER['QUERY_STRING'],'=3D') !== false && substr($_GET['user'],0,2 { $_GET['user'] = substr($_GET['user'],2); if (isset($_GET['password'])) $_GET['password'] = substr($_GET['password'],2); + if (isset($_GET['cred'])) $_GET['cred'] = substr($_GET['cred'],2); } if (!is_numeric($user = $_GET['user'])) { @@ -58,15 +59,46 @@ if ($user === false || !($username = $GLOBALS['egw']->accounts->id2name($user))) } if (!$loged_in) { - $GLOBALS['egw']->preferences->account_id = $user; - $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(); - $GLOBALS['egw_info']['user']['account_id'] = $user; - $GLOBALS['egw_info']['user']['account_lid'] = $username; - - $cal_prefs = &$GLOBALS['egw_info']['user']['preferences']['calendar']; - if (!$cal_prefs['freebusy'] || !empty($cal_prefs['freebusy_pw']) && $cal_prefs['freebusy_pw'] != $_GET['password']) + if (empty($_GET['cred'])) { - fail_exit(lang("freebusy: Unknow user '%1', wrong password or not availible to not loged in users !!!",$_GET['user'])); + $GLOBALS['egw_info']['user']['account_id'] = $user; + $GLOBALS['egw_info']['user']['account_lid'] = $username; + $GLOBALS['egw']->preferences->account_id = $user; + $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(); + $cal_prefs = &$GLOBALS['egw_info']['user']['preferences']['calendar']; + $loged_in = !empty($cal_prefs['freebusy']) && + (empty($cal_prefs['freebusy_pw']) || $cal_prefs['freebusy_pw'] == $_GET['password']); + } + else + { + $credentials = base64_decode($_GET['cred']); + list($authuser, $password) = explode(':', $credentials, 2); + if (strpos($authuser, '@') === false) + { + $domain = $GLOBALS['egw_info']['server']['default_domain']; + $authuser .= '@' . $domain; + } + else + { + list(, $domain) = explode('@',$authuser, 2); + } + if (array_key_exists($domain, $GLOBALS['egw_domain'])) + { + $_POST['login'] = $authname; + $_REQUEST['domain'] = $domain; + $GLOBALS['egw_info']['server']['default_domain'] = $domain; + $GLOBALS['egw_info']['user']['domain'] = $domain; + $GLOBALS['egw_info']['flags']['currentapp'] = 'login'; + $GLOBALS['egw_info']['flags']['noapi'] = false; + require_once(EGW_API_INC . '/functions.inc.php'); + $loged_in = $GLOBALS['egw']->session->create($authuser, $password, 'text'); + session_unset(); + session_destroy(); + } + } + if (!$loged_in) + { + fail_exit(lang("freebusy: Unknow user '%1', or not available for unauthenticated users!", $_GET['user'])); } } if ($_GET['debug']) diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index 177a1b520a..87352ec3d7 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -1772,14 +1772,25 @@ class calendar_bo * @param int|string $user account_id or account_lid * @param string $pw=null password */ - static function freebusy_url($user,$pw=null) + static function freebusy_url($user='',$pw=null) { if (is_numeric($user)) $user = $GLOBALS['egw']->accounts->id2name($user); - + + $credentials = ''; + + if ($pw) + { + $credentials = '&password='.urlencode($pw); + } + elseif ($GLOBALS['egw_info']['user']['preferences']['calendar']['freebusy'] == 2) + { + $credentials = $GLOBALS['egw_info']['user']['account_lid'] + . ':' . $GLOBALS['egw_info']['user']['passwd']; + $credentials = '&cred=' . base64_encode($credentials); + } return (!$GLOBALS['egw_info']['server']['webserver_url'] || $GLOBALS['egw_info']['server']['webserver_url'][0] == '/' ? ($_SERVER['HTTPS'] ? 'https://' : 'http://').$_SERVER['HTTP_HOST'] : ''). - $GLOBALS['egw_info']['server']['webserver_url'].'/calendar/freebusy.php?user='.urlencode($user). - ($pw ? '&password='.urlencode($pw) : ''); + $GLOBALS['egw_info']['server']['webserver_url'].'/calendar/freebusy.php/?user='.urlencode($user).$credentials; } /** diff --git a/calendar/inc/class.calendar_hooks.inc.php b/calendar/inc/class.calendar_hooks.inc.php index 2515ea5fd7..6c7c446bba 100644 --- a/calendar/inc/class.calendar_hooks.inc.php +++ b/calendar/inc/class.calendar_hooks.inc.php @@ -240,6 +240,11 @@ class calendar_hooks 'all' => lang('Always'), 'startday' => lang('If start day differs'), ); + $freebusy_values = array( + 0 => lang('No'), + 1 => lang('Yes'), + 2 => lang('With credentials included'), + ); if (!$hook_data['setup']) // does not work at setup time { $options = array('0' => lang('none')); @@ -248,7 +253,9 @@ class calendar_hooks $options[$group['account_id']] = common::grab_owner_name($group['account_id']); } $freebusy_url = calendar_bo::freebusy_url($GLOBALS['egw_info']['user']['account_lid'],$GLOBALS['egw_info']['user']['preferences']['calendar']['freebusy_pw']); - $freebusy_help = lang('Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is %1.',''.$freebusy_url.''); + $freebusy_url = ''.$freebusy_url.''; + $freebusy_help = lang('Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is'); + $freebusy_help .= ' ' . $freebusy_url; // Timezone for file exports $export_tzs = array('0' => 'Use Event TZ'); @@ -536,15 +543,16 @@ class calendar_hooks 'admin' => False, ), 'freebusy' => array( - 'type' => 'check', + 'type' => 'select', 'label' => 'Make freebusy information available to not loged in persons?', 'name' => 'freebusy', 'help' => $freebusy_help, + 'values' => $freebusy_values, 'run_lang' => false, 'subst_help' => False, 'xmlrpc' => True, 'admin' => False, - 'forced' => false, + 'forced' => 0, ), 'freebusy_pw' => array( 'type' => 'input', @@ -553,7 +561,7 @@ class calendar_hooks 'help' => 'If you dont set a password here, the information is available to everyone, who knows the URL!!!', 'xmlrpc' => True, 'admin' => False, - 'forced' => 'no' + 'forced' => '' ) ); } diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index 99c21b2f0c..d63c9f51a2 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -180,7 +180,7 @@ forward one month calendar de einen Monat weiter forward one year calendar de ein Jahr weiter four days view calendar de Vier-Tagesansicht freebusy common de frei / belegt -freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar de Frei / Belegt: Unbekannter Benutzername '%1', falsches Passwort oder nicht verfügbar für nicht angemeldete Benutzer !!! +freebusy: unknow user '%1', or not available for unauthenticated users! calendar de Free/Busy: Unbekannter Benutzer '%1', oder Daten ohne Authentisierung nicht verfügbar! freetime search calendar de Terminsuche fri calendar de Fr full description calendar de vollständige Beschreibung @@ -355,8 +355,7 @@ set new events to private calendar de Neue Termine als private Termine eintragen setting lock time calender admin de Zeitintervall für Datensatzlock (default 1 sec.) shall the date parameter be accepted (e.g. from calendar module)? calendar de Soll der Parameter Datum akzeptiert werden (z.B. vom Kalender Modul)? should new events created as private by default ? calendar de Sollen neue Termine generell als Privat angelegt werden? -should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar de Sollen nicht angemeldete Personen Ihre Belegtzeiten einsehen können? Sie können ein Passwort setzen um diese Informationen zu schützen. Das Passwort sollte sich von Ihrem normalen Passwort unterscheiden. Die Belegtzeiten sind im iCal Format und enthalten ausschließlich die Zeiten, an denen Sie nicht verfügbar sind. Sie enthalten NICHT den Namen, die Beschreibung oder den Ort des Termins. Die Adresse (URL) Ihrer Belegtzeiten ist %1. -should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk. calendar de Soll Ihre Verfügbarkeit auch ohne Anmeldung sichtbar sein? Sie können auch ein separates Passwort zum Schutz dieser Information vergeben. Ihre Verfügbarkeit wird im iCal-Format veröffnetlicht und enthält nur die Zeiten, zu denen sie bereits gebucht sind. Titel, Beschreibung und Ort sind so nicht einsehbar. +should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is calendar de Sollen nicht angemeldete Personen Ihre Belegtzeiten einsehen können? Sie können ein Passwort setzen um diese Informationen zu schützen. Das Passwort sollte sich von Ihrem normalen Passwort unterscheiden. Die Belegtzeiten sind im iCal Format und enthaltena usschließlich die Zeiten, an denen Sie nicht verfügbar sind. Sie enthalten NICHT den Namen, die Beschreibung oder den Ort des Termins. Die Adresse (URL) Ihrer Belegtzeiten ist should the grid be shown in the calendar calendar de Soll das Gitternetz im Kalender angezeigt werden? should the number of weeks be shown on top of the calendar calendar de Soll die Wochenanzahl im Kalander oben abgezeigt werden? should the number of weeks be shown on top of the calendar (only if offset = 0) calendar de Soll die Kalenderwoche im oberen Teil des Kalenders angezeigt werden (Nur wenn Abstabd=0) @@ -466,6 +465,7 @@ which events do you want to see when you enter the calendar. calendar de Welche which of calendar view do you want to see, when you start calendar ? calendar de Welche der möglichen Ansichten des Kalenders möchten Sie als Standard sehen, wenn der Kalender geöffnet wird? whole day calendar de ganztägig whole query calendar de Ganze Abfrage +with credentials included calendar de Mit Zugangsdaten im URL wk calendar de KW work day ends on calendar de Arbeitstag endet um work day starts on calendar de Arbeitstag beginnt um diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang index 53a1d0fc93..1143dd80d1 100644 --- a/calendar/lang/egw_en.lang +++ b/calendar/lang/egw_en.lang @@ -180,7 +180,7 @@ forward one month calendar en forward one month forward one year calendar en forward one year four days view calendar en Four days view freebusy common en Free/Busy -freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar en Free/Busy: Unknown user '%1', wrong password or not available to not logged in users !!! +freebusy: unknow user '%1', or not available for unauthenticated users! calendar en freebusy: Unknow user '%1', or not available for unauthenticated users! freetime search calendar en Freetime Search fri calendar en Fri full description calendar en Full description @@ -355,9 +355,7 @@ set new events to private calendar en Set new events to private setting lock time calender admin en Setting Data lock Time for Calendar (default 1 sec.) shall the date parameter be accepted (e.g. from calendar module)? calendar en Shall the date parameter be accepted (e.g. from calendar module)? should new events created as private by default ? calendar en Should new events created as private by default ? -should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar en Should not logged in persons be able to see your Free/Busy information? You can set an extra password, different from your normal password, to protect this information. The Free/Busy information is in iCal format and only includes the times when you are busy. It does not include the event-name, description or locations. The URL to your Free/Busy information is %1. -should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk. calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is http://213.183.76.121/egroupware/calendar/freebusy.php?user=mkk. -should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin. calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is https://www.serveahead.de/trunk/calendar/freebusy.php?user=admin. +should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is should the grid be shown in the calendar calendar en Should the grid be shown in the calendar should the number of weeks be shown on top of the calendar calendar en Should the number of weeks be shown on top of the calendar should the number of weeks be shown on top of the calendar (only if offset = 0) calendar en Should the number of weeks be shown on top of the calendar (only if offset = 0) @@ -467,6 +465,7 @@ which events do you want to see when you enter the calendar. calendar en Which e which of calendar view do you want to see, when you start calendar ? calendar en Which of calendar views do you want to see, when you start calendar ? whole day calendar en Whole day whole query calendar en whole query +with credentials included calendar en With credentials included wk calendar en Wk work day ends on calendar en Work day ends on work day starts on calendar en Work day starts on diff --git a/groupdav.php b/groupdav.php index bfe90c7362..e6b1daa890 100644 --- a/groupdav.php +++ b/groupdav.php @@ -28,6 +28,8 @@ $GLOBALS['egw_info'] = array( require_once('phpgwapi/inc/class.egw_digest_auth.inc.php'); include(dirname(__FILE__).'/header.inc.php'); +$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(); + $headertime = microtime(true); $groupdav = new groupdav();