[imp] adding realm in IMP5 [SOLVED]

Jan Schneider jan at horde.org
Sat Aug 18 09:09:05 UTC 2012


Zitat von Andrew Morgan <morgan at orst.edu>:

> On Thu, 16 Aug 2012, Michael M Slusarz wrote:
>
>> Quoting Andrew Morgan <morgan at orst.edu>:
>>
>>> On Wed, 15 Aug 2012, Michael M Slusarz wrote:
>>>
>>>> Quoting Andrew Morgan <morgan at orst.edu>:
>>>>
>>>>> However, what I really need to do is lookup the realm on the  
>>>>> fly.  Is there some session parameter I can use as a key to  
>>>>> lookup the $servers entry?
>>>>
>>>> In IMP 5+, you can do this:
>>>>
>>>> $servers = IMP_Imap::loadServerConfig([$server]);
>>>>
>>>> where $server = the server entry you want to load from  
>>>> backends[.local].php
>>>>
>>>> If $server is omitted, all of the server entries will be returned.
>>>
>>> Okay, that is getting me closer!  How can I determine which server  
>>> the user is authenticated to?  That must be stored in a session  
>>> object somewhere, so that IMP knows which server to connect to  
>>> later on...
>>
>> There's no way of retrieving the original server key (i.e. the  
>> array key from backends.php).  You can instead query the stored  
>> IMAP object to determine which server it is using.
>>
>> e.g.:
>>
>> $imap = $GLOBALS['injector']->getInstance('IMP_Factory_Imap')->create();
>> $value = $imap->ob->get($key);
>>
>> where $key is the Horde_Imap_Client_Base configuration option. See:
>>
>> http://dev.horde.org/api/framework/Imap_Client/Imap_Client/Horde_Imap_Client.html#factory
>>
>> for the list of parameters.  'hostspec' and/or 'port' should  
>> probably be sufficient to uniquely identify the backend server.
>
> Okay!  That put me on the right track.  Here is my final solution in  
> horde/config/hooks.php:
>
>      public function authusername($userId, $toHorde)
>      {
>         if ($toHorde) {
>                 // Put the domain on from backends.local.php
>                 $imap =  
> $GLOBALS['injector']->getInstance('IMP_Factory_Imap')->create();
>                 $hostspec = $imap->ob->getParam('hostspec');
>                 $servers = IMP_Imap::loadServerConfig();
>                 foreach ($servers as $server) {
>                         if ($server['hostspec'] == $hostspec) {
>                                 $userId = $userId . '@' . $server['realm'];
>                                 break;
>                         }
>                 }
>                 return $userId;
>         } else {
>                 // strip the domain off
>                 $userId = substr($userId, 0, strpos($userId, '@'));
>                 return $userId;
>         }
>     }
>
>
> Note: it was $imap->ob->getParam($key) instead of $imap->ob->get($key).
>
> I defined a 'realm' parameter on the server entry in  
> backends.local.php to more directly control the value that would be  
> appended to the userId.
>
> Thanks for all the help!
>
> 	Andy

You might want to add this to the wiki.
-- 
Jan Schneider
The Horde Project
http://www.horde.org/



More information about the imp mailing list