This repository has been archived on 2024-08-19. You can view files and clone it, but cannot push or open issues or pull requests.
core/Zotlabs/Module/auth_sister/core.php
2019-06-14 16:11:12 +09:00

217 lines
7.6 KiB
PHP

<?php
//Copyright (C) 2008 菅礼紗(http://www.okanesuita.org/).
//妹★関数-----------------------------------------------------------
//セッション初期化
function auth_session_start(){
require('auth_sister/config.inc.php');
if($ses_name) {session_name($ses_name);}
if($ses_dir) {session_save_path($ses_dir);}
session_start();
}
//妹ヘッダを挿入します
function auth_sister_header(){
require('auth_sister/config.inc.php');
require('auth_sister/'.$auth_sister_load.'/config.inc.php');
echo $auth_sister_header;
}
//妹認証の初期化
function auth_sister_load(){
require('auth_sister/config.inc.php');
$loc = 'auth_sister/'.$auth_sister_load.'/words.txt';//辞書ファイル読み込み
//ファイル存在する場合は続行
if(file_exists($loc)){
$lines = file($loc, FILE_IGNORE_NEW_LINES);
$cnt = count($lines); //行数カウント
$cnt--;
$point = mt_rand(0, $cnt); //乱数発生
//質問文 正解メッセージ 不正解メッセージ 正解文 正解文の処理モード 逆処理スイッチ
//↓回答文の処理モード
//未指定・0:入力されたすべての文字列を含む
//1:正規表現による
//2:完全一致
list(
$_SESSION['auth_sister_question'],//質問文
$_SESSION['auth_sister_res_true'],//正解メッセージ
$_SESSION['auth_sister_res_false'],//不正解メッセージ
$_SESSION['auth_sister_answer'],//正解文
$_SESSION['auth_sister_anmode'],//正解文の処理モード
$_SESSION['auth_sister_rebirth']//逆処理スイッチ(0=OFF/1=ON)
)=explode("\t",$lines[$point]);//各変数に読み出し
$_SESSION['auth_sister_ticket'] = true; //画像読込権
$_SESSION['auth_sister_authID'] = uniqid(rand()); //AuthID発行
//以下マクロ処理だよ!
//乱数発生だよ!
$ran = rand(1,9999);
//乱数を平仮名にしちゃうよ!
$ranran = $ran;
$ranran = str_replace("0","れい" ,$ranran);
$ranran = str_replace("1","いち" ,$ranran);
$ranran = str_replace("2","" ,$ranran);
$ranran = str_replace("3","さん" ,$ranran);
$ranran = str_replace("4","よん" ,$ranran);
$ranran = str_replace("5","" ,$ranran);
$ranran = str_replace("6","ろく" ,$ranran);
$ranran = str_replace("7","なな" ,$ranran);
$ranran = str_replace("8","はち" ,$ranran);
$ranran = str_replace("9","きゅう" ,$ranran);
//乱数を漢字にしちゃおうかな!
$kanran = $ran;
$kanran = str_replace("0","" ,$kanran);
$kanran = str_replace("1","" ,$kanran);
$kanran = str_replace("2","" ,$kanran);
$kanran = str_replace("3","" ,$kanran);
$kanran = str_replace("4","" ,$kanran);
$kanran = str_replace("5","" ,$kanran);
$kanran = str_replace("6","" ,$kanran);
$kanran = str_replace("7","" ,$kanran);
$kanran = str_replace("8","" ,$kanran);
$kanran = str_replace("9","" ,$kanran);
//こんどは画数だぞ!
$kankaku = $ran;
$kankaku = str_replace("0","0" ,$kankaku);
$kankaku = str_replace("1","" ,$kankaku);
$kankaku = str_replace("2","" ,$kankaku);
$kankaku = str_replace("3","" ,$kankaku);
$kankaku = str_replace("4","" ,$kankaku);
$kankaku = str_replace("5","" ,$kankaku);
$kankaku = str_replace("6","" ,$kankaku);
$kankaku = str_replace("7","" ,$kankaku);
$kankaku = str_replace("8","" ,$kankaku);
$kankaku = str_replace("9","" ,$kankaku);
//[rand]
$_SESSION['auth_sister_question'] = str_replace("[rand]", $ran, $_SESSION['auth_sister_question']);
$_SESSION['auth_sister_answer'] = str_replace("[rand]", $ran, $_SESSION['auth_sister_answer']);
//[rand_kana]
$_SESSION['auth_sister_question'] = str_replace("[rand_kana]", $ranran, $_SESSION['auth_sister_question']);
$_SESSION['auth_sister_answer'] = str_replace("[rand_kana]", $ranran, $_SESSION['auth_sister_answer']);
//[rand_kan]
$_SESSION['auth_sister_question'] = str_replace("[rand_kan]", $kanran, $_SESSION['auth_sister_question']);
$_SESSION['auth_sister_answer'] = str_replace("[rand_kan]", $kanran, $_SESSION['auth_sister_answer']);
//[rand_kankaku]
$_SESSION['auth_sister_question'] = str_replace("[rand_kankaku]", $kankaku, $_SESSION['auth_sister_question']);
}
}
//妹認証の表示セット 先に初期化しておくこと
function auth_sister_insert(){
require('auth_sister/config.inc.php');
require('auth_sister/'.$auth_sister_load.'/config.inc.php');
$output = str_replace("[authID]", $_SESSION['auth_sister_authID'], $auth_sister_html);//AuthID挿入
echo $output;
}
//auth_sister_auth()は認証成功の場合true、失敗の場合はfalseを返します。
function auth_sister_auth(){
require('auth_sister/config.inc.php');
$auth = false;
$select = false;
$authid= $_SESSION['auth_sister_authID'];
//---メソッド
switch($auth_sister_method):
case 0 :
$select = $_POST[$authid];
break;
case 1 :
$select = $_GET[$authid];
break;
endswitch;
if($select){
$select = mb_convert_encoding($select,"UTF-8","auto");//入力されたもの
$answer = mb_convert_encoding($_SESSION['auth_sister_answer'],"UTF-8","auto");//正解文
$mode = $_SESSION['auth_sister_anmode'];//処理モード
$len = mb_strlen ( $select , "UTF-8");//入力文の文字数
//文字数制限
if(($len>=$auth_sister_len_min)&&($len<=$auth_sister_len_max)){
//処理モード
switch($mode):
case 0://入力されたすべての文字列を含む
if(mb_strstr($answer,$select,0,"UTF-8")) { $auth = true; }
break;
case 1://正規表現による
if(mb_ereg($answer,$select)) { $auth = true; }
break;
case 2://完全一致
if($answer==$select) { $auth = true; }
break;
default://入力されたすべての文字列を含む
if(mb_strstr($answer,$select,0,"UTF-8")) { $auth = true; }
endswitch;
//逆処理
if($_SESSION['auth_sister_rebirth']==1){
if($auth) { $auth = false; }
else { $auth = true; }
}
//認証結果文
if($auth){
$_SESSION['auth_sister_res'] = $_SESSION['auth_sister_res_true'];
} else {
$_SESSION['auth_sister_res'] = $_SESSION['auth_sister_res_false'];
}
//文字数エラー
} else {
$_SESSION['auth_sister_res'] = $auth_sister_outlen;
$auth = false;
}
}
return($auth);
}
//認証成功・失敗メッセージを返します
function auth_sister_res(){
require('auth_sister/config.inc.php');
$res = $auth_sister_mes_a.$_SESSION['auth_sister_res'].$auth_sister_mes_b;
return($res);
}
//イメージ出力-----------------------------------------------------------
$mode = $_GET['mode'];
switch($mode):
case "img":
require('config.inc.php');
if($ses_name) {session_name($ses_name);}
if($ses_dir) {session_save_path($ses_dir);}
session_start();
if($_SESSION['auth_sister_ticket']){
require($auth_sister_load.'/config.inc.php');
putenv('GDFONTPATH=' . realpath($auth_sister_fpath));
header("Content-type: image/png");
$text=$_SESSION['auth_sister_question'];
$text=mb_convert_encoding($text, "UTF-8", "auto");
$img = imagecreatefrompng($auth_sister_load.'/'.$auth_sister_image);
$color = imagecolorallocate($img,0x11,0x11,0x11); //文字色
imagettftext($img, $auth_sister_fsize, 0, $auth_sister_fx, $auth_sister_fy, $color, $auth_sister_font, $text );
//画像形式
if($_GET['type']==".png"){
imagepng($img); }
/*
if($_GET['type']==".jpg"){
imagejpeg($img,NULL,100)
}
*/
imagedestroy($img);
$_SESSION['auth_sister_ticket'] = false;
}else{
echo "Forbidden";
}
break;
endswitch;
?>