<?php
/*************************************************************************************************

    ddnsadduser.php
    ddns用のアカウントを作成する

                                2007.07.26 Ver.0.01  Genki wrote

    仕様
    Ver.0.01    POSTで希望アカウント・希望ドメイン・メールアドレスを受け取って、
            ドメインがかぶってなかったら登録用一時ファイルを生成し、
            登録メールアドレスに登録用一時ファイルのURLとパスワードを送信。
            登録用一時ファイルでパスワード認証すると、アカウントが生成される。
    
***************************************************************************************************/
//各種設定
/*ドメインの一覧*/
$domains = array("genkikko.net","g-dd.net");

//取得させないサブドメイン
$invalid_subdomain = array("www[0-9]*","mail[0-9]*","ns[0-9]*","dns[0-9]*","ddns[0-9]*",
               
"album[0-9]*","blog[0-9]*","data[0-9]*","updatedns","genki[0-9]*");

//POSTでゲトするものたち
$array = array("username","mailaddress","subdomain","domain","p_temp","password","kakunin");

for(
$i=0;$array[$i];$i++){
    $
$array[$i] = $_POST["{$array[$i]}"];
}

//GETでゲトするものたち
$temp $_GET['temp'];

//各値ちぇき
if(!ereg("[0-9a-z]+",$username) && $username){
    
$flag_illegal_username1;
    
$flag_illegal 1;
}

if(!
ereg("[0-9a-z]+",$password) && $password){
    
$flag_illegal_password1;
    
$flag_illegal 1;
}
$subdomain str_replace(" ",null,$subdomain);
if(!
ereg("^[a-z]+[0-9a-z]+",$subdomain) && $subdomain){
    
$flag_illegal_subdomain1;
    
$flag_illegal 1;
}

if(!
ereg("^[0-9a-zA-Z\.\-]+@[0-9a-zA-Z]+\..+",$mailaddress) || ereg(",",$mailaddress)&& $mailaddress){
    
$flag_illegal_mailaddress 1;
    
$flag_illegal 1;
}

for(
$i=0;$domains[$i];$i++){
    if(
ereg($domains[$i],$domain)){
        
$flag_legal_domain 1;
    }
}
if(!
$flag_legal_domain){
    
$flag_illegal_domain 1;
    
$flag_illegal 1;
}
for(
$i=0;$invalid_subdomain[$i];$i++){
    if(
ereg("^{$invalid_subdomain[$i]}$",$subdomain)){
        
$subdomain null;
        
$flag_invalid_subdomain 1;
    }
}



/******************************  HTMLヘッダを出力  **********************************************/
echo<<<EOH
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/php; charset=euc-jp">
<LINK rel="stylesheet" href="/main.css" type="text/css">
<TITLE>ユーザ登録 -Genkikko Server DDNS-</TITLE>
</HEAD>
<BODY>
<H3>ユーザ登録 -Genkikko Server DDNS-</H3>
EOH;


