[imp] adding realm in IMP5 [SOLVED]

Andrew Morgan morgan at orst.edu
Fri Aug 17 23:36:26 UTC 2012


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


More information about the imp mailing list