Perl笔记

Tuesday, November 28, 2006

网易赤果果

#!/usr/bin/perl -w

use strict;
use POSIX;
use IO::Socket;
use CGI::Fast qw(:standard);
use CGI::Cookie;
use LWP::UserAgent;
use URI::Escape;

use lib '/home/apache/fcgi_files';
use Util;
#use CMAPI;
use MySes;
use Grade;
use UserInfo;
use MyLog;
#use URI::Escape;
#use MIME::Base64;

sub handle_term;

$SIG{'TERM'} = \&handle_term;
$SIG{'INT'} = \&handle_term;
$SIG{'ABRT'} = \&handle_term;
$SIG{'CHLD'} = 'IGNORE';

my $domain = '163.com';

#my $title = "query";
#my $LOGDIR = "/home/coremail/logs";
my $LOGDIR = "/home/webedit/young/logs";
my $logname = "Grade_Act_3G";

my $PAGEDIR = '/home/apache/fcgi_files/html/163';

# read page
open(INDEX,"$PAGEDIR/index.htm") || exit(0);#die 'EXIT' "Open login.htm: $!";
my @page_index = ;
close(INDEX);

open(LOGIN,"$PAGEDIR/login.htm") || exit(0);#die 'EXIT' "Open login.htm: $!";
my @page_login = ;
close(LOGIN);

=head
open(ERROR,"$PAGEDIR/error.htm") || die 'EXIT' "Open error.htm: $!";
my @page_error = ;
close(ERROR);
=cut

my $errmsg = "系统繁忙,暂时未能响应你的请求,请稍候。";
my $loginerrmsg = "验证失败,请先登录";
my $loginblockmsg = "失败尝试次数过多,请稍后再登录";
my $pre_url = "http://reg.163.com/servlet/netease.user.Login2Servlet?username=&password=&userip=";

my $ua = LWP::UserAgent->new(
'keep_alive' => 30,
'timeout' => 1,
);

#my $sesh = MySes->connect || die 'EXIT' "Connect mysql err: $!";

my $logdate = POSIX::strftime("%y%m%d",localtime);
my $statlog = "$LOGDIR/$logname\_$logdate.log";
&InitMyLog($statlog);

