Viewing File: /usr/local/cpanel/3rdparty/wp-toolkit/privileged-executor/WpToolkitCli.pm
# Copyright 1999-2025. WebPros International GmbH. All rights reserved.
package Cpanel::Admin::Modules::Cpanel::WpToolkitCli;
use strict;
use parent ('Cpanel::Admin::Base');
use constant _actions => (
'execute_command',
);
use Cpanel::SafeRun::Object ();
sub normalize_argument_name {
my ($arg) = @_;
return undef unless defined $arg && $arg =~ /^-/;
$arg =~ s/^-+//; # arbitrary number of leading dashes
$arg =~ s/=.*\z//s; # drop inline =value form
return $arg;
}
sub remove_command_argument {
my @args = @{$_[0]};
my $name = normalize_argument_name($_[1]);
return @args unless defined $name;
my $index;
do {
($index) = grep {
my $argName = normalize_argument_name($args[$_]);
defined $argName && $argName eq $name;
} (0 .. @args-1);
if (defined $index) {
do {
splice(@args, $index, 1);
} while (defined $args[$index] && substr($args[$index], 0, 1) ne '-');
}
} while (defined $index);
return @args;
}
sub execute_command {
my ($self, @args) = @_;
my @commandArgs = ('/usr/local/bin/wp-toolkit', '--not-root-gate');
(@args) = remove_command_argument(\@args, '-account-name');
push(@commandArgs, '-account-name');
push(@commandArgs, $self->get_caller_username());
push(@commandArgs, '-command-code');
push(@commandArgs, shift(@args));
push(@commandArgs, '-format');
push(@commandArgs, 'json');
my $stdin = Cpanel::JSON::Dump( \@args );
my $run = Cpanel::SafeRun::Object->new(
program => $commandArgs[0],
args => [ @commandArgs[1..$#commandArgs] ],
stdin => $stdin,
);
return ($run->stdout(), $run->stderr(), $run->CHILD_ERROR());
}
1;
Back to Directory
File Manager