package DECODE; ## use strict; # use CGI; # use Jcode; # ## $CGI::POST_MAX = 1024 * 1024; # 1MB #=================== # #=================== sub new { ## my $class = shift; ## my($enc) = @_; ## if(!($enc eq 'euc' || $enc eq 'sjis' || $enc eq 'utf8')) { return undef; } ## my $cgi = new CGI; my(%htext); ## my $self = { 'CGI' => $cgi, 'HTEXT' => \%htext, 'ENC' => $enc }; ## if(!&setDecode($self, $enc)) { return undef; } return bless $self, $class; } sub setDecode($$) { my $self = shift; my($enc) = @_; my $r_htext = $self->{'HTEXT'}; my $cgi = $self->{'CGI'}; my($key,$val); foreach $key($cgi->param){ foreach $val($cgi->param($key)){ if(ref($val) eq 'Fh') { #$r_htext->{$key} .= "\0" if (defined($r_htext->{$key})); $r_htext->{$key} = 'Fh'; next; } if($enc eq 'euc') { $val = Jcode->new($val, 'euc')->h2z->euc; } elsif($enc eq 'sjis') { $val = Jcode->new($val, 'sjis')->h2z->sjis; # } elsif($enc eq 'utf8') { $val = Jcode->new($val, 'utf8')->h2z->utf8; # } $val =~ s/
/\r\n/g; # $key =~ s/&/&/g; $key =~ s/"/"/g; $key =~ s//>/g; $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; $val =~ s/\t//g; $val =~ s/[\x00-\x20]+/ /g; $val =~ tr/+/ /; #if (!defined($r_htext->{$key})) { #} if($val ne '') { $r_htext->{$key} = $val; } #$r_htext->{$key} .= "\0"; } } #if ($cgi->request_method() ne "POST") {return 0;} return 1; } sub getHtext($) { my $self = shift; return $self->{'HTEXT'}; } sub viewTemplate($$$) { my $self = shift; my($file, $rHash) = @_; if(!open(IN,$file)) { return 0; } if($self->{'ENC'} eq 'euc') { print "Content-type: text/html; charset=\"euc-jp\"\n\n"; } if($self->{'ENC'} eq 'sjis') { print "Content-type: text/html; charset=\"Shift-JIS\"\n\n"; } if($self->{'ENC'} eq 'utf8') { print "Content-type: text/html; charset=\"utf-8\"\n\n"; } while () { my @ary = ($_ =~ m/\[\[--([\w]+)--\]\]/g); foreach my $str (@ary) { if(defined($rHash->{$str})) { $_ =~ s/\[\[--$str--\]\]/$rHash->{$str}/; } } $_ =~ s/\[\[--[\w]+--\]\]//g; print $_; } close(IN); return 1; } sub getTemplate($$$) { my $self = shift; my($file, $rHash) = @_; if(!open(IN,$file)) { return undef; } my $body = ''; # while () { my @ary = ($_ =~ m/\[\[--([\w]+)--\]\]/g); foreach my $str (@ary) { if(defined($rHash->{$str})) { $_ =~ s/\[\[--$str--\]\]/$rHash->{$str}/; } } $_ =~ s/\[\[--[\w]+--\]\]//g; $body .= $_; } close(IN); return $body; } sub makeTemplate($$$$) { my $self = shift; my($inFile, $outFile, $rHash) = @_; if(!open(IN,$inFile)) { return 0; } if(!open(OUT,">$outFile")) { close(IN); return 0; } while () { my @ary = ($_ =~ m/\[\[--([\w]+)--\]\]/g); foreach my $str (@ary) { if(defined($rHash->{$str})) { $_ =~ s/\[\[--$str--\]\]/$rHash->{$str}/; } } $_ =~ s/\[\[--[\w]+--\]\]//g; print OUT $_; } close(OUT); close(IN); return 1; } sub upFile($$$$) { my $self = shift; my $cgi = $self->{'CGI'}; my($frm, $dir, $maxsize) = @_; my(%ret); if ($dir !~ /\/$/) { $dir .= "/"; } if(!defined($cgi)) { $ret{'err'} = "no cgi object."; return \%ret; } my %hash_mime = ( #'text/html' => 'html', # 'image/gif' => 'gif', # 'image/jpeg' => 'jpg', # 'image/pjpeg' => 'jpg', # 'image/png' => 'png' # ); my $fH = $cgi->upload($frm); if ($cgi->cgi_error) { $ret{'err'} = $cgi->cgi_error; return \%ret; } unless (defined($fH)) { $ret{'err'} = "File transfer error."; return \%ret; }; $ret{'mime'} = $cgi->uploadInfo($fH)->{'Content-Type'}; my($ext); if($hash_mime{$ret{'mime'}}) { $ext = $hash_mime{$ret{'mime'}}; } else { $ret{'err'} = "Can't permit this file." . $ret{'mime'}; return \%ret; } $ret{'name'} = $frm . "_" . time . "_" . $$ . "." . $ext; $ret{'size'} = (stat($fH))[7]; if($maxsize !~ m/^[0-9]+$/) { $ret{'err'} = "The filesize is nonsense."; return \%ret; } if ($ret{'size'} > $maxsize * 1024) { $ret{'err'} = "The filesize is too large. Max $maxsize KB"; return \%ret; }; my ($buffer); if(!open (OUT, ">$dir$ret{'name'}")) { $ret{'err'} = "Can't open $ret{'name'}"; return \%ret; } binmode (OUT); while(read($fH, $buffer, 1024)){ print OUT $buffer; } close (OUT); close ($fH) if ($CGI::OS ne 'UNIX'); # # chmod (0666, "$dir$ret{'name'}"); return \%ret; } sub setCookie($$$$$$@) { my $self = shift; my($name, $expires, $domain, $path, $secure, @cook) = @_; if($expires !~ m/^[0-9]+$/) { return 0; } if($secure !~ m/^[01]$/) { return 0; } my $gmt = ''; if($expires != 0) { my @t = gmtime(time + $expires); my @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); my @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); } my $cook = ''; for(my $i = 0;$i < $#cook + 1;$i++) { $cook[$i] =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; # $_ =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; $cook .= $cook[$i]; if(($i + 1) < ($#cook + 1)) { $cook .= '<>'; } } print "Set-Cookie: $name=$cook"; if($expires != 0) { print "; expires=$gmt"; } if($domain ne '') { print "; domain=$domain"; } if($path ne '') { print "; path=$path"; } if($secure == 1) { print "; secure"; } print "\n"; return 1; } sub getCookie($$) { # my(*cook); # my $self = shift; my($name) = @_; my $cook = $ENV{'HTTP_COOKIE'}; my(%cook, @idparam); if(defined($cook)) { @idparam = split(/;/, $cook); } foreach (@idparam) { my($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } my(@cook, @param); if(defined($cook{$name})) { @param = split(/<>/, $cook{$name}); } foreach (@param) { $_ =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg; # $_ =~ tr/+/ /; # $_ =~ s/%([\da-fA-F]{2})/chr hex($1)/ge; push(@cook,$_); } return (@cook); } return 1; __END__