'.$end_page);
return OK;
}
$start_page =
@@ -82,17 +91,20 @@ sub handler {
$domain = $env{'form.udom'};
}
}
- my $cancreate;
+ my @cancreate;
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);
if (ref($domconfig{'usercreation'}) eq 'HASH') {
if (ref($domconfig{'usercreation'}{'cancreate'}) eq 'HASH') {
- if ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') {
- $cancreate = $domconfig{'usercreation'}{'cancreate'}{'selfcreate'};
+ if (ref($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}) eq 'ARRAY') {
+ @cancreate = @{$domconfig{'usercreation'}{'cancreate'}{'selfcreate'}};
+ } elsif (($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') &&
+ ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne '')) {
+ @cancreate = ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'});
}
}
}
- if (!$cancreate) {
+ if (@cancreate == 0) {
&print_header($r,$start_page);
my $output = &mt('Creation of a new user account using an e-mail address as username or a loginID from your institution is not permitted in the domain: [_1] ([_2]).',$domain,$domdesc);
$r->print($output);
@@ -100,6 +112,30 @@ sub handler {
return OK;
}
+ my $courseid;
+ if (defined($env{'form.courseid'})) {
+ $courseid = &validate_course($env{'form.courseid'});
+ }
+
+ if ($sso_username ne '') {
+ &print_header($r,$start_page);
+ my ($output,$msg);
+ if (grep(/^sso$/,@cancreate)) {
+ $msg = &mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account in this domain.");
+ ($output, my $checkfail) = &username_check($sso_username,$domain,$domdesc,$courseid);
+ if ($checkfail) {
+ $msg .= &mt('A LON-CAPA account may not be created with the username you use.');
+ } else {
+ $msg .= &mt('To create one, use the table below to provide information about yourself (if appropriate), then click the "Create LON-CAPA account" button.');
+ }
+ } else {
+ $msg = &mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account in this domain, and you are not permitted to create one.");
+ }
+ $r->print('
'.$msg.'
'.$output);
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+ }
+
my ($output,$nostart,$noend);
my $token = $env{'form.token'};
if ($token) {
@@ -122,11 +158,6 @@ sub handler {
}
}
- my $courseid;
- if (defined($env{'form.courseid'})) {
- $courseid = &validate_course($env{'form.courseid'});
- }
-
if ($env{'form.phase'} eq 'username_activation') {
(my $result,$output,$nostart) =
&username_activation($r,$env{'form.uname'},$domain,$domdesc,
@@ -145,7 +176,7 @@ sub handler {
&print_header($r,$start_page);
if ($env{'form.create_with_email'}) {
$output = &process_email_request($env{'form.useremail'},$domain,$domdesc,
- $contact_name,$contact_email,$cancreate,
+ $contact_name,$contact_email,\@cancreate,
$lonhost,$domconfig{'usercreation'},
$courseid);
} elsif ($env{'form.phase'} eq 'username_validation') {
@@ -153,12 +184,12 @@ sub handler {
$contact_name,$contact_email,$courseid);
} elsif (!$token) {
my $now=time;
- if ($cancreate eq 'any' || $cancreate eq 'login') {
+ if (grep(/^login$/,@cancreate)) {
my $jsh=Apache::File->new($include."/londes.js");
$r->print(<$jsh>);
$r->print(&javascript_setforms($now));
}
- $output = &print_username_form($domain,$domdesc,$cancreate,$now,$lonhost,
+ $output = &print_username_form($domain,$domdesc,\@cancreate,$now,$lonhost,
$courseid);
}
$r->print($output);
@@ -248,64 +279,66 @@ sub print_username_form {
uemail => 'Email address in LON-CAPA',
proc => 'Proceed');
my $output;
- if ($cancreate eq 'any' || $cancreate eq 'login') {
- my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
- if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) {
- $output = '
'.&mt('Create account with a username provided by your institution').'
';
- $output .= &mt('If you already have a Log-in ID at your institution, you may be able to use it[_1] for LON-CAPA.',' ').' '.&mt('Type in your Log-in ID and password to find out.').'
';
- my ($lkey,$ukey) = &Apache::lonpreferences::des_keys();
- my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);
- my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',
- $lonhost);
- $output .= &serverform($logtoken,$lonhost,undef,$courseid);
- my $unameform = '';
- my $upassform = '';
- my $submit_text = &mt('Create LON-CAPA account');
- $output .= ''.
- '
';
}
if ($output eq '') {
$output = &mt('Creation of a new user account using either an e-mail address or institutional log-in ID as your username is not permitted in the domain: [_1] ([_2])',$domain,$domdesc);
@@ -320,71 +353,73 @@ sub process_email_request {
$server,$settings,$courseid) = @_;
my $useremail = $env{'form.useremail'};
my $output;
- if ($cancreate ne 'any' && $cancreate ne 'email') {
- $output = &invalid_state('noemails',$domdesc,
- $contact_name,$contact_email);
- return $output;
- } elsif ($useremail !~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {
- $output = &invalid_state('baduseremail',$domdesc,
- $contact_name,$contact_email);
- return $output;
- } else {
- my $uhome = &Apache::lonnet::homeserver($useremail,$domain);
- if ($uhome ne 'no_host') {
- $output = &invalid_state('existinguser',$domdesc,
+ if (ref($cancreate) eq 'ARRAY') {
+ if (!grep(/^email$/,@{$cancreate})) {
+ $output = &invalid_state('noemails',$domdesc,
+ $contact_name,$contact_email);
+ return $output;
+ } elsif ($useremail !~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {
+ $output = &invalid_state('baduseremail',$domdesc,
$contact_name,$contact_email);
return $output;
} else {
- my $code = $env{'form.code'};
- my $md5sum = $env{'form.crypt'};
- my %captcha_params = &captcha_settings();
- my $captcha = Authen::Captcha->new(
- output_folder => $captcha_params{'output_dir'},
- data_folder => $captcha_params{'db_dir'},
- );
- my $captcha_chk = $captcha->check_code($code,$md5sum);
- my %captcha_hash = (
- 0 => 'Code not checked (file error)',
- -1 => 'Failed: code expired',
- -2 => 'Failed: invalid code (not in database)',
- -3 => 'Failed: invalid code (code does not match crypt)',
- );
- if ($captcha_chk != 1) {
- $output = &invalid_state('captcha',$domdesc,$contact_name,
- $contact_email,$captcha_hash{$captcha_chk});
+ my $uhome = &Apache::lonnet::homeserver($useremail,$domain);
+ if ($uhome ne 'no_host') {
+ $output = &invalid_state('existinguser',$domdesc,
+ $contact_name,$contact_email);
return $output;
- }
- my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts);
- my $uhome=&Apache::lonnet::homeserver($useremail,$domain);
- if ($uhome eq 'no_host') {
- my $checkhash;
- my $checks = { 'username' => 1 };
- $checkhash->{$useremail.':'.$domain} = { 'newuser' => 1, };
- &Apache::loncommon::user_rule_check($checkhash,$checks,
- \%alerts,\%rulematch,\%inst_results,\%curr_rules,
- \%got_rules);
- if (ref($alerts{'useremail'}) eq 'HASH') {
- if (ref($alerts{'useremail'}{$domain}) eq 'HASH') {
- if ($alerts{'username'}{$domain}{$useremail}) {
- $output = &invalid_state('userrules',$domdesc,
- $contact_name,$contact_email);
- return $output;
+ } else {
+ my $code = $env{'form.code'};
+ my $md5sum = $env{'form.crypt'};
+ my %captcha_params = &captcha_settings();
+ my $captcha = Authen::Captcha->new(
+ output_folder => $captcha_params{'output_dir'},
+ data_folder => $captcha_params{'db_dir'},
+ );
+ my $captcha_chk = $captcha->check_code($code,$md5sum);
+ my %captcha_hash = (
+ 0 => 'Code not checked (file error)',
+ -1 => 'Failed: code expired',
+ -2 => 'Failed: invalid code (not in database)',
+ -3 => 'Failed: invalid code (code does not match crypt)',
+ );
+ if ($captcha_chk != 1) {
+ $output = &invalid_state('captcha',$domdesc,$contact_name,
+ $contact_email,$captcha_hash{$captcha_chk});
+ return $output;
+ }
+ my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts);
+ my $uhome=&Apache::lonnet::homeserver($useremail,$domain);
+ if ($uhome eq 'no_host') {
+ my $checkhash;
+ my $checks = { 'username' => 1 };
+ $checkhash->{$useremail.':'.$domain} = { 'newuser' => 1, };
+ &Apache::loncommon::user_rule_check($checkhash,$checks,
+ \%alerts,\%rulematch,\%inst_results,\%curr_rules,
+ \%got_rules);
+ if (ref($alerts{'useremail'}) eq 'HASH') {
+ if (ref($alerts{'useremail'}{$domain}) eq 'HASH') {
+ if ($alerts{'username'}{$domain}{$useremail}) {
+ $output = &invalid_state('userrules',$domdesc,
+ $contact_name,$contact_email);
+ return $output;
+ }
}
}
- }
- my $format_msg =
- &guest_format_check($useremail,$domain,$cancreate,
- $settings);
- if ($format_msg) {
- $output = &invalid_state('userformat',$domdesc,$contact_name,
- $contact_email,$format_msg);
- return $output;
+ my $format_msg =
+ &guest_format_check($useremail,$domain,$cancreate,
+ $settings);
+ if ($format_msg) {
+ $output = &invalid_state('userformat',$domdesc,$contact_name,
+ $contact_email,$format_msg);
+ return $output;
+ }
}
}
}
- }
- $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name,
+ $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name,
$contact_email,$courseid);
+ }
return $output;
}
@@ -650,9 +685,12 @@ sub username_validation {
$authok = 'non_authorized';
}
if ($authok eq 'authorized') {
- $output = &username_check($username,$domain,$domdesc,$courseid);
+ ($output,undef) = &username_check($username,$domain,$domdesc,$courseid);
} else {
- $output = &mt('Not authenticated').' '.&mt('Please check the username and password');
+ $output = '
'
+ .&mt('Username and/or password could not be authenticated.')
+ .'
'
+ .&mt('Please check the username and password.');
}
}
return $output;
@@ -670,14 +708,17 @@ sub username_check {
if (ref($alerts{'username'}) eq 'HASH') {
if (ref($alerts{'username'}{$domain}) eq 'HASH') {
if ($alerts{'username'}{$domain}{$username}) {
- my $userchkmsg;
+ my ($userchkmsg,$checkfail);
if (ref($curr_rules{$domain}) eq 'HASH') {
$userchkmsg =
&Apache::loncommon::instrule_disallow_msg('username',$domdesc,1).
&Apache::loncommon::user_rule_formats($domain,$domdesc,
$curr_rules{$domain}{'username'},'username');
+ if ($userchkmsg) {
+ $checkfail = 1;
+ }
}
- return $userchkmsg;
+ return ($userchkmsg,$checkfail);
}
}
}
@@ -694,7 +735,7 @@ sub username_check {
}
$output .= '';
- return $output;
+ return ($output,'');
}
sub username_activation {
@@ -896,8 +937,10 @@ sub guest_format_check {
if ($format_match) {
($login) = ($useremail =~ /^([^\@]+)\@/);
$format_msg = ' '.&mt("Your e-mail address uses the same internet domain as your institution's LON-CAPA service.").' '.&mt('Creation of a LON-CAPA account with this type of e-mail address as username is not permitted.').' ';
- if ($cancreate eq 'any' || $cancreate eq 'login') {
- $format_msg .= &mt('You should request creation of a LON-CAPA account for a Log-in ID of "[_1]" at your institution instead.',$login).' ';
+ if (ref($cancreate) eq 'ARRAY') {
+ if (grep(/^login$/,@{$cancreate})) {
+ $format_msg .= &mt('You should request creation of a LON-CAPA account for a Log-in ID of "[_1]" at your institution instead.',$login).' ';
+ }
}
}
return $format_msg;