/*************************************************************************************************

    GETから一時ファイル名が送られてきたら、パスワードの入力画面を表示。

***************************************************************************************************/
if($temp){
    
$tempfile "./temporary/$temp";
    if(!
file_exists($tempfile)){
        echo 
"URLが不正です。";
    }else{
        
$list file($tempfile);
        for(
$i=0;$list[$i];$i++){
            
$list[$i] = explode(",",$list[$i]);
            
$list[$list[$i][0]] = $list[$i][1];
        }
        echo <<<EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
 <input type="hidden" name="username" value="
{$list[username]}">
 <input type="hidden" name="mailaddress" value="
{$list[mailaddress]}">
 <input type="hidden" name="subdomain" value="
{$list[subdomain]}">
 <input type="hidden" name="domain" value="
{$list[domain]}">
 <input type="hidden" name="p_temp" value="$temp">
 <table border=1>
  <tr>
   <td>
    User ID
   </td>
   <td>
    
{$list[username]}
   </td>
  </tr>
  <tr>
   <td>
    E-mail address
   </td>
   <td>
    
{$list[mailaddress]}
   </td>
  </tr>
  <tr>
   <td>
    Domain
   </td>
   <td>
    
{$list[subdomain]}.{$list[domain]}
   </td>
  </tr>
  <tr>
   <td>
    Password
   </td>
   <td>
    <input type="password" name="password" size=20 maxlength=20>
   </td>
  </tr>
 </table>
 <input type="submit" value="登録">
</form>
EOF;
    }


/*************************************************************************************************

    POSTから全部のデータが送られてきたら、正しいかどうか確認してユーザ登録処理をする。

***************************************************************************************************/
}elseif($username && $mailaddress && $subdomain && $domain && $p_temp){
    
$password md5($password);
    
$tempfile "./temporary/$p_temp";
    if(!
file_exists($tempfile)){
        echo 
"エラー。一時ファイルが見あたりません。<br><br>";
        echo 
"<a href=\"./\">もどる</a>";
        die();
    }
    
$list file($tempfile);
    for(
$i=0;$list[$i];$i++){
        
$list[$i] = explode(",",$list[$i]);
        
$list[$list[$i][0]] = $list[$i][1];
    }
    if(
$password != $list['password']){
        echo <<<EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
 <input type="hidden" name="username" value="
{$list[username]}">
 <input type="hidden" name="mailaddress" value="
{$list[mailaddress]}">
 <input type="hidden" name="subdomain" value="
{$list[subdomain]}">
 <input type="hidden" name="domain" value="
{$list[domain]}">
 <input type="hidden" name="p_temp" value="$p_temp">
 <table border=1>
  <tr>
   <td>
    User ID
   </td>
   <td>
    
{$list[username]}
   </td>
  </tr>
  <tr>
   <td>
    E-mail address
   </td>
   <td>
    
{$list[mailaddress]}
   </td>
  </tr>
  <tr>
   <td>
    Domain
   </td>
   <td>
    
{$list[subdomain]}.{$list[domain]}
   </td>
  </tr>
  <tr>
   <td>
    Password
   </td>
   <td>
    <input type="password" name="password" size=20 maxlength=20>
   </td>
  </tr>
 </table>
 <input type="submit" value="登録">
</form>
<br>
<font color="red">Passwordが違います。</font>
EOF;
    }else{
        
$timestamp date('Y-m-d H:i:s');
        
$table str_replace(".","_",$domain);
        
$table str_replace("-","_",$table);
        
$cn pg_connect("host=vine.hibi port=5432 dbname=ddns user=genkikko");
        
$rs pg_query("select * from $table where subdomain='$subdomain'");

        
$ct pg_num_rows($rs);
        for(
$i=0;$i<$ct;$i++){
            
$item[$i] = pg_fetch_array($rs,$i);
        }

        if(
$item){
            echo 
"ごめんなさい。<br />そのドメインは既に登録されています。<br />他の名前で試してください。<hr /><a href=\"./\">もどる</a>";
            
pg_close($cn);
            
unlink($tempfile);
        }else{
            
$rs pg_query("insert into $table values ( '$username' , '$password' , '$subdomain' , '0.0.0.0' , '$timestamp', '$timestamp' , '$mailaddress' )");
            if(!
$rs){
                echo 
"登録失敗しました。<br>管理者におしえてください。<br>admin@genkikko.net<hr><a href=\"./\">もどる</a>";
                
pg_close($cn);
                
unlink($tempfile);
            }else{
                echo 
"登録完了しました。<br>";
                echo 
"<a href=\"http://updatedns.genkikko.net:8080/updatedns.php\">アップデートページへ</a>";
                
unlink($tempfile);
            }
        }
    }
    

    
/*************************************************************************************************

    POSTで4つのデータが送られてきたら、確認画面を表示。
    $kakunin == YESなら、一時ファイル作成して、メール送信。

***************************************************************************************************/
}elseif($username && $mailaddress && $subdomain && $domain && $password && !$flag_illegal){
    echo <<<EOF
<table border=1>
 <tr>
  <td>
   User ID
  </td>
  <td>
   $username
  </td>
 </tr>
 <tr>
  <td>
   E-mail address
  </td>
  <td>
   $mailaddress
  </td>
 </tr>
 <tr>
  <td>
   Domain
  </td>
  <td>
  $subdomain.$domain
  </td>
 </tr>
</table>

EOF;
    if(
$kakunin == "YES"){
        include 
"makepw.php";
        
$random makepw(40);
        
$tempfile "./temporary/$random";
        
touch($tempfile);
        
$dat = <<<EOF
username,$username,
password,$password,
mailaddress,$mailaddress,
subdomain,$subdomain,
domain,$domain,
EOF;
        
$fp fopen($tempfile,"w");
        
fputs($fp,$dat);
        
fclose($fp);

        
$body = <<<EOF
仮登録完了。
本登録はコチラ
http://ddns.genkikko.net/ddnsadduser.php?temp=$random
EOF;
        
$body mb_convert_encoding($body,"JIS");
        
$subject mb_convert_encoding("Subject: Genkikko Server DDNS 仮登録完了通知","JIS");

        
$sock fsockopen("???.hibi",25);
        
        
fputs($sock,"HELO mail.genkikko.net\r\n");
        
$result fgets($sock,128);
        if(!
ereg("^220",$result)){
            
fclose($sock);
            die(
"メール送信失敗。<br>管理者にお知らせください。<br>admin@genkikko.net<br><a href=\"./\">もどる</a>");
        }
        
        
fputs($sock,"MAIL FROM:<ddnsinfo@genkikko.net>\r\n");
        
$result fgets($sock,128);
        if(!
ereg("^250",$result)){
            
fclose($sock);
            die(
"メール送信失敗。<br>管理者にお知らせください。<br>admin@genkikko.net<br><a href=\"./\">もどる</a>");
        }
        
        
fputs($sock,"RCPT TO:<$mailaddress>\r\n");
        
$result fgets($sock,128);
        if(!
ereg("^250",$result)){
            
fclose($sock);
            die(
"メール送信失敗。<br>管理者にお知らせください。<br>admin@genkikko.net<br><a href=\"./\">もどる</a>");
        }
        
        
fputs($sock,"DATA\r\n");
        
$result fgets($sock,128);
        if(!
ereg("^250",$result)){
            
fclose($sock);
            die(
"メール送信失敗。<br>管理者にお知らせください。<br>admin@genkikko.net<br><a href=\"./\">もどる</a>");
        }
        
        
fputs($sock,"$subject\r\n");
        
fputs($sock,"$body\r\n");

        
$result fputs($sock,".\r\n");
        if(!
$result){
            
fclose($sock);
            die(
"メール送信失敗。<br>管理者にお知らせください。<br>admin@genkikko.net<br><a href=\"./\">もどる</a>");
        }
        
fclose($sock);

        echo<<<EOF
        <br>
        仮登録完了通知メールを送信しました。<br>
        メールに記載されているURLから本登録を行ってください。
        <hr>
        <a href="./">もどる</a>
EOF;

    }else{
        
$password md5($password);
        echo <<<EOF
この内容で正しければ、確認ボタンを押してください。<br>
<form action="
{$_SERVER['PHP_SELF']}" method="post">\n
<input type="hidden" name="username" value="$username">
<input type="hidden" name="password" value="$password">
<input type="hidden" name="mailaddress" value="$mailaddress">
<input type="hidden" name="subdomain" value="$subdomain">
<input type="hidden" name="domain" value="$domain">
<input type="hidden" name="kakunin" value="YES">
<input type="submit" value="確認">
</form>
EOF;
    }

/*************************************************************************************************

    送信データが無い場合は、入力フォーム

***************************************************************************************************/
}else{
    if(
$username || $mailaddress || $subdomain || $password){
        if(!
$username){
            
$msg .= "User IDが入力されていません。<br>";
        }
        if(
$flag_illegal_username){
            
$msg .= "User IDが不正です。半角英数で入力してください。<br>";
        }
        if(!
$password){
            
$msg .= "Passwordが入力されていません。<br>";
        }
        if(
$flag_illegal_password){
            
$msg .= "Passwordが不正です。半角英数で入力してください。<br>";
        }
        if(!
$mailaddress){
            
$msg .= "E-mail addressが入力されていません。<br>";
        }
        if(
$flag_illegal_mailaddress){
            
$msg .= "E-mail addressが不正です。ちゃんと入力してください。<br>";
        }
        if(!
$subdomain){
            if(
$flag_invalid_subdomain){
                
$msg .= "使用できないSubdomainです。別のにしてください。<br>";
            }else{
                
$msg .= "Sub Domainが入力されていません。<br>";
            }
        }
        if(
$flag_illegal_subdomain){
            
$msg .= "Subdomainが不正です。半角英数で2文字以上。先頭文字は英字で入力してください。<br>";
        }
        if(
$flag_illegal_domain){
            
$msg .= "Domainが不正です。セレクトボックスから選んでください。<br>";
        }
    }


    echo 
"<font color=\"red\">$msg</font>";

    echo <<<EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
 <table border=0>
  <tr>
   <td>
    User ID
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="username" size=20 maxlength=20 value="$username">
   </td>
  </tr>
  <tr>
   <td>
    Password
   </td>
   <td>
    :
   </td>
   <td>
    <input type="password" name="password" size=20 maxlength=20>
   </td>
  </tr>
  <tr>
   <td>
    E-mail address
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="mailaddress" size=40 maxlength=100 value="$mailaddress">
   </td>
  </tr>
  <tr>
   <td>
    Sub Domain
   </td>
   <td>
    :
   </td>
   <td>
    <input type="text" name="subdomain" size=20 maxlength=20 value="$subdomain">
   </td>
  </tr>
  <tr>
   <td>
    Domain
   </td>
   <td>
   :
   </td>
   <td>
    <select name="domain">
     <option value="">-- Please Select --
EOF;
    for(
$i=0;$domains[$i];$i++){
        if(
$domains[$i] == $domain){
            echo 
"<option value=\"{$domains[$i]}\" selected>.{$domains[$i]}\n";
        }else{
            echo 
"<option value=\"{$domains[$i]}\">.{$domains[$i]}\n";
        }
    }

    echo <<<EOF
    </select>
   </td>
  </tr>
 </table>
 <input type="submit" value="Sign Up">
</form>
<hr>
<a href="./">もどる</a>
</body>
</html>
EOF;

}