OUTER: while(my $req = new CGI::Fast)
{
my $cmh;
eval{
my %replace = ();
my $today = POSIX::strftime("%y%m%d",localtime);
unless($today eq $logdate)
{
$logdate = $today;
$statlog = "$LOGDIR/$logname\_$logdate.log";
&InitMyLog($statlog);
}
my $logfile = "$LOGDIR/$logname\_$today.err";
my $sid = $req->param('sid');
my $username = $req->param('username');
$username && ($username = lc $username);
my $password = $req->param('password');
my $uid=$req->param('uid');
my $userip = $ENV{'REMOTE_ADDR'};
#$userip ||= '220.181.31.241';
my $fullname;
my $dispname;
unless($uid || $username || $sid)
{
print $req->header(-charset=>'gb2312');
PrintPage(\@page_index,\%replace);
die 'EXIT';
}
if($uid)
{
$uid = uri_unescape($uid);
unless(CheckUid($uid))
{
print $req->header(-charset=>'gb2312');
#$replace{'errmsg'} = $loginerrmsg;
#PrintPage(\@page_error,\%replace);
#Error($loginerrmsg);
PrintPage(\@page_index,\%replace);
die 'EXIT';
}
$username = $uid;
my $fullname = "$username\@$domain";
#my $session = MySes->new($sesh);
my $session = MySes->new();
my $sess_ret = $session->WriteSes($fullname);
unless($sess_ret)
{
print $req->header(-charset=>'gb2312');
Error($errmsg);
die 'EXIT';
}
$sid = $session->GetSid;
}
elsif($sid)
{
#my $session = MySes->new($sesh,$sid);
my $session = MySes->new($sid);
unless($fullname=$session->CheckSes())
{
print $req->header(-charset=>'gb2312');
#$replace{'errmsg'} = $loginerrmsg;
#PrintPage(\@page_error,\%replace);
Error($loginerrmsg);
die 'EXIT';
}
$username = (split(/@/,$fullname))[0];
}
elsif($username)
{
unless($password)
{
print $req->header(-charset=>'gb2312');
#$replace{'title'} = $replace{'errmsg'} = "未输入密码";
#PrintPage(\@page_error,\%replace);
Error("请输入密码");
PrintErr($logfile,"$username|password required");
die 'EXIT';
}
$username = uri_unescape($username);
$password = uri_unescape($password);
if($username =~ /@/)
{
$fullname = $username;
$username = (split(/@/,$fullname))[0];
}
my $ret = CheckURSPass($username,$password,$userip);
print STDERR "$username($password):$ret\n";
if($ret ne '200')
{
if($ret eq '412')
{
print $req->header(-charset=>'gb2312');
PrintErr($logfile,"$username($userip)|CheckPass error too offen");
Error($loginblockmsg);
die 'EXIT';
}
print $req->header(-charset=>'gb2312');
#$replace{'title'} = $replace{'errmsg'} = $loginerrmsg;
#PrintPage(\@page_error,\%replace);
Error($loginerrmsg);
PrintErr($logfile,"$username|CheckPass error");
die 'EXIT';
}
#my $session = MySes->new($sesh);
my $session = MySes->new();
$fullname = "$username\@$domain";
$session->WriteSes($fullname);
$sid = $session->GetSid;
}
#undef $session;

# 验证完成

##############################################################

my ($jifen,$level,$rcode);

$|=1;
$fullname = "$username\@$domain";
WriteLog("Login: $fullname($userip)");
#my $grade = Grade->new('192.168.2.106',7788);
my $grade = new Grade($ua);
eval{
unless($grade){
print $req->header(-charset=>'gb2312');
#$replace{'title'} = $replace{'errmsg'} = "积分对象创建失败";
#$replace{'title'} = $replace{'errmsg'} = $errmsg;
#PrintPage(\@page_error,\%replace);
Error($errmsg);
PrintErr($logfile,"Can't new Grade:$!");
die 'EXIT';
}
my $ret = $grade->Query($fullname);
unless($ret){
print $req->header(-charset=>'gb2312');
#$replace{'title'} = $replace{'errmsg'} = "服务器内部通信失败";
#$replace{'title'} = $replace{'errmsg'} = $errmsg;
#PrintPage(\@page_error,\%replace);
Error($errmsg);
PrintErr($logfile,"Can't connect to server:$!");
die 'EXIT';
}
$rcode = $grade->rcode;
if($rcode <= 0)
{
print $req->header(-charset=>'gb2312');
#$replace{'title'} = $replace{'errmsg'} = "数据库出错";
#$replace{'title'} = $replace{'errmsg'} = $errmsg;
#PrintPage(\@page_error,\%replace);
Error($errmsg);
PrintErr($logfile,"$username|DB server error: $rcode");
die 'EXIT';
}
$jifen = $grade->grade;
$level = $grade->level;
};
if($@){
$jifen = '系统繁忙';
$level = 0;
}

my $uinfo = UserInfo->new($ua,$fullname);
if($uinfo)
{
my %user_info = $uinfo->QueryBatch('nickname','realname');
if( %user_info && $user_info{'rcode'}>=-1 )
{
$dispname ||= $user_info{'nickname'};
$dispname ||= $user_info{'realname'};
}
}
#print STDERR "here $username\n";
$dispname ||= $username;

# 页面输出
$replace{'uname'} = $dispname;
$replace{'sid'} = $sid;


$replace{'jifen'} = $jifen;
$replace{'level'} = $level;

=head_暂不提供用户查询
$replace{'jifen'} = 0;
$replace{'level'} = '';
=cut

my $cookie_jifen = new CGI::Cookie(-name=>"jifen_$username",-value=>$jifen,-domain=>'mail.163.com');
my $cookie_level = new CGI::Cookie(-name=>"level_$username",-value=>$level,-domain=>'mail.163.com');
my $cookie_name = new CGI::Cookie(-name=>'name',-value=>$dispname,-domain=>'mail.163.com');
#my $cookie_sid = new CGI::Cookie(-name=>'grade_sid',-value=>$sid);

print $req->header(-charset=>'gb2312',-cookie=>[$cookie_jifen,$cookie_level,$cookie_name]);
PrintPage(\@page_login,\%replace);
};
if($@){
unless($@ =~ /EXIT/){
my %replace = ();
print $req->header(-charset=>'gb2312');
PrintPage(\@page_index,\%replace);
}
}
}


sub handle_term
{
#next OUTER;
=head
if($sesh)
{
$sesh->disconnect;
}
=cut
print CGI::header;
exit(0);
}

0 Comments:

Post a Comment

<< Home