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