[LON-CAPA-cvs] cvs: loncom /interface loncreateuser.pm lonuserutils.pm

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Tue, 01 Jan 2008 17:25:00 -0000


This is a MIME encoded message

--raeburn1199208300
Content-Type: text/plain

raeburn		Tue Jan  1 12:25:00 2008 EDT

  Modified files:              
    /loncom/interface	loncreateuser.pm lonuserutils.pm 
  Log:
  - aggregate setting of $authform_* variables in loncreateuser with &initialize_authen_form()
  - remove duplicate code for setting $authform_*
  - replace use of &lonuserutils::javascript_validations() for javascript validation of authentication input on modify single user/enroll ingle student screens with &lonuserutils::verify_authen()
  
  
--raeburn1199208300
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20080101122500.txt"

Index: loncom/interface/loncreateuser.pm
diff -u loncom/interface/loncreateuser.pm:1.226 loncom/interface/loncreateuser.pm:1.227
--- loncom/interface/loncreateuser.pm:1.226	Sun Dec 30 21:28:12 2007
+++ loncom/interface/loncreateuser.pm	Tue Jan  1 12:24:59 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Create a user
 #
-# $Id: loncreateuser.pm,v 1.226 2007/12/31 02:28:12 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.227 2008/01/01 17:24:59 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -76,30 +76,30 @@
 my $authformloc;
 
 sub initialize_authen_forms {
-    my ($dom,$curr_authtype,$mode) = @_; 
-    my ($krbdefdom)=( $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/);
-    $krbdefdom= uc($krbdefdom);
-    my %param = ( formname => 'document.cu',
+    my ($dom,$formname,$curr_authtype,$mode) = @_;
+    my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($dom);
+    my %param = ( formname => $formname,
                   kerb_def_dom => $krbdefdom,
+                  kerb_def_auth => $krbdef,
                   domain => $dom,
                 );
     my %abv_auth = &auth_abbrev();
-    if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):$/) {
+    if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):(.*)$/) {
         my $long_auth = $1;
+        my $curr_autharg = $2;
         my %abv_auth = &auth_abbrev();
         $param{'curr_authtype'} = $abv_auth{$long_auth};
         if ($long_auth =~ /^krb(4|5)$/) {
             $param{'curr_kerb_ver'} = $1;
+            $param{'curr_autharg'} = $curr_autharg;
         }
         if ($mode eq 'modifyuser') {
             $param{'mode'} = $mode;
         }
     }
-# no longer static due to configurable kerberos defaults
-#    $loginscript  = &Apache::loncommon::authform_header(%param);
+    $loginscript  = &Apache::loncommon::authform_header(%param);
+    $authformkrb  = &Apache::loncommon::authform_kerberos(%param);
     $authformnop  = &Apache::loncommon::authform_nochange(%param);
-# no longer static due to configurable kerberos defaults
-#    $authformkrb  = &Apache::loncommon::authform_kerberos(%param);
     $authformint  = &Apache::loncommon::authform_internal(%param);
     $authformfsys = &Apache::loncommon::authform_filesystem(%param);
     $authformloc  = &Apache::loncommon::authform_local(%param);
@@ -515,8 +515,7 @@
         $formname = 'cu';
     }
     my %abv_auth = &auth_abbrev();
-    my ($curr_authtype,%rulematch,%inst_results,$curr_kerb_ver,$newuser,
-        %alerts,%curr_rules,%got_rules);
+    my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);
     my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain);
     if ($uhome eq 'no_host') {
         my $usertype;
@@ -571,32 +570,10 @@
         }
     } else {
         $newuser = 0;
-        my $currentauth = 
-            &Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
-        if ($currentauth =~ /^(krb4|krb5|unix|internal|localauth):/) {	
-            $curr_authtype = $abv_auth{$1};
-            if ($currentauth =~ /^krb(4|5)/) {
-                $curr_kerb_ver = $1;
-            }
-        }
     }
     if ($response) {
         $response = '<br />'.$response;
     }
