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) {