. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
| Server IP : 3.13.122.42 / Your IP :
216.73.217.172 [
Web Server : Apache System : Linux vmsrv01.metacllc.com 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 User : a1securityllc.com_5u5m69iigjb ( 10001) PHP Version : 8.3.31 Disable Function : opcache_get_status Domains : 0 Domains MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/vhosts/a1securityllc.com/httpdocs/wp-content/mu-plugins/wp-toolkit/Login/ |
Upload File : |
<?php
// Copyright 1999-2026. WebPros International GmbH. All rights reserved.
namespace Webpros\WptkWpPlugin\WpToolkit\Login;
use Webpros\WptkWpPlugin\WpToolkit\Common\SwitchableCommand;
use WP_CLI;
class LoginCommand extends SwitchableCommand
{
const TTL_PARAM = 'ttl';
const TTL_MAX_VALUE = 300;
const TTL_MIN_VALUE = 0;
const TTL_DEFAULT_VALUE = 60;
/**
* @var TokenGenerator
*/
private $tokenGenerator;
/**
* @var TokenStorage
*/
private $storage;
/**
* @var UserProvider
*/
private $userProvider;
/**
* @param TokenGenerator $tokenGenerator
* @param TokenStorage $tokenStorage
* @param UserProvider $userProvider
*/
public function __construct($tokenGenerator, $tokenStorage, $userProvider)
{
$this->tokenGenerator = $tokenGenerator;
$this->storage = $tokenStorage;
$this->userProvider = $userProvider;
parent::__construct();
}
protected function getSwitchOption()
{
return LoginBootstrap::MODULE_STATUS_OPTION;
}
/**
* @param array $args
* @param array $assoc_args
* @return void
* @throws WP_CLI\ExitException
*/
public function link($args, $assoc_args)
{
$this->ensureCommandEnabled();
$login = WP_CLI::get_value_from_arg_or_stdin($args, 0);
$login = WP_CLI::read_value($login, $assoc_args);
$user = $this->userProvider->getAdminByLogin($login);
if (!$user instanceof \WP_User) {
WP_CLI::error(sprintf('Login name "%s" is not an administrator login', $login));
}
$ttl = self::TTL_DEFAULT_VALUE;
if (isset($assoc_args[self::TTL_PARAM]) && $assoc_args[self::TTL_PARAM] !== '') {
$ttl = (int)$assoc_args[self::TTL_PARAM];
}
if ($ttl < self::TTL_MIN_VALUE) {
WP_CLI::error('Parameter --ttl can\'t be less than ' . self::TTL_MIN_VALUE);
}
if ($ttl > self::TTL_MAX_VALUE) {
WP_CLI::error('Parameter --ttl can\'t be more than ' . self::TTL_MAX_VALUE);
}
$token = $this->tokenGenerator->generateToken();
$this->storage->saveToken($token, $login, $ttl);
WP_CLI::print_value($this->getAuthLink($token), $assoc_args);
}
/**
* @param string $token
* @return string
*/
private function getAuthLink($token)
{
return add_query_arg(TokenGenerator::TOKEN_QUERY_PARAM, $token, wp_login_url());
}
}