diff --git a/docs/migration.txt b/docs/migration.txt index ae7cb4538..d31547eed 100644 --- a/docs/migration.txt +++ b/docs/migration.txt @@ -780,6 +780,14 @@ WebGUI::Id is now accessible through $session->id perl -pi.bak -e 's!WebGUI\:\:Id\:\:generate!\$self->session->id->generate!g' fileNameGoesHere +5.23.17 WebGUI::LDAPLink API Refactored + +WebGUI::LDAPLink has been modified to use the new session api. + +perl -pi.bak -e 's!WebGUI\:\:LDAPLink\-\>new\(!WebGUI::LDAPLink->new(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:LDAPLink\:\:getList\(!WebGUI::LDAPLink->getList(\$self->session,!g' fileNameGoesHere +perl -pi.bak -e 's!WebGUI\:\:LDAPLink\:\:get\((.*)\)!WebGUI::LDAPLink->new(\$self->session,$1)->get!g' fileNameGoesHere + 6. Automatic list of Assets in Help System. ------------------------------------- diff --git a/lib/WebGUI/Auth/LDAP.pm b/lib/WebGUI/Auth/LDAP.pm index 9da5d76aa..745c91c09 100644 --- a/lib/WebGUI/Auth/LDAP.pm +++ b/lib/WebGUI/Auth/LDAP.pm @@ -116,7 +116,7 @@ sub addUserForm { -name=>"authLDAP_ldapConnection", -label=>WebGUI::International::get("ldapConnection",'AuthLDAP'), -hoverHelp=>WebGUI::International::get("ldapConnection description",'AuthLDAP'), - -options=>WebGUI::LDAPLink::getList(), + -options=>WebGUI::LDAPLink->getList($self->session,), -value=>[$ldapConnection], -extras=>q|onchange="this.form.authLDAP_ldapUrl.value=ldapValue[this.options[this.selectedIndex].value];"| ); @@ -209,7 +209,7 @@ sub createAccount { if($self->session->form->process("connection")) { $self->session->scratch->set("ldapConnection",$self->session->form->process("connection")); - $self->{_connection} = WebGUI::LDAPLink::get($self->session->form->process("connection")); + $self->{_connection} = WebGUI::LDAPLink->new($self->session,$self->session->form->process("connection"))->get; } my $connection = $self->{_connection}; $vars->{'create.message'} = $_[0] if ($_[0]); @@ -218,7 +218,7 @@ sub createAccount { my $url = $self->session->url->page("op=auth;method=createAccount;connection="); $vars->{'create.form.ldapConnection'} = WebGUI::Form::selectBox({ name=>"ldapConnection", - options=>WebGUI::LDAPLink::getList(), + options=>WebGUI::LDAPLink->getList($self->session,), value=>[$connection->{ldapLinkId}], extras=>qq|onchange="location.href='$url'+this.options[this.selectedIndex].value"| }); @@ -362,7 +362,7 @@ sub editUserSettingsForm { my $f = WebGUI::HTMLForm->new($self->session); my $ldapConnection = WebGUI::Form::selectBox({ name=>"ldapConnection", - options=>WebGUI::LDAPLink::getList(), + options=>WebGUI::LDAPLink->getList($self->session,), value=>[$self->session->setting->get("ldapConnection")] }); my $ldapConnectionLabel = WebGUI::International::get("ldapConnection",'AuthLDAP'); @@ -411,7 +411,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(($self->session->scratch->get("ldapConnection") || $self->session->setting->get("ldapConnection"))); + $self->{_connection} = WebGUI::LDAPLink->new($self->session,($self->session->scratch->get("ldapConnection") || $self->session->setting->get("ldapConnection")))->get; bless $self, $class; } diff --git a/lib/WebGUI/Form/LdapLink.pm b/lib/WebGUI/Form/LdapLink.pm index 6882dc0ac..f14eea7ec 100644 --- a/lib/WebGUI/Form/LdapLink.pm +++ b/lib/WebGUI/Form/LdapLink.pm @@ -116,7 +116,7 @@ Renders a database connection picker control. sub toHtml { my $self = shift; - $self->get("options") = WebGUI::LDAPLink::getList(); + $self->get("options") = WebGUI::LDAPLink->getList($self->session,); return $self->SUPER::toHtml(); } @@ -130,7 +130,7 @@ Creates a series of hidden fields representing the data in the list. sub toHtmlAsHidden { my $self = shift; - $self->get("options") = WebGUI::LDAPLink::getList(); + $self->get("options") = WebGUI::LDAPLink->getList($self->session,); return $self->SUPER::toHtmlAsHidden(); } diff --git a/lib/WebGUI/LDAPLink.pm b/lib/WebGUI/LDAPLink.pm index 45e70b6e1..950502993 100644 --- a/lib/WebGUI/LDAPLink.pm +++ b/lib/WebGUI/LDAPLink.pm @@ -18,8 +18,6 @@ package WebGUI::LDAPLink; use strict; use Tie::CPHash; use WebGUI::International; -use WebGUI::Session; -use WebGUI::SQL; use Net::LDAP; =head1 NAME @@ -33,10 +31,10 @@ This package contains utility methods for WebGUI's ldap link system. =head1 SYNOPSIS use WebGUI::LDAPLink; - $hashRef = WebGUI::LDAPLink::getList(); - %ldapLink = WebGUI::LDAPLink::get($ldapLinkId); + $hashRef = WebGUI::LDAPLink->getList($self->session,); + %ldapLink = WebGUI::LDAPLink->new($self->session,$ldapLinkId)->get; - $ldapLink = WebGUI::LDAPLink->new($ldapLinkId); + $ldapLink = WebGUI::LDAPLink->new($self->session,$ldapLinkId); $connection = $ldapLink->authenticate(); $ldapLink->disconnect; @@ -57,52 +55,66 @@ cannot be established =cut sub bind { - my $class = shift; + my $self = shift; my ($uri, $ldap, $auth, $result, $error); - if (defined $class->{_connection}) { - return $class->{_connection}; + if (defined $self->{_connection}) { + return $self->{_connection}; } - my $ldapUrl = $class->{_ldapLink}->{ldapUrl}; - my $connectDn = $class->{_ldapLink}->{connectDn}; - my $identifier = $class->{_ldapLink}->{identifier}; + my $ldapUrl = $self->{_ldapLink}->{ldapUrl}; + my $connectDn = $self->{_ldapLink}->{connectDn}; + my $identifier = $self->{_ldapLink}->{identifier}; if($ldapUrl eq "") { - $class->{_error} = 100; + $self->{_error} = 100; return 0; } elsif ($connectDn eq "") { - $class->{_error} = 101; + $self->{_error} = 101; return 0; } elsif ($identifier eq "") { - $class->{_error} = 102; + $self->{_error} = 102; return 0; } if($uri = URI->new($ldapUrl)) { unless($ldap = Net::LDAP->new($uri->host, (port=>($uri->port || 389)))){ - $class->{_error} = 103; + $self->{_error} = 103; return 0; } $auth = $ldap->bind(dn=>$connectDn, password=>$identifier); if ($auth->code == 48 || $auth->code == 49){ - $class->{_error} = 104; + $self->{_error} = 104; }elsif($auth->code > 0){ - $class->{_error} = $auth->code; + $self->{_error} = $auth->code; } - $class->{_connection} = $ldap; + $self->{_connection} = $ldap; }else{ - $class->{_error} = 105; + $self->{_error} = 105; return 0; } - return $class->{_connection}; + return $self->{_connection}; } #------------------------------------------------------------------- sub DESTROY { - my $class = shift; - $class->unbind; + my $self = shift; + $self->unbind; + undef $self; +} + +#------------------------------------------------------------------- + +=head2 get ( ) + +Returns the list of LDAP connection properties. + +=cut + +sub get { + my $self = shift; + return $self->{_ldapLink}; } #------------------------------------------------------------------- @@ -118,8 +130,8 @@ A valid ldap error code. =cut sub getErrorMessage { - my $class = shift; - my $errorCode = $_[0] || $class->{_error}; + my $self = shift; + my $errorCode = $_[0] || $self->{_error}; return "" unless $errorCode; my $i18nCode = "LDAPLink_".$errorCode; return WebGUI::International::get($i18nCode,"AuthLDAP"); @@ -127,41 +139,27 @@ sub getErrorMessage { #------------------------------------------------------------------- -=head2 getList ( ) +=head2 getList ( session ) -Returns a hash reference containing all ldap links. The format is: - ldapLinkId => ldapLinkName +Returns a hash reference containing all ldap links. The format is: ldapLinkId => ldapLinkName. This is a class method. + +=head3 session + +A reference to the current session. =cut sub getList { + my $class = shift; + my $session = shift; my %list; tie %list, "Tie::IxHash"; - %list = $self->session->db->buildHash("select ldapLinkId, ldapLinkName from ldapLink order by ldapLinkName"); + %list = $session->db->buildHash("select ldapLinkId, ldapLinkName from ldapLink order by ldapLinkName"); return \%list; } #------------------------------------------------------------------- -=head2 get ( ldapLinkId ) - -Returns a hashRef containing a single ldap link. - -=head3 ldapLinkId - -A valid ldapLinkId - -=cut - -sub get { - my %hash; - tie %hash, 'Tie::CPHash'; - %hash = $self->session->db->quickHash("select * from ldapLink where ldapLinkId=".$self->session->db->quote($_[0])); - return \%hash; -} - -#------------------------------------------------------------------- - =head2 unbind ( ) Disconnect cleanly from the current databaseLink. @@ -169,20 +167,24 @@ Disconnect cleanly from the current databaseLink. =cut sub unbind { - my ($class, $value); - $class = shift; + my ($self, $value); + $self = shift; $value = shift; - if (defined $class->{_connection}) { - $class->{_connection}->unbind; + if (defined $self->{_connection}) { + $self->{_connection}->unbind; } } #------------------------------------------------------------------- -=head2 new ( ldapLinkId ) +=head2 new ( session, ldapLinkId ) Constructor. +=head3 session + +A reference to the current session. + =head3 ldapLinkId The ldapLinkId of the ldapLink you're creating an object reference for. @@ -190,12 +192,13 @@ The ldapLinkId of the ldapLink you're creating an object reference for. =cut sub new { - my ($class, $ldapLinkId, $ldapLink); - $class = shift; + my ( $ldapLinkId, $ldapLink); + my $class = shift; + my $session = shift; $ldapLinkId = shift; return undef unless $ldapLinkId; - $ldapLink = get($ldapLinkId); - bless {_ldapLinkId => $ldapLinkId, _ldapLink => $ldapLink }, $class; + $ldapLink = $session->db->quickHash("select * from ldapLink where ldapLinkId=".$session->db->quote($ldapLinkId)); + bless {_session=>$session, _ldapLinkId => $ldapLinkId, _ldapLink => $ldapLink }, $class; } #------------------------------------------------------------------- @@ -217,8 +220,8 @@ sub new { sub getProperty { my $self = shift; my $ldap = $self->bind; - my $dn = $_[0]; - my $property = $_[1]; + my $dn = shift; + my $property = shift; return [] unless($ldap && $dn && $property); my $results = []; my $msg = $ldap->search( diff --git a/lib/WebGUI/Operation/LDAPLink.pm b/lib/WebGUI/Operation/LDAPLink.pm index 325dedef2..0d14d6447 100644 --- a/lib/WebGUI/Operation/LDAPLink.pm +++ b/lib/WebGUI/Operation/LDAPLink.pm @@ -230,7 +230,7 @@ sub www_listLDAPLinks { .''; $row[$i] .= ''.$data->{ldapLinkName}.''; - my $ldapLink = WebGUI::LDAPLink->new($data->{ldapLinkId}); + my $ldapLink = WebGUI::LDAPLink->new($session,$data->{ldapLinkId}); my $status = WebGUI::International::get("LDAPLink_1078","AuthLDAP"); if($ldapLink->bind) { $status = WebGUI::International::get("LDAPLink_1079","AuthLDAP"); diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 4b885a1ab..f94f3f51a 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -342,7 +342,7 @@ sub isInGroup { if($self->authMethod eq "LDAP") { my $auth = WebGUI::Auth->new($session,"LDAP",$uid); my $params = $auth->getParams(); - my $ldapLink = WebGUI::LDAPLink->new($session,$params->{ldapConnection}); + my $ldapLink = WebGUI::LDAPLink->new($self->session,$session,$params->{ldapConnection}); if($ldapLink ne "") { my $people = []; if($group->get("ldapRecursiveProperty")) {