#! /usr/local/bin/perl
# authorization

require 'jcode.pl';

#
# 初期設定
#

$an1_file = "/home/user/bin/.vip";
$htpasswd2 = "/home/user/bin/htpasswd2";
$sendmail = "/usr/lib/sendmail";
$yourmail = 'your@mail.host';

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

print "Content-type: text/html\n\n";

if ($buffer eq "") { &html_form; &html_trailer1; }
else { &an_w; &html_trailer2; }


sub w2_html {

   print "<html><head><title>パスワードの発行</title></head>\n";
   print "<BODY BGCOLOR=\"#ffaaaa\" TEXT=\"#000000\">\n";

   print "<h2>登録エラー</h2>\n";
   print "登録できませんでした。正しく記入されていますか?\n";

}


sub w_html {

   print "<html><head><title>パスワードの発行</title></head>\n";
   print "<BODY BGCOLOR=\"#ffaaaa\" TEXT=\"#000000\">\n";

   print "<h2>登録済みです</h2>\n";
   print "このメールアドレスは既に登録されています。\n";

}

sub error {

   print "<html><head><title>パスワードの発行</title></head>\n";
   print "<BODY BGCOLOR=\"#ffaaaa\" TEXT=\"#000000\">\n";

   print "<h2>エラー</h2>\n";
   print "システムにエラーが発生しましたので、登録処理を終了します。\n";

}

sub html_trailer1 {
   print "<p>\n";
   print "</body></html>\n";
   exit;
}

sub html_trailer2 { #発行

   open(OUT,"| $sendmail $email") || die "error!\n";
   print OUT "From: $yourmail\n";
   print OUT "To: $email\n";
   print OUT "Subject: information\n\n";

   print OUT "\n";

   print OUT "username : $email\n";
   print OUT "password : $passwd\n\n";

   print OUT "by $yourmail\n";
   close(OUT);



   print "<html><head><title>パスワードの発行</title></head>\n";
   print "<BODY BGCOLOR=\"#ffaaaa\" TEXT=\"#000000\">\n";
   print "<h2>会員登録OK</h2>\n";
   print "電子メールでパスワードを送信しました。<br>\n";
   print "忘れないようにしてください。忘れてしまった場合は管理者に削除依頼し、改めて登録します。<p>\n";
   print "</body></html>\n";

}

sub html_form {

   print "<html><head><title>パスワードの発行</title></head>\n";
   print "<BODY BGCOLOR=\"#ffaaaa\" TEXT=\"#000000\">\n";
   print "<h2>会員登録オンラインサインアップ</h2>\n";

   print "<form method=\"post\" action=\"authorization.cgi\">\n";

   print "メールアドレス:<input type=text name=\"email\" size=50><br>\n";
   print "(半角で入力してください。発行されたパスワードはこの宛先に送られます。)<br>\n";

   print "<p>\n";
   print "<input type=submit value=\"登録\"><input type=reset value=\"キャンセル\"></form><p>\n";

}

sub an_w {

@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

          $value =~ s/</&lt;/g;
          $value =~ s/>/&gt;/g;
          $value =~ s/"/&quot;/g;

        $FORM{$name} = $value;
}

$email = $FORM{'email'};
$email =~ s/\n//g;
$email =~ s/\r//g;

$email =~ s/ / /g;
if ($email eq "") { &w2_html; &html_trailer1; exit; }
if ($email =~ / /) { &w2_html; &html_trailer1; exit; }
if (!($email =~ /(.*)\@(.*)\.(.*)/)) { &w2_html; &html_trailer1; exit; }

open(DB,"$an1_file") || die "Cannot Open Log File $log_file: $!";
@lines = <DB>;
close(DB);

foreach $line (@lines) {

   if ($line =~ /(.*)\:(.*)/) {

      $user = $1;

      if ($email eq $user) {  &w_html; &html_trailer1; exit;  }

   }
}
	@char = ('a'..'k','m','n','p'..'z','A'..'K','M','N','P'..'Z','1'..'9');
	srand(time|$$);
	foreach (0..7) {
		{
			local(@temp);
			push(@temp,splice(@char,rand(@char),1)) while @char;
			@char = @temp;
		}
		$passwd = $char[($_)] . $passwd;
	}

	$| = 1;
	print "\n";
	system("$htpasswd2 '$an1_file' '$email' '$passwd'");
}