[horde] Setting up identities in hooks
Diego Woitasen
diegows at xtech.com.ar
Fri Oct 22 22:18:09 UTC 2010
On Mon, May 10, 2010 at 6:03 AM, Jan Schneider <jan at horde.org> wrote:
> Zitat von Diego Woitasen <diegows at xtech.com.ar>:
>
>
> 2010/5/8 Diego Woitasen <diegows at xtech.com.ar>
>>
>> Hi,
>>> I'm using Horde Groupware (Kolab). I need to setup user identities every
>>> times the user logins. The informatino is stored in LDAP. I know that
>>> config/hooks.php is the place to put the code, the code is executed but I
>>> don't underdand why my modifications to identities and sent to /dev/null.
>>>
>>> The example code with LDAP that doesn't work.
>>>
>>> if (!function_exists('_horde_hook_postauthenticate')) {
>>> function _horde_hook_postauthenticate($userID, $credential, $realm) {
>>> require_once 'Horde/Identity.php';
>>> $name = "$userID";
>>> if (is_null($name)) {
>>> $name = Auth::getAuth();
>>> }
>>>
>>> Horde::logMessage('Setting up identities.');
>>>
>>> $identities = &Identity::singleton('none',"$name");
>>> $identities->init();
>>>
>>> $id_data = array( "id" => "Uno", "fullname" => "Full Uno",
>>> "from_addr" => "uno at kolab-demo.xtech.com.ar");
>>> $identities->add($id_data);
>>>
>>> $id_data = array( "id" => "Dos", "fullname" => "Full Dos",
>>> "from_addr" => "dos at kolab-demo.xtech.com.ar");
>>> $identities->add($id_data);
>>>
>>> $id_data = array( "id" => "Tres", "fullname" => "Full Tres",
>>> "from_addr" => "tres at kolab-demo.xtech.com.ar");
>>> $identities->add($id_data);
>>>
>>> $identities->setDefault(0);
>>>
>>> $identities->save();
>>>
>>> return true;
>>> }
>>>
>>> Any ideas?
>>>
>>> Thanks!
>>>
>>> --
>>> Diego Woitasen
>>> XTECH
>>>
>>>
>>
>> I found the solution. The right hook to change identities is
>> _imp_hook_postlogin. In _horde_
>> hook_postauthenticate the preferences are not loaded yet, so you can't
>> change anything.
>>
>> That's the code to change Identities based on information stored in LDAP.
>> May be this is useful for somebody else.
>>
>> if (!function_exists('_imp_hook_postlogin')) {
>> function _imp_hook_postlogin($actionID, $isLogin) {
>> require_once 'Horde/Identity.php';
>>
>>
>> $userdn = $GLOBALS['conf']['kolab']['ldap']['phpdn'];
>> $userpw = $GLOBALS['conf']['kolab']['ldap']['phppw'];
>> $host = $GLOBALS['conf']['kolab']['ldap']['server'];
>> $base = $GLOBALS['conf']['kolab']['ldap']['basedn'];
>> $name = Auth::getAuth();
>>
>> $identities = &Identity::singleton('none',"$name");
>> $identities->_identities = array();
>>
>> if(!isset($userdn) or !isset($userpw) or !isset($host) or
>> !isset($base)){
>> horde::logMessage("_imp_hook_postlogin: LDAP config param
>> missing",
>> __FILE__, __LINE__);
>> return true;
>> }
>>
>> $ldap = ldap_connect($host);
>> if(!$ldap){
>> horde::logMessage("_imp_hook_postlogin: LDAP connect fail",
>> __FILE__, __LINE__);
>> return true;
>> }
>>
>> if(!ldap_bind($ldap, $userdn, $userpw)){
>> horde::logMessage("_imp_hook_postlogin: LDAP bind fail",
>> __FILE__, __LINE__);
>> return true;
>> }
>>
>> $filter =
>> '(|(mail=%s)(kolabDelegate=%s)(kolabDelegate=sendas-%s))';
>> $filter = sprintf($filter, $name, $name, $name);
>> $attrs = array("cn", "mail");
>> $res = ldap_search($ldap, $base, $filter, $attrs);
>> if(!$res){
>> horde::logMessage("_imp_hook_postlogin: LDAP search fail",
>> __FILE__, __LINE__);
>> return true;
>> }
>>
>> $info = ldap_get_entries($ldap, $res);
>> for($i = 0; $i < $info["count"]; $i++){
>> $id_data = array( "id" => $info[$i]["cn"][0],
>> "fullname" => $info[$i]["cn"][0],
>> "from_addr" => $info[$i]["mail"][0]);
>> $pos = $identities->add($id_data);
>> if($info[$i]["mail"][0] == $name)
>> $identities->setDefault($pos);
>>
>> }
>>
>> $identities->init();
>> $identities->save();
>>
>> return true;
>> }
>> }
>>
>
> Neither is correct. Identities are stored in the preferences, so you should
> make this a preference hook.
>
> Jan.
>
> --
> Do you need professional PHP or Horde consulting?
> http://horde.org/consulting/
>
> --
> Horde mailing list - Join the hunt: http://horde.org/bounties/#horde
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: horde-unsubscribe at lists.horde.org
>
Some delay here...
Neither one is correct but if the user has the identities already configured
the pref hook won't be called. I need to update the identity every time the
user log in.
Regards,
Diego
--
Diego Woitasen
XTECH
More information about the horde
mailing list