[1/7] pakfire.cgi: Separate command processing and HTML generation
Commit Message
Move most of the command execution away from the HTML output.
This makes it easier to modify or extend individual commands.
Also load Pakfire settings earlier to ensure that they are
available during command execution.
Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
---
html/cgi-bin/pakfire.cgi | 61 +++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 29 deletions(-)
Comments
Acked-by: Peter Müller <peter.muelle@ipfire.org>
> Move most of the command execution away from the HTML output.
> This makes it easier to modify or extend individual commands.
>
> Also load Pakfire settings earlier to ensure that they are
> available during command execution.
>
> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
> ---
> html/cgi-bin/pakfire.cgi | 61 +++++++++++++++++++++-------------------
> 1 file changed, 32 insertions(+), 29 deletions(-)
>
> diff --git a/html/cgi-bin/pakfire.cgi b/html/cgi-bin/pakfire.cgi
> index 65c67fb90..b908ec6a0 100644
> --- a/html/cgi-bin/pakfire.cgi
> +++ b/html/cgi-bin/pakfire.cgi
> @@ -39,11 +39,12 @@ my %mainsettings = ();
>
> # Load general settings
> &General::readhash("${General::swroot}/main/settings", \%mainsettings);
> +&General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings);
> &General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color);
>
> # Get CGI request data
> $cgiparams{'ACTION'} = '';
> -$cgiparams{'VALID'} = '';
> +$cgiparams{'FORCE'} = '';
>
> $cgiparams{'INSPAKS'} = '';
> $cgiparams{'DELPAKS'} = '';
> @@ -94,6 +95,35 @@ if($cgiparams{'ACTION'} eq 'json-getstatus') {
> exit;
> }
>
> +### Process Pakfire install/update commands ###
> +if(($cgiparams{'ACTION'} ne '') && (! &_is_pakfire_busy())) {
> + if(($cgiparams{'ACTION'} eq 'install') && ($cgiparams{'FORCE'} eq 'on')) {
> + my @pkgs = split(/\|/, $cgiparams{'INSPAKS'});
> + &General::system_background("/usr/local/bin/pakfire", "install", "--non-interactive", "--no-colors", @pkgs);
> + } elsif(($cgiparams{'ACTION'} eq 'remove') && ($cgiparams{'FORCE'} eq 'on')) {
> + my @pkgs = split(/\|/, $cgiparams{'DELPAKS'});
> + &General::system_background("/usr/local/bin/pakfire", "remove", "--non-interactive", "--no-colors", @pkgs);
> + } elsif($cgiparams{'ACTION'} eq 'update') {
> + &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
> + } elsif($cgiparams{'ACTION'} eq 'upgrade') {
> + &General::system_background("/usr/local/bin/pakfire", "upgrade", "-y", "--no-colors");
> + } elsif($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
> + $pakfiresettings{"TREE"} = $cgiparams{"TREE"};
> +
> + # Check for valid input
> + if ($pakfiresettings{"TREE"} !~ m/^(stable|testing|unstable)$/) {
> + $errormessage .= $Lang::tr{'pakfire invalid tree'};
> + }
> +
> + unless ($errormessage) {
> + &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings);
> +
> + # Update lists
> + &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
> + }
> + }
> +}
> +
> ### Start pakfire page ###
> &Header::showhttpheaders();
>
> @@ -185,9 +215,6 @@ END
> # Process Pakfire commands
> if (($cgiparams{'ACTION'} eq 'install') && (! &_is_pakfire_busy())) {
> my @pkgs = split(/\|/, $cgiparams{'INSPAKS'});
> - if ("$cgiparams{'FORCE'}" eq "on") {
> - &General::system_background("/usr/local/bin/pakfire", "install", "--non-interactive", "--no-colors", @pkgs);
> - } else {
> &Header::openbox("100%", "center", $Lang::tr{'request'});
> my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
> print <<END;
> @@ -222,12 +249,9 @@ END
> &Header::closebigbox();
> &Header::closepage();
> exit;
> - }
> +
> } elsif (($cgiparams{'ACTION'} eq 'remove') && (! &_is_pakfire_busy())) {
> my @pkgs = split(/\|/, $cgiparams{'DELPAKS'});
> - if ("$cgiparams{'FORCE'}" eq "on") {
> - &General::system_background("/usr/local/bin/pakfire", "remove", "--non-interactive", "--no-colors", @pkgs);
> - } else {
> &Header::openbox("100%", "center", $Lang::tr{'request'});
> my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
> print <<END;
> @@ -262,30 +286,9 @@ END
> &Header::closebigbox();
> &Header::closepage();
> exit;
> - }
> -
> -} elsif (($cgiparams{'ACTION'} eq 'update') && (! &_is_pakfire_busy())) {
> - &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
> -} elsif (($cgiparams{'ACTION'} eq 'upgrade') && (! &_is_pakfire_busy())) {
> - &General::system_background("/usr/local/bin/pakfire", "upgrade", "-y", "--no-colors");
> -} elsif ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}") {
> - $pakfiresettings{"TREE"} = $cgiparams{"TREE"};
> -
> - # Check for valid input
> - if ($pakfiresettings{"TREE"} !~ m/^(stable|testing|unstable)$/) {
> - $errormessage .= $Lang::tr{'pakfire invalid tree'};
> - }
> -
> - unless ($errormessage) {
> - &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings);
>
> - # Update lists
> - &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
> - }
> }
>
> -&General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings);
> -
> my %selected=();
> my %checked=();
>
@@ -39,11 +39,12 @@ my %mainsettings = ();
# Load general settings
&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings);
&General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color);
# Get CGI request data
$cgiparams{'ACTION'} = '';
-$cgiparams{'VALID'} = '';
+$cgiparams{'FORCE'} = '';
$cgiparams{'INSPAKS'} = '';
$cgiparams{'DELPAKS'} = '';
@@ -94,6 +95,35 @@ if($cgiparams{'ACTION'} eq 'json-getstatus') {
exit;
}
+### Process Pakfire install/update commands ###
+if(($cgiparams{'ACTION'} ne '') && (! &_is_pakfire_busy())) {
+ if(($cgiparams{'ACTION'} eq 'install') && ($cgiparams{'FORCE'} eq 'on')) {
+ my @pkgs = split(/\|/, $cgiparams{'INSPAKS'});
+ &General::system_background("/usr/local/bin/pakfire", "install", "--non-interactive", "--no-colors", @pkgs);
+ } elsif(($cgiparams{'ACTION'} eq 'remove') && ($cgiparams{'FORCE'} eq 'on')) {
+ my @pkgs = split(/\|/, $cgiparams{'DELPAKS'});
+ &General::system_background("/usr/local/bin/pakfire", "remove", "--non-interactive", "--no-colors", @pkgs);
+ } elsif($cgiparams{'ACTION'} eq 'update') {
+ &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
+ } elsif($cgiparams{'ACTION'} eq 'upgrade') {
+ &General::system_background("/usr/local/bin/pakfire", "upgrade", "-y", "--no-colors");
+ } elsif($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
+ $pakfiresettings{"TREE"} = $cgiparams{"TREE"};
+
+ # Check for valid input
+ if ($pakfiresettings{"TREE"} !~ m/^(stable|testing|unstable)$/) {
+ $errormessage .= $Lang::tr{'pakfire invalid tree'};
+ }
+
+ unless ($errormessage) {
+ &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings);
+
+ # Update lists
+ &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
+ }
+ }
+}
+
### Start pakfire page ###
&Header::showhttpheaders();
@@ -185,9 +215,6 @@ END
# Process Pakfire commands
if (($cgiparams{'ACTION'} eq 'install') && (! &_is_pakfire_busy())) {
my @pkgs = split(/\|/, $cgiparams{'INSPAKS'});
- if ("$cgiparams{'FORCE'}" eq "on") {
- &General::system_background("/usr/local/bin/pakfire", "install", "--non-interactive", "--no-colors", @pkgs);
- } else {
&Header::openbox("100%", "center", $Lang::tr{'request'});
my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
print <<END;
@@ -222,12 +249,9 @@ END
&Header::closebigbox();
&Header::closepage();
exit;
- }
+
} elsif (($cgiparams{'ACTION'} eq 'remove') && (! &_is_pakfire_busy())) {
my @pkgs = split(/\|/, $cgiparams{'DELPAKS'});
- if ("$cgiparams{'FORCE'}" eq "on") {
- &General::system_background("/usr/local/bin/pakfire", "remove", "--non-interactive", "--no-colors", @pkgs);
- } else {
&Header::openbox("100%", "center", $Lang::tr{'request'});
my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
print <<END;
@@ -262,30 +286,9 @@ END
&Header::closebigbox();
&Header::closepage();
exit;
- }
-
-} elsif (($cgiparams{'ACTION'} eq 'update') && (! &_is_pakfire_busy())) {
- &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
-} elsif (($cgiparams{'ACTION'} eq 'upgrade') && (! &_is_pakfire_busy())) {
- &General::system_background("/usr/local/bin/pakfire", "upgrade", "-y", "--no-colors");
-} elsif ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}") {
- $pakfiresettings{"TREE"} = $cgiparams{"TREE"};
-
- # Check for valid input
- if ($pakfiresettings{"TREE"} !~ m/^(stable|testing|unstable)$/) {
- $errormessage .= $Lang::tr{'pakfire invalid tree'};
- }
-
- unless ($errormessage) {
- &General::writehash("${General::swroot}/pakfire/settings", \%pakfiresettings);
- # Update lists
- &General::system_background("/usr/local/bin/pakfire", "update", "--force", "--no-colors");
- }
}
-&General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings);
-
my %selected=();
my %checked=();