OSDN Git Service

改行コードをLFに統一。
[fswiki/fswiki.git] / plugin / admin / AdminUserHandler.pm
1 ###############################################################################
2 #
3 # ¥æ¡¼¥¶´ÉÍý¤ò¹Ô¤¦¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é
4 #
5 ###############################################################################
6 package plugin::admin::AdminUserHandler;
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         my $cgi   = $wiki->get_CGI;
24         
25         $wiki->set_title("¥æ¡¼¥¶´ÉÍý");
26         
27         if($cgi->param("delete") ne ""){
28                 return $self->delete_user($wiki);
29                 
30         } elsif($cgi->param("regist") ne ""){
31                 return $self->user_form($wiki,{});
32                 
33         } elsif($cgi->param("update") ne ""){
34                 my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
35                 my $id = $cgi->param("update");
36                 my ($pass,$type) = split(/\t/,$users->{$id});
37                 
38                 return $self->user_form($wiki,{id=>$id,pass=>$pass,type=>$type});
39                 
40         } elsif($cgi->param("saveuser") ne ""){
41                 return $self->save_user($wiki);
42         
43         } elsif($cgi->param("changepass") ne ""){
44                 return $self->change_pass($wiki);
45                 
46         } else {
47                 return $self->user_list($wiki);
48         }
49 }
50
51 #==============================================================================
52 # ¥æ¡¼¥¶°ìÍ÷
53 #==============================================================================
54 sub user_list {
55         my $self = shift;
56         my $wiki = shift;
57         
58         my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
59         my $buf .= "<h2>¥æ¡¼¥¶°ìÍ÷</h2>\n".
60                    "<table>\n".
61                    "<tr><th>ID</th><th>¼ïÊÌ</th><th>Áàºî</th></tr>\n";
62         
63         foreach my $id (sort(keys(%$users))){
64                 my ($pass,$type) = split(/\t/,$users->{$id});
65                 
66                 $buf .= "<tr>\n";
67                 $buf .= "  <td>".&Util::escapeHTML($id)."</td>\n";
68                 if($type==0){
69                         $buf .= "  <td>´ÉÍý¼Ô</td>\n";
70                 } else {
71                         $buf .= "  <td>°ìÈÌ</td>\n";
72                 }
73                 $buf .= "  <td><a href=\"".$wiki->create_url({action=>"ADMINUSER",update=>$id})."\">Êѹ¹</a> ".
74                               "<a href=\"".$wiki->create_url({action=>"ADMINUSER",delete=>$id})."\">ºï½ü</a></td>\n";
75                 $buf .= "</tr>\n";
76         }
77         $buf .= "</table>\n";
78         $buf .= "<form action=\"".$wiki->create_url()."\" method=\"GET\">\n".
79                 "  <input type=\"submit\" name=\"regist\" value=\"¥æ¡¼¥¶¤ÎÄɲÃ\">\n".
80                 "  <input type=\"hidden\" name=\"action\" value=\"ADMINUSER\">\n".
81                 "</form>\n";
82         return $buf;
83 }
84
85 #==============================================================================
86 # ¥æ¡¼¥¶Äɲᦹ¹¿·¥Õ¥©¡¼¥à
87 #==============================================================================
88 sub user_form {
89         my $self = shift;
90         my $wiki = shift;
91         my $data = shift;
92         
93         my $buf = "<form action=\"".$wiki->create_url()."\" method=\"POST\">\n";
94         if(defined($data->{id})){
95                 $buf .= "<h2>¥æ¡¼¥¶¤ÎÊѹ¹</h2>";
96         } else {
97                 $buf .= "<h2>¥æ¡¼¥¶¤ÎÄɲÃ</h2>";
98         }
99         $buf .= "<h3>ID</h3>\n";
100         if(defined($data->{id})){
101                 $buf .= "<p><b>".&Util::escapeHTML($data->{id})."</b>¡ÊÊѹ¹¤Ï¤Ç¤­¤Þ¤»¤ó¡Ë</p>\n";
102                 $buf .= "<input type=\"hidden\" name=\"id\" value=\"".&Util::escapeHTML($data->{id})."\">\n";
103         } else {
104                 $buf .= "<p><input type=\"text\" name=\"id\" size=\"20\"></p>\n";
105         }
106         if(!defined($data->{id})){
107                 $buf .= "<h3>¥Ñ¥¹¥ï¡¼¥É</h3>\n";
108                 $buf .= "<p><input type=\"password\" name=\"pass\" size=\"20\"></p>\n";
109         }
110         $buf .= "<h3>¼ïÊÌ</h3>\n";
111         $buf .= "<p>\n";
112         $buf .= "<input type=\"radio\" name=\"type\" value=\"0\" id=\"type_0\"";
113         if($data->{type}!=1){ $buf .= " checked"; }
114         $buf .= "><label for=\"type_0\">´ÉÍý¼Ô</label>\n";
115         $buf .= "<input type=\"radio\" name=\"type\" value=\"1\" id=\"type_1\"";
116         if($data->{type}==1){ $buf .= " checked"; }
117         $buf .= "><label for=\"type_1\">°ìÈÌ</label>\n";
118         $buf .= "</p>\n";
119         
120         if(defined($data->{id})){
121                 $buf .= "<input type=\"submit\" name=\"saveuser\" value=\"Êѹ¹\">\n";
122         } else {
123                 $buf .= "<input type=\"submit\" name=\"saveuser\" value=\"ÄɲÃ\">\n";
124         }
125         $buf .= "<input type=\"hidden\" name=\"action\" value=\"ADMINUSER\">\n";
126         $buf .= "</form>\n";
127         
128         if(defined($data->{id})){
129                 $buf .= "<form action=\"".$wiki->create_url()."\" method=\"POST\">\n";
130                 $buf .= "  <h2>¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹</h2>\n";
131                 $buf .= "  <h3>¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É</h3>\n";
132                 $buf .= "  <p><input type=\"password\" name=\"pass\" size=\"30\"></p>\n";
133                 $buf .= "  <input type=\"submit\" name=\"changepass\" value=\"Êѹ¹\">\n";
134                 $buf .= "  <input type=\"hidden\" name=\"action\" value=\"ADMINUSER\">\n";
135                 $buf .= "  <input type=\"hidden\" name=\"id\" value=\"".&Util::escapeHTML($data->{id})."\">\n";
136                 $buf .= "</form>\n";
137         }
138         
139         $buf .= "[<a href=\"". $wiki->create_url({ action=>"ADMINUSER" }) . "\">Ìá¤ë</a>]\n";
140         
141         return $buf;
142 }
143
144 #==============================================================================
145 # ¥æ¡¼¥¶¾ðÊó¤ÎÊݸ
146 #==============================================================================
147 sub save_user {
148         my $self = shift;
149         my $wiki = shift;
150         my $cgi  = $wiki->get_CGI;
151         
152         my $id   = $cgi->param("id");
153         my $pass = $cgi->param("pass");
154         my $type = $cgi->param("type");
155         my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
156         
157         if(!defined($users->{$id})){
158                 if($id eq "" || $pass eq "" || $type eq ""){
159                         return $wiki->error("ID¡¢¥Ñ¥¹¥ï¡¼¥É¡¢¥æ¡¼¥¶¼ïÊ̤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£");
160                 }
161         } else {
162                 if($id eq "" || $type eq ""){
163                         return $wiki->error("ID¡¢¥æ¡¼¥¶¼ïÊ̤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£");
164                 }
165         }
166         unless($id =~ /^[a-zA-Z0-9\-_]+$/ && (!defined($pass) || $pass =~ /^[a-zA-Z0-9\-_]+/)){
167                 return $wiki->error("ID¡¢¥Ñ¥¹¥ï¡¼¥É¤Ë¤ÏȾ³Ñ±Ñ¿ô»ú¤·¤«»ÈÍѤǤ­¤Þ¤»¤ó¡£");
168         }
169         
170         if(defined($users->{$id})){
171                 ($pass) = split(/\t/,$users->{$id});
172                 $users->{$id} = "$pass\t$type";
173         } else {
174                 $users->{$id} = &Util::md5($pass,$id)."\t$type";
175         }
176         &Util::save_config_hash($wiki,$wiki->config('userdat_file'),$users);
177         
178         $wiki->redirectURL( $wiki->create_url({ action=>"ADMINUSER"}) );
179 }
180
181 #==============================================================================
182 # ¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹
183 #==============================================================================
184 sub change_pass {
185         my $self = shift;
186         my $wiki = shift;
187         my $cgi  = $wiki->get_CGI();
188         my $id   = $cgi->param("id");
189         my $pass = $cgi->param("pass");
190         
191         my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
192         my ($p,$type)  = split(/\t/,$users->{$id});
193         $users->{$id} = &Util::md5($pass,$id)."\t$type";
194         &Util::save_config_hash($wiki,$wiki->config('userdat_file'),$users);
195         
196         $wiki->redirectURL( $wiki->create_url({ action=>"ADMINUSER"}) );
197 }
198
199 #==============================================================================
200 # ¥æ¡¼¥¶¤Îºï½ü
201 #==============================================================================
202 sub delete_user {
203         my $self = shift;
204         my $wiki = shift;
205         my $cgi  = $wiki->get_CGI;
206         my $id   = $cgi->param("delete");
207         
208         my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
209         my $saveusers = {};
210         foreach(sort(keys(%$users))){
211                 if($_ ne $id){
212                         $saveusers->{$_} = $users->{$_};
213                 }
214         }
215         &Util::save_config_hash($wiki,$wiki->config('userdat_file'),$saveusers);
216         
217         $wiki->redirectURL( $wiki->create_url({ action=>"ADMINUSER"}) );
218 }
219
220 1;