Merge pull request #5529 from coollabsio/next

v4.0.0-beta.405
This commit is contained in:
Andras Bacsai
2025-04-04 07:43:34 +02:00
committed by GitHub
11 changed files with 42 additions and 17 deletions

View File

@@ -368,6 +368,20 @@ class SecurityController extends Controller
response: 404, response: 404,
description: 'Private Key not found.', description: 'Private Key not found.',
), ),
new OA\Response(
response: 422,
description: 'Private Key is in use and cannot be deleted.',
content: [
new OA\MediaType(
mediaType: 'application/json',
schema: new OA\Schema(
type: 'object',
properties: [
'message' => ['type' => 'string', 'example' => 'Private Key is in use and cannot be deleted.'],
]
)
),
]),
] ]
)] )]
public function delete_key(Request $request) public function delete_key(Request $request)
@@ -384,6 +398,14 @@ class SecurityController extends Controller
if (is_null($key)) { if (is_null($key)) {
return response()->json(['message' => 'Private Key not found.'], 404); return response()->json(['message' => 'Private Key not found.'], 404);
} }
if ($key->isInUse()) {
return response()->json([
'message' => 'Private Key is in use and cannot be deleted.',
'details' => 'This private key is currently being used by servers, applications, or Git integrations.',
], 422);
}
$key->forceDelete(); $key->forceDelete();
return response()->json([ return response()->json([

View File

@@ -103,7 +103,7 @@ class ServicesController extends Controller
mediaType: 'application/json', mediaType: 'application/json',
schema: new OA\Schema( schema: new OA\Schema(
type: 'object', type: 'object',
required: ['server_uuid', 'project_uuid', 'environment_name', 'environment_uuid', 'type'], required: ['server_uuid', 'project_uuid', 'environment_name', 'environment_uuid'],
properties: [ properties: [
'type' => [ 'type' => [
'description' => 'The one-click service type', 'description' => 'The one-click service type',
@@ -205,6 +205,7 @@ class ServicesController extends Controller
'server_uuid' => ['type' => 'string', 'description' => 'Server UUID.'], 'server_uuid' => ['type' => 'string', 'description' => 'Server UUID.'],
'destination_uuid' => ['type' => 'string', 'description' => 'Destination UUID. Required if server has multiple destinations.'], 'destination_uuid' => ['type' => 'string', 'description' => 'Destination UUID. Required if server has multiple destinations.'],
'instant_deploy' => ['type' => 'boolean', 'default' => false, 'description' => 'Start the service immediately after creation.'], 'instant_deploy' => ['type' => 'boolean', 'default' => false, 'description' => 'Start the service immediately after creation.'],
'docker_compose_raw' => ['type' => 'string', 'description' => 'The Docker Compose raw content.'],
], ],
), ),
), ),
@@ -256,7 +257,7 @@ class ServicesController extends Controller
'environment_name' => 'string|nullable', 'environment_name' => 'string|nullable',
'environment_uuid' => 'string|nullable', 'environment_uuid' => 'string|nullable',
'server_uuid' => 'string|required', 'server_uuid' => 'string|required',
'destination_uuid' => 'string', 'destination_uuid' => 'string|nullable',
'name' => 'string|max:255', 'name' => 'string|max:255',
'description' => 'string|nullable', 'description' => 'string|nullable',
'instant_deploy' => 'boolean', 'instant_deploy' => 'boolean',

View File

@@ -225,7 +225,7 @@ class SettingsEmail extends Component
'test-email:'.$this->team->id, 'test-email:'.$this->team->id,
$perMinute = 0, $perMinute = 0,
function () { function () {
$this->team?->notify(new Test($this->testEmailAddress, 'email')); $this->team?->notify(new Test($this->testEmailAddress));
$this->dispatch('success', 'Test Email sent.'); $this->dispatch('success', 'Test Email sent.');
}, },
$decaySeconds = 10, $decaySeconds = 10,

View File

@@ -16,10 +16,9 @@ class InvitationLink extends CustomEmailNotification
return [TransactionalEmailChannel::class]; return [TransactionalEmailChannel::class];
} }
public function __construct(public User $user, public bool $isTransactionalEmail) public function __construct(public User $user, public bool $isTransactionalEmail = true)
{ {
$this->onQueue('high'); $this->onQueue('high');
$this->isTransactionalEmail = true;
} }
public function toMail(): MailMessage public function toMail(): MailMessage

View File

@@ -17,11 +17,10 @@ class ResetPassword extends Notification
public InstanceSettings $settings; public InstanceSettings $settings;
public function __construct($token, public bool $isTransactionalEmail) public function __construct($token, public bool $isTransactionalEmail = true)
{ {
$this->settings = instanceSettings(); $this->settings = instanceSettings();
$this->token = $token; $this->token = $token;
$this->isTransactionalEmail = true;
} }
public static function createUrlUsing($callback) public static function createUrlUsing($callback)

View File

@@ -8,10 +8,9 @@ use Illuminate\Notifications\Messages\MailMessage;
class Test extends CustomEmailNotification class Test extends CustomEmailNotification
{ {
public function __construct(public string $emails, public string $isTransactionalEmail) public function __construct(public string $emails, public bool $isTransactionalEmail = true)
{ {
$this->onQueue('high'); $this->onQueue('high');
$this->isTransactionalEmail = true;
} }
public function via(): array public function via(): array

View File

@@ -2,7 +2,7 @@
return [ return [
'coolify' => [ 'coolify' => [
'version' => '4.0.0-beta.404', 'version' => '4.0.0-beta.405',
'helper_version' => '1.0.8', 'helper_version' => '1.0.8',
'realtime_version' => '1.0.6', 'realtime_version' => '1.0.6',
'self_hosted' => env('SELF_HOSTED', true), 'self_hosted' => env('SELF_HOSTED', true),

View File

@@ -5900,8 +5900,7 @@
"server_uuid", "server_uuid",
"project_uuid", "project_uuid",
"environment_name", "environment_name",
"environment_uuid", "environment_uuid"
"type"
], ],
"properties": { "properties": {
"type": { "type": {
@@ -6030,6 +6029,10 @@
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"description": "Start the service immediately after creation." "description": "Start the service immediately after creation."
},
"docker_compose_raw": {
"type": "string",
"description": "The Docker Compose raw content."
} }
}, },
"type": "object" "type": "object"

View File

@@ -3991,7 +3991,6 @@ paths:
- project_uuid - project_uuid
- environment_name - environment_name
- environment_uuid - environment_uuid
- type
properties: properties:
type: type:
description: 'The one-click service type' description: 'The one-click service type'
@@ -4024,6 +4023,9 @@ paths:
type: boolean type: boolean
default: false default: false
description: 'Start the service immediately after creation.' description: 'Start the service immediately after creation.'
docker_compose_raw:
type: string
description: 'The Docker Compose raw content.'
type: object type: object
responses: responses:
'201': '201':

View File

@@ -1,10 +1,10 @@
{ {
"coolify": { "coolify": {
"v4": { "v4": {
"version": "4.0.0-beta.404" "version": "4.0.0-beta.405"
}, },
"nightly": { "nightly": {
"version": "4.0.0-beta.405" "version": "4.0.0-beta.406"
}, },
"helper": { "helper": {
"version": "1.0.8" "version": "1.0.8"

View File

@@ -1,10 +1,10 @@
{ {
"coolify": { "coolify": {
"v4": { "v4": {
"version": "4.0.0-beta.404" "version": "4.0.0-beta.405"
}, },
"nightly": { "nightly": {
"version": "4.0.0-beta.405" "version": "4.0.0-beta.406"
}, },
"helper": { "helper": {
"version": "1.0.8" "version": "1.0.8"