mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-28 03:33:25 +02:00
manualpages: Add path and file extension to the configuration
This allows to correctly assign an URL to a file without relying on unique base names. A custom read function is required because General::readhash() doesn't allow paths as hash keys. Modifying the existing functions could affect other CGIs and was therefore dismissed. Fixes: #12806 Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
This commit is contained in:
committed by
Peter Müller
parent
5f8a1acfe9
commit
64db1faf67
@@ -93,7 +93,7 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
|
|||||||
|
|
||||||
### Initialize user manual
|
### Initialize user manual
|
||||||
my %manualpages = ();
|
my %manualpages = ();
|
||||||
&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
|
&_read_manualpage_hash("${General::swroot}/main/manualpages");
|
||||||
|
|
||||||
### Load selected language and theme functions
|
### Load selected language and theme functions
|
||||||
require "${swroot}/langs/en.pl";
|
require "${swroot}/langs/en.pl";
|
||||||
@@ -558,20 +558,43 @@ sub colorize {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get user manual URL for the specified configuration page, returns empty if no entry is configured
|
# Get user manual URL for a configuration page inside the "/cgi-bin/"
|
||||||
|
# (reads current page from the environment variables unless defined)
|
||||||
|
# Returns empty if no URL is available
|
||||||
sub get_manualpage_url() {
|
sub get_manualpage_url() {
|
||||||
my ($cgi_page) = @_;
|
my ($cgifile) = @_;
|
||||||
|
$cgifile //= substr($ENV{'SCRIPT_NAME'}, 9); # remove fixed "/cgi-bin/" path
|
||||||
|
|
||||||
# Ensure base url is configured
|
# Ensure base url is configured
|
||||||
return unless($manualpages{'BASE_URL'});
|
return unless($manualpages{'BASE_URL'});
|
||||||
|
|
||||||
# Return URL
|
# Return URL
|
||||||
if($cgi_page && defined($manualpages{$cgi_page})) {
|
if($cgifile && defined($manualpages{$cgifile})) {
|
||||||
return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
|
return "$manualpages{'BASE_URL'}/$manualpages{$cgifile}";
|
||||||
}
|
}
|
||||||
|
|
||||||
# No manual page configured, return nothing
|
# No manual page configured, return nothing
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Private function to load a hash of configured user manual pages from file
|
||||||
|
# (run check_manualpages.pl to make sure the file is correct)
|
||||||
|
sub _read_manualpage_hash() {
|
||||||
|
my ($filename) = @_;
|
||||||
|
|
||||||
|
open(my $file, "<", $filename) or return; # Fail silent
|
||||||
|
while(my $line = <$file>) {
|
||||||
|
chomp($line);
|
||||||
|
next if(substr($line, 0, 1) eq '#'); # Skip comments
|
||||||
|
next if(index($line, '=', 1) == -1); # Skip incomplete lines
|
||||||
|
|
||||||
|
my($left, $value) = split(/=/, $line, 2);
|
||||||
|
if($left =~ /^([[:alnum:]\/._-]+)$/) {
|
||||||
|
my $key = $1;
|
||||||
|
$manualpages{$key} = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close($file);
|
||||||
|
}
|
||||||
|
|
||||||
1; # End of package "Header"
|
1; # End of package "Header"
|
||||||
|
|||||||
@@ -1,88 +1,88 @@
|
|||||||
# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
|
# Assign manual page URL path to CGI file ([cgi file]=[path/to/page])
|
||||||
|
# The CGI files are referenced relative to the "/cgi-bin/" path
|
||||||
|
|
||||||
# Base URL (without trailing slash)
|
# Fixed base URL (without trailing slash)
|
||||||
BASE_URL=https://wiki.ipfire.org
|
BASE_URL=https://wiki.ipfire.org
|
||||||
index=configuration/system/startpage
|
|
||||||
|
|
||||||
# System menu
|
# System menu
|
||||||
index=configuration/system/startpage
|
index.cgi=configuration/system/startpage
|
||||||
mail=configuration/system/mail_service
|
mail.cgi=configuration/system/mail_service
|
||||||
remote=configuration/system/ssh
|
remote.cgi=configuration/system/ssh
|
||||||
backup=configuration/system/backup
|
backup.cgi=configuration/system/backup
|
||||||
gui=configuration/system/userinterface
|
gui.cgi=configuration/system/userinterface
|
||||||
fireinfo=fireinfo
|
fireinfo.cgi=fireinfo
|
||||||
vulnerabilities=configuration/system/vulnerabilities
|
vulnerabilities.cgi=configuration/system/vulnerabilities
|
||||||
shutdown=configuration/system/shutdown
|
shutdown.cgi=configuration/system/shutdown
|
||||||
credits=configuration/system/credits
|
credits.cgi=configuration/system/credits
|
||||||
|
|
||||||
# Status menu
|
# Status menu
|
||||||
system=configuration/status/system
|
system.cgi=configuration/status/system
|
||||||
memory=configuration/status/memory
|
memory.cgi=configuration/status/memory
|
||||||
services=configuration/status/services
|
services.cgi=configuration/status/services
|
||||||
media=configuration/status/drives
|
media.cgi=configuration/status/drives
|
||||||
netexternal=configuration/status/network_ext
|
netexternal.cgi=configuration/status/network_ext
|
||||||
netinternal=configuration/status/network_int
|
netinternal.cgi=configuration/status/network_int
|
||||||
netother=configuration/status/network_int
|
netother.cgi=configuration/status/network_int
|
||||||
netovpnrw=configuration/status/network_ovpnrw
|
netovpnrw.cgi=configuration/status/network_ovpnrw
|
||||||
#netovpnsrv=
|
#netovpnsrv.cgi=
|
||||||
wio=addons/wio
|
wio.cgi=addons/wio
|
||||||
hardwaregraphs=configuration/status/hardware_diagrams
|
hardwaregraphs.cgi=configuration/status/hardware_diagrams
|
||||||
entropy=configuration/status/entropy
|
entropy.cgi=configuration/status/entropy
|
||||||
connections=configuration/status/connections
|
connections.cgi=configuration/status/connections
|
||||||
traffic=configuration/status/nettraffic
|
traffic.cgi=configuration/status/nettraffic
|
||||||
#mdstat=
|
#mdstat.cgi=
|
||||||
|
|
||||||
# Network menu
|
# Network menu
|
||||||
zoneconf=configuration/network/zoneconf
|
zoneconf.cgi=configuration/network/zoneconf
|
||||||
dns=dns
|
dns.cgi=dns
|
||||||
proxy=configuration/network/proxy
|
proxy.cgi=configuration/network/proxy
|
||||||
urlfilter=configuration/network/proxy/url-filter
|
urlfilter.cgi=configuration/network/proxy/url-filter
|
||||||
#updatexlrator=configuration/network/proxy/update_accelerator
|
#updatexlrator.cgi=configuration/network/proxy/update_accelerator
|
||||||
dhcp=configuration/network/dhcp
|
dhcp.cgi=configuration/network/dhcp
|
||||||
captive=configuration/network/captive
|
captive.cgi=configuration/network/captive
|
||||||
connscheduler=configuration/network/connectionscheduler
|
connscheduler.cgi=configuration/network/connectionscheduler
|
||||||
hosts=configuration/network/hosts
|
hosts.cgi=configuration/network/hosts
|
||||||
dnsforward=configuration/network/dnsforward
|
dnsforward.cgi=configuration/network/dnsforward
|
||||||
routing=configuration/network/static
|
routing.cgi=configuration/network/static
|
||||||
mac=configuration/network/mac-address
|
mac.cgi=configuration/network/mac-address
|
||||||
wakeonlan=configuration/network/wake-on-lan
|
wakeonlan.cgi=configuration/network/wake-on-lan
|
||||||
|
|
||||||
# Services menu
|
# Services menu
|
||||||
vpnmain=configuration/services/ipsec
|
vpnmain.cgi=configuration/services/ipsec
|
||||||
ovpnmain=configuration/services/openvpn
|
ovpnmain.cgi=configuration/services/openvpn
|
||||||
ddns=configuration/services/dyndns
|
ddns.cgi=configuration/services/dyndns
|
||||||
time=configuration/services/ntp
|
time.cgi=configuration/services/ntp
|
||||||
qos=configuration/services/qos
|
qos.cgi=configuration/services/qos
|
||||||
guardian=addons/guardian
|
guardian.cgi=addons/guardian
|
||||||
extrahd=configuration/services/extrahd
|
extrahd.cgi=configuration/services/extrahd
|
||||||
|
|
||||||
# Firewall menu
|
# Firewall menu
|
||||||
firewall=configuration/firewall
|
firewall.cgi=configuration/firewall
|
||||||
fwhosts=configuration/firewall/fwgroups
|
fwhosts.cgi=configuration/firewall/fwgroups
|
||||||
optionsfw=configuration/firewall/options
|
optionsfw.cgi=configuration/firewall/options
|
||||||
ids=configuration/firewall/ips
|
ids.cgi=configuration/firewall/ips
|
||||||
location-block=configuration/firewall/geoip-block
|
location-block.cgi=configuration/firewall/geoip-block
|
||||||
wireless=configuration/firewall/accesstoblue
|
wireless.cgi=configuration/firewall/accesstoblue
|
||||||
iptables=configuration/firewall/iptables
|
iptables.cgi=configuration/firewall/iptables
|
||||||
|
|
||||||
# IPfire menu
|
# IPfire menu
|
||||||
pakfire=configuration/ipfire/pakfire
|
pakfire.cgi=configuration/ipfire/pakfire
|
||||||
wlanap=addons/wireless
|
wlanap.cgi=addons/wireless
|
||||||
tor=addons/tor
|
tor.cgi=addons/tor
|
||||||
mpfire=addons/mpfire
|
mpfire.cgi=addons/mpfire
|
||||||
samba=addons/samba
|
samba.cgi=addons/samba
|
||||||
|
|
||||||
# Logs menu
|
# Logs menu
|
||||||
summary=configuration/logs/summary
|
logs.cgi/summary.dat=configuration/logs/summary
|
||||||
config=configuration/logs/logsettings
|
logs.cgi/config.dat=configuration/logs/logsettings
|
||||||
proxylog=configuration/logs/proxy
|
logs.cgi/proxylog.dat=configuration/logs/proxy
|
||||||
calamaris=configuration/logs/proxyreports
|
logs.cgi/calamaris.dat=configuration/logs/proxyreports
|
||||||
accounting=addons/squid-accounting
|
logs.cgi/accounting.dat=addons/squid-accounting
|
||||||
firewalllog=configuration/logs/firewall
|
logs.cgi/firewalllog.dat=configuration/logs/firewall
|
||||||
firewalllogip=configuration/logs/firewall-ip
|
logs.cgi/firewalllogip.dat=configuration/logs/firewall-ip
|
||||||
firewalllogport=configuration/logs/firewall-port
|
logs.cgi/firewalllogport.dat=configuration/logs/firewall-port
|
||||||
firewalllogcountry=configuration/logs/firewall-country
|
logs.cgi/firewalllogcountry.dat=configuration/logs/firewall-country
|
||||||
ids=configuration/logs/ips
|
logs.cgi/ids.dat=configuration/logs/ips
|
||||||
#ovpnclients=
|
#logs.cgi/ovpnclients.dat=
|
||||||
urlfilter=configuration/logs/url-filter
|
logs.cgi/urlfilter.dat=configuration/logs/url-filter
|
||||||
log=configuration/logs/system
|
logs.cgi/log.dat=configuration/logs/system
|
||||||
|
|||||||
@@ -100,8 +100,6 @@ sub openpage {
|
|||||||
my $boh = shift;
|
my $boh = shift;
|
||||||
my $extrahead = shift;
|
my $extrahead = shift;
|
||||||
my $suppressMenu = shift // 0;
|
my $suppressMenu = shift // 0;
|
||||||
my @tmp = split(/\./, basename($0));
|
|
||||||
my $scriptName = @tmp[0];
|
|
||||||
|
|
||||||
my $headline = "IPFire";
|
my $headline = "IPFire";
|
||||||
if (($settings{'WINDOWWITHHOSTNAME'} eq 'on') || ($settings{'WINDOWWITHHOSTNAME'} eq '')) {
|
if (($settings{'WINDOWWITHHOSTNAME'} eq 'on') || ($settings{'WINDOWWITHHOSTNAME'} eq '')) {
|
||||||
@@ -172,7 +170,7 @@ END
|
|||||||
;
|
;
|
||||||
|
|
||||||
# Print user manual link
|
# Print user manual link
|
||||||
my $manual_url = &Header::get_manualpage_url($scriptName);
|
my $manual_url = &Header::get_manualpage_url();
|
||||||
if($manual_url) {
|
if($manual_url) {
|
||||||
print <<END
|
print <<END
|
||||||
<span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
|
<span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
|
||||||
|
|||||||
@@ -25,18 +25,19 @@ use strict;
|
|||||||
# Import make.sh environment
|
# Import make.sh environment
|
||||||
my $basedir = $ENV{'BASEDIR'};
|
my $basedir = $ENV{'BASEDIR'};
|
||||||
|
|
||||||
# Load configuration file (General::readhash isn't available yet)
|
# Load configuration file (Header::_read_manualpage_hash() isn't available yet)
|
||||||
my $configfile = "${basedir}/config/cfgroot/manualpages";
|
my $configfile = "${basedir}/config/cfgroot/manualpages";
|
||||||
my %manualpages = ();
|
my %manualpages = ();
|
||||||
|
|
||||||
open(my $file, "<", $configfile) or die "ERROR: Can't read from file '$configfile'!\n";
|
open(my $file, "<", $configfile) or die "ERROR: Can't read from file '$configfile'!\n";
|
||||||
while(my $line = <$file>) {
|
while(my $line = <$file>) {
|
||||||
$line =~ s/\R//g;
|
chomp($line);
|
||||||
next unless($line =~ /=/);
|
next if(substr($line, 0, 1) eq '#'); # Skip comments
|
||||||
|
next if(index($line, '=', 1) == -1); # Skip incomplete lines
|
||||||
|
|
||||||
my($left, $value) = split(/=/, $line, 2);
|
my($left, $value) = split(/=/, $line, 2);
|
||||||
if($left =~ /(^[A-Za-z0-9_-]+$)/) {
|
if($left =~ /^([[:alnum:]\/._-]+)$/) {
|
||||||
my $key = $1; # Got alphanumeric key
|
my $key = $1;
|
||||||
$manualpages{$key} = $value;
|
$manualpages{$key} = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -55,11 +56,11 @@ if ($baseurl =~ /\/\s*$/) {
|
|||||||
|
|
||||||
# Loop trough configured manual pages
|
# Loop trough configured manual pages
|
||||||
foreach my $page (keys %manualpages) {
|
foreach my $page (keys %manualpages) {
|
||||||
# Build absolute path and URL
|
# Build absolute path (inside cgi-bin) and URL
|
||||||
my $cgifile = "${basedir}/html/cgi-bin/${page}.cgi";
|
my $cgifile = "${basedir}/html/cgi-bin/${page}";
|
||||||
my $url = "${baseurl}/$manualpages{$page}";
|
my $url = "${baseurl}/$manualpages{$page}";
|
||||||
|
|
||||||
print "${page}.cgi -> '$url'\n";
|
print "cgi-bin/${page} -> '$url'\n";
|
||||||
|
|
||||||
# Check CGI file exists
|
# Check CGI file exists
|
||||||
if(! -f $cgifile) {
|
if(! -f $cgifile) {
|
||||||
|
|||||||
Reference in New Issue
Block a user