Diff for /loncom/interface/lonuserutils.pm between versions 1.203 and 1.210

version 1.203, 2019/08/26 00:15:57 version 1.210, 2022/02/14 01:15:24
Line 532  END Line 532  END
 END  END
     } else {      } else {
         my ($numrules,$intargjs) =          my ($numrules,$intargjs) =
             &passwd_validation_js('vf.elements[current.argfield].value',$domain);              &Apache::loncommon::passwd_validation_js('vf.elements[current.argfield].value',$domain);
         $auth_checks .= (<<END);          $auth_checks .= (<<END);
     foundatype=1;      foundatype=1;
     if (current.argfield == null || current.argfield == '') {      if (current.argfield == null || current.argfield == '') {
Line 543  END Line 543  END
             case 'krb':              case 'krb':
                 alertmsg = '$alert{'krb'}';                  alertmsg = '$alert{'krb'}';
                 break;                  break;
             case 'loc':  
             case 'int':              case 'int':
                 alertmsg = '$alert{'ipass'}';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
             case 'fsys':              case 'fsys':
                 alertmsg = '$alert{'ipass'}';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
               case 'loc':
                   alertmsg = '';
                   break;
             case 'lti':              case 'lti':
             default:              default:
                 alertmsg = '';                  alertmsg = '';
Line 651  END Line 653  END
     return $result;      return $result;
 }  }
   
 sub passwd_validation_js {  
     my ($currpasswdval,$domain) = @_;  
     my %passwdconf = &Apache::lonnet::get_passwdconf($domain);  
     my ($min,$max,@chars,$numrules,$intargjs,%alert);  
     $numrules = 0;  
     $min = $Apache::lonnet::passwdmin;  
     if (ref($passwdconf{'chars'}) eq 'ARRAY') {  
         if ($passwdconf{'min'} =~ /^\d+$/) {  
             if ($passwdconf{'min'} > $min) {  
                 $min = $passwdconf{'min'};  
             }  
         }  
         if ($passwdconf{'max'} =~ /^\d+$/) {  
             $max = $passwdconf{'max'};  
             $numrules ++;  
         }  
         @chars = @{$passwdconf{'chars'}};  
         if (@chars) {  
             $numrules ++;  
         }  
     }  
     if ($min > 0) {  
         $numrules ++;  
     }  
     if (($min > 0) || ($max ne '') || (@chars > 0)) {  
         my $alertmsg = &mt('Initial password did not satisfy requirement(s):').'\n\n';  
         if ($min) {  
             $alert{'min'} = &mt('minimum [quant,_1,character]',$min).'\n';  
         }  
         if ($max) {  
             $alert{'max'} = &mt('maximum [quant,_1,character]',$max).'\n';  
         }  
         my (@charalerts,@charrules);  
         if (@chars) {  
             if (grep(/^uc$/,@chars)) {  
                 push(@charalerts,&mt('contain at least one upper case letter'));  
                 push(@charrules,'uc');  
             }  
             if (grep(/^lc$/,@chars)) {  
                 push(@charalerts,&mt('contain at least one lower case letter'));  
                 push(@charrules,'lc');  
             }  
             if (grep(/^num$/,@chars)) {  
                 push(@charalerts,&mt('contain at least one number'));  
                 push(@charrules,'num');  
             }  
             if (grep(/^spec$/,@chars)) {  
                 push(@charalerts,&mt('contain at least one non-alphanumeric'));  
                 push(@charrules,'spec');  
             }  
         }  
         $intargjs = qq|            var rulesmsg = '';\n|.  
                     qq|            var currpwval = $currpasswdval;\n|;  
             if ($min) {  
                 $intargjs .= qq|  
             if (currpwval.length < $min) {  
                 rulesmsg += ' - $alert{min}';  
             }  
 |;  
             }  
             if ($max) {  
                 $intargjs .= qq|  
             if (currpwval.length > $max) {  
                 rulesmsg += ' - $alert{max}';  
             }  
 |;  
             }  
             if (@chars > 0) {  
                 my $charrulestr = '"'.join('","',@charrules).'"';  
                 my $charalertstr = '"'.join('","',@charalerts).'"';  
                 $intargjs .= qq|            var brokerules = new Array();\n|.  
                              qq|            var charrules = new Array($charrulestr);\n|.  
                              qq|            var charalerts = new Array($charalertstr);\n|;  
                 my %rules;  
                 map { $rules{$_} = 1; } @chars;  
                 if ($rules{'uc'}) {  
                     $intargjs .= qq|  
             var ucRegExp = /[A-Z]/;  
             if (!ucRegExp.test(currpwval)) {  
                 brokerules.push('uc');  
             }  
 |;  
                 }  
                 if ($rules{'lc'}) {  
                     $intargjs .= qq|  
             var lcRegExp = /[a-z]/;  
             if (!lcRegExp.test(currpwval)) {  
                 brokerules.push('lc');  
             }  
 |;  
                 }  
                 if ($rules{'num'}) {  
                      $intargjs .= qq|  
             var numRegExp = /[0-9]/;  
             if (!numRegExp.test(currpwval)) {  
                 brokerules.push('num');  
             }  
 |;  
                 }  
                 if ($rules{'spec'}) {  
                      $intargjs .= q|  
             var specRegExp = /[!"#$%&'()*+,\-.\/:;<=>?@[\\^\]_`{\|}~]/;  
             if (!specRegExp.test(currpwval)) {  
                 brokerules.push('spec');  
             }  
 |;  
                 }  
                 $intargjs .= qq|  
             if (brokerules.length > 0) {  
                 for (var i=0; i<brokerules.length; i++) {  
                     for (var j=0; j<charrules.length; j++) {  
                         if (brokerules[i] == charrules[j]) {  
                             rulesmsg += ' - '+charalerts[j]+'\\n';  
                             break;  
                         }  
                     }  
                 }  
             }  
 |;  
             }  
             $intargjs .= qq|  
             if (rulesmsg != '') {  
                 rulesmsg = '$alertmsg'+rulesmsg;  
                 alert(rulesmsg);  
                 return false;  
             }  
 |;  
     }  
     return ($numrules,$intargjs);  
 }  
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub upload_manager_javascript_forward_associate {  sub upload_manager_javascript_forward_associate {
Line 1709  sub my_custom_roles { Line 1580  sub my_custom_roles {
     my %rolehash=&Apache::lonnet::dump('roles',$udom,$uname);      my %rolehash=&Apache::lonnet::dump('roles',$udom,$uname);
     foreach my $key (keys(%rolehash)) {      foreach my $key (keys(%rolehash)) {
         if ($key=~/^rolesdef\_(\w+)$/) {          if ($key=~/^rolesdef\_(\w+)$/) {
               my $role = $1;
             if ($crstype eq 'Community') {              if ($crstype eq 'Community') {
                 next if ($rolehash{$key} =~ /bre\&S/);                   next if ($rolehash{$key} =~ /bre\&S/); 
             }              }
             $returnhash{$1}=$1;              $returnhash{$role}=$role;
         }          }
     }      }
     return %returnhash;      return %returnhash;
Line 3669  END Line 3541  END
         setSections(formname,'$crstype');          setSections(formname,'$crstype');
         if (seccheck == 'ok') {          if (seccheck == 'ok') {
             opener.document.$callingform.newsecs.value = formname.sections.value;              opener.document.$callingform.newsecs.value = formname.sections.value;
           } else {
               return;
         }          }
 END  END
     } else {      } else {
Line 5007  sub upfile_drop_add { Line 4881  sub upfile_drop_add {
                     my (%userres,%authres,%roleres,%idres);                      my (%userres,%authres,%roleres,%idres);
                     my $singlesec = '';                      my $singlesec = '';
                     if ($role eq 'st') {                      if ($role eq 'st') {
                           if (($context eq 'domain') && ($changeauth eq 'Yes') && (!$newuser)) {
                               if ((&Apache::lonnet::allowed('mau',$userdomain)) &&
                                   (&Apache::lonnet::homeserver($username,$userdomain) ne 'no_host')) {
                                   if ((($amode =~ /^krb4|krb5|internal$/) && $password ne '') ||
                                        ($amode eq 'localauth')) {
                                       $authresult =
                                           &Apache::lonnet::modifyuserauth($userdomain,$username,$amode,$password);
                                   }
                               }
                           }
                         my $sec;                          my $sec;
                         if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') {                          if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') {
                             if (@secs > 0) {                              if (@secs > 0) {
Line 5048  sub upfile_drop_add { Line 4932  sub upfile_drop_add {
                                     }                                      }
                                 }                                  }
                             }                              }
                             if (!$multiple) {                          }
                                 ($userresult,$authresult,$roleresult,$idresult) =                           if (!$multiple) {
                                     &modifyuserrole($context,$setting,                              ($userresult,$authresult,$roleresult,$idresult) = 
                                                     $changeauth,$cid,$userdomain,$username,                                   &modifyuserrole($context,$setting,
                                                     $id,$amode,$password,$fname,                                                  $changeauth,$cid,$userdomain,$username, 
                                                     $mname,$lname,$gen,$singlesec,                                                  $id,$amode,$password,$fname,
                                                     $env{'form.forceid'},$desiredhost,                                                  $mname,$lname,$gen,$singlesec,
                                                     $email,$role,$enddate,$startdate,                                                  $env{'form.forceid'},$desiredhost,
                                                     $checkid,$inststatus);                                                  $email,$role,$enddate,$startdate,
                             }                                                  $checkid,$inststatus);
                         }                          }
                     }                      }
                     if ($multiple) {                      if ($multiple) {
Line 5177  sub passwdrule_alerts { Line 5061  sub passwdrule_alerts {
             my %passwdconf = &Apache::lonnet::get_passwdconf($domain);              my %passwdconf = &Apache::lonnet::get_passwdconf($domain);
             $warning = '<b>'.&mt('Password requirement(s) unmet for one or more users:').'</b><ul>';              $warning = '<b>'.&mt('Password requirement(s) unmet for one or more users:').'</b><ul>';
             if ($showrules{'min'}) {              if ($showrules{'min'}) {
                 $warning .= '<li>'.&mt('minimum [quant,_1,character]',$passwdconf{'min'}).'</li>';                  my $min = $passwdconf{'min'};
                   if ($min eq '') {
                       $min = $Apache::lonnet::passwdmin;
                   }
                   $warning .= '<li>'.&mt('minimum [quant,_1,character]',$min).'</li>';
             }              }
             if ($showrules{'max'}) {              if ($showrules{'max'}) {
                 $warning .= '<li>'.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'</li>';                  $warning .= '<li>'.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'</li>';
Line 6516  sub verify_authen { Line 6404  sub verify_authen {
         $finish = "document.$formname.submit();";          $finish = "document.$formname.submit();";
     }      }
     my ($numrules,$intargjs) =      my ($numrules,$intargjs) =
         &passwd_validation_js('argpicked',$domain);          &Apache::loncommon::passwd_validation_js('argpicked',$domain);
     my $outcome = <<"ENDSCRIPT";      my $outcome = <<"ENDSCRIPT";
   
 function auth_check() {  function auth_check() {

Removed from v.1.203  
changed lines
  Added in v.1.210


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>