1: # The LearningOnline Network
2: # Login Screen
3: #
4: # $Id: lonlogin.pm,v 1.1 2012/02/07 14:49:47 raeburn Exp $
5: #
6: # Copyright Michigan State University Board of Trustees
7: #
8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
9: #
10: # LON-CAPA is free software; you can redistribute it and/or modify
11: # it under the terms of the GNU General Public License as published by
12: # the Free Software Foundation; either version 2 of the License, or
13: # (at your option) any later version.
14: #
15: # LON-CAPA is distributed in the hope that it will be useful,
16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: # GNU General Public License for more details.
19: #
20: # You should have received a copy of the GNU General Public License
21: # along with LON-CAPA; if not, write to the Free Software
22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23: #
24: # /home/httpd/html/adm/gpl.txt
25: #
26: # http://www.lon-capa.org/
27: #
28:
29: package Apache::lonlogin;
30:
31: use strict;
32: use Apache::Constants qw(:common);
33: use Apache::File ();
34: use Apache::lonnet;
35: use Apache::loncommon();
36: use Apache::lonauth();
37: use Apache::lonlocal;
38: use Apache::migrateuser();
39: use lib '/home/httpd/lib/perl/';
40: use LONCAPA;
41: use HTML::Entities();
42:
43: sub handler {
44: my $r = shift;
45:
46: &Apache::loncommon::get_unprocessed_cgi
47: (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'},
48: $ENV{'REDIRECT_QUERY_STRING'}),
49: ['username','domain','firsturl','localpath','localres',
50: 'token','role','symb']);
51: if (!defined($env{'form.firsturl'})) {
52: &Apache::lonacc::get_posted_cgi($r,['firsturl']);
53: }
54: $env{'form.firsturl'} =~ s/(`)/'/g;
55:
56: # -- check if they are a migrating user
57: if (defined($env{'form.token'})) {
58: return &Apache::migrateuser::handler($r);
59: }
60:
61: &Apache::loncommon::no_cache($r);
62: &Apache::lonlocal::get_language_handle($r);
63: &Apache::loncommon::content_type($r,'text/html');
64: $r->send_http_header;
65: return OK if $r->header_only;
66:
67: # --------------------------------------------------------- Are we re-routing?
68: my $londocroot = $r->dir_config('lonDocRoot');
69: if (-e "$londocroot/lon-status/reroute.txt") {
70: &Apache::lonauth::reroute($r);
71: return OK;
72: }
73:
74: # -------------------------------- Prevent users from attempting to login twice
75: my $handle = &Apache::lonnet::check_for_valid_session($r);
76: if ($handle ne '') {
77: my $lonidsdir=$r->dir_config('lonIDsDir');
78: if ($handle=~/^publicuser\_/) {
79: # For "public user" - remove it, we apparently really want to login
80: unlink("$lonidsdir/$handle.id");
81: } else {
82: # Indeed, a valid token is found
83: &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
84: my $start_page =
85: &Apache::loncommon::start_page('Already logged in');
86: my $end_page =
87: &Apache::loncommon::end_page();
88: my $dest = '/adm/roles';
89: if ($env{'form.role'}) {
90: $dest .= '?selectrole=1&'.$env{'form.role'}.'=1';
91: }
92: if ($env{'form.symb'}) {
93: $dest .= ($dest =~ /\?/) ? '&' : '?';
94: $dest .= 'destinationurl='.
95: &HTML::Entities::encode($env{'form.symb'},'"&<>');
96: }
97: if ($env{'form.firsturl'} ne '') {
98: $dest = $env{'form.firsturl'};
99: }
100: $r->print(
101: $start_page.
102: '<h1>'.&mt('You are already logged in!').'</h1>'.
103: '<p>'.
104: &mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].',
105: '<a href="'.$dest.'">','</a>',
106: '<a href="/adm/logout">','</a>').
107: '</p>'.
108: $end_page
109: );
110: return OK;
111: }
112: }
113:
114: # ---------------------------------------------------- No valid token, continue
115:
116: # ---------------------------- Not possible to really login to domain "public"
117: if ($env{'form.domain'} eq 'public') {
118: $env{'form.domain'}='';
119: $env{'form.username'}='';
120: }
121: # ----------------------------------------------------------- Process Interface
122: my $httpbrowser=$ENV{"HTTP_USER_AGENT"};
123:
124: my $iconpath=
125: &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
126:
127: # ----------------------------------------------------------------
128:
129: my $lonhost = $r->dir_config('lonHostID');
130: my $domain = &Apache::lonnet::default_login_domain();
131: if ($lonhost ne '') {
132: my $redirect = &check_loginvia($domain,$lonhost);
133: if ($redirect) {
134: $r->print($redirect);
135: return OK;
136: }
137: }
138:
139: if (($env{'form.domain'}) &&
140: (&Apache::lonnet::domain($env{'form.domain'},'description'))) {
141: $domain=$env{'form.domain'};
142: }
143:
144: my $role = $r->dir_config('lonRole');
145: my $loadlim = $r->dir_config('lonLoadLim');
146: my $uloadlim= $r->dir_config('lonUserLoadLim');
147: my $servadm = $r->dir_config('lonAdmEMail');
148: my $tabdir = $r->dir_config('lonTabDir');
149: my $include = $r->dir_config('lonIncludes');
150: my $expire = $r->dir_config('lonExpire');
151: my $version = $r->dir_config('lonVersion');
152: my $host_name = &Apache::lonnet::hostname($lonhost);
153:
154: # --------------------------------------------- Default values for login fields
155:
156: my $authusername=($env{'form.username'}?$env{'form.username'}:'');
157: my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain);
158:
159: # ---------------------------------------------------------- Determine own load
160: my $loadavg;
161: {
162: my $loadfile=Apache::File->new('/proc/loadavg');
163: $loadavg=<$loadfile>;
164: }
165: $loadavg =~ s/\s.*//g;
166:
167: my ($loadpercent,$userloadpercent);
168: if ($loadlim) {
169: $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim);
170: }
171: if ($uloadlim) {
172: $userloadpercent=&Apache::lonnet::userload();
173: }
174:
175: my $firsturl=
176: ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'});
177:
178: # ----------------------------------------------------------- Get announcements
179: my $announcements=&Apache::lonnet::getannounce();
180: # -------------------------------------------------------- Set login parameters
181:
182: my @hexstr=('0','1','2','3','4','5','6','7',
183: '8','9','a','b','c','d','e','f');
184: my $lkey='';
185: for (0..7) {
186: $lkey.=$hexstr[rand(15)];
187: }
188:
189: my $ukey='';
190: for (0..7) {
191: $ukey.=$hexstr[rand(15)];
192: }
193:
194: my $lextkey=hex($lkey);
195: if ($lextkey>2147483647) { $lextkey-=4294967296; }
196:
197: my $uextkey=hex($ukey);
198: if ($uextkey>2147483647) { $uextkey-=4294967296; }
199:
200: # -------------------------------------------------------- Store away log token
201: my $tokenextras;
202: if ($env{'form.role'}) {
203: $tokenextras = '&role='.&escape($env{'form.role'});
204: }
205: if ($env{'form.symb'}) {
206: if (!$tokenextras) {
207: $tokenextras = '&';
208: }
209: $tokenextras .= '&symb='.&escape($env{'form.symb'});
210: }
211: my $logtoken=Apache::lonnet::reply(
212: 'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras,
213: $lonhost);
214:
215: # -- If we cannot talk to ourselves, or hostID does not map to a hostname
216: # we are in serious trouble
217:
218: if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) {
219: if ($logtoken eq 'no_such_host') {
220: &Apache::lonnet::logthis('No valid logtoken for log-in page -- '.
221: 'unable to determine hostname for hostID: '.$lonhost.
222: '. Check entry in hosts.tab');
223: }
224: my $spares='';
225: my $last;
226: foreach my $hostid (sort
227: {
228: &Apache::lonnet::hostname($a) cmp
229: &Apache::lonnet::hostname($b);
230: }
231: keys(%Apache::lonnet::spareid)) {
232: next if ($hostid eq $lonhost);
233: my $hostname = &Apache::lonnet::hostname($hostid);
234: next if (($last eq $hostname) || ($hostname eq ''));
235: $spares.='<br /><span style="font-size: larger;"><a href="http://'.
236: $hostname.
237: '/adm/login?domain='.$authdomain.'">'.
238: $hostname.'</a>'.
239: ' '.&mt('(preferred)').'</span>'.$/;
240: $last=$hostname;
241: }
242: if ($spares) {
243: $spares.= '<br />';
244: }
245: my %all_hostnames = &Apache::lonnet::all_hostnames();
246: foreach my $hostid (sort
247: {
248: &Apache::lonnet::hostname($a) cmp
249: &Apache::lonnet::hostname($b);
250: }
251: keys(%all_hostnames)) {
252: next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid});
253: my $hostname = &Apache::lonnet::hostname($hostid);
254: next if (($last eq $hostname) || ($hostname eq ''));
255: $spares.='<br /><a href="http://'.
256: $hostname.
257: '/adm/login?domain='.$authdomain.'">'.
258: $hostname.'</a>';
259: $last=$hostname;
260: }
261: $r->print(
262: '<html>'
263: .'<head><title>'
264: .&mt('The LearningOnline Network with CAPA')
265: .'</title></head>'
266: .'<body bgcolor="#FFFFFF">'
267: .'<h1>'.&mt('The LearningOnline Network with CAPA').'</h1>'
268: .'<img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />'
269: .'<h3>'.&mt("This Learn Physics server is temporarily not available for login.").'</h3>'
270: .'</body>'
271: .'</html>'
272: );
273: return OK;
274: }
275:
276: # ----------------------------------------------- Apparently we are in business
277: $servadm=~s/\,/\<br \/\>/g;
278:
279: # ----------------------------------------------------------------------- Texts
280: my $pagetitle = 'Learn Physics Login'; # Do not localize.
281: my %lt=&Apache::lonlocal::texthash(
282: 'needu' => 'You must provide a username',
283: 'needp' => 'You must provide a password',
284: 'un' => 'Username',
285: 'pw' => 'Password',
286: 'dom' => 'Domain',
287: 'perc' => 'percent',
288: 'load' => 'Server Load',
289: 'userload' => 'User Load',
290: 'catalog' => 'Course/Community Catalog',
291: 'log' => 'Log-in',
292: 'help' => 'Log-in Help',
293: 'serv' => 'Server',
294: 'servadm' => 'Server Administration',
295: 'helpdesk' => 'Contact Helpdesk',
296: 'forgotpw' => 'Forgot your password?',
297: 'newuser' => 'New User?',
298: 'learn' => 'Learn Physics includes an online physics course, to which you may receive admission after successfully completing a pre-course test.',
299: 'click' => 'Click here to sign up',
300: 'plea' => 'Please log-in',
301: 'supp' => 'Support from NSF, NIH, Google',
302: 'note' => 'Please Note:',
303: 'jscr' => 'Javascript must be enabled in your web browser in order to use this web site.',
304: );
305: # ----------------------------------------------------------- Front page design
306: my $font=&Apache::loncommon::designparm('login.font',$domain);
307: my $link=&Apache::loncommon::designparm('login.link',$domain);
308: my $vlink=&Apache::loncommon::designparm('login.vlink',$domain);
309: my $alink=&Apache::loncommon::designparm('login.alink',$domain);
310: my $mainbg=&Apache::loncommon::designparm('login.mainbg',$domain);
311: my $showadminmail=&Apache::loncommon::designparm('login.adminmail',$domain);
312:
313: my $helpdeskscript;
314: my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,
315: $authdomain,\$helpdeskscript);
316:
317: # -------------------------------------------------- Change password field name
318: my $now=time;
319:
320: # ---------------------------------------- Assemble Javascript to put in <head>
321:
322: my $js = (<<ENDSCRIPT);
323:
324: <script type="text/javascript" language="JavaScript">
325: // <![CDATA[
326:
327: function send(caller) {
328: if (caller == "newaccount") {
329: this.document.signup.submit();
330: return false;
331: }
332: if (document.client.uname.value == "" || !document.client.uname.value) {
333: alert("$lt{'needu'}");
334: return false;
335: }
336: if (document.client.upass$now.value == "" ||
337: !document.client.upass$now.value) {
338: alert("$lt{'needp'}");
339: return false;
340: }
341:
342: this.document.server.elements.uname.value
343: =this.document.client.elements.uname.value;
344:
345: this.document.server.elements.udom.value
346: =this.document.client.elements.udom.value;
347:
348: uextkey=this.document.client.elements.uextkey.value;
349: lextkey=this.document.client.elements.lextkey.value;
350: initkeys();
351:
352: this.document.server.elements.upass0.value
353: =crypted(this.document.client.elements.upass$now.value.substr(0,15));
354: this.document.server.elements.upass1.value
355: =crypted(this.document.client.elements.upass$now.value.substr(15,15));
356: this.document.server.elements.upass2.value
357: =crypted(this.document.client.elements.upass$now.value.substr(30,15));
358:
359: this.document.client.elements.uname.value='';
360: this.document.client.elements.upass$now.value='';
361:
362: this.document.server.submit();
363: return false;
364: }
365:
366: function enableInput() {
367: this.document.client.elements.upass$now.removeAttribute("readOnly");
368: this.document.client.elements.uname.removeAttribute("readOnly");
369: this.document.client.elements.udom.removeAttribute("readOnly");
370: return;
371: }
372:
373: // ]]>
374: </script>
375:
376: $helpdeskscript
377:
378: ENDSCRIPT
379:
380: # --------------------------------------------------- Print login screen header
381: my %add_entries = (
382: bgcolor => "$mainbg",
383: text => "$font",
384: link => "$link",
385: vlink => "$vlink",
386: alink => "$alink",
387: onload => 'javascript:enableInput();',);
388:
389: my $css_url = "/css/$domain/login.css";
390: $js .= "\n".'<link type="text/css" rel="stylesheet" href="'.$css_url.'">'."\n";
391: $r->print(&Apache::loncommon::start_page($pagetitle,$js,
392: {'redirect' => [$expire,'/adm/roles'],
393: 'add_entries' => \%add_entries,
394: 'only_body' => 1,}));
395:
396: # ------------------------------------------------------------ Additional Texts
397: $lt{'newto'} = &mt('New to the [_1]Learn Physics[_2] site?','<i>','</i>');
398: $lt{'runson'} = &mt('Learn Physics runs on [_1]LON-CAPA[_2] - an open source freeware distributed learning content management and assessment system.',
399: '<a href="http://loncapa.org/">','</a>');
400: $lt{'newhere'} = &mt('New to [_1]Learn Physics[_2]:','<i>','</i>');
401: $lt{'exist'} = &mt('Existing [_1]Learn Physics[_2] user','<i>','</i>');
402: $lt{'browser'} = &mt('Your browser must allow [_1]cookies[_2]',
403: '<a href="http://loncapa.msu.edu/cookies.html" style="color: #ffffff">','</a>');
404:
405: # -------------------------------------------- Static cid for prerequisite test
406: $prereqcid = 'relate_9615072b469884921relatel1';
407:
408: # ---------------------------------------------------- Warning if no Javascript
409: my $noscript_warning = '<noscript><span class="LC_warning">'.
410: '<b>'.$lt{'note'}.'</b>'.$lt{'jscr'}.'
411: '</span></noscript>';
412:
413: # ---------------------------------------------------- Serve out DES JavaScript
414: {
415: my $jsh=Apache::File->new($include."/londes.js");
416: $r->print(<$jsh>);
417: }
418: # ---------------------------------------------------------- Serve rest of page
419:
420: $r->print(<<"ENDLOGIN");
421: <br />
422: <div align="center">
423: <table class="LC_loginbox">
424: <tr>
425: <td align="left" valign="top" width="11">
426: <img src="/images/login/tlc_11_ffffff_e2e2e2.gif" width="10" height="10" border="0" alt="">
427: </td>
428: <td width="450" valign="top">
429: <table class="LC_loginbox_left">
430: <tr>
431: <td width="411" align="left"><br />
432: <img src="/images/login/LCrelateheader_sm.png" width="411" height="100" alt="Relate @ MIT" align="left"></td>
433: </tr>
434: <tr>
435: <td>
436: <div align="left" style="display:block; margin-top:5px; margin-bottom:5px; margin-left:0px; margin-right:0px; width:440px; height:5px;">
437: <div class="divider">
438: </div>
439: </div>
440: </td>
441: </tr>
442: </table>
443: <table class="LC_loginbox_left">
444: <tr>
445: <td width="10"> </td>
446: <td valign="top" class="bodyred" width="430" align="left"><br />
447: <span style="font-size: 18px; line-height: 22px; ">$lt{'newt'}</span>
448: <br />
449: <span class="bodyred">$lt{'learn'}<br /><br />$lt{'runson'}
450: <br /><br />
451: <form name="signup" method="post" action="/adm/createaccount?courseid=$prereqcid"><input type="hidden" name="process" value="signup"/>
452: <table class="LC_signup">
453: <tr>
454: <td align="left" valign="top" width="11" height="11"><img src="/images/login/tlc_11_993333_ffffff.gif" width="10" height="10" border="0" alt=""></td>
455: <td> </td>
456: <td align="right" valign="top" width="11" height="11"><img src="/images/login/tr_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
457: </tr>
458: <tr>
459: <td> </td>
460: <td align="center" valign="middle"><span style="white-space: nowrap;"><b>$lt{'newhere'}</b>: <a href="javascript:send('newaccount')" style="color: #ffffff">$lt{'click'}</a></span></td>
461: <td> </td>
462: </tr>
463: <tr>
464: <td align="left" valign="bottom" width="11" height="11"><img src="/images/login/bl_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
465:
466: <td> </td>
467: <td align="right" valign="bottom" width="11" height="11"><img src="/images/login/br_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
468: </tr>
469: </table>
470: </form>
471: </td>
472: </tr>
473: </table>
474: </td>
475: <td width="10"> </td>
476: <td valign="top">
477: <form name="client" method="post" onsubmit="return(send());">
478: <table class="LC_loginbox_right">
479: <tr>
480: <td colspan="3" height="23" class="LC_loginbox_strip"> </td>
481: i </tr>
482: <tr>
483: <td align="left" valign="top" width="11" height="11"><img src="/images/login/tlc_11_993333_ffffff.gif" width="10" height="10" border="0" alt=""></td>
484: <td> </td>
485: <td align="right" valign="top" width="11" height="11"><img src="/images/login/tr_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
486: </tr>
487: <tr>
488: <td width="10"> </td>
489: <td>
490: <table border="0" cellspacing="0" cellpadding="0">
491: <tr>
492: <td align="right" class="bodywhite" heighta"=50"><br>
493: <span style="font-size: 15px; line-height: 17px; font-weight: bold;">
494: $lt{'exist'}</span>
495: <br />$lt{'plea'}<br />
496: <hr class="login"><br /><br />
497: </td>
498: </tr>
499: <tr>
500: <td>
501: <table border="0" cellpadding="2" cellspacing="0">
502: <tr>
503: <td align="right" class="bodywhite"><label for="uname">$lt{'un'}</label>:</td>
504: <td align="right"><input type="text" name="uname" size="17" value="" /></td>
505: </tr>
506: <tr>
507: <td align="right" class="bodywhite"><label for="upass$now">$lt{'pw'}</label>:</td>
508: <td align="right"><input name="upass$now" size="17" value="" type="password"><input type="hidden" name="udom" value="relate" /></td>
509: </tr>
510: <tr><td> </td></tr>
511: <tr>
512: <tr>
513: <td colspan="2" align="right"><input name="signin" type="submit" value="$lt{'log'}" class="buttonwhite" /></td>
514: </tr>
515: </table>
516: </td>
517: </tr>
518: <tr>
519: <td align="right" valign="top" class="bodywhite">
520: <br />
521: <br />
522: <span style="font-size: smaller;">$lt{'browser'}</span><br />
523: <hr class="login" />
524: <br />
525: <a href="/adm/resetpw" style="color: #ffffff">$lt{forgotpw'}</a><br>
526: <br />
527: </td>
528: </tr>
529: </table>
530: </td>
531: <td width="9"> </td>
532: </tr>
533: <tr>
534: <td align="left" valign="bottom" width="11" height="11"><img src="/images/login/bl_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
535: <td> </td>
536:
537: <td align="right" valign="bottom" width="11" height="11"><img src="/images/login/br_11_993333_ffffff.gif" width="11" height="11" border="0" alt=""></td>
538: </tr>
539: <tr>
540: <td colspan="3" height="10" class="LC_loginbox_strip"> $contactblock</td>
541: </tr>
542: </table>
543: </td>
544: <td align="right" valign="top" width="11"><img src="/images/login/tr_11_ffffff_e2e2e2.gif" width="11" height="11" border="0" alt=""></td>
545: </tr>
546: <tr>
547: <td colspan="4">
548: <div align="right">
549: <img src="/images/login/sponsors.png" alt="$lt{'supp'}" align="right" />
550: </div>
551: </td>
552: </tr>
553: <tr>
554: <td align="left" valign="bottom" width="11"><img src="/images/login/bl_11_ffffff_e2e2e2.gif" width="11" height="11" border="0" alt=""></td>
555: <td colspan="3" width="698"> </td>
556: <td align="right" valign="bottom" width="11"><img src="/images/login/br_11_ffffff_e2e2e2.gif" width="11" height="11" border="0" alt=""></td>
557: </tr>
558: </table>
559: </div>
560: <p> </p>
561: $noscript_warning
562: <input type="hidden" name="lextkey" value="$lextkey" />
563: <input type="hidden" name="uextkey" value="$uextkey" />
564: </form>
565: <form name="server" action="/adm/authenticate" method="post" target="_top">
566: <input type="hidden" name="logtoken" value="$logtoken" />
567: <input type="hidden" name="serverid" value="$lonhost" />
568: <input type="hidden" name="uname" value="" />
569: <input type="hidden" name="upass0" value="" />
570: <input type="hidden" name="upass1" value="" />
571: <input type="hidden" name="upass2" value="" />
572: <input type="hidden" name="udom" value="" />
573: <input type="hidden" name="localpath" value="$env{'form.localpath'}" />
574: <input type="hidden" name="localres" value="$env{'form.localres'}" />
575: </form>
576:
577: <script type="text/javascript">
578: // <![CDATA[
579: // the if prevents the script error if the browser can not handle this
580: if ( document.client.uname ) { document.client.uname.focus(); }
581: // ]]>
582: </script>
583:
584: ENDLOGIN
585:
586: # -------------------------------------------------------- Standard page ending
587: my %endargs = ( 'noredirectlink' => 1, );
588: $r->print(&Apache::loncommon::end_page(\%endargs));
589: return OK;
590: }
591:
592: sub check_loginvia {
593: my ($domain,$lonhost) = @_;
594: if ($domain eq '' || $lonhost eq '') {
595: return;
596: }
597: my %domconfhash = &Apache::loncommon::get_domainconf($domain);
598: my $loginvia = $domconfhash{$domain.'.login.loginvia_'.$lonhost};
599: my $loginvia_exempt = $domconfhash{$domain.'.login.loginvia_exempt_'.$lonhost};
600: my $output;
601: if ($loginvia ne '') {
602: my $noredirect;
603: my $ip = $ENV{'REMOTE_ADDR'};
604: if ($ip eq '127.0.0.1') {
605: $noredirect = 1;
606: } else {
607: if ($loginvia_exempt ne '') {
608: my @exempt = split(',',$loginvia_exempt);
609: if (grep(/^\Q$ip\E$/,@exempt)) {
610: $noredirect = 1;
611: }
612: }
613: }
614: unless ($noredirect) {
615: my ($newhost,$path);
616: if ($loginvia =~ /:/) {
617: ($newhost,$path) = split(':',$loginvia);
618: } else {
619: $newhost = $loginvia;
620: }
621: if ($newhost ne $lonhost) {
622: if (&Apache::lonnet::hostname($newhost) ne '') {
623: $output = &redirect_page($newhost,$path);
624: }
625: }
626: }
627: }
628: return $output;
629: }
630:
631: sub redirect_page {
632: my ($desthost,$path) = @_;
633: my $protocol = $Apache::lonnet::protocol{$desthost};
634: $protocol = 'http' if ($protocol ne 'https');
635: unless ($path =~ m{^/}) {
636: $path = '/'.$path;
637: }
638: my $url = $protocol.'://'.&Apache::lonnet::hostname($desthost).$path;
639: if ($env{'form.firsturl'} ne '') {
640: $url .='?firsturl='.$env{'form.firsturl'};
641: }
642: my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,
643: {'redirect' => [0,$url],});
644: my $end_page = &Apache::loncommon::end_page();
645: return $start_page.$end_page;
646: }
647:
648: sub contactdisplay {
649: my ($lt,$servadm,$showadminmail,$authdomain,$helpdeskscript) = @_;
650: return unless(ref($lt) eq 'HASH');
651: my $contactblock;
652: my $showhelpdesk = 0;
653: my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
654: if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) {
655: $showhelpdesk = 1;
656: }
657: if ($servadm && $showadminmail) {
658: $contactblock .= $lt->{'servadm'}.':<br />'.
659: '<tt>'.$servadm.'</tt><br />';
660: }
661: if ($showhelpdesk) {
662: $contactblock .= '<a href="javascript:helpdesk()">'.$lt->{'helpdesk'}.'</a><br />';
663: my $thisurl = &escape('/adm/login');
664: $$helpdeskscript = <<"ENDSCRIPT";
665: <script type="text/javascript">
666: // <![CDATA[
667: function helpdesk() {
668: var codedom = document.client.udom.value;
669: if (codedom == '') {
670: codedom = "$authdomain";
671: }
672: var querystr = "origurl=$thisurl&codedom="+codedom;
673: document.location.href = "/adm/helpdesk?"+querystr;
674: return;
675: }
676: // ]]>
677: </script>
678: ENDSCRIPT
679: }
680: return $contactblock;
681: }
682:
683: 1;
684: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>