GenerateInstanceActor.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\Schema;
  5. use Illuminate\Support\Facades\DB;
  6. use App\Models\InstanceActor;
  7. use Cache;
  8. class GenerateInstanceActor extends Command
  9. {
  10. protected $signature = 'instance:actor';
  11. protected $description = 'Generate instance actor';
  12. public function __construct()
  13. {
  14. parent::__construct();
  15. }
  16. public function handle()
  17. {
  18. if(Schema::hasTable('instance_actors') == false) {
  19. $this->line(' ');
  20. $this->error('Missing instance_actors table.');
  21. $this->info('Run "php artisan migrate" and try again.');
  22. $this->line(' ');
  23. exit;
  24. }
  25. if(InstanceActor::exists()) {
  26. $this->line(' ');
  27. $this->error('Instance actor already exists!');
  28. $this->line(' ');
  29. $actor = InstanceActor::whereNotNull('public_key')
  30. ->whereNotNull('private_key')
  31. ->firstOrFail();
  32. Cache::rememberForever(InstanceActor::PKI_PUBLIC, function() use($actor) {
  33. return $actor->public_key;
  34. });
  35. Cache::rememberForever(InstanceActor::PKI_PRIVATE, function() use($actor) {
  36. return $actor->private_key;
  37. });
  38. exit;
  39. }
  40. $pkiConfig = [
  41. 'digest_alg' => 'sha512',
  42. 'private_key_bits' => 2048,
  43. 'private_key_type' => OPENSSL_KEYTYPE_RSA,
  44. ];
  45. $pki = openssl_pkey_new($pkiConfig);
  46. openssl_pkey_export($pki, $pki_private);
  47. $pki_public = openssl_pkey_get_details($pki);
  48. $pki_public = $pki_public['key'];
  49. $actor = new InstanceActor();
  50. $actor->public_key = $pki_public;
  51. $actor->private_key = $pki_private;
  52. $actor->save();
  53. Cache::rememberForever(InstanceActor::PKI_PUBLIC, function() use($actor) {
  54. return $actor->public_key;
  55. });
  56. Cache::rememberForever(InstanceActor::PKI_PRIVATE, function() use($actor) {
  57. return $actor->private_key;
  58. });
  59. $this->info('Instance actor succesfully generated. You do not need to run this command again.');
  60. return 0;
  61. }
  62. }