Zitat von Andrew Morgan <[email protected]>:
On Thu, 16 Aug 2012, Michael M Slusarz wrote:
Quoting Andrew Morgan <[email protected]>:
On Wed, 15 Aug 2012, Michael M Slusarz wrote:
Quoting Andrew Morgan <[email protected]>:
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/
--
imp mailing list
Frequently Asked Questions: http://wiki.horde.org/FAQ
To unsubscribe, mail: [email protected]