From 62a841ced9508c6efa916528e92bb12c6b8a3f85 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 10 Feb 2006 20:31:26 +0000 Subject: [PATCH] Move 6.8's Group ipFilter test into User.t since isInGroup was moved into WebGUI::User.pm forward port of ipFilter bugfix, typo --- docs/changelog/6.x.x.txt | 3 +++ lib/WebGUI/Auth/WebGUI.pm | 38 +++++++++++++++++++------------------- lib/WebGUI/User.pm | 34 +++++++++++++++++----------------- t/User.t | 31 ++++++++++++++++++++++++++++++- 4 files changed, 69 insertions(+), 37 deletions(-) diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index aa77fa660..608a5138a 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -37,6 +37,9 @@ - fix [ 1426170 ] passthruUrls ignores single value - fix [ 1428117 ] Uploading files with 0 size - fix [ 1411884 ] DirectoryIndex doesn't work with passthruUrls in v6.8.5 + - fix [ 1428396 ] IP Filter Broken + - fixed a bug where uploaded files and images did not get the right .wgaccess + file (Martin Kamerbeek / Procolix) 6.8.5 - fix [ 1396957 ] Insufficient privileges check on the DataForm diff --git a/lib/WebGUI/Auth/WebGUI.pm b/lib/WebGUI/Auth/WebGUI.pm index e3572f1f4..8941277b0 100644 --- a/lib/WebGUI/Auth/WebGUI.pm +++ b/lib/WebGUI/Auth/WebGUI.pm @@ -516,28 +516,28 @@ sub new { #------------------------------------------------------------------- sub recoverPassword { - my $self = shift; - return $self->displayLogin if($self->userId ne "1"); - my $template = 'Auth/WebGUI/Recovery'; - my $vars; + my $self = shift; + return $self->displayLogin if($self->userId ne "1"); + my $template = 'Auth/WebGUI/Recovery'; + my $vars; my $i18n = WebGUI::International->new($self->session); - $vars->{title} = $i18n->get(71); - $vars->{'recover.form.header'} = "\n\n".WebGUI::Form::formHeader($self->session,{}); - $vars->{'recover.form.hidden'} = WebGUI::Form::hidden($self->session,{"name"=>"op","value"=>"auth"}); - $vars->{'recover.form.hidden'} .= WebGUI::Form::hidden($self->session,{"name"=>"method","value"=>"recoverPasswordFinish"}); + $vars->{title} = $i18n->get(71); + $vars->{'recover.form.header'} = "\n\n".WebGUI::Form::formHeader($self->session,{}); + $vars->{'recover.form.hidden'} = WebGUI::Form::hidden($self->session,{"name"=>"op","value"=>"auth"}); + $vars->{'recover.form.hidden'} .= WebGUI::Form::hidden($self->session,{"name"=>"method","value"=>"recoverPasswordFinish"}); - $vars->{'recover.form.submit'} = WebGUI::Form::submit($self->session,{}); - $vars->{'recover.form.footer'} = WebGUI::Form::formFooter($self->session,); - $vars->{'login.url'} = $self->session->url->page('op=auth;method=init'); - $vars->{'login.label'} = $i18n->get(58); + $vars->{'recover.form.submit'} = WebGUI::Form::submit($self->session,{}); + $vars->{'recover.form.footer'} = WebGUI::Form::formFooter($self->session,); + $vars->{'login.url'} = $self->session->url->page('op=auth;method=init'); + $vars->{'login.label'} = $i18n->get(58); - $vars->{'anonymousRegistration.isAllowed'} = ($self->session->setting->get("anonymousRegistration")); - $vars->{'createAccount.url'} = $self->session->url->page('op=auth=;method=createAccount'); - $vars->{'createAccount.label'} = $i18n->get(67); - $vars->{'recover.message'} = $_[0] if ($_[0]); - $vars->{'recover.form.email'} = WebGUI::Form::text($self->session,{"name"=>"email"}); - $vars->{'recover.form.email.label'} = $i18n->get(56); - return WebGUI::Asset::Template->new($self->session,$self->getPasswordRecoveryTemplateId)->process($vars); + $vars->{'anonymousRegistration.isAllowed'} = ($self->session->setting->get("anonymousRegistration")); + $vars->{'createAccount.url'} = $self->session->url->page('op=auth;method=createAccount'); + $vars->{'createAccount.label'} = $i18n->get(67); + $vars->{'recover.message'} = $_[0] if ($_[0]); + $vars->{'recover.form.email'} = WebGUI::Form::text($self->session,{"name"=>"email"}); + $vars->{'recover.form.email.label'} = $i18n->get(56); + return WebGUI::Asset::Template->new($self->session,$self->getPasswordRecoveryTemplateId)->process($vars); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 366ef02ae..e05acf491 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -250,11 +250,27 @@ sub isInGroup { ### The following several checks are to increase performance. If this section were removed, everything would continue to work as normal. return 1 if ($gid eq '7'); # everyone is in the everyone group return 1 if ($gid eq '1' && $uid eq '1'); # visitors are in the visitors group + ### Get data for auxillary checks. + my $group = WebGUI::Group->new($self->session,$gid); + my $isInGroup = $self->session->stow->get("isInGroup"); + ### Check IP Address + if ($group->get("ipFilter")) { + my $ipFilter = $group->get("ipFilter"); + $ipFilter =~ s/\s//g; + $ipFilter =~ s/\./\\\./g; + my @ips = split(";",$ipFilter); + foreach my $ip (@ips) { + if ($self->session->env->get("REMOTE_ADDR") =~ /^$ip/) { + $isInGroup->{$uid}{$gid} = 1; + $self->session->stow->set("isInGroup",$isInGroup); + return 1; + } + } + } return 0 if ($uid eq '1'); #Visitor is in no other groups return 1 if ($uid eq '3'); #Admin is in every group return 1 if ($gid eq '2' && $uid ne '1'); # if you're not a visitor, then you're a registered user ### Look to see if we've already looked up this group. - my $isInGroup = $self->session->stow->get("isInGroup"); if ($isInGroup->{$uid}{$gid} eq '1') { return 1; } elsif ($isInGroup->{$uid}{$gid} eq "0") { @@ -271,22 +287,6 @@ sub isInGroup { return 1; } } - ### Get data for auxillary checks. - my $group = WebGUI::Group->new($self->session,$gid); - ### Check IP Address - if ($group->get("ipFilter")) { - my $ipFilter = $group->get("ipFilter"); - $ipFilter =~ s/\s//g; - $ipFilter =~ s/\./\\\./g; - my @ips = split(";",$ipFilter); - foreach my $ip (@ips) { - if ($self->session->env->get("REMOTE_ADDR") =~ /^$ip/) { - $isInGroup->{$uid}{$gid} = 1; - $self->session->stow->set("isInGroup",$isInGroup); - return 1; - } - } - } ### Check Scratch Variables if ($group->get("scratchFilter")) { my $scratchFilter = $group->get("scratchFilter"); diff --git a/t/User.t b/t/User.t index bce82ed51..8eed641a5 100644 --- a/t/User.t +++ b/t/User.t @@ -17,7 +17,7 @@ use WebGUI::Session; use WebGUI::Utility; use WebGUI::User; -use Test::More tests => 49; # increment this value for each test you create +use Test::More tests => 56; # increment this value for each test you create my $session = WebGUI::Test->session; @@ -209,3 +209,32 @@ SKIP: { skip("uncache() -- Don't know how to test uncache()",1); ok(undef, "uncache"); } + +my $cm = WebGUI::Group->new($session, 4); +is( $cm->name, "Content Managers", "content manager name check"); +is( $cm->getId, 4, "content manager groupId check"); + +my $admin = WebGUI::User->new($session, 3); +my $visitor = WebGUI::User->new($session, 1); + +##Manipulate the env object to set up this test +my $env = $session->{_env}; +$env->{_env}->{"REMOTE_ADDR"} = '192.168.0.101'; + +ok (!$visitor->isInGroup($cm->getId), "Visitor is not member of group"); +ok ($admin->isInGroup($cm->getId), "Admin is not member of group"); + +my $origFilter = $cm->ipFilter; + +$cm->ipFilter('192.168.0.'); + +is( $cm->ipFilter, "192.168.0.", "ipFilter assignment to local net, 192.168.0."); + +ok ($visitor->isInGroup($cm->getId), "Visitor is allowed in via IP"); + +$env->{_env}->{"REMOTE_ADDR"} = '193.168.0.101'; + +ok (!$visitor->isInGroup($cm->getId), "Visitor is not allowed in via IP"); + +##Restore original filter +$cm->ipFilter($origFilter);