version 1.1, 2004/03/31 04:38:06
|
version 1.7, 2004/11/16 15:26:36
|
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; |
|
} |
|
|
|
sub check_decrypt { |
|
my ($str)=@_; |
|
if (ref($str)) { |
|
if ($$str=~m|^/enc/|) { $$str=&Apache::lonenc::unencrypted($$str); } |
|
return; |
|
} |
|
if ($str=~m|^/enc/|) { return &Apache::lonenc::unencrypted($str); } |
|
return $str; |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|