--- loncom/interface/lonpreferences.pm 2022/09/19 19:49:26 1.196.4.28.2.1 +++ loncom/interface/lonpreferences.pm 2012/12/18 14:25:59 1.201 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.196.4.28.2.1 2022/09/19 19:49:26 raeburn Exp $ +# $Id: lonpreferences.pm,v 1.201 2012/12/18 14:25:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,19 +27,67 @@ # # This package uses the "londes.js" javascript code. # +# TODOs that have to be completed: +# interface with lonnet to change the password package Apache::lonpreferences; use strict; +use LONCAPA; use Apache::Constants qw(:common); use Apache::File; +use Crypt::DES; +use DynaLoader; # for Crypt::DES version use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonnet; use LONCAPA::lonauthcgi(); use LONCAPA(); -use DateTime::TimeZone(); + +# +# Write lonnet::passwd to do the call below. +# Use: +# my $answer=reply("encrypt:passwd:$udom:$uname:$upass",$tryserver); +# +################################################## +# password associated functions # +################################################## +sub des_keys { + # Make a new key for DES encryption. + # Each key has two parts which are returned separately. + # Please note: Each key must be passed through the &hex function + # before it is output to the web browser. The hex versions cannot + # be used to decrypt. + my @hexstr=('0','1','2','3','4','5','6','7', + '8','9','a','b','c','d','e','f'); + my $lkey=''; + for (0..7) { + $lkey.=$hexstr[rand(15)]; + } + my $ukey=''; + for (0..7) { + $ukey.=$hexstr[rand(15)]; + } + return ($lkey,$ukey); +} + +sub des_decrypt { + my ($key,$cyphertext) = @_; + my $keybin=pack("H16",$key); + my $cypher; + if ($Crypt::DES::VERSION>=2.03) { + $cypher=new Crypt::DES $keybin; + } else { + $cypher=new DES $keybin; + } + my $plaintext= + $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,0,16)))); + $plaintext.= + $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,16,16)))); + $plaintext=substr($plaintext,1,ord(substr($plaintext,0,1)) ); + return $plaintext; +} ################################################################ # Handler subroutines # @@ -104,16 +152,32 @@ sub languagechanger { text => 'Change Language'}); $r->print(Apache::loncommon::start_page('Content Display Settings')); $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); - my %userenv = &Apache::lonnet::get('environment',['languages']); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['languages']); my $language=$userenv{'languages'}; - $r->print( - '
' - ); + my $pref=&mt('Preferred language'); + my %langchoices=('' => 'No language preference'); + foreach (&Apache::loncommon::languageids()) { + if (&Apache::loncommon::supportedlanguagecode($_)) { + $langchoices{&Apache::loncommon::supportedlanguagecode($_)} + = &Apache::loncommon::plainlanguagedescription($_); + } + } + %langchoices = &Apache::lonlocal::texthash(%langchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $language, + 'language', + \%langchoices); + $r->print(<' + .'