X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FCurrentUser.pm;h=a1b57cbfbba34d5adf0d3865828ec2d6ff617fc8;hb=46ca67d352957406bedb44680a9266e20f3cfd2c;hp=37ed3592a412e29dac1e4b3f9cab4816869722de;hpb=1ed201c9f897f768e3ec8b9e7aee0fcb8b2bfed1;p=freeside.git diff --git a/FS/FS/CurrentUser.pm b/FS/FS/CurrentUser.pm index 37ed3592a..a1b57cbfb 100644 --- a/FS/FS/CurrentUser.pm +++ b/FS/FS/CurrentUser.pm @@ -21,7 +21,9 @@ FS::CurrentUser - Package representing the current user sub load_user { my( $class, $user ) = @_; #, $pass - return "" if $upgrade_hack; + if ( $upgrade_hack ) { + return $CurrentUser = new FS::CurrentUser::BootstrapUser; + } #return "" if $user =~ /^fs_(queue|selfservice)$/; @@ -34,6 +36,7 @@ sub load_user { $CurrentUser = qsearchs('access_user', { 'username' => $user, #'_password' => + 'disabled' => '', } ); die "unknown user: $user" unless $CurrentUser; # or bad password @@ -41,6 +44,62 @@ sub load_user { $CurrentUser; } +=item new_session + +Creates a new session for the current user and returns the session key + +=cut + +use vars qw( @saltset ); +@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '+' , '/' ); + +sub new_session { + my( $class ) = @_; + + #not the best thing in the world... + eval "use FS::access_user_session;"; + die $@ if $@; + + my $sessionkey = join('', map $saltset[int(rand(scalar @saltset))], 0..39); + + my $access_user_session = new FS::access_user_session { + 'sessionkey' => $sessionkey, + 'usernum' => $CurrentUser->usernum, + 'start_date' => time, + }; + my $error = $access_user_session->insert; + die $error if $error; + + return $sessionkey; + +} + +=item load_user_session SESSION_KEY + +Sets the current user via the provided session key + +=cut + +sub load_user_session { + my( $class, $sessionkey ) = @_; + + #not the best thing in the world... + eval "use FS::Record qw(qsearchs);"; + die $@ if $@; + eval "use FS::access_user_session;"; + die $@ if $@; + + $CurrentSession = qsearchs('access_user_session', { + 'sessionkey' => $sessionkey, + #XXX check for timed out but not-yet deleted sessions here + }) or return ''; + + $CurrentSession->touch_last_date; + + $CurrentUser = $CurrentSession->access_user; + +} + =head1 BUGS Creepy crawlies @@ -49,5 +108,16 @@ Creepy crawlies =cut +package FS::CurrentUser::BootstrapUser; + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + bless ($self, $class); +} + +sub AUTOLOAD { 1 }; + 1;