/
dump_json.cgi
executable file
·106 lines (86 loc) · 2.69 KB
/
dump_json.cgi
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
#!/usr/bin/perl
use Digest::SHA qw(hmac_sha1_hex);
use POSIX qw(strftime);
$timestamp = strftime "%Y-%m-%d %H:%M:%S", localtime;
open(KEYFILE, "github.secret");
chomp($secret = <KEYFILE>);
close(KEYFILE);
open(OUTFILE, ">>dump.out");
print OUTFILE "============================================================\n";
print OUTFILE "$timestamp $ENV{'SCRIPT_URI'}\n";
print STDOUT "Content-type: application/json\n";
print STDOUT "\n";
print OUTFILE "REQUEST_METHOD: $ENV{'REQUEST_METHOD'}\n";
if (defined $ENV{'QUERY_STRING'}) {
print OUTFILE "QUERY_STRING: $ENV{'QUERY_STRING'}\n";
}
if (defined $ENV{'CONTENT_TYPE'}) {
print OUTFILE "CONTENT_TYPE: $ENV{'CONTENT_TYPE'}\n";
}
if (defined $ENV{'CONTENT_LENGTH'}) {
print OUTFILE "CONTENT_LENGTH: $ENV{'CONTENT_LENGTH'}\n";
}
$metadata{'method'} = $ENV{'REQUEST_METHOD'};
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$metadata{'query string'} = $ENV{'QUERY_STRING'};
}
if (defined $ENV{'CONTENT_TYPE'}) {
$metadata{'content type'} = $ENV{'CONTENT_TYPE'};
}
if (defined $ENV{'CONTENT_LENGTH'}) {
$metadata{'content length'} = $ENV{'CONTENT_LENGTH'};
}
while (my ($k, $v) = each %metadata) {
push @metadata, '"' . $k . '": "' . $v . '"';
}
$json = "";
$json .= "{\n";
$json .= " \"request\": {\n";
$json .= " " . join(",\n ", @metadata) . "\n";
$json .= " },\n";
print OUTFILE "\n";
print OUTFILE "Headers:\n";
foreach $key (sort(keys(%ENV))) {
if ($key =~ /^HTTP_(.*)/) {
print OUTFILE "$1: $ENV{$key}\n";
}
}
$count = 0;
$json .= " \"headers\": {\n";
foreach $key (sort(keys(%ENV))) {
if ($key =~ /^HTTP_(.*)/) {
$json .= " \"$1\": \"$ENV{$key}\",\n";
$count++;
}
}
$json .= " \"count\": $count\n";
$json .= " },\n";
if (defined $ENV{'CONTENT_LENGTH'}) {
$contents = "";
read (STDIN, $contents, $ENV{'CONTENT_LENGTH'});
$digest = hmac_sha1_hex($contents, $secret);
print OUTFILE "\n";
print OUTFILE "Contents:\n";
print OUTFILE "\n";
print OUTFILE "$contents\n";
print OUTFILE "\n";
print OUTFILE "Digest: sha1=$digest\n";
$contentsAsJson = $contents;
$contentsAsJson =~ s/"/\\"/g;
$contentsAsJson =~ s/\r/\\r/g;
$contentsAsJson =~ s/\n/\\n/g;
$json .= " \"contents\": \"$contentsAsJson\",\n";
$json .= " \"digest\": \"$digest\",\n";
}
$json .= " \"author\": {\n";
$json .= " \"name\": \"Jean Tessier\",\n";
$json .= " \"email\": \"jean\@jeantessier.com\"\n";
$json .= " }\n";
$json .= "}\n";
print STDOUT $json;
print OUTFILE "\n";
print OUTFILE "Output:\n";
print OUTFILE $json;
print OUTFILE "\n";
print OUTFILE "============================================================\n";
close(OUTFILE);