-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathdelete.cgi
More file actions
executable file
·121 lines (103 loc) · 3.4 KB
/
Copy pathdelete.cgi
File metadata and controls
executable file
·121 lines (103 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/perl
# テキスト比較ツール difff《デュフフ》: 2つのテキストの差分をハイライト表示するCGI
#
# 比較するテキストとして、HTTPリクエストから sequenceA および sequenceB を取得し、
# diffコマンドを用いて文字ごと(英単語は単語ごと)に比較し差分をハイライト表示する
#
# 2015-06-11 Yuki Naito (@meso_cacase) difff.plをもとにdelete.cgiを作成
use warnings ;
use strict ;
use Digest::MD5 qw(md5_hex) ;
my $url = './' ;
# HTTPリクエストを取得
my %query = get_query_parameters() ;
# 削除パスワードのhashを取得。ファイル名の一部となっている
my $md5 = md5_hex($query{'passwd'}) ;
(my $filename = $ENV{'HTTP_REFERER'}) =~ s{.*/}{} ;
# 削除を実行
(-f "data/${md5}_${filename}") and unlink "data/${md5}_${filename}"
or print_html("ページを削除できませんでした。パスワードをご確認ください (1)") ;
(-l "data/$filename") and unlink "data/$filename"
or print_html("ページを削除できませんでした。パスワードをご確認ください (2)") ;
# 結果を表示
print_html("ページを削除しました") ;
exit ;
# ====================
sub get_query_parameters { # CGIが受け取ったパラメータの処理
my $buffer = '' ;
if (defined $ENV{'REQUEST_METHOD'} and
$ENV{'REQUEST_METHOD'} eq 'POST' and
defined $ENV{'CONTENT_LENGTH'}
){
eval 'read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"})' or
print_html('ERROR : get_query_parameters() : read failed') ;
} elsif (defined $ENV{'QUERY_STRING'}){
$buffer = $ENV{'QUERY_STRING'} ;
}
length $buffer > 5000000 and print_html('ERROR : input too large') ;
my %query ;
my @query = split /&/, $buffer ;
foreach (@query){
my ($name, $value) = split /=/ ;
if (defined $name and defined $value){
$value =~ tr/+/ / ;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg ;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg ;
$query{$name} = $value ;
}
}
return %query ;
} ;
# ====================
sub print_html { # HTMLを出力
my $message = $_[0] // '' ;
#- ▼ HTML出力
my $html = <<"--EOS--" ;
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang=ja>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='Content-Style-Type' content='text/css'>
<meta name='author' content='Yuki Naito'>
<title>difff《デュフフ》</title>
<style type='text/css'>
<!--
* { font-family:verdana,arial,helvetica,sans-serif }
p { font-size:10pt }
.message {
width:500px;
padding:10pt;
border:dotted 1px #8c93ba;
}
a { color:#3366CC }
.k { color:black; text-decoration:none }
-->
</style>
</head>
<body>
<div id=top style='border-top:5px solid #00BBFF; padding-top:10px'>
<font size=5>
<a class=k href='$url'>
テキスト比較ツール difff《デュフフ》</a></font><!--
--><font size=3>ver.6.1</font>
 
<font size=1 style='vertical-align:16px'>
<a href='${url}en/'>English</a> |
Japanese
</font>
 
<font size=1 style='vertical-align:16px'>
<a href='${url}v5/'>旧バージョン (ver.5)</a>
</font>
<hr><!-- ________________________________________ -->
</div>
<p class=message><b>メッセージ:</b><br>$message</p>
<p><a href='$url'>difff《デュフフ》トップへ</a></p>
</body>
</html>
--EOS--
print "Content-type: text/html; charset=utf-8\n\n$html" ;
#- ▲ HTML出力
exit ;
} ;
# ====================