[interchange-cvs] interchange - heins modified 3 files

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Wed Sep 10 14:01:00 EDT 2003


User:      heins
Date:      2003-09-10 17:01:33 GMT
Modified:  lib/Vend Config.pm UserDB.pm
Added:     lib/Vend UserControl.pm
Log:
* Add new facility for storing address books in outboard address table,
  instead of an in-record hash, and start framework for adding different
  personalities to UserDB.

* Move "logout" function to a subroutine so that it can be inherited.

Revision  Changes    Path
2.127     +10 -2     interchange/lib/Vend/Config.pm


rev 2.127, prev_rev 2.126
Index: Config.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Config.pm,v
retrieving revision 2.126
retrieving revision 2.127
diff -u -r2.126 -r2.127
--- Config.pm	10 Sep 2003 16:55:14 -0000	2.126
+++ Config.pm	10 Sep 2003 17:01:33 -0000	2.127
@@ -1,6 +1,6 @@
 # Vend::Config - Configure Interchange
 #
-# $Id: Config.pm,v 2.126 2003/09/10 16:55:14 mheins Exp $
+# $Id: Config.pm,v 2.127 2003/09/10 17:01:33 mheins Exp $
 #
 # Copyright (C) 2002-2003 Interchange Development Group
 # Copyright (C) 1996-2002 Red Hat, Inc.
@@ -48,7 +48,7 @@
 use Vend::File;
 use Vend::Data;
 
-$VERSION = substr(q$Revision: 2.126 $, 10);
+$VERSION = substr(q$Revision: 2.127 $, 10);
 
 my %CDname;
 my %CPname;
@@ -522,6 +522,7 @@
 	['SOAP_Action',		 'action',			 ''],				   
 	['SOAP_Control',     'action',             ''],		  
 	['UserDB',			 'locale',	     	 ''], 
+	['UserControl',		 'yesno',	     	 'No'], 
 	['UserDatabase',	 undef,		     	 ''],  #undocumented
 	['RobotLimit',		 'integer',		      0],
 	['OrderLineLimit',	 'integer',		      0],
@@ -2480,6 +2481,13 @@
 						$C->{AdminUserDB} = {} unless $C->{AdminUserDB};
 						$C->{AdminUserDB}{$_} = $set->{$_}{admin};
 					}
+					return 1;
+				},
+		UserControl => sub {
+					shift;
+					return 1 unless defined $C;
+					return 1 unless $C->{UserControl};
+					require Vend::UserControl;
 					return 1;
 				},
 		AutoModifier => sub {



2.25      +88 -51    interchange/lib/Vend/UserDB.pm


rev 2.25, prev_rev 2.24
Index: UserDB.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/UserDB.pm,v
retrieving revision 2.24
retrieving revision 2.25
diff -u -r2.24 -r2.25
--- UserDB.pm	1 Aug 2003 15:30:43 -0000	2.24
+++ UserDB.pm	10 Sep 2003 17:01:33 -0000	2.25
@@ -1,6 +1,6 @@
 # Vend::UserDB - Interchange user database functions
 #
-# $Id: UserDB.pm,v 2.24 2003/08/01 15:30:43 jon Exp $
+# $Id: UserDB.pm,v 2.25 2003/09/10 17:01:33 mheins Exp $
 #
 # Copyright (C) 2002-2003 Interchange Development Group
 # Copyright (C) 1996-2002 Red Hat, Inc.
@@ -17,7 +17,7 @@
 
 package Vend::UserDB;
 
-$VERSION = substr(q$Revision: 2.24 $, 10);
+$VERSION = substr(q$Revision: 2.25 $, 10);
 
 use vars qw!
 	$VERSION
@@ -292,6 +292,7 @@
 						LAST		=> $options{time_field} || 'mod_time',
 						EXPIRATION	=> $options{expire_field} || 'expiration',
 						OUTBOARD_KEY=> $options{outboard_key_col},
+						GROUPS		=> $options{groups_field}|| 'groups',
 						SUPER		=> $options{super_field}|| 'super',
 						ACL			=> $options{acl}		|| 'acl',
 						FILE_ACL	=> $options{file_acl}	|| 'file_acl',
@@ -1000,16 +1001,14 @@
 		unless($self) {
 			$self = new Vend::UserDB %options;
 		}
-		if(
-			$Vend::Cfg->{CookieLogin}
-			and (! $Vend::Cfg->{DifferentSecure} || ! $CGI::secure)
-			)
-		{
+
+		if($Vend::Cfg->{CookieLogin}) {
 			$self->{USERNAME} = Vend::Util::read_cookie('MV_USERNAME')
 				if ! $self->{USERNAME};
 			$self->{PASSWORD} = Vend::Util::read_cookie('MV_PASSWORD')
 				if ! $self->{PASSWORD};
 		}
+
 		if ($self->{OPTIONS}{ignore_case}) {
 			$self->{PASSWORD} = lc $self->{PASSWORD};
 			$self->{USERNAME} = lc $self->{USERNAME};
@@ -1152,6 +1151,15 @@
 			}
 		}
 
+		if($self->{PRESENT}->{ $self->{LOCATION}{GROUPS} } ) {
+			$Vend::groups
+			= $Vend::Session->{groups}
+			= $udb->field(
+						$self->{USERNAME},
+						$self->{LOCATION}{GROUPS},
+						);
+		}
+
 		username_cookies($self->{USERNAME}, $pw) 
 			if $Vend::Cfg->{CookieLogin};
 
@@ -1218,6 +1226,50 @@
 	}
 }
 
