diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-05-09 21:42:37 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-05-09 21:42:37 -0700 |
commit | 56f9dffcd409d2a10e7a2cbe4c15b397f6f3abe1 (patch) | |
tree | 1b151c7f2348965c10823644201fc33a070dfa7b /FS/FS/CurrentUser.pm | |
parent | 19eef2ec0e68587304cd597fc5b2f8e1f151e424 (diff) |
NG auth: autocreate records for external users, RT#21563
Diffstat (limited to 'FS/FS/CurrentUser.pm')
-rw-r--r-- | FS/FS/CurrentUser.pm | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/FS/FS/CurrentUser.pm b/FS/FS/CurrentUser.pm index 7b0fe28..d272066 100644 --- a/FS/FS/CurrentUser.pm +++ b/FS/FS/CurrentUser.pm @@ -27,13 +27,13 @@ Sets the current user to the provided username =cut sub load_user { - my( $class, $user ) = @_; #, $pass + my( $class, $username, %opt ) = @_; if ( $upgrade_hack ) { return $CurrentUser = new FS::CurrentUser::BootstrapUser; } - #return "" if $user =~ /^fs_(queue|selfservice)$/; + #return "" if $username =~ /^fs_(queue|selfservice)$/; #not the best thing in the world... eval "use FS::Record qw(qsearchs);"; @@ -41,13 +41,52 @@ sub load_user { eval "use FS::access_user;"; die $@ if $@; - $CurrentUser = qsearchs('access_user', { - 'username' => $user, - #'_password' => - 'disabled' => '', - } ); + my %hash = ( 'username' => $username, + 'disabled' => '', + ); - die "unknown user: $user" unless $CurrentUser; # or bad password + $CurrentUser = qsearchs('access_user', \%hash) and return $CurrentUser; + + die "unknown user: $username" unless $opt{'autocreate'}; + + $CurrentUser = new FS::access_user \%hash; + $CurrentUser->set($_, $opt{$_}) foreach qw( first last ); + my $error = $CurrentUser->insert; + die $error if $error; #better way to handle this error? + + my $template_user = + $opt{'template_user'} + || FS::Conf->new->config('external_auth-access_group-template_user'); + + if ( $template_user ) { + + my $tmpl_access_user = + qsearchs('access_user', { 'username' => $template_user } ); + + if ( $tmpl_access_user ) { + eval "use FS::access_usergroup;"; + die $@ if $@; + + foreach my $tmpl_access_usergroup + ($tmpl_access_user->access_usergroup) { + my $access_usergroup = new FS::access_usergroup { + 'usernum' => $CurrentUser->usernum, + 'groupnum' => $tmpl_access_usergroup->groupnum, + }; + my $error = $access_usergroup->insert; + if ( $error ) { + #shouldn't happen, but seems better to proceed than to die + warn "error inserting access_usergroup: $error"; + }; + } + + } else { + warn "template username $template_user not found\n"; + } + + } else { + warn "no access template user for autocreated user $username\n"; + } $CurrentUser; } |