OSDN Git Service

BugTrack-wiki/288 : Farmセッションタイムアウトに関する件。クッキー削除時の有効期限
[fswiki/fswiki.git] / plugin / admin / Login.pm
1 ###############################################################################
2 #
3 # ´ÉÍý¼Ô¥í¥°¥¤¥ó
4 #
5 ###############################################################################
6 package plugin::admin::Login;
7 use strict;
8 #==============================================================================
9 # ¥³¥ó¥¹¥È¥é¥¯¥¿
10 #==============================================================================
11 sub new {
12         my $class = shift;
13         my $self  = {};
14         return bless $self,$class;
15 }
16
17 #==============================================================================
18 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é
19 #==============================================================================
20 sub do_action {
21         my $self = shift;
22         my $wiki = shift;
23         
24         $wiki->set_title("´ÉÍý");
25         my $cgi = $wiki->get_CGI;
26         
27         if($cgi->param("logout") ne ""){
28                 return $self->logout($wiki);
29         }
30         
31         if(defined($wiki->get_login_info())){
32                 return $self->admin_form($wiki,$wiki->get_login_info());
33         } else {
34                 # ¥í¥°¥¤¥ó¤ÎȽÄê
35                 my $id   = $cgi->param("id");
36                 my $pass = $cgi->param("pass");
37                 my $page = $cgi->param("page");
38                 
39                 if($id ne "" && $pass ne ""){
40                         my $login = $wiki->login_check($id,&Util::md5($pass,$id));
41                         if(defined($login)){
42                                 my $session = $cgi->get_session($wiki,1);
43                                 $session->param("wiki_id"  ,$id);
44                                 $session->param("wiki_type",$login->{type});
45                                 $session->param("wiki_path",$login->{path});
46                                 $session->flush();
47                                 if($page){
48                                         $wiki->redirectURL($wiki->create_page_url($page));
49                                 } else {
50                                         $wiki->redirectURL($wiki->create_url({action=>"LOGIN"}));
51                                 }
52                         } else {
53                                 return $wiki->error("ID¤â¤·¤¯¤Ï¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹¡£");
54                         }
55                 }
56         }
57         return $self->default($wiki);
58 }
59
60 #==============================================================================
61 # ´ÉÍý²èÌÌ¥Õ¥©¡¼¥à
62 #==============================================================================
63 sub admin_form {
64         my $self  = shift;
65         my $wiki  = shift;
66         my $login = shift;
67         my $buf = "<h2>¥í¥°¥¤¥óÃæ</h2>\n";
68         
69         # ´ÉÍý¼Ô¥æ¡¼¥¶¤Î¾ì¹ç
70         if($login->{type}==0){
71                 $buf .="<ul>\n";
72                 foreach($wiki->get_admin_menu){
73                         $buf .= "<li><a href=\"".$_->{url}."\">".$_->{label}."</a>";
74                         $buf .= " - ".&Util::escapeHTML($_->{desc});
75                         $buf .= "</li>\n";
76                 }
77                 $buf .= "</ul>\n";
78                 
79         # °ìÈ̥桼¥¶¤Î¾ì¹ç
80         } else {
81                 $buf .="<ul>\n";
82                 foreach($wiki->get_admin_menu){
83                         if($_->{type}==1){
84                                 $buf .= "<li><a href=\"".$_->{url}."\">".$_->{label}."</a>";
85                                 $buf .= " - ".&Util::escapeHTML($_->{desc});
86                                 $buf .= "</li>\n";
87                         }
88                 }
89                 $buf .= "</ul>\n";
90         }
91         
92         $buf .= "<form action=\"".$wiki->create_url()."\" method=\"POST\">".
93                 "  <input type=\"submit\" name=\"logout\" value=\"¥í¥°¥¢¥¦¥È\">".
94                 "  <input type=\"hidden\" name=\"action\" value=\"LOGIN\">".
95                 "</form>\n";
96         
97         return $buf;
98 }
99
100 #==============================================================================
101 # ¥í¥°¥¢¥¦¥È½èÍý
102 #==============================================================================
103 sub logout {
104         my $self = shift;
105         my $wiki = shift;
106         my $cgi = $wiki->get_CGI;
107         
108         # CGI::Session¤ÎÇË´þ
109         my $session = $cgi->get_session($wiki);
110         $session->delete();
111         $session->flush();
112         
113         # Cookie¤ÎÇË´þ
114         my $path   = &Util::cookie_path($wiki);
115         my $cookie = CGI::Cookie->new(-name=>'CGISESSID',-value=>'',-expires=>1,-path=>$path);
116         print "Set-Cookie: ".$cookie->as_string()."\n";
117         
118         $wiki->redirectURL($wiki->create_url({action=>"LOGIN"}));
119 }
120
121 #==============================================================================
122 # ¥í¥°¥¤¥ó²èÌÌ
123 #==============================================================================
124 sub default {
125         my $self = shift;
126         my $wiki = shift;
127         
128         my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/login.tmpl",
129                                        die_on_bad_params => 0);
130         $tmpl->param(
131                 ACCEPT_USER_REGISTER => $wiki->config("accept_user_register"),
132                 URL => $wiki->create_url());
133         
134         my $page = $wiki->get_CGI()->param('page');
135         if($page){
136                 $tmpl->param(PAGE => $page);
137         }
138                 
139         return $tmpl->output();
140 }
141
142 1;