Diff for /loncom/lonenc.pm between versions 1.1 and 1.5

version 1.1, 2004/03/31 04:38:06 version 1.5, 2004/11/11 20:05:56
Line 44  sub handler { Line 44  sub handler {
  my $handle=$lonid->value;   my $handle=$lonid->value;
         $handle=~s/\W//g;          $handle=~s/\W//g;
         my $lonidsdir=$r->dir_config('lonIDsDir');          my $lonidsdir=$r->dir_config('lonIDsDir');
    $ENV{'request.enc'}=1;
         if ((-e "$lonidsdir/$handle.id") && ($handle ne '')) {          if ((-e "$lonidsdir/$handle.id") && ($handle ne '')) {
 # Initialize Environment  # Initialize Environment
             &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);              &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
 # Decrypt URL and redirect  # Decrypt URL and redirect
     $r->internal_redirect(&unencrypted($r->uri));      &Apache::lonnet::logthis("args ".$r->args);
       &Apache::lonnet::logthis("uri ".$r->uri);
       $r->internal_redirect(&unencrypted($r->uri).'?'.$r->args);
     return OK;      return OK;
  }    } 
     }      }
     return FORBIDDEN;      return FORBIDDEN;
 }  }
   
   sub encryptseed {
       my $seed=$ENV{'course.'.$ENV{'request.course.id'}.'.internal.encseed'};
       $seed=~s/[^0-9a-f]/0/g;
       $seed.='0123456789abcdef';
       $seed=substr($seed.$seed,0,32);
       return pack("H32",$seed);
   }
   
 sub unencrypted {  sub unencrypted {
     my $uri=shift;      my $uri=shift;
     $uri=~s/^\/enc\/(\d+)\///;      $uri=~s/^\/enc\/(\d+)\///;
     &Apache::lonnet::logthis($uri);  
     my $cmdlength=$1;      my $cmdlength=$1;
     unless ($ENV{'course.'.$ENV{'request.course.id'}.'.internal.encseed'}) {      my $seed=&encryptseed();
       unless ($seed) {
  return '/'.$uri;   return '/'.$uri;
     }      }
     $uri=&Apache::lonnet::unescape($uri);      $uri=&Apache::lonnet::unescape($uri);
     my $cipher=      my $cipher=new IDEA $seed;
  new IDEA $ENV{'course.'.$ENV{'request.course.id'}.'.internal.encseed'};  
     &Apache::lonnet::logthis($ENV{'course.'.$ENV{'request.course.id'}.'.internal.encseed'});  
     my $decuri='';      my $decuri='';
     for (my $encidx=0;$encidx<length($uri);$encidx+=16) {      for (my $encidx=0;$encidx<length($uri);$encidx+=16) {
  $decuri.=$cipher->decrypt(   $decuri.=$cipher->decrypt(
   pack("H16",substr($uri,$encidx,16))    pack("H16",substr($uri,$encidx,16))
   );    );
     }      }
       $ENV{'request.enc'}=1;
     return substr($decuri,0,$cmdlength);      return substr($decuri,0,$cmdlength);
 }  }
   
 sub encrypted {  sub encrypted {
     my $uri=shift;      my $uri=shift;
       if ($ENV{'request.role.adv'}) { return($uri); }
       my $seed=&encryptseed();
       unless ($seed) {
    return $uri;
       }
     my $cmdlength=length($uri);      my $cmdlength=length($uri);
       $uri.='00000000';
     my $encuri='';      my $encuri='';
     my $cipher=      my $cipher=new IDEA $seed;
  new IDEA $ENV{'course.'.$ENV{'request.course.id'}.'.internal.encseed'};  
     for (my $encidx=0;$encidx<=$cmdlength;$encidx+=8) {      for (my $encidx=0;$encidx<=$cmdlength;$encidx+=8) {
  $encuri.=unpack("H16",   $encuri.=unpack("H16",
  $cipher->encrypt(substr($uri,$encidx,8)));   $cipher->encrypt(substr($uri,$encidx,8)));
Line 89  sub encrypted { Line 104  sub encrypted {
     return '/enc/'.$cmdlength.'/'.&Apache::lonnet::escape($encuri);      return '/enc/'.$cmdlength.'/'.&Apache::lonnet::escape($encuri);
 }  }
   
   sub check_encrypt {
       my $str=shift;
       if ($ENV{'request.enc'}) { return &Apache::lonenc::encrypted($str); }
       return $str;
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.1  
changed lines
  Added in v.1.5


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