-    my $defdom=$env{'request.role.domain'};
-
-    my ($krbdef,$krbdefdom) =
-       &Apache::loncommon::get_kerberos_defaults($defdom);
-
-    my %param = ( formname => 'document.cu',
-                  kerb_def_dom => $krbdefdom,
-                  kerb_def_auth => $krbdef,
-                  curr_authtype => $curr_authtype,
-                  curr_kerb_ver => $curr_kerb_ver,
-                  domain => $ccdomain,
-                );
-    $loginscript  = &Apache::loncommon::authform_header(%param);
-    $authformkrb  = &Apache::loncommon::authform_kerberos(%param);
 
     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
     my $dc_setcourse_code = '';
@@ -654,7 +631,7 @@
             # Current user has quota modification privileges
             $portfolioform = '<br />'.&portfolio_quota($ccuname,$ccdomain);
         }
-        &initialize_authen_forms($ccdomain);
+        &initialize_authen_forms($ccdomain,$formname);
         my %lt=&Apache::lonlocal::texthash(
                 'cnu'            => 'Create New User',
                 'ast'            => 'as a student',
@@ -775,8 +752,7 @@
             $r->print(&Apache::lonuserutils::forceid_change($context));
         }
         $r->print('</div>');
-        my $user_auth_text = 
-            &user_authentication($ccuname,$ccdomain,$krbdefdom,\%abv_auth);
+        my $user_auth_text =  &user_authentication($ccuname,$ccdomain,$formname);
         my $user_quota_text;
         if (&Apache::lonnet::allowed('mpq',$ccdomain)) {
             # Current user has quota modification privileges
@@ -840,7 +816,7 @@
             if ($addrolesdisplay) {
                 $r->print('<br /><input type="button" value="'.&mt('Modify User').'"');
                 if ($newuser) {
-                    $r->print(' onClick="verify_message(this.form)" \>'."\n");
+                    $r->print(' onClick="auth_check()" \>'."\n");
                 } else {
                     $r->print('onClick="this.form.submit()" \>'."\n");
                 }
@@ -897,26 +873,28 @@
     if ($context eq 'domain') {
         my $dcdom = $env{'request.role.domain'};
         $loaditem->{'onload'} = "document.cu.coursedesc.value='';";
-        $dc_setcourse_code = &Apache::lonuserutils::dc_setcourse_js('cu','singleuser');
+        $dc_setcourse_code = 
+            &Apache::lonuserutils::dc_setcourse_js('cu','singleuser',$context);
     } else {
-        $nondc_setsection_code =
-            &Apache::lonuserutils::setsections_javascript($formname,$groupslist);
+        my $checkauth; 
+        if (($newuser) || (&Apache::lonnet::allowed('mau',$ccdomain))) {
+            $checkauth = 1;
+        }
+        if ($context eq 'course') {
+            $nondc_setsection_code =
+                &Apache::lonuserutils::setsections_javascript($formname,$groupslist,
+                                                              undef,$checkauth);
+        }
+        if ($checkauth) {
+            $nondc_setsection_code .= 
+                &Apache::lonuserutils::verify_authen($formname,$context);
+        }
     }
     my $js = &user_modification_js($pjump_def,$dc_setcourse_code,
                                    $nondc_setsection_code,$groupslist);
-
     my ($jsback,$elements) = &crumb_utilities();
-    my $javascript_validations;
-    if ((&Apache::lonnet::allowed('mau',$ccdomain)) || ($newuser)) {
-        my ($krbdef,$krbdefdom) =
-            &Apache::loncommon::get_kerberos_defaults($ccdomain);
-        $javascript_validations =
-            &Apache::lonuserutils::javascript_validations('createuser',$krbdefdom,undef,
-                                                          undef,$ccdomain);
-    }
     $js .= "\n".
-           '<script type="text/javascript">'."\n".$jsback."\n".
-           $javascript_validations.'</script>';
+           '<script type="text/javascript">'."\n".$jsback."\n".'</script>';
     return $js;
 }
 
@@ -1241,22 +1219,9 @@
 }
 
 sub user_authentication {
-    my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_;
+    my ($ccuname,$ccdomain,$formname) = @_;
     my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
-    my ($loginscript,$outcome);
-    if ($currentauth=~/^(krb)(4|5):(.*)/) {
-        my $long_auth = $1.$2;
-        my $curr_kerb_ver = $2;
-        my $krbdefdom=$3;
-        my $curr_authtype = $abv_auth->{$long_auth};
-        my %param = ( formname      => 'document.cu',
-                      kerb_def_dom  => $krbdefdom,
-                      domain        => $ccdomain,
-                      curr_authtype => $curr_authtype,
-                      curr_kerb_ver => $curr_kerb_ver,
-                          );
-        $loginscript  = &Apache::loncommon::authform_header(%param);
-    }
+    my $outcome;
     # Check for a bad authentication type
     if ($currentauth !~ /^(krb4|krb5|unix|internal|localauth):/) {
         # bad authentication scheme
@@ -1268,7 +1233,8 @@
                        'ld'    => "Login Data"
         );
         if (&Apache::lonnet::allowed('mau',$ccdomain)) {
-            &initialize_authen_forms($ccdomain);
+            &initialize_authen_forms($ccdomain,$formname);
+
             my $choices = &Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc);
             $outcome = <<ENDBADAUTH;
 <script type="text/javascript" language="Javascript">
@@ -1289,7 +1255,7 @@
 ENDBADAUTH
         }
     } else { # Authentication type is valid
-        &initialize_authen_forms($ccdomain,$currentauth,'modifyuser');
+        &initialize_authen_forms($ccdomain,$formname,$currentauth,'modifyuser');
         my ($authformcurrent,$can_modify,@authform_others) =
             &modify_login_block($ccdomain,$currentauth);
         if (&Apache::lonnet::allowed('mau',$ccdomain)) {
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.36 loncom/interface/lonuserutils.pm:1.37
--- loncom/interface/lonuserutils.pm:1.36	Wed Dec 26 09:38:13 2007
+++ loncom/interface/lonuserutils.pm	Tue Jan  1 12:24:59 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.36 2007/12/26 14:38:13 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.37 2008/01/01 17:24:59 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -76,7 +76,7 @@
         }
     }
     if ($result eq '') {
-        $result = 'Unable to find section for this student';
+        $result = &mt('Unable to find section for this student');
     } else {
         $result =~ s/(ok:)+/ok/g;
     }
