Bozhidar Slaveykov 1 年之前
父节点
当前提交
bbf257e8da

+ 1 - 1
web/Modules/LetsEncrypt/Listeners/HostingAccountIsCreatedListener.php

@@ -25,7 +25,6 @@ class HostingAccountIsCreatedListener
      */
     public function handle(HostingAccountIsCreated $event): void
     {
-
         $generalSettings = Settings::general();
 
         $acmeConfigYaml = view('letsencrypt::actions.acme-config-yaml', [
@@ -87,6 +86,7 @@ class HostingAccountIsCreatedListener
         $applySSLVirtualHost = new ApacheWebsiteApplySSLVirtualHost();
         $applySSLVirtualHost->setDomain($event->model->domain);
         $applySSLVirtualHost->setDomainRoot($event->model->domain_root);
+        $applySSLVirtualHost->setDomainPublic($event->model->domain_public);
         $applySSLVirtualHost->setSslCertificateFilePath($sslCertificateFilePath);
         $applySSLVirtualHost->setSslCertificateKeyFilePath($sslCertificateKeyFilePath);
         $applySSLVirtualHost->setSslCertificateChainFilePath($sslCertificateChainFilePath);

+ 1 - 1
web/Modules/LetsEncrypt/resources/views/actions/acme-config-yaml.blade.php

@@ -12,4 +12,4 @@ certificates:
     solver:
       name: http-file
       adapter: local
-      root: {{ $domainRoot }}
+      root: {{ $domainPublic }}

+ 10 - 1
web/app/Actions/ApacheWebsiteApplySSLVirtualHost.php

@@ -9,6 +9,9 @@ class ApacheWebsiteApplySSLVirtualHost
 {
     public $domain;
     public $domainRoot;
+
+    public $domainPublic;
+
     public $sslCertificateFilePath;
     public $sslCertificateKeyFilePath;
     public $sslCertificateChainFilePath;
@@ -33,6 +36,11 @@ class ApacheWebsiteApplySSLVirtualHost
         $this->domain = $domain;
     }
 
+    public function setDomainPublic($domainPublic)
+    {
+        $this->domainPublic = $domainPublic;
+    }
+
     public function setDomainRoot($domainRoot)
     {
         $this->domainRoot = $domainRoot;
@@ -43,7 +51,8 @@ class ApacheWebsiteApplySSLVirtualHost
         $settings = [
             'port'=> 443,
             'domain' => $this->domain,
-            'domainRoot' => '/var/www/'.$this->domain,
+            'domainRoot' => $this->domainRoot,
+            'domainPublic' => $this->domainPublic,
             'group' => 'www-data',
             'sslCertificateFilePath' => $this->sslCertificateFilePath,
             'sslCertificateKeyFilePath' => $this->sslCertificateKeyFilePath,

+ 5 - 0
web/app/Actions/ApacheWebsiteCreate.php

@@ -49,6 +49,7 @@ class ApacheWebsiteCreate
         }
 
         $domainRoot = '/home/'.$this->user.'/domains/'.$this->domain;
+
         $settings = [
             'port'=> 80,
             'domain' => $this->domain,
@@ -62,11 +63,15 @@ class ApacheWebsiteCreate
 
         $fileManagerApi = new FileManagerApi();
         $fileManagerApi->mkdir($settings['domainRoot']);
+        $fileManagerApi->mkdir($settings['domainPublic']);
 
         $fileManagerApi->filePutContents('/etc/apache2/sites-available/'.$settings['domain'].'.conf', $apache2Sample);
 
         ShellApi::exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$settings['domainRoot']);
+        ShellApi::exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$settings['domainPublic']);
+
         ShellApi::exec('chmod -R 755 '.$settings['domainRoot']);
+        ShellApi::exec('chmod -R 755 '.$settings['domainPublic']);
 
         ShellApi::exec('a2ensite '.$settings['domain'].'.conf');
         ShellApi::exec('systemctl reload apache2');

+ 1 - 1
web/app/Events/ModelWebsiteCreating.php → web/app/Events/ModelWebsiteCreated.php

@@ -10,7 +10,7 @@ use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
 use Illuminate\Foundation\Events\Dispatchable;
 use Illuminate\Queue\SerializesModels;
 
-class ModelWebsiteCreating
+class ModelWebsiteCreated
 {
     use Dispatchable, InteractsWithSockets, SerializesModels;
 

+ 15 - 12
web/app/Listeners/ModelWebsiteCreatingListener.php → web/app/Listeners/ModelWebsiteCreatedListener.php

@@ -3,13 +3,13 @@
 namespace App\Listeners;
 
 use App\Actions\ApacheWebsiteCreate;
-use App\Events\ModelWebsiteCreating;
+use App\Events\ModelWebsiteCreated;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Support\Str;
 use function Symfony\Component\String\u;
 
-class ModelWebsiteCreatingListener
+class ModelWebsiteCreatedListener
 {
     /**
      * Create the event listener.
@@ -22,17 +22,20 @@ class ModelWebsiteCreatingListener
     /**
      * Handle the event.
      */
-    public function handle(ModelWebsiteCreating $event): void
+    public function handle(ModelWebsiteCreated $event): void
     {
-        $model = $event->model;
+        $findWebsite = \App\Models\Website::where('id', $event->model->id)->first();
+        if (!$findWebsite) {
+            return;
+        }
 
-        $username = Str::slug($model->domain);
+        $username = Str::slug($findWebsite->domain);
 
         $email = $username . '@phyrepanel.test';
         $password = uniqid();
 
         $newApacheWebsite = new ApacheWebsiteCreate();
-        $newApacheWebsite->setDomain($model->domain);
+        $newApacheWebsite->setDomain($findWebsite->domain);
         $newApacheWebsite->setUser($username);
         $newApacheWebsite->setEmail($email);
         $newApacheWebsite->setPassword($password);
@@ -41,13 +44,13 @@ class ModelWebsiteCreatingListener
 
         if (!empty($create)) {
 
-            $model->domain_username = $username;
-            $model->home_root = $create['homeRoot'];
-            $model->domain_root = $create['domainRoot'];
-            $model->domain_public = $create['domainPublic'];
-            $model->save();
+            $findWebsite->domain_username = $username;
+            $findWebsite->home_root = $create['homeRoot'];
+            $findWebsite->domain_root = $create['domainRoot'];
+            $findWebsite->domain_public = $create['domainPublic'];
+            $findWebsite->save();
 
-            event(new \App\Events\HostingAccountIsCreated($model));
+            event(new \App\Events\HostingAccountIsCreated($findWebsite));
         }
 
     }

+ 2 - 2
web/app/Models/Website.php

@@ -21,8 +21,8 @@ class Website extends Model
     {
         parent::boot();
 
-        static::creating(function ($model) {
-            event(new \App\Events\ModelWebsiteCreating($model));
+        static::created(function ($model) {
+            event(new \App\Events\ModelWebsiteCreated($model));
         });
 
         static::deleting(function ($model) {

+ 3 - 3
web/app/Providers/AppServiceProvider.php

@@ -2,9 +2,9 @@
 
 namespace App\Providers;
 
-use App\Events\ModelWebsiteCreating;
+use App\Events\ModelWebsiteCreated;
 use App\Events\ModelWebsiteDeleting;
-use App\Listeners\ModelWebsiteCreatingListener;
+use App\Listeners\ModelWebsiteCreatedListener;
 use App\Listeners\ModelWebsiteDeletingListener;
 use Illuminate\Support\Facades\Event;
 use Illuminate\Support\ServiceProvider;
@@ -24,7 +24,7 @@ class AppServiceProvider extends ServiceProvider
      */
     public function boot(): void
     {
-        Event::listen(ModelWebsiteCreating::class,ModelWebsiteCreatingListener::class);
+        Event::listen(ModelWebsiteCreated::class,ModelWebsiteCreatedListener::class);
         Event::listen(ModelWebsiteDeleting::class,ModelWebsiteDeletingListener::class);
     }
 }

+ 4 - 4
web/database/migrations/2023_11_23_214342_create_websites_table.php

@@ -16,10 +16,10 @@ return new class extends Migration
 
             $table->string('domain');
             $table->string('ip')->nullable();
-            $table->string('domain_root');
-            $table->string('domain_public');
-            $table->string('domain_username');
-            $table->string('home_root');
+            $table->string('domain_root')->nullable();
+            $table->string('domain_public')->nullable();
+            $table->string('domain_username')->nullable();
+            $table->string('home_root')->nullable();
             $table->string('screenshot')->nullable();
             $table->integer('user_id')->nullable();
             $table->integer('is_active')->nullable();