Added a User_username table that links the external username with a StatusNet user_id

Added EmailAuthenticationPlugin
Added ReverseUsernameAuthenticationPlugin
Changed the StartChangePassword and EndChangePassword events to take a user, instead of a nickname
User::allowed_nickname was declared non-static, but used as if it was static, so I made the declaration static
This commit is contained in:
Craig Andrews
2009-11-12 20:12:00 -05:00
parent cefbad0159
commit ed690615de
14 changed files with 358 additions and 104 deletions

View File

@@ -48,20 +48,31 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
public $scope=null;
public $attributes=array();
function __construct()
{
parent::__construct();
function onInitializePlugin(){
parent::onInitializePlugin();
if(!isset($this->host)){
throw new Exception("must specify a host");
}
if(!isset($this->basedn)){
throw new Exception("must specify a basedn");
}
if(!isset($this->attributes['nickname'])){
throw new Exception("must specify a nickname attribute");
}
if(!isset($this->attributes['username'])){
throw new Exception("must specify a username attribute");
}
}
//---interface implementation---//
function checkPassword($nickname, $password)
function checkPassword($username, $password)
{
$ldap = $this->ldap_get_connection();
if(!$ldap){
return false;
}
$entry = $this->ldap_get_user($nickname);
$entry = $this->ldap_get_user($username);
if(!$entry){
return false;
}else{
@@ -76,48 +87,33 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
}
}
function autoRegister($nickname)
function autoRegister($username)
{
$entry = $this->ldap_get_user($nickname,$this->attributes);
$entry = $this->ldap_get_user($username,$this->attributes);
if($entry){
$registration_data = array();
foreach($this->attributes as $sn_attribute=>$ldap_attribute){
if($sn_attribute=='email'){
$registration_data[$sn_attribute]=common_canonical_email($entry->getValue($ldap_attribute,'single'));
}else if($sn_attribute=='nickname'){
$registration_data[$sn_attribute]=common_canonical_nickname($entry->getValue($ldap_attribute,'single'));
}else{
$registration_data[$sn_attribute]=$entry->getValue($ldap_attribute,'single');
}
$registration_data[$sn_attribute]=$entry->getValue($ldap_attribute,'single');
}
if(isset($registration_data['email']) && !empty($registration_data['email'])){
$registration_data['email_confirmed']=true;
}
//set the database saved password to a random string.
$registration_data['password']=common_good_rand(16);
$user = User::register($registration_data);
return true;
return User::register($registration_data);
}else{
//user isn't in ldap, so we cannot register him
return null;
return false;
}
}
function changePassword($nickname,$oldpassword,$newpassword)
function changePassword($username,$oldpassword,$newpassword)
{
//TODO implement this
throw new Exception(_('Sorry, changing LDAP passwords is not supported at this time'));
return false;
}
function canUserChangeField($nickname, $field)
{
switch($field)
{
case 'password':
case 'nickname':
case 'email':
return false;
}
}
//---utility functions---//
function ldap_get_config(){
@@ -159,7 +155,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
*/
function ldap_get_user($username,$attributes=array()){
$ldap = $this->ldap_get_connection();
$filter = Net_LDAP2_Filter::create($this->attributes['nickname'], 'equals', $username);
$filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
$options = array(
'scope' => 'sub',
'attributes' => $attributes