Files
My-KOPKB/be/Modules/ExternalSystem/Console/GenerateExternalSystemSsoSecretCommand.php
ismailmasseran b05e074456 Feature/phone register (#11)
Co-authored-by: ISMAIL MASSERAN <topaz@ISMAILs-Macbook.local>
Co-authored-by: ISMAIL MASSERAN <topaz@Mac.dlinkrouter.local>
Reviewed-on: #11
2026-07-14 12:03:22 +08:00

66 lines
2.2 KiB
PHP

<?php
namespace Modules\ExternalSystem\Console;
use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Modules\ExternalSystem\Entities\ExternalSystem;
class GenerateExternalSystemSsoSecretCommand extends Command
{
protected $signature = 'external-system:generate-sso-secret
{code : External system code (e.g. e-vote)}
{--force : Replace an existing SSO secret}
{--length=64 : Secret length in characters}';
protected $description = 'Generate an SSO secret for an external system and store it in the database';
public function handle(): int
{
$code = (string) $this->argument('code');
$length = max(32, (int) $this->option('length'));
$system = ExternalSystem::query()->where('code', $code)->first();
if (! $system) {
$this->components->error("External system [{$code}] not found.");
return self::FAILURE;
}
if (! $system->sso_enabled) {
$this->components->warn("External system [{$code}] does not have SSO enabled.");
}
if (filled($system->sso_secret) && ! $this->option('force')) {
$this->components->error('An SSO secret already exists. Use --force to replace it.');
return self::FAILURE;
}
if (filled($system->sso_secret) && $this->option('force')) {
if (! $this->confirm("Replace the existing SSO secret for [{$code}]?", false)) {
$this->components->info('Aborted.');
return self::SUCCESS;
}
}
$secret = Str::password($length, symbols: true);
$system->sso_secret = $secret;
$system->save();
$this->newLine();
$this->components->info("SSO secret generated for [{$code}].");
$this->newLine();
$this->line('Copy this value into the external system environment:');
$this->newLine();
$this->line(" MYKOPKB_SSO_SECRET={$secret}");
$this->newLine();
$this->components->warn('This secret is shown once. Store it securely before closing this terminal.');
return self::SUCCESS;
}
}