############################################################################### # # アカウント情報管理を行うアクションハンドラ # ############################################################################### package plugin::admin::AccountHandler; use strict; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # アクションハンドラメソッド #============================================================================== sub do_action { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI; $wiki->set_title("アカウント情報"); if($cgi->param("changepass") ne ""){ return $self->change_pass($wiki); } if(!defined($wiki->get_login_info)) { return $wiki->error("ログインしていません。"); } my $id = $wiki->get_login_info($cgi)->{id}; return $self->account_form($wiki,$id); } #============================================================================== # アカウント情報フォーム #============================================================================== sub account_form { my $self = shift; my $wiki = shift; my $id = shift; my $buf = "

アカウント情報

"; $buf .= "
config('script_name')."\" method=\"POST\">\n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; $buf .= "
ID".&Util::escapeHTML($id)."(変更はできません)
現在のパスワード
新しいパスワード
新しいパスワード(確認)
\n"; # $buf .= "
\n"; $buf .= " \n"; $buf .= " \n"; $buf .= " \n"; # $buf .= "
\n"; $buf .= "
\n"; return $buf; } #============================================================================== # パスワードの変更 #============================================================================== sub change_pass { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI(); my $id = $cgi->param("id"); my $pass_old = $cgi->param("pass_old"); my $pass = $cgi->param("pass1"); my $pass_confirm = $cgi->param("pass2"); # 現在のパスワードの照合 # 他人がパスワードを変更してしまうことを防止するため、パスワードを変更 # する際には現在のパスワードを照合する必要がある。 my $login = $wiki->login_check($id,&Util::md5($pass_old,$id)); if(defined($login)){ my $min_length = 2; # 新しいパスワードの正当性の確認 if ( length( $pass ) < $min_length ) { return $wiki->error("新しいパスワードが入力されていません。". "少なくとも $min_length 文字以上入力してください。"); } elsif ( $pass ne $pass_confirm ) { return $wiki->error("入力された二つのパスワードが合致しません。"); } my $session = $cgi->get_session($wiki); $session->param("wiki_id" ,$id); $session->param("wiki_type",$login->{type}); $session->param("wiki_path",$login->{path}); $session->flush(); my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file')); my ($p,$type) = split(/\t/,$users->{$id}); $users->{$id} = &Util::md5($pass,$id)."\t$type"; &Util::save_config_hash($wiki,$wiki->config('userdat_file'),$users); } else { return $wiki->error("現在のパスワードが違います。"); } $wiki->redirectURL($wiki->config('script_name')."?action=LOGIN"); #return "

パスワードを変更しました。

". # "[config('script_name')."?action=LOGIN\">メニューに戻る]\n"; } 1;