<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\DB; use App\Models\InstanceActor; use Cache; class GenerateInstanceActor extends Command { protected $signature = 'instance:actor'; protected $description = 'Generate instance actor'; public function __construct() { parent::__construct(); } public function handle() { if(Schema::hasTable('instance_actors') == false) { $this->line(' '); $this->error('Missing instance_actors table.'); $this->info('Run "php artisan migrate" and try again.'); $this->line(' '); exit; } if(InstanceActor::exists()) { $actor = InstanceActor::whereNotNull('public_key') ->whereNotNull('private_key') ->firstOrFail(); Cache::rememberForever(InstanceActor::PKI_PUBLIC, function() use($actor) { return $actor->public_key; }); Cache::rememberForever(InstanceActor::PKI_PRIVATE, function() use($actor) { return $actor->private_key; }); $this->info('Instance actor succesfully generated. You do not need to run this command again.'); return; } $pkiConfig = [ 'digest_alg' => 'sha512', 'private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA, ]; $pki = openssl_pkey_new($pkiConfig); openssl_pkey_export($pki, $pki_private); $pki_public = openssl_pkey_get_details($pki); $pki_public = $pki_public['key']; $actor = new InstanceActor(); $actor->public_key = $pki_public; $actor->private_key = $pki_private; $actor->save(); Cache::rememberForever(InstanceActor::PKI_PUBLIC, function() use($actor) { return $actor->public_key; }); Cache::rememberForever(InstanceActor::PKI_PRIVATE, function() use($actor) { return $actor->private_key; }); $this->info('Instance actor succesfully generated. You do not need to run this command again.'); return 0; } }