CGI-AuthRegister
view release on metacpan or search on metacpan
AuthRegister.pm view on Meta::CPAN
# parameters: $n - sequence length; @_ domain elements
sub random_string {
my $n = shift;
return '' if $n < 1;
my @r = map { $_[rand($#_+1)] } (1..$n);
return join('',@r);
}
sub putfile($@) {
my $f = shift; local *F;
if (!open(F, ">$f")) { $Error.="325-ERR:Cannot write ($f):$!\n"; return; }
for (@_) { print F } close(F);
}
sub getfile($) {
my $f = shift; local *F;
if (!open(F, "<$f")) {
$Error.="ERR-1099:getfile:cannot open $f:$!"; return; }
my @r = <F>; close(F);
return wantarray ? @r : join ('', @r);
}
########################################################################
# Section: Simple file locking using mkdir
# Exlusive locking using mkdir
# lock_mkdir($fname); # return 1=success ''=fail
sub lock_mkdir {
my $fname = shift; my $lockd = "$fname.lock"; my $locked;
# First, hopefully most usual case
if (!-e $lockd && ($locked = mkdir($lockd,0700))) { return $locked }
my $tryfor=10; #sec
$locked = ''; # flag
for (my $i=0; $i<2*$tryfor; ++$i) {
select(undef,undef,undef,0.5); # wait for 0.5 sec
!-e $lockd && ($locked = mkdir($lockd,0700));
if ($locked) { return $locked }
}
$Error.="393-ERR:Could not lock file ($fname)\n"; return $locked;
}
# Unlock using mkdir
# unlock_mkdir($fname); # return 1=success ''=fail or no lock
sub unlock_mkdir {
my $fname = shift; my $lockd = "$fname.lock";
if (!-e $lockd) { $Error.="400-ERR:No lock on ($fname)\n"; return '' }
if (-d $lockd) { return rmdir($lockd) }
if (-f $lockd or -l $lockd) { unlink($lockd) }
$Error.="AuthERR-1279:Unknown error"; return '';
}
########################################################################
# Section: Prepackaged HTML and CSS files
sub gen_cas_page {
my $ret;
#<? my $c = getfile('cas-template/cas.html');
# echo "\$ret=<<'EOT';\n${c}EOT"; !>#+
$ret=<<'EOT';
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>CAS - Central Authentication Service</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Description" content="CAS - Central Authentication Service">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="cas-all.css" type="text/css" media="screen">
<link rel="stylesheet" href="cas-mobile.css"
media="handheld, only screen and (max-device-width: 480px)" type="text/css">
<script type="text/javascript" language="javascript">
// <![CDATA[
function searchFocus(){document.getElementById('username').focus();}
// ]]>
</script>
<style type="text/css">
/* <![CDATA[ */
.formInput { float: left; }
/* ]]> */
</style>
</head>
<body onload="searchFocus();">
<div id="pagebox"> <div id="headerBox">
<h1>CAS <span class="hideInMobile">– Central Authentication
</span>Service</h1></div>
<div id="content"><div id="content-left">
<form id="login_form" action="?login" method="post">
<table id="form-layout" cellspacing="0" cellpadding="5" border="0">
<tbody><tr><td width="" valign="top" align="left"> </td>
<td width="" valign="top" align="left">
<h1><!--37-->Login Required
</h1><p class="sans"><!--38-->CAS Authentication
</p></td></tr>
<!--!username--><tr><td width="" valign="top" align="left">
<p class="formLabel">UserID:</p></td>
<td width="" valign="top" align="left">
<input id="username" name="username" class="formInput" tabindex="1"
size="20" autocomplete="off" type="text">
</td></tr>
<!--!password-->
<tr><td width="" valign="top" align="left">
<p class="formLabel">Password:</p></td>
<td width="" valign="top" align="left">
<input id="password" name="password" class="formInput" tabindex="2"
value="" size="20" autocomplete="off" type="password">
</td></tr>
<tr><td width="" valign="top" align="left"> </td>
<td width="" valign="top" align="left">
<!--!hiddenfields-->
<input class="inputButton" value="Login" type="submit"
name="request_type"></td></tr>
<tr class="hideInMobile"><td width="" valign="top" align="left">
</td><td width="" valign="top" align="left">
<h2>Please note</h2><p class="sans"><!--60-->
Before entering your userid and password, verify that the URL
for this page begins with:
<strong>_THIS_URL_</strong></p>
<p class="sans">
To protect your privacy, quit your web browser when you
are done accessing services that require authentication.
</p></td></tr>
<!--/lastrow-->
</tbody></table>
</form></div>
<div id="content-right">
<ul class="plain">
<!--!#forgot <li><a href="?rt=forgotpwd" target="_blank">Forgot your password?</a></li>-->
<!--!# <li class="disabled">CAS Login</li>-->
<!--!#logout <li><a href="?logout">CAS Logout</a></li>-->
<!--!# <li><a href="?help">Help with CAS</a></li>-->
<!--!# <li><span class="hideInMobile">-->
<!--!# <a href="?feeback" target="_blank">Feedback</a></span></li>-->
</ul>
<span class="hideInMobile">
<ul class="plain-serif"><li>
<!--!# <a href="?forgotpwd" target="_blank">Forgot your password?</a></li>-->
<!--!# <li><a href="?changepwd" target="_blank">Changing your password</a></li>-->
</ul>
</span><!--/hideInMobile-->
</div><!--content-right-->
<div style="clear:both;"></div></div></div>
</body></html>
EOT#-
#+
$ret=<<'EOT';
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>CAS - Central Authentication Service</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Description" content="CAS - Central Authentication Service">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="cas-all.css" type="text/css" media="screen">
<link rel="stylesheet" href="cas-mobile.css"
media="handheld, only screen and (max-device-width: 480px)" type="text/css">
<script type="text/javascript" language="javascript">
// <![CDATA[
function searchFocus(){document.getElementById('username').focus();}
// ]]>
</script>
<style type="text/css">
/* <![CDATA[ */
.formInput { float: left; }
/* ]]> */
</style>
</head>
<body onload="searchFocus();">
<div id="pagebox"> <div id="headerBox">
<h1>CAS <span class="hideInMobile">– Central Authentication
</span>Service</h1></div>
<div id="content"><div id="content-left">
<form id="login_form" action="?login" method="post">
<table id="form-layout" cellspacing="0" cellpadding="5" border="0">
<tbody><tr><td width="" valign="top" align="left"> </td>
<td width="" valign="top" align="left">
<h1><!--37-->Login Required
</h1><p class="sans"><!--38-->CAS Authentication
</p></td></tr>
<!--!username--><tr><td width="" valign="top" align="left">
<p class="formLabel">UserID:</p></td>
<td width="" valign="top" align="left">
<input id="username" name="username" class="formInput" tabindex="1"
size="20" autocomplete="off" type="text">
</td></tr>
<!--!password-->
<tr><td width="" valign="top" align="left">
<p class="formLabel">Password:</p></td>
<td width="" valign="top" align="left">
<input id="password" name="password" class="formInput" tabindex="2"
value="" size="20" autocomplete="off" type="password">
</td></tr>
<tr><td width="" valign="top" align="left"> </td>
<td width="" valign="top" align="left">
<!--!hiddenfields-->
<input class="inputButton" value="Login" type="submit"
name="request_type"></td></tr>
<tr class="hideInMobile"><td width="" valign="top" align="left">
( run in 0.709 second using v1.01-cache-2.11-cpan-1edf4fed603 )