@@ -333,17 +333,12 @@
 sub javascript_validations {
     my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain,
         $context,$groupslist)=@_;
-
     my %param = (
                   kerb_def_dom => $krbdefdom,
                   curr_authtype => $curr_authtype,
                 );
-    if ($mode eq 'createuser') {
-        $param{'formname'} = 'cu';
-    } elsif ($mode eq 'upload') {
+    if ($mode eq 'upload') {
         $param{'formname'} = 'studentform';
-    } elsif ($mode eq 'singlestudent') {
-        $param{'formname'} = 'cu';
     } elsif ($mode eq 'createcourse') {
         $param{'formname'} = 'ccrs';
     } elsif ($mode eq 'modifycourse') {
@@ -367,7 +362,7 @@
                 }
             } elsif ($context eq 'domain') {
                 $setsection_call = 'setCourse()';
-                $setsections_js = &dc_setcourse_js($param{'formname'},$mode);
+                $setsections_js = &dc_setcourse_js($param{'formname'},$mode,$context);
             }
             $finish = "  var checkSec = $setsection_call\n".
                       "  if (checkSec == 'ok') {\n".
@@ -389,8 +384,7 @@
          role     => 'The optional role field was not specified.',
          continue => 'Continue adding users?',
          );
-
-    my $function_name =(<<END);
+    my $function_name = <<"END";
 $setsections_js
 
 function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
@@ -521,14 +515,8 @@
 }
 END
     }
-    my $result = $function_name;
-    if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse')  ) {
-        $result .= $auth_checks;
-    }
-    $result .= $optional_checks."\n".$section_checks;
-    if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse')  ) {
-        $result .= $authheader;
-    }
+    my $result = $function_name.$auth_checks.$optional_checks."\n".
+                 $section_checks.$authheader;
     return $result;
 }
 ###############################################################
