#!/usr/bin/perl -w # -*- perl -*- use P4CGI ; use strict ; # ################################################################# # CONFIGURATION INFORMATION # All config info should be in P4CGI.pm # ################################################################# # # P4 "smart" HTML file viewer (maybe too smart....) # View a HTML file # ################################################################# use viewConfig ; # Get type arg my $type = P4CGI::cgi()->param("TYPE") ; &P4CGI::bail("No file type specified") unless defined $type ; my $err2null = &P4CGI::REDIRECT_ERROR_TO_NULL_DEVICE() ; my $p4_depot=&P4CGI::CURR_DEPOT_NO() ; if($type ne "ABOUT") { my $content = "text/html" ; # Get file spec argument my $file = P4CGI::cgi()->param("FSPC") ; &P4CGI::bail("No file specified") unless defined $file ; $file = &P4CGI::htmlEncode($file) ; my $revision = P4CGI::cgi()->param("REV") ; if (defined $revision) { $revision =~ s/^(\d+).*/$1/ ; $revision = "#$revision" ; } ; $revision="" unless defined $revision ; my $filename=$file ; $filename =~ s/^.*\///; print "Content-Type: $content\n", "Content-Disposition: filename=$filename\n", "\n" ; my $fileText ; &P4CGI::p4call(\$fileText, "print -q \"$file$revision\"" ); my @file = split(/(<[^>]+>)/,$fileText) ; my $l ; foreach $l (@file) { if($l =~ /^<(\w+)/) { my $fld=uc($1) ; my $prompt ; $prompt = "href" if $fld eq "LINK" ; $prompt = "href" if $fld eq "A" ; $prompt = "src" if $fld eq "FRAME" ; $prompt = "src" if $fld eq "IMG" ; $prompt = "background" if $fld eq "BODY" ; unless(defined $prompt) { print $l ; next ; } if ($l =~ /^(<.*$prompt=\")([^\"]+)(\".*)/i ) { #" my ($s,$url,$e) = ($1,$2,$3) ; if ($url =~ m|^\w+://| or $url =~ m|^/| or $url =~ m|:\d+$|) { print $l ; next ; } ; my $ext = "" ; my $anchor = "" ; if($url =~ /(.*)\#(.*)/) { $url = $1 ; $anchor = "#$2" ; } if($url =~ /.*\.(\w+)$/) { $ext = uc($1) ; } my $dir = $file ; $dir =~ s|[^/]*$|| ; my $lnfile = &P4CGI::urlEncode("$dir$url") ; my @log ; &P4CGI::p4call(\@log, "filelog \"$dir$url\" $err2null" ); if(@log == 0 or $log[1] =~ /delete on/) { print $l ; next ; } my $type = $viewConfig::ExtensionToType{$ext} ; $type = $viewConfig::SpecialExtensions{$ext} unless defined $type ; if(defined $type) { my ($nurl,$desc,$content,$about) = @{$viewConfig::TypeData{$type}} ; $url = "$nurl?DP=$p4_depot;FSPC=$lnfile;TYPE=$type$anchor" ; } else { $url = "fileViewer.cgi" . "?DP=$p4_depot;FSPC=$lnfile" ; } print "$s$url$e" ; next ; } } print "$l" ; } ; } else { while(<DATA>) { print ; } ; } # # That's all folks # __END__ Content-Type: text/html <HTML><HEAD><TITLE>P4DB: About HTML Viewer</TITLE> </HEAD> <BODY BGCOLOR="#e0f0f0" VLINK="#663366" TEXT="#000000" LINK="#000099" ALINK="#993399"> <table bgcolor="#FFFFFF" border=0 cellspacing=8> <tr> <th>Note about the HTML viewer</th> </tr> <tr> <td> The "smart" HTML viewer translate relative links to links to files in the depot. </td> </tr> </table> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#4 | 4306 | Fredric Fredricson |
P4DB: Hardened P4DB against malicious parameters (cross site scripting), performed some cleanup and increased version to 3.1.1. |
||
#3 | 4216 | Fredric Fredricson | P4DB: Another partial submit on my way to P4DB 3.1... | ||
#2 | 2875 | Fredric Fredricson | P4DB 3.0 first beta... | ||
#1 | 1638 | Fredric Fredricson | P4DB: Added all (I think) files for P4DB |