diff --git a/lib/WebGUI/Auth/LDAP.pm b/lib/WebGUI/Auth/LDAP.pm
index 5836428c0..5d360e731 100644
--- a/lib/WebGUI/Auth/LDAP.pm
+++ b/lib/WebGUI/Auth/LDAP.pm
@@ -15,6 +15,7 @@ use WebGUI::Auth;
use WebGUI::DateTime;
use WebGUI::HTMLForm;
use WebGUI::Form;
+use WebGUI::Icon;
use WebGUI::LDAPLink;
use WebGUI::Mail;
use WebGUI::Session;
@@ -46,8 +47,8 @@ my %ldapStatusCode = ( 0=>'success (0)', 1=>'Operations Error (1)', 2=>'Protocol
sub _isValidLDAPUser {
my $self = shift;
my ($uri, $error, $ldap, $search, $auth, $connectDN);
-
- $uri = URI->new($session{setting}{ldapURL}) or $error = WebGUI::International::get(2,'AuthLDAP');
+ my $connection = $self->{_connection};
+ $uri = URI->new($connection->{ldapURL}) or $error = WebGUI::International::get(2,'AuthLDAP');
if($error ne ""){
$self->error($error);
return 0;
@@ -55,19 +56,19 @@ sub _isValidLDAPUser {
if ($ldap = Net::LDAP->new($uri->host, (port=>$uri->port))) {
if ($ldap->bind) {
- $search = $ldap->search (base=>$uri->dn,filter=>$session{setting}{ldapId}."=".$session{form}{'authLDAP.ldapId'});
- if (defined $search->entry(0)) {
- if ($session{setting}{ldapUserRDN} eq 'dn') {
+ $search = $ldap->search ( base=>$uri->dn, filter=>$connection->{ldapIdentity}."=".$session{form}{'authLDAP_ldapId'});
+ if (defined $search->entry(0)) {
+ if ($connection->{ldapUserRDN} eq 'dn') {
$connectDN = $search->entry(0)->dn;
} else {
- $connectDN = $search->entry(0)->get_value($session{setting}{ldapUserRDN});
+ $connectDN = $search->entry(0)->get_value($connection->{ldapUserRDN});
}
$ldap->unbind;
$ldap = Net::LDAP->new($uri->host, (port=>$uri->port)) or $error .= WebGUI::International::get(2,'AuthLDAP');
- $auth = $ldap->bind(dn=>$connectDN, password=>$session{form}{'authLDAP.identifier'});
+ $auth = $ldap->bind(dn=>$connectDN, password=>$session{form}{'authLDAP_identifier'});
if ($auth->code == 48 || $auth->code == 49) {
$error .= '
'.WebGUI::International::get(68);
- WebGUI::ErrorHandler::warn("Invalid LDAP information for registration of LDAP ID: ".$session{form}{'authLDAP.ldapId'});
+ WebGUI::ErrorHandler::warn("Invalid LDAP information for registration of LDAP ID: ".$session{form}{'authLDAP_ldapId'});
} elsif ($auth->code > 0) {
$error .= 'LDAP error "'.$ldapStatusCode{$auth->code}.'" occured. '.WebGUI::International::get(69);
WebGUI::ErrorHandler::error("LDAP error: ".$ldapStatusCode{$auth->code});
@@ -75,11 +76,11 @@ sub _isValidLDAPUser {
$ldap->unbind;
} else {
$error .= ''.WebGUI::International::get(68);
- WebGUI::ErrorHandler::warn("Invalid LDAP information for registration of LDAP ID: ".$session{form}{'authLDAP.ldapId'});
+ WebGUI::ErrorHandler::warn("Invalid LDAP information for registration of LDAP ID: ".$session{form}{'authLDAP_ldapId'});
}
} else {
$error = WebGUI::International::get(2,'AuthLDAP');
- WebGUI::ErrorHandler::error("Couldn't bind to LDAP server: ".$session{setting}{ldapURL});
+ WebGUI::ErrorHandler::error("Couldn't bind to LDAP server: ".$connection->{ldapURL});
}
} else {
$error = WebGUI::International::get(2,'AuthLDAP');
@@ -99,7 +100,8 @@ sub _isValidLDAPUser {
sub addUserForm {
my $self = shift;
my $userData = $self->getParams;
- my $ldapUrl = $session{form}{'authLDAP_ldapUrl'} || $userData->{ldapUrl} || $session{setting}{ldapURL};
+ my $connection = $self->{_connection};
+ my $ldapUrl = $session{form}{'authLDAP_ldapUrl'} || $userData->{ldapUrl} || $connection->{ldapURL};
my $connectDN = $session{form}{'authLDAP_connectDN'} || $userData->{connectDN};
my $ldapConnection = $session{form}{'authLDAP_ldapConnection'} || $userData->{ldapConnection};
my $ldapLinks = WebGUI::SQL->buildHashRef("select ldapLinkId,ldapUrl from ldapLink");
@@ -204,11 +206,25 @@ sub createAccount {
return $self->displayLogin;
}
+ if($session{form}{connection}) {
+ WebGUI::Session::setScratch("ldapConnection",$session{form}{connection});
+ $self->{_connection} = WebGUI::LDAPLink::get($session{form}{connection});
+ }
+ my $connection = $self->{_connection};
$vars->{'create.message'} = $_[0] if ($_[0]);
- $vars->{'create.form.ldapId'} = WebGUI::Form::text({"name"=>"authLDAP.ldapId","value"=>$session{form}{"authLDAP.ldapId"}});
- $vars->{'create.form.ldapId.label'} = $session{setting}{ldapIdName};
- $vars->{'create.form.password'} = WebGUI::Form::password({"name"=>"authLDAP.identifier","value"=>$session{form}{"authLDAP.identifier"}});
- $vars->{'create.form.password.label'} = $session{setting}{ldapPasswordName};
+ $vars->{'create.form.ldapConnection.label'} = WebGUI::International::get("ldapConnection","AuthLDAP");
+
+ my $url = WebGUI::URL::page("op=auth&method=createAccount&connection=");
+ $vars->{'create.form.ldapConnection'} = WebGUI::Form::selectList({
+ name=>"ldapConnection",
+ options=>WebGUI::LDAPLink::getList(),
+ value=>[$connection->{ldapLinkId}],
+ extras=>qq|onchange="location.href='$url'+this.options[this.selectedIndex].value"|
+ });
+ $vars->{'create.form.ldapId'} = WebGUI::Form::text({"name"=>"authLDAP_ldapId","value"=>$session{form}{"authLDAP_ldapId"}});
+ $vars->{'create.form.ldapId.label'} = $connection->{ldapIdentityName};
+ $vars->{'create.form.password'} = WebGUI::Form::password({"name"=>"authLDAP_identifier","value"=>$session{form}{"authLDAP_identifier"}});
+ $vars->{'create.form.password.label'} = $connection->{ldapPasswordName};
$vars->{'create.form.hidden'} = WebGUI::Form::hidden({"name"=>"confirm","value"=>$session{form}{confirm}});
return $self->SUPER::createAccount("createAccountSave",$vars);
@@ -217,8 +233,8 @@ sub createAccount {
#-------------------------------------------------------------------
sub createAccountSave {
my $self = shift;
- my $username = $session{form}{'authLDAP.ldapId'};
- my $password = $session{form}{'authLDAP.identifier'};
+ my $username = $session{form}{'authLDAP_ldapId'};
+ my $password = $session{form}{'authLDAP_identifier'};
my $error = "";
#Validate user in LDAP
@@ -226,17 +242,18 @@ sub createAccountSave {
return $self->createAccount("".WebGUI::International::get(70)."
".$self->error);
}
+ my $connection = $self->{_connection};
#Get connectDN from settings
- my $uri = URI->new($session{setting}{ldapURL});
+ my $uri = URI->new($connection->{ldapURL});
my $ldap = Net::LDAP->new($uri->host, (port=>$uri->port));
$ldap->bind;
- my $search = $ldap->search (base => $uri->dn, filter=>$session{setting}{ldapId}."=".$username);
+ my $search = $ldap->search (base => $uri->dn, filter=>$connection->{ldapIdentity}."=".$username);
my $connectDN = "";
if (defined $search->entry(0)) {
- if ($session{setting}{ldapUserRDN} eq 'dn') {
+ if ($connection->{ldapUserRDN} eq 'dn') {
$connectDN = $search->entry(0)->dn;
} else {
- $connectDN = $search->entry(0)->get_value($session{setting}{ldapUserRDN});
+ $connectDN = $search->entry(0)->get_value($connection->{ldapUserRDN});
}
}
$ldap->unbind;
@@ -256,7 +273,7 @@ sub createAccountSave {
my $properties;
$properties->{connectDN} = $connectDN;
- $properties->{ldapUrl} = $session{setting}{ldapURL};
+ $properties->{ldapUrl} = $connection->{ldapURL};
return $self->SUPER::createAccountSave($username,$properties,$password,$profile);
}
@@ -335,99 +352,38 @@ sub editUserFormSave {
sub editUserSettingsForm {
my $self = shift;
- my $sth = WebGUI::SQL->read("select * from ldapLink");
- my $f = WebGUI::HTMLForm->new;
- my $jscript = "";
- if($sth->rows > 0 ){
- my $jsArray = "";
- $jsArray = qq|ldapValue["0"] = ["$session{setting}{ldapUserRDN}","$session{setting}{ldapURL}","$session{setting}{ldapId}","$session{setting}{ldapIdName}","$session{setting}{ldapPasswordName}","$session{setting}{ldapSendWelcomeMessage}","$session{setting}{ldapWelcomeMessage}","$session{setting}{ldapAccountTemplate}","$session{setting}{ldapCreateAccountTemplate}","$session{setting}{ldapLoginTemplate}"];|."\n";
- while (my $lhash = $sth->hashRef) {
- $jsArray .= qq|ldapValue["$lhash->{ldapLinkId}"] = ["$lhash->{ldapUserRDN}","$lhash->{ldapUrl}","$lhash->{ldapIdentity}","$lhash->{ldapIdentityName}","$lhash->{ldapPasswordName}","$lhash->{ldapSendWelcomeMessage}","$lhash->{ldapWelcomeMessage}","$lhash->{ldapAccountTemplate}","$lhash->{ldapCreateAccountTemplate}","$lhash->{ldapLoginTemplate}"];|."\n";
- }
- $jscript = qq|
- |;
- $f->selectList(
- -name=>"ldapConnection",
- -label=>WebGUI::International::get("ldapConnection",'AuthLDAP'),
- -options=>WebGUI::LDAPLink::getList(),
- -value=>[$session{setting}{ldapConnection}],
- -extras=>q|onchange="changeFormValues(this.form,this.options[this.selectedIndex].value);"|
- );
+ my $f = WebGUI::HTMLForm->new;
+ my $ldapConnection = WebGUI::Form::selectList({
+ name=>"ldapConnection",
+ options=>WebGUI::LDAPLink::getList(),
+ value=>[$session{setting}{ldapConnection}]
+ });
+ my $ldapConnectionLabel = WebGUI::International::get("ldapConnection",'AuthLDAP');
+ my $buttons = "";
+ if($session{setting}{ldapConnection}) {
+ $buttons = editIcon("op=editLDAPLink&returnUrl=".WebGUI::URL::escape(WebGUI::URL::page("op=editSettings"))."&llid=".$session{setting}{ldapConnection});
}
- $f->text("ldapUserRDN",WebGUI::International::get(9,'AuthLDAP'),$session{setting}{ldapUserRDN});
- $f->url("ldapURL",WebGUI::International::get(5,'AuthLDAP'),$session{setting}{ldapURL});
- $f->text("ldapId",WebGUI::International::get(6,'AuthLDAP'),$session{setting}{ldapId});
- $f->text("ldapIdName",WebGUI::International::get(7,'AuthLDAP'),$session{setting}{ldapIdName});
- $f->text("ldapPasswordName",WebGUI::International::get(8,'AuthLDAP'),$session{setting}{ldapPasswordName});
- $f->yesNo(
- -name=>"ldapSendWelcomeMessage",
- -value=>$session{setting}{ldapSendWelcomeMessage},
- -label=>WebGUI::International::get(868)
- );
- $f->textarea(
- -name=>"ldapWelcomeMessage",
- -value=>$session{setting}{ldapWelcomeMessage},
- -label=>WebGUI::International::get(869)
- );
- $f->template(
- -name=>"ldapAccountTemplate",
- -value=>$session{setting}{ldapAccountTemplate},
- -namespace=>"Auth/LDAP/Account",
- -label=>WebGUI::International::get("account template","AuthLDAP")
- );
- $f->template(
- -name=>"ldapCreateAccountTemplate",
- -value=>$session{setting}{ldapCreateAccountTemplate},
- -namespace=>"Auth/LDAP/Create",
- -label=>WebGUI::International::get("create account template","AuthLDAP")
- );
- $f->template(
- -name=>"ldapLoginTemplate",
- -value=>$session{setting}{ldapLoginTemplate},
- -namespace=>"Auth/LDAP/Login",
- -label=>WebGUI::International::get("login template","AuthLDAP")
- );
- return $jscript.$f->printRowsOnly;
+ $buttons .= manageIcon("op=listLDAPLinks&returnUrl=".WebGUI::URL::escape(WebGUI::URL::page("op=editSettings")));
+ $f->raw(qq|| $ldapConnectionLabel | $ldapConnection $buttons |
|);
+ return $f->printRowsOnly;
}
#-------------------------------------------------------------------
sub getAccountTemplateId {
- return $session{setting}{ldapAccountTemplate} || "PBtmpl0000000000000004";
+ my $self = shift;
+ return ($self->{_connection}->{ldapAccountTemplate} || "PBtmpl0000000000000004");
}
#-------------------------------------------------------------------
sub getCreateAccountTemplateId {
- return $session{setting}{ldapCreateAccountTemplate} || "PBtmpl0000000000000005";
+ my $self = shift;
+ return ($self->{_connection}->{ldapCreateAccountTemplate} || "PBtmpl0000000000000005");
}
#-------------------------------------------------------------------
sub getLoginTemplateId {
- return $session{setting}{ldapLoginTemplate} || "PBtmpl0000000000000006";
+ my $self = shift;
+ return ($self->{_connection}->{ldapLoginTemplate} || "PBtmpl0000000000000006");
}
#-------------------------------------------------------------------
@@ -437,6 +393,7 @@ sub login {
WebGUI::ErrorHandler::security("login to account ".$session{form}{username}." with invalid information.");
return $self->displayLogin("".WebGUI::International::get(70)."
".$self->error);
}
+ WebGUI::Session::deleteScratch("ldapConnection");
return $self->SUPER::login(); #Standard login routine for login
}
@@ -447,6 +404,7 @@ sub new {
my $userId = $_[1];
my @callable = ('createAccount','deactivateAccount','displayAccount','displayLogin','login','logout','createAccountSave','deactivateAccountConfirm');
my $self = WebGUI::Auth->new($authMethod,$userId,\@callable);
+ $self->{_connection} = WebGUI::LDAPLink::get(($session{scratch}{ldapConnection} || $session{setting}{ldapConnection}));
bless $self, $class;
}