@@ -4168,7 +4156,7 @@
 }
 
 sub setsections_javascript {
-    my ($formname,$groupslist,$mode) = @_;
+    my ($formname,$groupslist,$mode,$checkauth) = @_;
     my ($checkincluded,$finish,$rolecode,$setsection_js);
     if ($mode eq 'upload') {
         $checkincluded = 'formname.name == "'.$formname.'"';
@@ -4176,12 +4164,26 @@
         $rolecode = "var role = formname.defaultrole.options[formname.defaultrole.selectedIndex].value;\n";
     } elsif ($formname eq 'cu') {
         $checkincluded = 'formname.elements[i-1].checked == true';
-        $finish = 'formname.submit()';
+        if ($checkauth) {
+            $finish = "var authcheck = auth_check();\n".
+                      "   if (authcheck == 'ok') {\n".
+                      "       formname.submit();\n".
+                      "   }\n";
+        } else {
+            $finish = 'formname.submit()';
+        }
         $rolecode = "var match = str.split('_');
                 var role = match[3];\n";
     } elsif ($formname eq 'enrollstudent') {
         $checkincluded = 'formname.name == "'.$formname.'"';
-        $finish = 'formname.submit()';
+        if ($checkauth) {
+            $finish = "var authcheck = auth_check();\n".
+                      "   if (authcheck == 'ok') {\n".
+                      "       formname.submit();\n".
+                      "   }\n";
+        } else {
+            $finish = 'formname.submit()';
+        }
         $rolecode = "var match = str.split('_');
                 var role = match[1];\n";
     } else {
@@ -4518,15 +4520,19 @@
 }
 
 sub dc_setcourse_js {
-    my ($formname,$mode) = @_;
-    my $dc_setcourse_code;
+    my ($formname,$mode,$context) = @_;
+    my ($dc_setcourse_code,$authen_check);
     my $cctext = &Apache::lonnet::plaintext('cc');
     my %alerts = &sectioncheck_alerts();
     my $role = 'role';
     if ($mode eq 'upload') {
         $role = 'courserole';
+    } else {
+        $authen_check = &verify_authen($formname,$context);
     }
     $dc_setcourse_code = (<<"SCRIPTTOP");
+$authen_check
+
 function setCourse() {
     var course = document.$formname.dccourse.value;
     if (course != "") {
@@ -4611,9 +4617,11 @@
             }
         }
     }
-    document.$formname.submit();
+    var authcheck = auth_check();
+    if (authcheck == 'ok') {
+        document.$formname.submit();
+    }
 }
-
 ENDSCRIPT
     } else {
         $dc_setcourse_code .=  "
@@ -4634,6 +4642,66 @@
         return -1;
     }
 ENDSCRIPT
+    return $dc_setcourse_code;
+}
+
+sub verify_authen {
+    my ($formname,$context) = @_;
+    my %alerts = &authcheck_alerts();
+    my $finish = "return 'ok';";
+    if ($context eq 'author') {
+        $finish = "document.$formname.submit();";
+    }
+    my $outcome = <<"ENDSCRIPT";
+
+function auth_check() {
+    var logintype;
+    if (document.$formname.login.length) {
+        if (document.$formname.login.length > 0) {
+            var loginpicked = 0;
+            for (var i=0; i<document.$formname.login.length; i++) {
+                if (document.$formname.login[i].checked == true) {
+                    loginpicked = 1;
+                    logintype = document.$formname.login[i].value;
+                }
+            }
+            if (loginpicked == 0) {
+                alert("$alerts{'authen'}");
+                return;
+            }
+        }
+    } else {
+        logintype = document.$formname.login.value;
+    }
+    if (logintype == 'nochange') {
+        return 'ok';
+    }
+    var argpicked = document.$formname.elements[logintype+'arg'].value;
+    if ((argpicked == null) || (argpicked == '') || (typeof argpicked == 'undefined')) {
+        var alertmsg = '';
+        switch (logintype) {
+            case 'krb':
+                alertmsg = '$alerts{'krb'}';
+                break;
+            case 'int':
+                alertmsg = '$alerts{'ipass'}';
+            case 'fsys':
+                alertmsg = '$alerts{'ipass'}';
+                break;
+            case 'loc':
+                alertmsg = '';
+                break;
+            default:
+                alertmsg = '';
+        }
+        if (alertmsg != '') {
+            alert(alertmsg);
+            return;
+        }
+    }
+    $finish
+}
+ENDSCRIPT
 }
 
 sub sectioncheck_alerts {
@@ -4655,5 +4723,15 @@
     return %alerts;
 }
 
+sub authcheck_alerts {
+    my %alerts = 
+        &Apache::lonlocal::texthash(
+                    authen => 'You must choose an authentication type.',
+                    krb    => 'You need to specify the Kerberos domain.',
+                    ipass  => 'You need to specify the initial password.',
+        );
+    return %alerts;
+}
+
 1;
 

--raeburn1199208300--