Your IP : 216.73.216.79


Current Path : /var/www/html/dyna-laravel.blunetdev.com/modules/backend/console/
Upload File :
Current File : /var/www/html/dyna-laravel.blunetdev.com/modules/backend/console/WinterPasswd.php

<?php namespace Backend\Console;

use Str;
use Backend\Models\User;
use Winter\Storm\Console\Command;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\Console\Question\Question;

/**
 * Console command to change the password of a Backend user via CLI.
 *
 * @package winter\wn-backend-module
 * @author Ben Thomson
 * @author Winter CMS
 */
class WinterPasswd extends Command
{
    /**
     * @var string|null The default command name for lazy loading.
     */
    protected static $defaultName = 'winter:passwd';

    /**
     * @var string The name and signature of this command.
     */
    protected $signature = 'winter:passwd
        {username? : The username or email of the Backend user. <info>(eg: admin or admin@example.com)</info>}
        {password? : The new password to set.}';

    /**
     * @var string The console command description.
     */
    protected $description = 'Change the password of a Backend user.';
    
    /**
     * @var array List of commands that this command replaces (aliases)
     */
    protected $replaces = [
        'winter:password',
    ];

    /**
     * @var bool Was the password automatically generated?
     */
    protected $generatedPassword = false;

    /**
     * Create a new command instance.
     */
    public function __construct()
    {
        parent::__construct();

        // Register aliases for backwards compatibility with October
        $this->setAliases(['october:passwd']);
    }

    /**
     * Execute the console command.
     * @return int
     */
    public function handle()
    {
        $username = $this->argument('username')
            ?? $this->ask('Username to reset');

        // Check that the user exists
        try {
            $user = User::where('login', $username)
                ->orWhere('email', $username)
                ->firstOrFail();
        } catch (ModelNotFoundException $e) {
            $this->error('The specified user does not exist.');
            return 1;
        }

        $password = $this->argument('password')
            ?? (
                $this->optionalSecret(
                    'Enter new password (leave blank for generated password)',
                    false,
                    false
                ) ?: $this->generatePassword()
            );

        // Change password
        $user->password = $password;
        $user->forceSave();

        $this->info('Password successfully changed.');
        if ($this->generatedPassword) {
            $this->output->writeLn('Password set to <info>' . $password . '</info>.');
        }
        return 0;
    }

    /**
     * Return the 20 most recently updated users for autocompletion of the "username" argument
     */
    public function suggestUsernameValues(): array
    {
        $options = [];
        $users = User::orderBy('updated_at', 'desc')->limit(20)->get();
        foreach ($users as $user) {
            if ($user->email) {
                $options[] = $user->email;
            } elseif ($user->username) {
                $options[] = $user->username;
            }
        }

        return $options;
    }

    /**
     * Prompt the user for input but hide the answer from the console.
     *
     * Also allows for a default to be specified.
     *
     * @param  string  $question
     * @param  bool    $fallback
     * @return string
     */
    protected function optionalSecret($question, $fallback = true, $default = null)
    {
        $question = new Question($question, $default);

        $question->setHidden(true)->setHiddenFallback($fallback);

        return $this->output->askQuestion($question);
    }

    /**
     * Generate a password and flag it as an automatically-generated password.
     *
     * @return string
     */
    protected function generatePassword()
    {
        $this->generatedPassword = true;

        return Str::random(22);
    }
}