. * * @category Plugin * @package StatusNet * @author Craig Andrews * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } class LdapAuthorizationPlugin extends AuthorizationPlugin { public $roles_to_groups = array(); public $login_group = null; function onInitializePlugin(){ if(!isset($this->provider_name)){ // TRANS: Exception thrown when initialising the LDAP Auth plugin fails because of an incorrect configuration. throw new Exception(_m('provider_name must be set. Use the provider_name from the LDAP Authentication plugin.')); } if(!isset($this->uniqueMember_attribute)){ // TRANS: Exception thrown when initialising the LDAP Auth plugin fails because of an incorrect configuration. throw new Exception(_m('uniqueMember_attribute must be set.')); } $this->ldapCommon = new LdapCommon(get_object_vars($this)); } function onAutoload($cls) { switch ($cls) { case 'LdapCommon': require_once(INSTALLDIR.'/plugins/LdapCommon/LdapCommon.php'); return false; } return parent::onAutoload($cls); } //---interface implementation---// function loginAllowed($user) { $user_username = new User_username(); $user_username->user_id=$user->id; $user_username->provider_name=$this->provider_name; if($user_username->find() && $user_username->fetch()){ $entry = $this->ldapCommon->get_user($user_username->username); if($entry){ if(isset($this->login_group)){ if(is_array($this->login_group)){ foreach($this->login_group as $group){ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){ return true; } } }else{ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->login_group)){ return true; } } return null; }else{ //if a user exists, we can assume he's allowed to login return true; } }else{ return null; } }else{ return null; } } function hasRole($profile, $name) { $user_username = new User_username(); $user_username->user_id=$profile->id; $user_username->provider_name=$this->provider_name; if($user_username->find() && $user_username->fetch()){ $entry = $this->ldapCommon->get_user($user_username->username); if($entry){ if(isset($this->roles_to_groups[$name])){ if(is_array($this->roles_to_groups[$name])){ foreach($this->roles_to_groups[$name] as $group){ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){ return true; } } }else{ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){ return true; } } } } } return false; } function onPluginVersion(array &$versions) { $versions[] = array('name' => 'LDAP Authorization', 'version' => GNUSOCIAL_VERSION, 'author' => 'Craig Andrews', 'homepage' => 'http://status.net/wiki/Plugin:LdapAuthorization', 'rawdescription' => // TRANS: Plugin description. _m('The LDAP Authorization plugin allows for StatusNet to handle authorization through LDAP.')); return true; } }