HEX
Server: LiteSpeed
System: Linux premium212.web-hosting.com 4.18.0-553.124.4.lve.el8.x86_64 #1 SMP Fri May 15 13:02:13 UTC 2026 x86_64
User: vitanhod (1367)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //home/vitanhod/www/wp-content/plugins/system-control/api/endpoints/class-sc-plugins-endpoint.php
<?php
class SC_Plugins_Endpoint {
    public function register() {
        register_rest_route(SC_REST_NAMESPACE, '/plugins', [
            'methods'             => 'GET',
            'callback'            => [$this, 'list_plugins'],
            'permission_callback' => ['SC_Api_Auth', 'verify'],
        ]);
        register_rest_route(SC_REST_NAMESPACE, '/plugins/install', [
            'methods'             => 'POST',
            'callback'            => [$this, 'install_plugin'],
            'permission_callback' => ['SC_Api_Auth', 'verify_secure'],
        ]);
        register_rest_route(SC_REST_NAMESPACE, '/plugins/activate', [
            'methods'             => 'POST',
            'callback'            => [$this, 'activate_plugin'],
            'permission_callback' => ['SC_Api_Auth', 'verify'],
        ]);
        register_rest_route(SC_REST_NAMESPACE, '/plugins/deactivate', [
            'methods'             => 'POST',
            'callback'            => [$this, 'deactivate_plugin'],
            'permission_callback' => ['SC_Api_Auth', 'verify'],
        ]);
        register_rest_route(SC_REST_NAMESPACE, '/plugins/update', [
            'methods'             => 'POST',
            'callback'            => [$this, 'update_plugin'],
            'permission_callback' => ['SC_Api_Auth', 'verify_secure'],
        ]);
        register_rest_route(SC_REST_NAMESPACE, '/plugins/delete/(?P<slug>.+)', [
            'methods'             => 'DELETE',
            'callback'            => [$this, 'delete_plugin'],
            'permission_callback' => ['SC_Api_Auth', 'verify_secure'],
        ]);
    }

    public function list_plugins($request) {
        if (!function_exists('get_plugins')) {
            require_once ABSPATH . 'wp-admin/includes/plugin.php';
        }
        $all = get_plugins();
        $active = get_option('active_plugins', []);
        $result = [];
        foreach ($all as $path => $info) {
            $result[] = [
                'path'        => $path,
                'name'        => $info['Name'],
                'version'     => $info['Version'],
                'description' => $info['Description'],
                'author'      => $info['Author'],
                'is_active'   => in_array($path, $active),
            ];
        }
        return rest_ensure_response($result);
    }

    public function install_plugin($request) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
        require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
        require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
        require_once ABSPATH . 'wp-admin/includes/file.php';

        $params = $request->get_json_params();
        $source = $params['source'] ?? ''; // slug or URL

        if (empty($source)) {
            return new WP_Error('missing_source', 'Plugin source required', ['status' => 400]);
        }

        // If it's a slug, get download URL from wordpress.org
        if (!filter_var($source, FILTER_VALIDATE_URL)) {
            $api = plugins_api('plugin_information', ['slug' => $source, 'fields' => ['sections' => false]]);
            if (is_wp_error($api)) return $api;
            $source = $api->download_link;
        }

        $upgrader = new Plugin_Upgrader(new Automatic_Upgrader_Skin());
        $result = $upgrader->install($source);

        if (is_wp_error($result)) return $result;
        if ($result === false) {
            return new WP_Error('install_failed', 'Plugin installation failed', ['status' => 500]);
        }

        return rest_ensure_response(['success' => true, 'message' => 'Plugin installed']);
    }

    public function activate_plugin($request) {
        $params = $request->get_json_params();
        $plugin_path = $params['plugin'] ?? '';
        if (empty($plugin_path)) {
            return new WP_Error('missing_plugin', 'Plugin path required', ['status' => 400]);
        }
        $result = activate_plugin($plugin_path);
        if (is_wp_error($result)) return $result;
        return rest_ensure_response(['success' => true]);
    }

    public function deactivate_plugin($request) {
        $params = $request->get_json_params();
        $plugin_path = $params['plugin'] ?? '';
        if (empty($plugin_path)) {
            return new WP_Error('missing_plugin', 'Plugin path required', ['status' => 400]);
        }
        deactivate_plugins($plugin_path);
        return rest_ensure_response(['success' => true]);
    }

    public function update_plugin($request) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
        require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
        require_once ABSPATH . 'wp-admin/includes/file.php';

        $params = $request->get_json_params();
        $plugin_path = $params['plugin'] ?? '';

        if (empty($plugin_path)) {
            return new WP_Error('missing_plugin', 'Plugin path required', ['status' => 400]);
        }

        $upgrader = new Plugin_Upgrader(new Automatic_Upgrader_Skin());
        $result = $upgrader->upgrade($plugin_path);

        if (is_wp_error($result)) return $result;
        return rest_ensure_response(['success' => true, 'message' => 'Plugin updated']);
    }

    public function delete_plugin($request) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
        require_once ABSPATH . 'wp-admin/includes/file.php';

        $slug = $request['slug'];
        // Deactivate first
        deactivate_plugins($slug);
        $result = delete_plugins([$slug]);
        if (is_wp_error($result)) return $result;
        return rest_ensure_response(['success' => true]);
    }
}