# The LearningOnline Network # Create a user # # (Create a course # (My Desk # # (Internal Server Error Handler # # (Login Screen # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) # # 3/1/1 Gerd Kortemeyer) # # 3/1 Gerd Kortemeyer) # # 2/14 Gerd Kortemeyer) # # 2/14,2/17,2/19,2/20,2/21,2/22,2/23,3/2,3/17 Gerd Kortemeyer # package Apache::loncreateuser; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet; # =================================================================== Phase one sub phase_one { my $r=shift; my $defdom=$ENV{'user.domain'}; $r->print(< The LearningOnline Network with CAPA

Create User, Change User Privileges

Username:
Domain:

ENDDOCUMENT } # =================================================================== Phase two sub phase_two { my $r=shift; my $ccuname=$ENV{'form.ccuname'}; my $ccdomain=$ENV{'form.ccdomain'}; $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/; my $krbdefdom=$1; $krbdefdom=~tr/a-z/A-Z/; my $defdom=$ENV{'user.domain'}; $ccuname=~s/\W//g; $ccdomain=~s/\W//g; $r->print(< The LearningOnline Network with CAPA

Create User, Change User Privileges

ENDENHEAD my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain); my %incdomains; my %inccourses; $incdomains{$ENV{'user.domain'}}=1; map { if ($_=~/^user\.priv\.cm\.\/(\w+)\/(\w+)/) { $inccourses{$1.'_'.$2}=1; } } %ENV; if ($uhome eq 'no_host') { $r->print(<New user $ccuname at $ccdomain

Personal Data

First Name:
Middle Name:
Last Name:
Generation:

ID/Student Number:

Login Data

Kerberos authenticated with domain

Internally authenticated (with initial password ) ENDNUSER } else { $r->print('

Existing user '.$ccuname.' at '.$ccdomain.'

'); my $rolesdump=&Apache::lonnet::reply( "dump:$ccdomain:$ccuname:roles",$uhome); unless ($rolesdump eq 'con_lost') { my $now=time; $r->print('

Revoke Existing Roles

'. ''. ''); map { if ($_!~/^rolesdef\&/) { my ($area,$role)=split(/=/,$_); my $thisrole=$area; $area=~s/\_\w\w$//; my ($trole,$tend,$tstart)=split(/_/,$role); my $bgcol='ffffff'; my $allows=0; if ($area=~/^\/(\w+)\/(\d\w+)/) { my %coursedata=&Apache::lonnet::coursedescription($1.'_'.$2); my $carea='Course: '.$coursedata{'description'}; $inccourses{$1.'_'.$2}=1; if (&Apache::lonnet::allowed('c'.$trole,$1.'/'.$2)) { $allows=1; } $bgcol=$1.'_'.$2; $bgcol=~s/[^8-9b-e]//g; $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',0,6); if ($area=~/^\/(\w+)\/(\d\w+)\/(\w+)/) { $carea.='
Section/Group: '.$3; } $area=$carea; } else { if ($area=~/^\/(\w+)\//) { $incdomains{$1}=1; if (&Apache::lonnet::allowed('c'.$trole,$1)) { $allows=1; } } else { if (&Apache::lonnet::allowed('c'.$trole,'/')) { $allows=1; } } } my $active=1; if (($tend) && ($now>$tend)) { $active=0; } $r->print('\n"); } } split(/&/,$rolesdump); $r->print('
RevokeRoleExtentStartEnd
'); if ($active) { if ($allows) { $r->print( ''); } else { $r->print(' '); } } else { $r->print(' '); } $r->print(''.&Apache::lonnet::plaintext($trole). ''.$area.''. ($tstart?localtime($tstart):' ').''. ($tend?localtime($tend):' ')."
'); } } $r->print('

Add Roles

System Level

'); # # Domain level # $r->print('

Domain Level

'. ''. ''); map { my $thisdomain=$_; map { if (&Apache::lonnet::allowed('c'.$_,$thisdomain)) { my $plrole=&Apache::lonnet::plaintext($_); $r->print(< ENDDROW } } ('dc','cc','li','dg','au'); } sort keys %incdomains; $r->print('
ActivateRoleExtentStartEnd
$plrole $thisdomain Set Start Date Set End Date
'); # # Course level # $r->print('

Course Level

'. ''. ''); map { my $thiscourse=$_; my %coursedata=&Apache::lonnet::coursedescription($thiscourse); my $area=$coursedata{'description'}; my $bgcol=$thiscourse; $bgcol=~s/[^8-9b-e]//g; $bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',0,6); map { if (&Apache::lonnet::allowed('c'.$_,$thiscourse)) { my $plrole=&Apache::lonnet::plaintext($_); $r->print(< ENDROW } } ('st','ta','ep','ad','in'); } sort keys %inccourses; $r->print('
ActivateRoleExtentGroup/SectionStartEnd
$plrole $area Set Start Date Set End Date
'); $r->print(''); $r->print(''); } # ================================================================= Phase Three sub phase_three { my $r=shift; $r->print(< The LearningOnline Network with CAPA

Create User, Change User Privileges

ENDTHREEHEAD $r->print('

'.$ENV{'form.cuname'}.' at '.$ENV{'form.cdomain'}.'

'); if ($ENV{'form.makeuser'}) { $r->print('

Creating User

'); if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&& ($ENV{'form.cdomain'})&&($ENV{'form.cdomain'}!~/\W/)) { my $amode=''; my $genpwd=''; if ($ENV{'form.login'} eq 'krb') { $amode='krb4'; $genpwd=$ENV{'form.krbdom'}; } elsif ($ENV{'form.login'} eq 'int') { $amode='internal'; $genpwd=$ENV{'form.intpwd'}; } if (($amode) && ($genpwd)) { $r->print('Generating user: '.&Apache::lonnet::modifyuser( $ENV{'form.cdomain'},$ENV{'form.cuname'}, $ENV{'form.cstid'},$amode,$genpwd, $ENV{'form.cfirst'},$ENV{'form.cmiddle'}, $ENV{'form.clast'},$ENV{'form.cgen'})); $r->print('
Home server: '.&Apache::lonnet::homeserver ($ENV{'form.cuname'},$ENV{'form.cdomain'})); } else { $r->print('Invalid login mode or password'); } } else { $r->print('Invalid username or domain'); } } my $now=time; $r->print('

Modifying Roles

'); map { if (($_=~/^form\.rev\:([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) { $r->print('Revoking '.$2.' in '.$1.': '. &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'}, $1,$2,$now).'
'); } } keys %ENV; map { if (($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) { my $url='/'.$1.'/'.$2; if ($ENV{'form.sec_'.$1.'_'.$2.'_'.$3}) { $url.='/'.$ENV{'form.sec_'.$1.'_'.$2.'_'.$3}; } my $start=$now; if ($ENV{'form.start_'.$1.'_'.$2.'_'.$3}) { $start=$ENV{'form.start_'.$1.'_'.$2.'_'.$3}; } my $end=0; if ($ENV{'form.end_'.$1.'_'.$2.'_'.$3}) { $end=$ENV{'form.end_'.$1.'_'.$2.'_'.$3}; } $r->print('Assigning: '.$3.' in '.$url.': '. &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'}, $url,$3,$end,$start).'
'); } elsif (($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) && ($ENV{$_})) { my $url='/'.$1.'/'; my $start=$now; if ($ENV{'form.start_'.$1.'_'.$2}) { $start=$ENV{'form.start_'.$1.'_'.$2}; } my $end=0; if ($ENV{'form.end_'.$1.'_'.$2}) { $end=$ENV{'form.end_'.$1.'_'.$2}; } $r->print('Assigning: '.$2.' in '.$url.': '. &Apache::lonnet::assignrole($ENV{'form.cdomain'},$ENV{'form.cuname'}, $url,$2,$end,$start).'
'); } } keys %ENV; $r->print(''); } # ================================================================ Main Handler sub handler { my $r = shift; if ($r->header_only) { $r->content_type('text/html'); $r->send_http_header; return OK; } if ((&Apache::lonnet::allowed('cta',$ENV{'request.course.id'})) || (&Apache::lonnet::allowed('cin',$ENV{'request.course.id'})) || (&Apache::lonnet::allowed('ccr',$ENV{'request.course.id'})) || (&Apache::lonnet::allowed('cep',$ENV{'request.course.id'})) || (&Apache::lonnet::allowed('mau',$ENV{'user.domain'}))) { $r->content_type('text/html'); $r->send_http_header; unless ($ENV{'form.phase'}) { &phase_one($r); } if ($ENV{'form.phase'} eq 'two') { &phase_two($r); } elsif ($ENV{'form.phase'} eq 'three') { &phase_three($r); } } else { $ENV{'user.error.msg'}= "/adm/createuser:mau:0:0:Cannot modify user data"; return HTTP_NOT_ACCEPTABLE; } return OK; } 1; __END__