+sub logout {
+	my $self = shift or return undef;
+	scrub();
+
+	my $opt = $self->{OPTIONS};
+
+	if( is_yes($opt->{clear}) ) {
+		$self->clear_values();
+	}
+
+	Vend::Interpolate::tag_profile("", { restore => 1 });
+	no strict 'refs';
+
+	my @dels = qw/
+					groups
+					admin
+					superuser
+					login_table
+					username
+					logged_in
+				/;
+
+	for(@dels) {
+		delete $Vend::Session->{$_};
+		undef ${"Vend::$_"};
+	}
+
+	delete $CGI::values{mv_username};
+	delete $::Values->{mv_username};
+	$self->log('logout') if $opt->{log};
+	$self->{MESSAGE} = ::errmsg('Logged out.');
+	if ($opt->{clear_cookie}) {
+		my @cookies = split /[\s,\0]+/, $opt->{clear_cookie};
+		my $exp = time() + $Vend::Cfg->{SaveExpire};
+		for(@cookies) {
+			Vend::Util::set_cookie($_, '', $exp);
+		}
+	}
+	if ($opt->{clear_session}) {
+		Vend::Session::init_session();
+	}
+	return 1;
+}
+
 sub change_pass {
 
 	my ($self, $original_self);
@@ -1498,7 +1550,6 @@
 
 sub username_cookies {
 		my ($user, $pw) = @_;
-		return if $Vend::Cfg->{DifferentSecure} && $CGI::secure;
 		return unless
 			 $CGI::values{mv_cookie_password}		or
 			 $CGI::values{mv_cookie_username}		or
@@ -1521,14 +1572,17 @@
 
 	my $from = $self->{NICKNAME};
 	my $to;
-	if ($options{target}) {
-		$to = ($::Carts->{$options{target}} ||= []);
+
+	my $opt = $self->{OPTIONS};
+
+	if ($opt->{target}) {
+		$to = ($::Carts->{$opt->{target}} ||= []);
 	}
 	else {
 		$to = $Vend::Items;
 	}
 
-#::logDebug ("to=$to nick=$options{target} from=$from cart=" . ::uneval_it($from));
+#::logDebug ("to=$to nick=$opt->{target} from=$from cart=" . ::uneval_it($from));
 
 	my $field_name = $self->{LOCATION}->{CARTS};
 	my $cart = [];
@@ -1559,9 +1613,9 @@
 		$self->{ERROR} = $@;
 		return undef;
 	}
-#::logDebug ("to=$to nick=$options{target} from=$from cart=" . ::uneval_it($cart));
+#::logDebug ("to=$to nick=$opt->{target} from=$from cart=" . ::uneval_it($cart));
 
-	if($options{merge}) {
+	if($opt->{merge}) {
 		$to = [] unless ref $to;
 		push(@$to,@$cart);
 	} else {
@@ -1574,8 +1628,11 @@
 
 	my $from;
 	my $to   = $self->{NICKNAME};
-	if ($self->{OPTIONS}{source}) {
-		$from = $::Carts->{$self->{OPTIONS}{source}} || [];
+
+	my $opt = $self->{OPTIONS};
+
+	if ($opt->{source}) {
+		$from = $::Carts->{$opt->{source}} || [];
 	}
 	else {
 		$from = $Vend::Items;
@@ -1595,7 +1652,7 @@
 
 		die ::errmsg("eval failed?")				unless ref $d;
 
-		if($options{merge}) {
+		if($opt->{merge}) {
 			$d->{$to} = [] unless ref $d->{$to};
 			push(@{$d->{$to}}, @{$from});
 		}
@@ -1633,12 +1690,16 @@
 	my $status = 1;
 	my $user;
 
+	my $module = $Vend::Cfg->{UserControl} ? 'Vend::UserControl' : 'Vend::UserDB';
+
 	if($function eq 'login') {
 		$Vend::Session->{logged_in} = 0;
 		delete $Vend::Session->{username};
+		delete $Vend::Session->{groups};
 		undef $Vend::username;
+		undef $Vend::groups;
 		undef $Vend::admin;
-		$user = new Vend::UserDB %options;
+		$user = $module->new(%options);
 		unless (defined $user) {
 			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
 			return undef;
@@ -1656,7 +1717,7 @@
 		}
 	}
 	elsif($function eq 'new_account') {
-		$user = new Vend::UserDB %options;
+		$user = $module->new(%options);
 		unless (defined $user) {
 			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
 			return undef;
@@ -1669,43 +1730,19 @@
 		}
 	}
 	elsif($function eq 'logout') {
-		$user = new Vend::UserDB %options;
-		scrub();
-		unless (defined $user) {
-			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
-			return undef;
-		}
-		if( is_yes($options{clear}) ) {
-			$user->clear_values();
-		}
-		Vend::Interpolate::tag_profile("", { restore => 1 });
-		delete $Vend::Session->{logged_in};
-		undef $Vend::admin;
-		undef $Vend::superuser;
-		delete $Vend::Session->{login_table};
-		delete $Vend::Session->{username};
-		delete $CGI::values{mv_username};
-		undef $Vend::username;
-		delete $::Values->{mv_username};
-		$user->log('logout') if $options{'log'};
-		$user->{MESSAGE} = ::errmsg('Logged out.');
-		if ($user->{OPTIONS}{clear_cookie}) {
-			my @cookies = split /[\s,\0]+/, $user->{OPTIONS}{clear_cookie};
-			my $exp = time() + $Vend::Cfg->{SaveExpire};
-			for(@cookies) {
-				Vend::Util::set_cookie($_, '', $exp);
-			}
-		}
-		if ($user->{OPTIONS}{clear_session}) {
-			Vend::Session::init_session();
-		}
+		$user = $module->new(%options)
+			or do {
+				$Vend::Session->{failure} = ::errmsg("Unable to create user object.");
+				return undef;
+			};
+		$user->logout();
 	}
 	elsif (! $Vend::Session->{logged_in}) {
 		$Vend::Session->{failure} = ::errmsg("Not logged in.");
 		return undef;
 	}
 	elsif($function eq 'save') {
-		$user = new Vend::UserDB %options;
+		$user = $module->new(%options);
 		unless (defined $user) {
 			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
 			return undef;
@@ -1713,7 +1750,7 @@
 		$status = $user->set_values();
 	}
 	elsif($function eq 'load') {
-		$user = new Vend::UserDB %options;
+		$user = $module->new(%options);
 		unless (defined $user) {
 			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
 			return undef;
@@ -1721,7 +1758,7 @@
 		$status = $user->get_values();
 	}
 	else {
-		$user = new Vend::UserDB %options;
+		$user = $module->new(%options);
 		unless (defined $user) {
 			$Vend::Session->{failure} = ::errmsg("Unable to access user database.");
 			return undef;



2.1                  interchange/lib/Vend/UserControl.pm


rev 2.1, prev_rev 2.0







More information about the interchange-cvs mailing list