From a6209fbe5c32be231a50e06dda3c82d6cbeb57e5 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 11:45:23 +0200
Subject: [PATCH 01/11] package updates
---
app/Jobs/ContainerStatusJob.php | 1 -
composer.lock | 136 ++++++++++++++++----------------
config/sentry.php | 2 +-
config/version.php | 2 +-
package-lock.json | 58 +++++++-------
package.json | 14 ++--
6 files changed, 106 insertions(+), 107 deletions(-)
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 6d09644dc..7d68233ce 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -51,7 +51,6 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
while (true) {
ray('checking # ' . $serverUptimeCheckNumber);
if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) {
- send_internal_notification('Server unreachable: ' . $this->server->name);
if ($this->server->unreachable_email_sent === false) {
ray('Server unreachable, sending notification...');
$this->server->team->notify(new Unreachable($this->server));
diff --git a/composer.lock b/composer.lock
index ca8fed810..9f9e8d658 100644
--- a/composer.lock
+++ b/composer.lock
@@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.283.0",
+ "version": "3.283.2",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "5084c03431ecda0003e35d7fc7a12eeca4242685"
+ "reference": "6616677d76e39af28138512740199d38a461859f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5084c03431ecda0003e35d7fc7a12eeca4242685",
- "reference": "5084c03431ecda0003e35d7fc7a12eeca4242685",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6616677d76e39af28138512740199d38a461859f",
+ "reference": "6616677d76e39af28138512740199d38a461859f",
"shasum": ""
},
"require": {
@@ -151,9 +151,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.283.0"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.283.2"
},
- "time": "2023-10-04T18:08:32+00:00"
+ "time": "2023-10-06T18:09:54+00:00"
},
{
"name": "bacon/bacon-qr-code",
@@ -1083,16 +1083,16 @@
},
{
"name": "egulias/email-validator",
- "version": "4.0.1",
+ "version": "4.0.2",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff"
+ "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff",
- "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e",
+ "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e",
"shasum": ""
},
"require": {
@@ -1101,8 +1101,8 @@
"symfony/polyfill-intl-idn": "^1.26"
},
"require-dev": {
- "phpunit/phpunit": "^9.5.27",
- "vimeo/psalm": "^4.30"
+ "phpunit/phpunit": "^10.2",
+ "vimeo/psalm": "^5.12"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@@ -1138,7 +1138,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/4.0.1"
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.2"
},
"funding": [
{
@@ -1146,7 +1146,7 @@
"type": "github"
}
],
- "time": "2023-01-14T14:17:03+00:00"
+ "time": "2023-10-06T06:47:41+00:00"
},
{
"name": "fruitcake/php-cors",
@@ -2724,16 +2724,16 @@
},
{
"name": "league/flysystem",
- "version": "3.16.0",
+ "version": "3.17.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729"
+ "reference": "bd4c9b26849d82364119c68429541f1631fba94b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4fdf372ca6b63c6e281b1c01a624349ccb757729",
- "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/bd4c9b26849d82364119c68429541f1631fba94b",
+ "reference": "bd4c9b26849d82364119c68429541f1631fba94b",
"shasum": ""
},
"require": {
@@ -2751,8 +2751,8 @@
"symfony/http-client": "<5.2"
},
"require-dev": {
- "async-aws/s3": "^1.5",
- "async-aws/simple-s3": "^1.1",
+ "async-aws/s3": "^1.5 || ^2.0",
+ "async-aws/simple-s3": "^1.1 || ^2.0",
"aws/aws-sdk-php": "^3.220.0",
"composer/semver": "^3.0",
"ext-fileinfo": "*",
@@ -2798,7 +2798,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.16.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.17.0"
},
"funding": [
{
@@ -2810,7 +2810,7 @@
"type": "github"
}
],
- "time": "2023-09-07T19:22:17+00:00"
+ "time": "2023-10-05T20:15:05+00:00"
},
{
"name": "league/flysystem-aws-s3-v3",
@@ -3557,16 +3557,16 @@
},
{
"name": "nette/schema",
- "version": "v1.2.4",
+ "version": "v1.2.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab"
+ "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
- "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
+ "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
+ "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
"shasum": ""
},
"require": {
@@ -3613,9 +3613,9 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.2.4"
+ "source": "https://github.com/nette/schema/tree/v1.2.5"
},
- "time": "2023-08-05T18:56:25+00:00"
+ "time": "2023-10-05T20:37:59+00:00"
},
{
"name": "nette/utils",
@@ -6757,16 +6757,16 @@
},
{
"name": "stripe/stripe-php",
- "version": "v12.5.0",
+ "version": "v12.6.0",
"source": {
"type": "git",
"url": "https://github.com/stripe/stripe-php.git",
- "reference": "a4249b4a90437844f6c35e8701f8c68acd206f56"
+ "reference": "e0c15e4cbf252e708b937482bb1a50fa7e01bc9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/stripe/stripe-php/zipball/a4249b4a90437844f6c35e8701f8c68acd206f56",
- "reference": "a4249b4a90437844f6c35e8701f8c68acd206f56",
+ "url": "https://api.github.com/repos/stripe/stripe-php/zipball/e0c15e4cbf252e708b937482bb1a50fa7e01bc9d",
+ "reference": "e0c15e4cbf252e708b937482bb1a50fa7e01bc9d",
"shasum": ""
},
"require": {
@@ -6811,9 +6811,9 @@
],
"support": {
"issues": "https://github.com/stripe/stripe-php/issues",
- "source": "https://github.com/stripe/stripe-php/tree/v12.5.0"
+ "source": "https://github.com/stripe/stripe-php/tree/v12.6.0"
},
- "time": "2023-09-28T23:06:27+00:00"
+ "time": "2023-10-05T18:01:43+00:00"
},
{
"name": "symfony/console",
@@ -10258,16 +10258,16 @@
"packages-dev": [
{
"name": "brianium/paratest",
- "version": "v7.2.8",
+ "version": "v7.2.9",
"source": {
"type": "git",
"url": "https://github.com/paratestphp/paratest.git",
- "reference": "882b02d197328138686bb06ce7d8cbb98fc0a16c"
+ "reference": "1f9e41c0779be4540654d92a9314016713f5e62c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paratestphp/paratest/zipball/882b02d197328138686bb06ce7d8cbb98fc0a16c",
- "reference": "882b02d197328138686bb06ce7d8cbb98fc0a16c",
+ "url": "https://api.github.com/repos/paratestphp/paratest/zipball/1f9e41c0779be4540654d92a9314016713f5e62c",
+ "reference": "1f9e41c0779be4540654d92a9314016713f5e62c",
"shasum": ""
},
"require": {
@@ -10275,13 +10275,13 @@
"ext-pcre": "*",
"ext-reflection": "*",
"ext-simplexml": "*",
- "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1",
+ "fidry/cpu-core-counter": "^0.5.1",
"jean85/pretty-package-versions": "^2.0.5",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
- "phpunit/php-code-coverage": "^10.1.3",
- "phpunit/php-file-iterator": "^4.0.2",
+ "phpunit/php-code-coverage": "^10.1.7",
+ "phpunit/php-file-iterator": "^4.1.0",
"phpunit/php-timer": "^6.0",
- "phpunit/phpunit": "^10.3.2",
+ "phpunit/phpunit": "^10.4.0",
"sebastian/environment": "^6.0.1",
"symfony/console": "^6.3.4",
"symfony/process": "^6.3.4"
@@ -10290,8 +10290,8 @@
"doctrine/coding-standard": "^12.0.0",
"ext-pcov": "*",
"ext-posix": "*",
- "infection/infection": "^0.27.0",
- "phpstan/phpstan": "^1.10.32",
+ "infection/infection": "^0.27.3",
+ "phpstan/phpstan": "^1.10.37",
"phpstan/phpstan-deprecation-rules": "^1.1.4",
"phpstan/phpstan-phpunit": "^1.3.14",
"phpstan/phpstan-strict-rules": "^1.5.1",
@@ -10337,7 +10337,7 @@
],
"support": {
"issues": "https://github.com/paratestphp/paratest/issues",
- "source": "https://github.com/paratestphp/paratest/tree/v7.2.8"
+ "source": "https://github.com/paratestphp/paratest/tree/v7.2.9"
},
"funding": [
{
@@ -10349,7 +10349,7 @@
"type": "paypal"
}
],
- "time": "2023-10-04T13:38:04+00:00"
+ "time": "2023-10-06T07:53:04+00:00"
},
{
"name": "fakerphp/faker",
@@ -10983,35 +10983,35 @@
},
{
"name": "pestphp/pest",
- "version": "v2.20.0",
+ "version": "v2.21.0",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest.git",
- "reference": "a8b785f69e44ae3f902cbf08fe6b79359ba46945"
+ "reference": "2ffafd445d42c8b7b7e1874bde1c29945767a49d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest/zipball/a8b785f69e44ae3f902cbf08fe6b79359ba46945",
- "reference": "a8b785f69e44ae3f902cbf08fe6b79359ba46945",
+ "url": "https://api.github.com/repos/pestphp/pest/zipball/2ffafd445d42c8b7b7e1874bde1c29945767a49d",
+ "reference": "2ffafd445d42c8b7b7e1874bde1c29945767a49d",
"shasum": ""
},
"require": {
- "brianium/paratest": "^7.2.7",
+ "brianium/paratest": "^7.2.9",
"nunomaduro/collision": "^7.9.0",
"nunomaduro/termwind": "^1.15.1",
"pestphp/pest-plugin": "^2.1.1",
"pestphp/pest-plugin-arch": "^2.3.3",
"php": "^8.1.0",
- "phpunit/phpunit": "^10.3.5"
+ "phpunit/phpunit": "^10.4.0"
},
"conflict": {
- "phpunit/phpunit": ">10.3.5",
+ "phpunit/phpunit": ">10.4.0",
"sebastian/exporter": "<5.1.0",
"webmozart/assert": "<1.11.0"
},
"require-dev": {
"pestphp/pest-dev-tools": "^2.16.0",
- "pestphp/pest-plugin-type-coverage": "^2.2.0",
+ "pestphp/pest-plugin-type-coverage": "^2.4.0",
"symfony/process": "^6.3.4"
},
"bin": [
@@ -11070,7 +11070,7 @@
],
"support": {
"issues": "https://github.com/pestphp/pest/issues",
- "source": "https://github.com/pestphp/pest/tree/v2.20.0"
+ "source": "https://github.com/pestphp/pest/tree/v2.21.0"
},
"funding": [
{
@@ -11082,7 +11082,7 @@
"type": "github"
}
],
- "time": "2023-09-29T18:05:52+00:00"
+ "time": "2023-10-06T12:33:39+00:00"
},
{
"name": "pestphp/pest-plugin",
@@ -11454,16 +11454,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.37",
+ "version": "1.10.38",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e"
+ "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/058ba07e92f744d4dcf6061ae75283d0c6456f2e",
- "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691",
+ "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691",
"shasum": ""
},
"require": {
@@ -11512,7 +11512,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-02T16:18:37+00:00"
+ "time": "2023-10-06T14:19:14+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -11837,16 +11837,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.3.5",
+ "version": "10.4.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "747c3b2038f1139e3dcd9886a3f5a948648b7503"
+ "reference": "9784e877e3700de37475545bdbdce8383ff53d25"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/747c3b2038f1139e3dcd9886a3f5a948648b7503",
- "reference": "747c3b2038f1139e3dcd9886a3f5a948648b7503",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9784e877e3700de37475545bdbdce8383ff53d25",
+ "reference": "9784e877e3700de37475545bdbdce8383ff53d25",
"shasum": ""
},
"require": {
@@ -11886,7 +11886,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.3-dev"
+ "dev-main": "10.4-dev"
}
},
"autoload": {
@@ -11918,7 +11918,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.5"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.0"
},
"funding": [
{
@@ -11934,7 +11934,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-19T05:42:37+00:00"
+ "time": "2023-10-06T03:41:22+00:00"
},
{
"name": "sebastian/cli-parser",
diff --git a/config/sentry.php b/config/sentry.php
index ab05d1fa5..747522787 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@ return [
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
- 'release' => '4.0.0-beta.70',
+ 'release' => '4.0.0-beta.71',
// When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'),
diff --git a/config/version.php b/config/version.php
index c58fd74b3..b255224ee 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
=16.0.0"
@@ -683,9 +683,9 @@
"integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="
},
"node_modules/alpinejs": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.0.tgz",
- "integrity": "sha512-7FYR1Yz3evIjlJD1mZ3SYWSw+jlOmQGeQ1QiSufSQ6J84XMQFkzxm6OobiZ928SfqhGdoIp2SsABNsS4rXMMJw==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.1.tgz",
+ "integrity": "sha512-/LZ7mumW02V7AV5xTTftJFHS0I3KOXLl7tHm4xpxXAV+HJ/zjTT0n8MU7RZ6UoGPhmO/i+KEhQojaH/0RsH5tg==",
"dependencies": {
"@vue/reactivity": "~3.1.1"
}
@@ -756,9 +756,9 @@
}
},
"node_modules/axios": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
- "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
+ "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.0",
@@ -953,15 +953,15 @@
"dev": true
},
"node_modules/daisyui": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.7.7.tgz",
- "integrity": "sha512-2/nFdW/6R9MMnR8tTm07jPVyPaZwpUSkVsFAADb7Oq8N2Ynbls57laDdNqxTCUmn0QvcZi01TKl8zQbAwRfw1w==",
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.9.2.tgz",
+ "integrity": "sha512-yJZ1QjHUaL+r9BkquTdzNHb7KIgAJVFh0zbOXql2Wu0r7zx5qZNLxclhjN0WLoIpY+o2h/8lqXg7ijj8oTigOw==",
"dependencies": {
"colord": "^2.9",
"css-selector-tokenizer": "^0.8",
"postcss": "^8",
"postcss-js": "^4",
- "tailwindcss": "^3"
+ "tailwindcss": "^3.1"
},
"engines": {
"node": ">=16.9.0"
@@ -1289,9 +1289,9 @@
}
},
"node_modules/laravel-vite-plugin": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.0.tgz",
- "integrity": "sha512-6VjLI+azBpeK6rWBiKcb/En5GnTdYpL0U4zS8gXYvb2/VSq4mlau5H3NWpSktUDBMM1b97LLgICx5zevi8IY0w==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.1.tgz",
+ "integrity": "sha512-fxzUDjOA37kOsYq8dP+3oPIlw8/kJVXwu0hOXLun82R1LpV02shGeWGYKx2lbpKffL5I0sfPPjfqbYxuqBluAA==",
"dev": true,
"dependencies": {
"picocolors": "^1.0.0",
@@ -1516,9 +1516,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.30",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz",
- "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"funding": [
{
"type": "opencollective",
@@ -1920,9 +1920,9 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/vite": {
- "version": "4.4.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
- "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
+ "version": "4.4.11",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
+ "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==",
"dev": true,
"dependencies": {
"esbuild": "^0.18.10",
diff --git a/package.json b/package.json
index 07f97b913..69f9e494a 100644
--- a/package.json
+++ b/package.json
@@ -6,19 +6,19 @@
"build": "vite build"
},
"devDependencies": {
- "@vitejs/plugin-vue": "4.3.4",
+ "@vitejs/plugin-vue": "4.4.0",
"autoprefixer": "10.4.16",
- "axios": "1.5.0",
- "laravel-vite-plugin": "0.8.0",
- "postcss": "8.4.30",
+ "axios": "1.5.1",
+ "laravel-vite-plugin": "0.8.1",
+ "postcss": "8.4.31",
"tailwindcss": "3.3.3",
- "vite": "4.4.9",
+ "vite": "4.4.11",
"vue": "3.3.4"
},
"dependencies": {
"@tailwindcss/typography": "0.5.10",
- "alpinejs": "3.13.0",
- "daisyui": "3.7.7",
+ "alpinejs": "3.13.1",
+ "daisyui": "3.9.2",
"tailwindcss-scrollbar": "0.1.0"
}
}
From 8004a40139f3c3d7c2d2a5d89d883ebe6f7ee596 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 11:49:38 +0200
Subject: [PATCH 02/11] updates
---
app/Jobs/ContainerStatusJob.php | 4 +-
bootstrap/helpers/remoteProcess.php | 98 ++++++++++++++---------------
2 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 7d68233ce..8156939e5 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -53,7 +53,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) {
if ($this->server->unreachable_email_sent === false) {
ray('Server unreachable, sending notification...');
- $this->server->team->notify(new Unreachable($this->server));
+ // $this->server->team->notify(new Unreachable($this->server));
}
$this->server->settings()->update([
'is_reachable' => false,
@@ -70,7 +70,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
}
if (data_get($this->server, 'unreachable_email_sent') === true) {
ray('Server is reachable again, sending notification...');
- $this->server->team->notify(new Revived($this->server));
+ // $this->server->team->notify(new Revived($this->server));
$this->server->update(['unreachable_email_sent' => false]);
}
if (
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index 8aa22d6f2..b32db5b2c 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -180,55 +180,55 @@ function refresh_server_connection(PrivateKey $private_key)
}
}
-function validateServer(Server $server, bool $throwError = false)
-{
- try {
- $uptime = instant_remote_process(['uptime'], $server, $throwError);
- if (!$uptime) {
- $server->settings->is_reachable = false;
- $server->team->notify(new Unreachable($server));
- $server->unreachable_email_sent = true;
- $server->save();
- return [
- "uptime" => null,
- "dockerVersion" => null,
- ];
- }
- $server->settings->is_reachable = true;
- instant_remote_process(["docker ps"], $server, $throwError);
- $dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $server, $throwError);
- if (!$dockerVersion) {
- $dockerVersion = null;
- return [
- "uptime" => $uptime,
- "dockerVersion" => null,
- ];
- }
- $dockerVersion = checkMinimumDockerEngineVersion($dockerVersion);
- if (is_null($dockerVersion)) {
- $server->settings->is_usable = false;
- } else {
- $server->settings->is_usable = true;
- if (data_get($server, 'unreachable_email_sent') === true) {
- $server->team->notify(new Revived($server));
- $server->unreachable_email_sent = false;
- $server->save();
- }
- }
- return [
- "uptime" => $uptime,
- "dockerVersion" => $dockerVersion,
- ];
- } catch (\Throwable $e) {
- $server->settings->is_reachable = false;
- $server->settings->is_usable = false;
- throw $e;
- } finally {
- if (data_get($server, 'settings')) {
- $server->settings->save();
- }
- }
-}
+// function validateServer(Server $server, bool $throwError = false)
+// {
+// try {
+// $uptime = instant_remote_process(['uptime'], $server, $throwError);
+// if (!$uptime) {
+// $server->settings->is_reachable = false;
+// $server->team->notify(new Unreachable($server));
+// $server->unreachable_email_sent = true;
+// $server->save();
+// return [
+// "uptime" => null,
+// "dockerVersion" => null,
+// ];
+// }
+// $server->settings->is_reachable = true;
+// instant_remote_process(["docker ps"], $server, $throwError);
+// $dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $server, $throwError);
+// if (!$dockerVersion) {
+// $dockerVersion = null;
+// return [
+// "uptime" => $uptime,
+// "dockerVersion" => null,
+// ];
+// }
+// $dockerVersion = checkMinimumDockerEngineVersion($dockerVersion);
+// if (is_null($dockerVersion)) {
+// $server->settings->is_usable = false;
+// } else {
+// $server->settings->is_usable = true;
+// if (data_get($server, 'unreachable_email_sent') === true) {
+// $server->team->notify(new Revived($server));
+// $server->unreachable_email_sent = false;
+// $server->save();
+// }
+// }
+// return [
+// "uptime" => $uptime,
+// "dockerVersion" => $dockerVersion,
+// ];
+// } catch (\Throwable $e) {
+// $server->settings->is_reachable = false;
+// $server->settings->is_usable = false;
+// throw $e;
+// } finally {
+// if (data_get($server, 'settings')) {
+// $server->settings->save();
+// }
+// }
+// }
function checkRequiredCommands(Server $server)
{
From 933ec5741d2821356e163de8ef65f8c2312b5677 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 12:07:42 +0200
Subject: [PATCH 03/11] fix: server unreachable count
---
app/Jobs/ContainerStatusJob.php | 47 +++++++++++--------
...08_111819_add_server_unreachable_count.php | 28 +++++++++++
2 files changed, 56 insertions(+), 19 deletions(-)
create mode 100644 database/migrations/2023_10_08_111819_add_server_unreachable_count.php
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 8156939e5..72e8cb4dd 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -46,28 +46,37 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
try {
ray("checking server status for {$this->server->name}");
// ray()->clearAll();
- $serverUptimeCheckNumber = 0;
+ $serverUptimeCheckNumber = $this->server->unreachable_count;
$serverUptimeCheckNumberMax = 3;
- while (true) {
- ray('checking # ' . $serverUptimeCheckNumber);
- if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) {
- if ($this->server->unreachable_email_sent === false) {
- ray('Server unreachable, sending notification...');
- // $this->server->team->notify(new Unreachable($this->server));
- }
- $this->server->settings()->update([
- 'is_reachable' => false,
- ]);
+
+ ray('checking # ' . $serverUptimeCheckNumber);
+ if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) {
+ if ($this->server->unreachable_email_sent === false) {
+ ray('Server unreachable, sending notification...');
+ // $this->server->team->notify(new Unreachable($this->server));
$this->server->update(['unreachable_email_sent' => true]);
- return;
}
- $result = $this->server->validateConnection();
- if ($result) {
- break;
- }
- $serverUptimeCheckNumber++;
- sleep(5);
+ $this->server->settings()->update([
+ 'is_reachable' => false,
+ 'unreachable_count' => 0,
+ ]);
+ return;
}
+ $result = $this->server->validateConnection();
+ if ($result) {
+ $this->server->settings()->update([
+ 'is_reachable' => true,
+ 'unreachable_count' => 0,
+ ]);
+ } else {
+ $serverUptimeCheckNumber++;
+ $this->server->settings()->update([
+ 'is_reachable' => false,
+ 'unreachable_count' => $serverUptimeCheckNumber,
+ ]);
+ return;
+ }
+
if (data_get($this->server, 'unreachable_email_sent') === true) {
ray('Server is reachable again, sending notification...');
// $this->server->team->notify(new Revived($this->server));
@@ -82,7 +91,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
'is_usable' => true
]);
}
- $this->server->validateDockerEngine(true);
+ // $this->server->validateDockerEngine(true);
$containers = instant_remote_process(["docker container ls -q"], $this->server);
if (!$containers) {
return;
diff --git a/database/migrations/2023_10_08_111819_add_server_unreachable_count.php b/database/migrations/2023_10_08_111819_add_server_unreachable_count.php
new file mode 100644
index 000000000..b6a0d710a
--- /dev/null
+++ b/database/migrations/2023_10_08_111819_add_server_unreachable_count.php
@@ -0,0 +1,28 @@
+integer('unreachable_count')->default(0);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('servers', function (Blueprint $table) {
+ $table->dropColumn('unreachable_count');
+ });
+ }
+};
From 12bb2ecc4a08d39eb64ad85457b14a92ad6a9dfa Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 12:13:30 +0200
Subject: [PATCH 04/11] update
---
app/Jobs/ContainerStatusJob.php | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 72e8cb4dd..8ea4eb6e7 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -58,6 +58,8 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
}
$this->server->settings()->update([
'is_reachable' => false,
+ ]);
+ $this->server->update([
'unreachable_count' => 0,
]);
return;
@@ -66,12 +68,16 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
if ($result) {
$this->server->settings()->update([
'is_reachable' => true,
+ ]);
+ $this->server->update([
'unreachable_count' => 0,
]);
} else {
$serverUptimeCheckNumber++;
$this->server->settings()->update([
'is_reachable' => false,
+ ]);
+ $this->server->update([
'unreachable_count' => $serverUptimeCheckNumber,
]);
return;
From f14995200bf471a19e1b6d747b31815356f6a30f Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 12:41:21 +0200
Subject: [PATCH 05/11] fix: do not reset unreachable count
---
app/Jobs/ContainerStatusJob.php | 3 ---
1 file changed, 3 deletions(-)
diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php
index 8ea4eb6e7..4f104f2ea 100644
--- a/app/Jobs/ContainerStatusJob.php
+++ b/app/Jobs/ContainerStatusJob.php
@@ -59,9 +59,6 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
$this->server->settings()->update([
'is_reachable' => false,
]);
- $this->server->update([
- 'unreachable_count' => 0,
- ]);
return;
}
$result = $this->server->validateConnection();
From 165f0a3d4a44362316d7930384b5bfa2f3aaeca5 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 14:20:55 +0200
Subject: [PATCH 06/11] feat: add email verification for cloud
---
app/Actions/Fortify/CreateNewUser.php | 5 +++
app/Http/Kernel.php | 3 +-
app/Http/Livewire/Upgrade.php | 4 +-
app/Http/Livewire/VerifyEmail.php | 26 +++++++++++
.../Middleware/DecideWhatToDoWithUser.php | 45 +++++++++++++++++++
...dingFlow.php => NOTUSEDIsBoardingFlow.php} | 0
...lid.php => NOTUSEDIsSubscriptionValid.php} | 0
app/Models/Subscription.php | 2 +-
app/Models/User.php | 27 +++++++++--
bootstrap/helpers/subscriptions.php | 12 +++--
resources/views/auth/login.blade.php | 4 +-
resources/views/auth/verify-email.blade.php | 12 +++++
.../views/emails/email-verification.blade.php | 3 ++
.../views/livewire/verify-email.blade.php | 3 ++
routes/web.php | 17 ++++++-
15 files changed, 149 insertions(+), 14 deletions(-)
create mode 100644 app/Http/Livewire/VerifyEmail.php
create mode 100644 app/Http/Middleware/DecideWhatToDoWithUser.php
rename app/Http/Middleware/{IsBoardingFlow.php => NOTUSEDIsBoardingFlow.php} (100%)
rename app/Http/Middleware/{IsSubscriptionValid.php => NOTUSEDIsSubscriptionValid.php} (100%)
create mode 100644 resources/views/auth/verify-email.blade.php
create mode 100644 resources/views/emails/email-verification.blade.php
create mode 100644 resources/views/livewire/verify-email.blade.php
diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php
index 77ae73fce..7950bd4f7 100644
--- a/app/Actions/Fortify/CreateNewUser.php
+++ b/app/Actions/Fortify/CreateNewUser.php
@@ -58,6 +58,11 @@ class CreateNewUser implements CreatesNewUsers
'password' => Hash::make($input['password']),
]);
$team = $user->teams()->first();
+ if (isCloud()) {
+ $user->sendVerificationEmail();
+ } else {
+ $user->markEmailAsVerified();
+ }
}
// Set session variable
session(['currentTeam' => $user->currentTeam = $team]);
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index be63b9694..d8cba40b6 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -38,8 +38,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\CheckForcePasswordReset::class,
- \App\Http\Middleware\IsSubscriptionValid::class,
- \App\Http\Middleware\IsBoardingFlow::class,
+ \App\Http\Middleware\DecideWhatToDoWithUser::class,
],
diff --git a/app/Http/Livewire/Upgrade.php b/app/Http/Livewire/Upgrade.php
index d5ff62a64..ca5f7df30 100644
--- a/app/Http/Livewire/Upgrade.php
+++ b/app/Http/Livewire/Upgrade.php
@@ -5,10 +5,11 @@ namespace App\Http\Livewire;
use App\Actions\Server\UpdateCoolify;
use App\Models\InstanceSettings;
use Livewire\Component;
-use Masmerise\Toaster\Toaster;
+use DanHarrin\LivewireRateLimiting\WithRateLimiting;
class Upgrade extends Component
{
+ use WithRateLimiting;
public bool $showProgress = false;
public bool $isUpgradeAvailable = false;
public string $latestVersion = '';
@@ -31,6 +32,7 @@ class Upgrade extends Component
public function upgrade()
{
try {
+ $this->rateLimit(1, 30);
if ($this->showProgress) {
return;
}
diff --git a/app/Http/Livewire/VerifyEmail.php b/app/Http/Livewire/VerifyEmail.php
new file mode 100644
index 000000000..e485102cb
--- /dev/null
+++ b/app/Http/Livewire/VerifyEmail.php
@@ -0,0 +1,26 @@
+rateLimit(1, 300);
+ auth()->user()->sendVerificationEmail();
+ $this->emit('success', 'Email verification link sent!');
+
+ } catch(\Exception $e) {
+ ray($e);
+ return handleError($e,$this);
+ }
+ }
+ public function render()
+ {
+ return view('livewire.verify-email');
+ }
+}
diff --git a/app/Http/Middleware/DecideWhatToDoWithUser.php b/app/Http/Middleware/DecideWhatToDoWithUser.php
new file mode 100644
index 000000000..a8db3a823
--- /dev/null
+++ b/app/Http/Middleware/DecideWhatToDoWithUser.php
@@ -0,0 +1,45 @@
+user() || !isCloud()) {
+ return $next($request);
+ }
+ if (!auth()->user()->hasVerifiedEmail()) {
+ if ($request->path() === 'verify' || in_array($request->path(), allowedPathsForInvalidAccounts()) || $request->routeIs('verify.verify')) {
+ return $next($request);
+ }
+ return redirect('/verify');
+ }
+ if (!isSubscriptionActive() && !isSubscriptionOnGracePeriod()) {
+ if (!in_array($request->path(), allowedPathsForUnsubscribedAccounts())) {
+ if (Str::startsWith($request->path(), 'invitations')) {
+ return $next($request);
+ }
+ return redirect('subscription');
+ }
+ }
+ if (showBoarding() && !in_array($request->path(), allowedPathsForBoardingAccounts())) {
+ if (Str::startsWith($request->path(), 'invitations')) {
+ return $next($request);
+ }
+ return redirect('boarding');
+ }
+ if (auth()->user()->hasVerifiedEmail() && $request->path() === 'verify') {
+ return redirect('/');
+ }
+ if (isSubscriptionActive() && $request->path() === 'subscription') {
+ return redirect('/');
+ }
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/IsBoardingFlow.php b/app/Http/Middleware/NOTUSEDIsBoardingFlow.php
similarity index 100%
rename from app/Http/Middleware/IsBoardingFlow.php
rename to app/Http/Middleware/NOTUSEDIsBoardingFlow.php
diff --git a/app/Http/Middleware/IsSubscriptionValid.php b/app/Http/Middleware/NOTUSEDIsSubscriptionValid.php
similarity index 100%
rename from app/Http/Middleware/IsSubscriptionValid.php
rename to app/Http/Middleware/NOTUSEDIsSubscriptionValid.php
diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php
index d69d95981..23ed70f8f 100644
--- a/app/Models/Subscription.php
+++ b/app/Models/Subscription.php
@@ -33,7 +33,7 @@ class Subscription extends Model
}
if (isStripe()) {
if (!$this->stripe_plan_id) {
- return 'zero';
+ return 'zero';
}
$subscription = Subscription::where('id', $this->id)->first();
if (!$subscription) {
diff --git a/app/Models/User.php b/app/Models/User.php
index aba05acf3..51ac0aa14 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -6,8 +6,12 @@ use App\Notifications\Channels\SendsEmail;
use App\Notifications\TransactionalEmails\ResetPassword as TransactionalEmailsResetPassword;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notifiable;
+use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\URL;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Sanctum\HasApiTokens;
@@ -54,6 +58,23 @@ class User extends Authenticatable implements SendsEmail
return $this->email;
}
+ public function sendVerificationEmail()
+ {
+ $mail = new MailMessage();
+ $url = Url::temporarySignedRoute(
+ 'verify.verify',
+ Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
+ [
+ 'id' => $this->getKey(),
+ 'hash' => sha1($this->getEmailForVerification()),
+ ]
+ );
+ $mail->view('emails.email-verification', [
+ 'url' => $url,
+ ]);
+ $mail->subject('Coolify Cloud: Verify your email.');
+ send_user_an_email($mail, $this->email);
+ }
public function sendPasswordResetNotification($token): void
{
$this->notify(new TransactionalEmailsResetPassword($token));
@@ -61,7 +82,7 @@ class User extends Authenticatable implements SendsEmail
public function isAdmin()
{
- return data_get($this->pivot,'role') === 'admin' || data_get($this->pivot,'role') === 'owner';
+ return data_get($this->pivot, 'role') === 'admin' || data_get($this->pivot, 'role') === 'owner';
}
public function isAdminFromSession()
@@ -79,7 +100,7 @@ class User extends Authenticatable implements SendsEmail
return true;
}
$team = $teams->where('id', session('currentTeam')->id)->first();
- $role = data_get($team,'pivot.role');
+ $role = data_get($team, 'pivot.role');
return $role === 'admin' || $role === 'owner';
}
@@ -96,7 +117,7 @@ class User extends Authenticatable implements SendsEmail
public function currentTeam()
{
- return Cache::remember('team:' . auth()->user()->id, 3600, function() {
+ return Cache::remember('team:' . auth()->user()->id, 3600, function () {
return Team::find(session('currentTeam')->id);
});
}
diff --git a/bootstrap/helpers/subscriptions.php b/bootstrap/helpers/subscriptions.php
index 9ea76ec9b..cd1f79fb4 100644
--- a/bootstrap/helpers/subscriptions.php
+++ b/bootstrap/helpers/subscriptions.php
@@ -122,14 +122,13 @@ function allowedPathsForUnsubscribedAccounts()
return [
'subscription',
'login',
- 'register',
+ 'logout',
'waitlist',
'force-password-reset',
- 'logout',
'livewire/message/force-password-reset',
'livewire/message/check-license',
'livewire/message/switch-team',
- 'livewire/message/subscription.pricing-plans'
+ 'livewire/message/subscription.pricing-plans',
];
}
function allowedPathsForBoardingAccounts()
@@ -141,3 +140,10 @@ function allowedPathsForBoardingAccounts()
'livewire/message/activity-monitor'
];
}
+function allowedPathsForInvalidAccounts() {
+ return [
+ 'logout',
+ 'verify',
+ 'livewire/message/verify-email',
+ ];
+}
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
index 47ac188f2..d2e00f58f 100644
--- a/resources/views/auth/login.blade.php
+++ b/resources/views/auth/login.blade.php
@@ -9,12 +9,12 @@
@if ($is_registration_enabled)
@if (config('coolify.waitlist'))
+ class="text-xs text-center text-white normal-case bg-transparent border-none rounded no-animation hover:no-underline btn btn-sm bg-coollabs-gradient">
Join the waitlist
@else
+ class="text-xs text-center text-white normal-case bg-transparent border-none rounded no-animation hover:no-underline btn btn-sm bg-coollabs-gradient">
{{ __('auth.register_now') }}
@endif
diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php
new file mode 100644
index 000000000..dca6a4c6a
--- /dev/null
+++ b/resources/views/auth/verify-email.blade.php
@@ -0,0 +1,12 @@
+
+
+
+
Verification Email Sent
+
+
To activate your account, please open the email and follow the
+ instructions.
+
+
+
+
+
diff --git a/resources/views/emails/email-verification.blade.php b/resources/views/emails/email-verification.blade.php
new file mode 100644
index 000000000..ec09f024b
--- /dev/null
+++ b/resources/views/emails/email-verification.blade.php
@@ -0,0 +1,3 @@
+
+ Verify your email [here]({{ $url }}).
+
diff --git a/resources/views/livewire/verify-email.blade.php b/resources/views/livewire/verify-email.blade.php
new file mode 100644
index 000000000..51c48eb65
--- /dev/null
+++ b/resources/views/livewire/verify-email.blade.php
@@ -0,0 +1,3 @@
+
+ Send Verification Email Again
+
diff --git a/routes/web.php b/routes/web.php
index f2df41b74..89b37fdce 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -26,6 +26,7 @@ use App\Models\PrivateKey;
use App\Models\Server;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Route;
@@ -61,7 +62,19 @@ Route::post('/forgot-password', function (Request $request) {
}
return response()->json(['message' => 'Transactional emails are not active'], 400);
})->name('password.forgot');
+
+
Route::get('/waitlist', WaitlistIndex::class)->name('waitlist.index');
+
+Route::get('/verify', function () {
+ return view('auth.verify-email');
+})->middleware('auth')->name('verify.email');
+
+Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
+ $request->fulfill();
+ return redirect('/');
+})->middleware(['auth'])->name('verify.verify');
+
Route::middleware(['throttle:login'])->group(function () {
Route::get('/auth/link', [Controller::class, 'link'])->name('auth.link');
});
@@ -74,7 +87,7 @@ Route::prefix('magic')->middleware(['auth'])->group(function () {
Route::get('/environment/new', [MagicController::class, 'newEnvironment']);
});
-Route::middleware(['auth'])->group(function () {
+Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/projects', [ProjectController::class, 'all'])->name('projects');
Route::get('/project/{project_uuid}/edit', [ProjectController::class, 'edit'])->name('project.edit');
Route::get('/project/{project_uuid}', [ProjectController::class, 'show'])->name('project.show');
@@ -114,7 +127,7 @@ Route::middleware(['auth'])->group(function () {
});
-Route::middleware(['auth'])->group(function () {
+Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/', Dashboard::class)->name('dashboard');
Route::get('/boarding', BoardingIndex::class)->name('boarding');
Route::middleware(['throttle:force-password-reset'])->group(function () {
From d32832fabc11c61bcbfb5ee5b4fd77dbfbf2da6a Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 14:32:30 +0200
Subject: [PATCH 07/11] update
---
app/Http/Middleware/DecideWhatToDoWithUser.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/Http/Middleware/DecideWhatToDoWithUser.php b/app/Http/Middleware/DecideWhatToDoWithUser.php
index a8db3a823..c768a0621 100644
--- a/app/Http/Middleware/DecideWhatToDoWithUser.php
+++ b/app/Http/Middleware/DecideWhatToDoWithUser.php
@@ -11,7 +11,7 @@ class DecideWhatToDoWithUser
{
public function handle(Request $request, Closure $next): Response
{
- if (!auth()->user() || !isCloud()) {
+ if (!auth()->user() || !isCloud() || !auth()->user()->instanceAdmin()) {
return $next($request);
}
if (!auth()->user()->hasVerifiedEmail()) {
From 5cea9c4603aab22d60b0422acda093402f262fb9 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 14:38:44 +0200
Subject: [PATCH 08/11] isInstanceAdmin()
---
app/Http/Middleware/DecideWhatToDoWithUser.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/Http/Middleware/DecideWhatToDoWithUser.php b/app/Http/Middleware/DecideWhatToDoWithUser.php
index c768a0621..70bb9dd6c 100644
--- a/app/Http/Middleware/DecideWhatToDoWithUser.php
+++ b/app/Http/Middleware/DecideWhatToDoWithUser.php
@@ -11,7 +11,7 @@ class DecideWhatToDoWithUser
{
public function handle(Request $request, Closure $next): Response
{
- if (!auth()->user() || !isCloud() || !auth()->user()->instanceAdmin()) {
+ if (!auth()->user() || !isCloud() || isInstanceAdmin()) {
return $next($request);
}
if (!auth()->user()->hasVerifiedEmail()) {
From f33ba40478043e69da767146dfcdbab1dc5ebc0f Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 14:48:51 +0200
Subject: [PATCH 09/11] fix help
---
bootstrap/helpers/subscriptions.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/bootstrap/helpers/subscriptions.php b/bootstrap/helpers/subscriptions.php
index cd1f79fb4..3369776f0 100644
--- a/bootstrap/helpers/subscriptions.php
+++ b/bootstrap/helpers/subscriptions.php
@@ -129,6 +129,7 @@ function allowedPathsForUnsubscribedAccounts()
'livewire/message/check-license',
'livewire/message/switch-team',
'livewire/message/subscription.pricing-plans',
+ 'livewire/message/help'
];
}
function allowedPathsForBoardingAccounts()
@@ -145,5 +146,6 @@ function allowedPathsForInvalidAccounts() {
'logout',
'verify',
'livewire/message/verify-email',
+ 'livewire/message/help'
];
}
From b650f3f754b1541c8719bb53b7c98bec59c99721 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 14:52:24 +0200
Subject: [PATCH 10/11] fix: contact docs
---
README.md | 2 +-
config/coolify.php | 1 +
resources/views/components/pricing-plans.blade.php | 2 +-
resources/views/errors/401.blade.php | 2 +-
resources/views/errors/403.blade.php | 2 +-
resources/views/errors/404.blade.php | 2 +-
resources/views/errors/419.blade.php | 2 +-
resources/views/errors/429.blade.php | 2 +-
resources/views/errors/500.blade.php | 2 +-
resources/views/errors/503.blade.php | 2 +-
resources/views/livewire/subscription/actions.blade.php | 4 ++--
resources/views/livewire/subscription/pricing-plans.blade.php | 4 ++--
12 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 0910b6897..e0c091c41 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@ You can find the installation script [here](./scripts/install.sh).
## Support
-Contact us [here](https://docs.coollabs.io/contact).
+Contact us [here](https://coolify.io/contact).
## Recognitions
diff --git a/config/coolify.php b/config/coolify.php
index cd16d6b6f..5209958b5 100644
--- a/config/coolify.php
+++ b/config/coolify.php
@@ -1,6 +1,7 @@
'https://coolify.io/contact',
'self_hosted' => env('SELF_HOSTED', true),
'waitlist' => env('WAITLIST', false),
'license_url' => 'https://licenses.coollabs.io',
diff --git a/resources/views/components/pricing-plans.blade.php b/resources/views/components/pricing-plans.blade.php
index c80a2353e..4078b7976 100644
--- a/resources/views/components/pricing-plans.blade.php
+++ b/resources/views/components/pricing-plans.blade.php
@@ -256,7 +256,7 @@
your self-hosted instance?
Contact Us
+ href="{{ config('coolify.docs') }}">Contact Us
diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php
index ebf5a1035..92a2f3978 100644
--- a/resources/views/errors/401.blade.php
+++ b/resources/views/errors/401.blade.php
@@ -10,7 +10,7 @@
Go back home
- Contact
+ Contact
support
diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php
index dc8be5fd4..f5fee3d61 100644
--- a/resources/views/errors/403.blade.php
+++ b/resources/views/errors/403.blade.php
@@ -10,7 +10,7 @@
Go back home
- Contact
+ Contact
support
diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php
index d19737391..0f2827801 100644
--- a/resources/views/errors/404.blade.php
+++ b/resources/views/errors/404.blade.php
@@ -11,7 +11,7 @@
Go back home
- Contact
+ Contact
support
diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php
index 05d296426..44b14a789 100644
--- a/resources/views/errors/419.blade.php
+++ b/resources/views/errors/419.blade.php
@@ -11,7 +11,7 @@
Go back home
- Contact
+ Contact
support
→
diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php
index 608591095..14a740f29 100644
--- a/resources/views/errors/429.blade.php
+++ b/resources/views/errors/429.blade.php
@@ -10,7 +10,7 @@
Go back home
- Contact
+ Contact
support
→
diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php
index 07c28ab35..348b3d06c 100644
--- a/resources/views/errors/500.blade.php
+++ b/resources/views/errors/500.blade.php
@@ -14,7 +14,7 @@
Go back home
- Contact
+ Contact
support
→
diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php
index 445dc24de..d7a9441e1 100644
--- a/resources/views/errors/503.blade.php
+++ b/resources/views/errors/503.blade.php
@@ -8,7 +8,7 @@
patience.
diff --git a/resources/views/livewire/subscription/actions.blade.php b/resources/views/livewire/subscription/actions.blade.php
index a251e575a..1b430574d 100644
--- a/resources/views/livewire/subscription/actions.blade.php
+++ b/resources/views/livewire/subscription/actions.blade.php
@@ -16,7 +16,7 @@
again
@endif
To update your subscription (upgrade / downgrade), please
contact us.
+ href="{{ config('coolify.docs') }}" target="_blank">contact us.
@endif
@if (subscriptionProvider() === 'lemon')
@@ -25,7 +25,7 @@
@if (currentTeam()->subscription->lemon_status === 'cancelled')
Subscriptions ends at: {{ getRenewDate() }}
@else
diff --git a/resources/views/livewire/subscription/pricing-plans.blade.php b/resources/views/livewire/subscription/pricing-plans.blade.php
index 86fca8658..cda7df491 100644
--- a/resources/views/livewire/subscription/pricing-plans.blade.php
+++ b/resources/views/livewire/subscription/pricing-plans.blade.php
@@ -23,12 +23,12 @@
+ class="w-full h-10 buyme">
Contact Us
+ class="w-full h-10 buyme">
Contact Us
From ebd8e2ce40ab15456c37cf1392ba61b29f87f72b Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Mon, 9 Oct 2023 15:08:28 +0200
Subject: [PATCH 11/11] fix: check connection
---
.../Livewire/Project/Application/Heading.php | 12 +++++-----
app/Http/Livewire/Project/Shared/Danger.php | 4 +++-
app/Http/Livewire/Server/PrivateKey/Show.php | 2 +-
app/Http/Livewire/Server/ShowPrivateKey.php | 22 +++----------------
app/Models/Application.php | 12 +++++-----
5 files changed, 21 insertions(+), 31 deletions(-)
diff --git a/app/Http/Livewire/Project/Application/Heading.php b/app/Http/Livewire/Project/Application/Heading.php
index fabc43aca..bf4c96cdd 100644
--- a/app/Http/Livewire/Project/Application/Heading.php
+++ b/app/Http/Livewire/Project/Application/Heading.php
@@ -21,11 +21,13 @@ class Heading extends Component
public function check_status()
{
- dispatch(new ContainerStatusJob($this->application->destination->server));
- $this->application->refresh();
- $this->application->previews->each(function ($preview) {
- $preview->refresh();
- });
+ if ($this->application->destination->server->isFunctional()) {
+ dispatch(new ContainerStatusJob($this->application->destination->server));
+ $this->application->refresh();
+ $this->application->previews->each(function ($preview) {
+ $preview->refresh();
+ });
+ }
}
public function force_deploy_without_cache()
diff --git a/app/Http/Livewire/Project/Shared/Danger.php b/app/Http/Livewire/Project/Shared/Danger.php
index b3288fe60..7b6dcab3b 100644
--- a/app/Http/Livewire/Project/Shared/Danger.php
+++ b/app/Http/Livewire/Project/Shared/Danger.php
@@ -31,7 +31,9 @@ class Danger extends Component
$destination = $this->resource->destination->getMorphClass()::where('id', $this->resource->destination->id)->first();
$server = $destination->server;
}
- instant_remote_process(["docker rm -f {$this->resource->uuid}"], $server);
+ if ($this->resource->destination->server->isFunctional()) {
+ instant_remote_process(["docker rm -f {$this->resource->uuid}"], $server);
+ }
}
$this->resource->delete();
return redirect()->route('project.resources', [
diff --git a/app/Http/Livewire/Server/PrivateKey/Show.php b/app/Http/Livewire/Server/PrivateKey/Show.php
index 51c91350e..22c52218a 100644
--- a/app/Http/Livewire/Server/PrivateKey/Show.php
+++ b/app/Http/Livewire/Server/PrivateKey/Show.php
@@ -15,7 +15,7 @@ class Show extends Component
{
$this->parameters = get_route_parameters();
try {
- $this->server = Server::ownedByCurrentTeam(['name', 'proxy'])->whereUuid(request()->server_uuid)->first();
+ $this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
if (is_null($this->server)) {
return redirect()->route('server.all');
}
diff --git a/app/Http/Livewire/Server/ShowPrivateKey.php b/app/Http/Livewire/Server/ShowPrivateKey.php
index 1974226fc..98035fa7c 100644
--- a/app/Http/Livewire/Server/ShowPrivateKey.php
+++ b/app/Http/Livewire/Server/ShowPrivateKey.php
@@ -32,34 +32,18 @@ class ShowPrivateKey extends Component
}
}
- public function checkConnection($install = false)
+ public function checkConnection()
{
try {
$uptime = $this->server->validateConnection();
if ($uptime) {
- $install && $this->emit('success', 'Server is reachable.');
+ $this->emit('success', 'Server is reachable.');
} else {
- $install && $this->emit('error', 'Server is not reachable. Please check your connection and private key configuration.');
- return;
- }
- $dockerInstalled = $this->server->validateDockerEngine();
- if ($dockerInstalled) {
- $install && $this->emit('success', 'Docker Engine is installed.
Checking version.');
- } else {
- $install && $this->installDocker();
- return;
- }
- $dockerVersion = $this->server->validateDockerEngineVersion();
- if ($dockerVersion) {
- $install && $this->emit('success', 'Docker Engine version is 23+.');
- } else {
- $install && $this->installDocker();
+ $this->emit('error', 'Server is not reachable. Please check your connection and private key configuration.');
return;
}
} catch (\Throwable $e) {
return handleError($e, $this);
- } finally {
- $this->emit('proxyStatusUpdated');
}
}
diff --git a/app/Models/Application.php b/app/Models/Application.php
index 69f4abe22..32eb227ca 100644
--- a/app/Models/Application.php
+++ b/app/Models/Application.php
@@ -33,11 +33,13 @@ class Application extends BaseModel
});
static::deleting(function ($application) {
// Stop Container
- instant_remote_process(
- ["docker rm -f {$application->uuid}"],
- $application->destination->server,
- false
- );
+ if ($application->destination->server->isFunctional()) {
+ instant_remote_process(
+ ["docker rm -f {$application->uuid}"],
+ $application->destination->server,
+ false
+ );
+ }
$application->settings()->delete();
$storages = $application->persistentStorages()->get();
foreach ($storages as $storage) {