@@ -119,6 +119,7 @@ class General extends Component
 | 
				
			|||||||
    public function instantSave()
 | 
					    public function instantSave()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // @TODO: find another way - if possible
 | 
					        // @TODO: find another way - if possible
 | 
				
			||||||
 | 
					        $force_https = $this->application->settings->is_force_https_enabled;
 | 
				
			||||||
        $this->application->settings->is_static = $this->is_static;
 | 
					        $this->application->settings->is_static = $this->is_static;
 | 
				
			||||||
        if ($this->is_static) {
 | 
					        if ($this->is_static) {
 | 
				
			||||||
            $this->application->ports_exposes = 80;
 | 
					            $this->application->ports_exposes = 80;
 | 
				
			||||||
@@ -137,6 +138,9 @@ class General extends Component
 | 
				
			|||||||
        $this->emit('success', 'Application settings updated!');
 | 
					        $this->emit('success', 'Application settings updated!');
 | 
				
			||||||
        $this->checkLabelUpdates();
 | 
					        $this->checkLabelUpdates();
 | 
				
			||||||
        $this->isConfigurationChanged = $this->application->isConfigurationChanged();
 | 
					        $this->isConfigurationChanged = $this->application->isConfigurationChanged();
 | 
				
			||||||
 | 
					        if ($force_https !== $this->is_force_https_enabled) {
 | 
				
			||||||
 | 
					            $this->resetDefaultLabels(false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function getWildcardDomain()
 | 
					    public function getWildcardDomain()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,9 +40,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function __construct(public Server $server)
 | 
					    public function __construct(public Server $server)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (isDev()) {
 | 
					        $this->handle();
 | 
				
			||||||
            $this->handle();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function handle()
 | 
					    public function handle()
 | 
				
			||||||
@@ -129,7 +127,6 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
 | 
				
			|||||||
                } catch (\Throwable $e) {
 | 
					                } catch (\Throwable $e) {
 | 
				
			||||||
                    ray($e);
 | 
					                    ray($e);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                $this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
 | 
					                $this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
 | 
				
			||||||
                $this->server->save();
 | 
					                $this->server->save();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -538,7 +538,7 @@ class Service extends BaseModel
 | 
				
			|||||||
                $serviceLabels = $serviceLabels->merge($defaultLabels);
 | 
					                $serviceLabels = $serviceLabels->merge($defaultLabels);
 | 
				
			||||||
                if (!$isDatabase && $fqdns->count() > 0) {
 | 
					                if (!$isDatabase && $fqdns->count() > 0) {
 | 
				
			||||||
                    if ($fqdns) {
 | 
					                    if ($fqdns) {
 | 
				
			||||||
                        $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik($fqdns, true));
 | 
					                        $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik($this->uuid, $fqdns, true));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                data_set($service, 'labels', $serviceLabels->toArray());
 | 
					                data_set($service, 'labels', $serviceLabels->toArray());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,12 @@ class EmailChannel
 | 
				
			|||||||
            );
 | 
					            );
 | 
				
			||||||
        } catch (Exception $e) {
 | 
					        } catch (Exception $e) {
 | 
				
			||||||
            ray($e->getMessage());
 | 
					            ray($e->getMessage());
 | 
				
			||||||
            send_internal_notification("EmailChannel error: {$e->getMessage()}. Failed to send email to: " . implode(', ', $recepients) . " with subject: {$mailMessage->subject}");
 | 
					            $message = "EmailChannel error: {$e->getMessage()}. Failed to send email to:";
 | 
				
			||||||
 | 
					            if (isset($recepients)) {
 | 
				
			||||||
 | 
					                $message .= implode(', ', $recepients);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $message .= " with subject: {$mailMessage->subject}";
 | 
				
			||||||
 | 
					            send_internal_notification($message);
 | 
				
			||||||
            throw $e;
 | 
					            throw $e;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,12 +147,11 @@ function defaultLabels($id, $name, $pull_request_id = 0, string $type = 'applica
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    return $labels;
 | 
					    return $labels;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function fqdnLabelsForTraefik(Collection $domains, bool $is_force_https_enabled, $onlyPort = null)
 | 
					function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_https_enabled, $onlyPort = null)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    $labels = collect([]);
 | 
					    $labels = collect([]);
 | 
				
			||||||
    $labels->push('traefik.enable=true');
 | 
					    $labels->push('traefik.enable=true');
 | 
				
			||||||
    foreach ($domains as $domain) {
 | 
					    foreach ($domains as $loop => $domain) {
 | 
				
			||||||
        $uuid = (string)new Cuid2(7);
 | 
					 | 
				
			||||||
        $url = Url::fromString($domain);
 | 
					        $url = Url::fromString($domain);
 | 
				
			||||||
        $host = $url->getHost();
 | 
					        $host = $url->getHost();
 | 
				
			||||||
        $path = $url->getPath();
 | 
					        $path = $url->getPath();
 | 
				
			||||||
@@ -161,8 +160,8 @@ function fqdnLabelsForTraefik(Collection $domains, bool $is_force_https_enabled,
 | 
				
			|||||||
        if (is_null($port) && !is_null($onlyPort)) {
 | 
					        if (is_null($port) && !is_null($onlyPort)) {
 | 
				
			||||||
            $port = $onlyPort;
 | 
					            $port = $onlyPort;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $http_label = "{$uuid}-http";
 | 
					        $http_label = "{$uuid}-{$loop}-http";
 | 
				
			||||||
        $https_label = "{$uuid}-https";
 | 
					        $https_label = "{$uuid}-{$loop}-https";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($schema === 'https') {
 | 
					        if ($schema === 'https') {
 | 
				
			||||||
            // Set labels for https
 | 
					            // Set labels for https
 | 
				
			||||||
@@ -213,13 +212,13 @@ function generateLabelsApplication(Application $application, ?ApplicationPreview
 | 
				
			|||||||
        $onlyPort = $ports[0];
 | 
					        $onlyPort = $ports[0];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    $pull_request_id = data_get($preview, 'pull_request_id', 0);
 | 
					    $pull_request_id = data_get($preview, 'pull_request_id', 0);
 | 
				
			||||||
    $container_name = generateApplicationContainerName($application, $pull_request_id);
 | 
					    // $container_name = generateApplicationContainerName($application, $pull_request_id);
 | 
				
			||||||
    $appId = $application->id;
 | 
					    $appId = $application->id;
 | 
				
			||||||
    if ($pull_request_id !== 0 && $pull_request_id !== null) {
 | 
					    if ($pull_request_id !== 0 && $pull_request_id !== null) {
 | 
				
			||||||
        $appId = $appId . '-pr-' . $pull_request_id;
 | 
					        $appId = $appId . '-pr-' . $pull_request_id;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    $labels = collect([]);
 | 
					    $labels = collect([]);
 | 
				
			||||||
    $labels = $labels->merge(defaultLabels($appId, $container_name, $pull_request_id));
 | 
					    $labels = $labels->merge(defaultLabels($appId, $application->uuid, $pull_request_id));
 | 
				
			||||||
    if ($application->fqdn) {
 | 
					    if ($application->fqdn) {
 | 
				
			||||||
        if ($pull_request_id !== 0) {
 | 
					        if ($pull_request_id !== 0) {
 | 
				
			||||||
            $domains = Str::of(data_get($preview, 'fqdn'))->explode(',');
 | 
					            $domains = Str::of(data_get($preview, 'fqdn'))->explode(',');
 | 
				
			||||||
@@ -227,8 +226,7 @@ function generateLabelsApplication(Application $application, ?ApplicationPreview
 | 
				
			|||||||
            $domains = Str::of(data_get($application, 'fqdn'))->explode(',');
 | 
					            $domains = Str::of(data_get($application, 'fqdn'))->explode(',');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // Add Traefik labels no matter which proxy is selected
 | 
					        // Add Traefik labels no matter which proxy is selected
 | 
				
			||||||
        $labels = $labels->merge(fqdnLabelsForTraefik($domains, $application->settings->is_force_https_enabled, $onlyPort));
 | 
					        $labels = $labels->merge(fqdnLabelsForTraefik($application->uuid, $domains, $application->settings->is_force_https_enabled, $onlyPort));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ray($labels);
 | 
					 | 
				
			||||||
    return $labels->all();
 | 
					    return $labels->all();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ return [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // The release version of your application
 | 
					    // The release version of your application
 | 
				
			||||||
    // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
 | 
					    // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
 | 
				
			||||||
    'release' => '4.0.0-beta.94',
 | 
					    'release' => '4.0.0-beta.95',
 | 
				
			||||||
    // When left empty or `null` the Laravel environment will be used
 | 
					    // When left empty or `null` the Laravel environment will be used
 | 
				
			||||||
    'environment' => config('app.env'),
 | 
					    'environment' => config('app.env'),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return '4.0.0-beta.94';
 | 
					return '4.0.0-beta.95';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
            "version": "3.12.36"
 | 
					            "version": "3.12.36"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "v4": {
 | 
					        "v4": {
 | 
				
			||||||
            "version": "4.0.0-beta.94"
 | 
					            "version": "4.0.0-beta.95"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user