Compare commits

..

2 Commits
main ... 2.5.1

Author SHA1 Message Date
65898b0ee6 Fix mysqldump backup error
This reverts commit 564b97e2aa.
2025-05-21 20:57:38 +02:00
3124f8c795 Bump league/commonmark from 2.6.1 to 2.7.0 (#595)
Bumps [league/commonmark](https://github.com/thephpleague/commonmark) from 2.6.1 to 2.7.0.
- [Release notes](https://github.com/thephpleague/commonmark/releases)
- [Changelog](https://github.com/thephpleague/commonmark/blob/2.7/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/commonmark/compare/2.6.1...2.7.0)

---
updated-dependencies:
- dependency-name: league/commonmark
  dependency-version: 2.7.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-10 11:12:50 +03:00
365 changed files with 41965 additions and 32506 deletions

View File

@ -3,15 +3,12 @@ root = true
[*] [*]
charset = utf-8 charset = utf-8
end_of_line = lf end_of_line = lf
indent_size = 2 indent_size = 4
indent_style = space indent_style = space
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
ij_any_block_comment_at_first_column = false ij_any_block_comment_at_first_column = false
[*.php]
indent_size = 4
[*.md] [*.md]
trim_trailing_whitespace = false trim_trailing_whitespace = false

View File

@ -13,6 +13,3 @@ sail
!*.blade.php !*.blade.php
!*.sh !*.sh
resources/views/ssh/ resources/views/ssh/
resources/views/scribe/
resources/js/ziggy.js
resources/views/mail/*

View File

@ -1,14 +1,4 @@
{ {
"semi": true,
"singleQuote": true,
"singleAttributePerLine": false,
"htmlWhitespaceSensitivity": "css",
"printWidth": 150,
"tailwindFunctions": [
"clsx",
"cn"
],
"tabWidth": 2,
"plugins": [ "plugins": [
"prettier-plugin-blade", "prettier-plugin-blade",
"prettier-plugin-tailwindcss", "prettier-plugin-tailwindcss",
@ -16,9 +6,7 @@
], ],
"overrides": [ "overrides": [
{ {
"files": [ "files": ["*.blade.php"],
"*.blade.php"
],
"options": { "options": {
"parser": "blade", "parser": "blade",
"printWidth": 120, "printWidth": 120,
@ -29,18 +17,10 @@
} }
}, },
{ {
"files": [ "files": ["*.sh"],
"*.sh"
],
"options": { "options": {
"parser": "sh" "parser": "sh"
} }
},
{
"files": "**/*.yml",
"options": {
"tabWidth": 2
}
} }
] ]
} }

View File

@ -1,4 +1,4 @@
# GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE. # GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE.
# Scribe uses this file to know when you change something manually in your docs. # Scribe uses this file to know when you change something manually in your docs.
.scribe/intro.md=ce7ca21baf0406f807aed85ee1d8fa6e .scribe/intro.md=98adb6862b118c06e02e4e22390feb6f
.scribe/auth.md=9bee2b1ef8a238b2e58613fa636d5f39 .scribe/auth.md=7fcc12b2e5a86fa9c49f509d348f3cc2

View File

@ -1,3 +1,7 @@
# Authenticating requests # Authenticating requests
This API is not authenticated. To authenticate requests, include an **`Authorization`** header with the value **`"Bearer YOUR-API-KEY"`**.
All authenticated endpoints are marked with a `requires authentication` badge in the documentation below.
You can retrieve your token by visiting <a href="/settings/api-keys" target="_blank">here</a>

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all cron jobs.' description: 'Get all cron jobs.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":6,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new cron job.' description: 'Create a new cron job.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: command name: command
description: '' description: ''
required: true required: true
example: consequatur example: quia
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -118,7 +123,7 @@ endpoints:
name: user name: user
description: '' description: ''
required: true required: true
example: vito example: root
type: string type: string
enumValues: enumValues:
- root - root
@ -137,19 +142,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
command: consequatur command: quia
user: vito user: root
frequency: '* * * * *' frequency: '* * * * *'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null controller: null
method: null method: null
route: null route: null
@ -165,9 +173,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a cron job by ID.' description: 'Get a cron job by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -185,7 +194,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -195,7 +204,7 @@ endpoints:
name: cronJob_id name: cronJob_id
description: 'The ID of the cronJob.' description: 'The ID of the cronJob.'
required: true required: true
example: 17 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -203,8 +212,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
cronJob_id: 17 cronJob_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -213,12 +222,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null controller: null
method: null method: null
route: null route: null
@ -234,9 +246,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete cron job.' description: 'Delete cron job.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -254,7 +267,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -264,7 +277,7 @@ endpoints:
name: cronJob_id name: cronJob_id
description: 'The ID of the cronJob.' description: 'The ID of the cronJob.'
required: true required: true
example: 17 example: 13
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -272,8 +285,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
cronJob_id: 17 cronJob_id: 13
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -287,7 +300,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all databases.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":22,"server_id":1,"name":"orville77","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new database.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: quisquam
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -118,7 +123,7 @@ endpoints:
name: charset name: charset
description: '' description: ''
required: true required: true
example: consequatur example: omnis
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -128,26 +133,29 @@ endpoints:
name: collation name: collation
description: '' description: ''
required: true required: true
example: consequatur example: at
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: quisquam
charset: consequatur charset: omnis
collation: consequatur collation: at
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database by ID.' description: 'Get a database by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -183,7 +192,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -193,7 +202,7 @@ endpoints:
name: id name: id
description: 'The ID of the database.' description: 'The ID of the database.'
required: true required: true
example: 17 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -201,8 +210,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 17 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -211,12 +220,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null controller: null
method: null method: null
route: null route: null
@ -232,9 +244,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete database.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -252,7 +265,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -262,7 +275,7 @@ endpoints:
name: database_id name: database_id
description: 'The ID of the database.' description: 'The ID of the database.'
required: true required: true
example: 17 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -270,8 +283,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
database_id: 17 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -285,7 +298,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all database users.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":19,"server_id":1,"username":"graciela37","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":20,"server_id":1,"username":"vconn","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database user.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: username name: username
description: '' description: ''
required: true required: true
example: consequatur example: qui
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -118,7 +123,7 @@ endpoints:
name: password name: password
description: '' description: ''
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'xYv*3,#HQ=5<w!'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -135,19 +140,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: consequatur username: qui
password: 'O[2UZ5ij-e/dl4m{o,' password: 'xYv*3,#HQ=5<w!'
host: '%' host: '%'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"nolan.jaylan","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database user by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -183,7 +192,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -193,7 +202,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -201,8 +210,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -211,12 +220,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"carolyne.luettgen","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null controller: null
method: null method: null
route: null route: null
@ -232,9 +244,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: link title: link
description: 'Link to databases' description: 'Link to databases'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -252,7 +265,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -262,7 +275,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 4
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -270,8 +283,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 4
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -279,24 +292,27 @@ endpoints:
name: databases name: databases
description: 'Array of database names to link to the user.' description: 'Array of database names to link to the user.'
required: true required: true
example: consequatur example: maiores
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
databases: consequatur databases: maiores
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"carolyne.luettgen","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null controller: null
method: null method: null
route: null route: null
@ -312,9 +328,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database user.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -332,7 +349,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -342,7 +359,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 20
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -350,8 +367,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 20
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -365,7 +382,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all firewall rules.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":98,"name":"laborum","server_id":1,"type":"allow","protocol":"tcp","port":14235,"source":"100.14.146.200","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: sapiente
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -142,7 +147,7 @@ endpoints:
name: port name: port
description: '' description: ''
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -152,7 +157,7 @@ endpoints:
name: source name: source
description: '' description: ''
required: false required: false
example: consequatur example: doloribus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -169,22 +174,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: sapiente
type: allow type: allow
protocol: tcp protocol: tcp
port: consequatur port: et
source: consequatur source: doloribus
mask: '0' mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3184PbED6aacZveV6hf5dgk'
controller: null controller: null
method: null method: null
route: null route: null
@ -200,9 +208,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: edit title: edit
description: 'Update an existing firewall rule.' description: 'Update an existing firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -220,7 +229,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -230,7 +239,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -238,8 +247,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -247,7 +256,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -281,7 +290,7 @@ endpoints:
name: port name: port
description: '' description: ''
required: true required: true
example: consequatur example: aut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -291,7 +300,7 @@ endpoints:
name: source name: source
description: '' description: ''
required: false required: false
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -308,22 +317,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: et
type: allow type: allow
protocol: tcp protocol: tcp
port: consequatur port: aut
source: consequatur source: et
mask: '0' mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null controller: null
method: null method: null
route: null route: null
@ -339,9 +351,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a firewall rule by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -359,7 +372,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -369,7 +382,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -377,8 +390,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -387,12 +400,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"laborum","server_id":1,"type":"allow","protocol":"tcp","port":14235,"source":"100.14.146.200","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null controller: null
method: null method: null
route: null route: null
@ -408,9 +424,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete firewall rule.' description: 'Delete firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -428,7 +445,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -438,7 +455,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -446,8 +463,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -461,7 +478,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -29,12 +29,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"success":true,"version":"2.5.0"}' content: '{"success":true,"version":"2.4.0"}'
headers: headers:
cache-control: 'no-cache, private' cache-control: 'no-cache, private'
content-type: application/json content-type: application/json
x-ratelimit-limit: '60' x-ratelimit-limit: '60'
x-ratelimit-remaining: '57' x-ratelimit-remaining: '59'
access-control-allow-origin: '*' access-control-allow-origin: '*'
description: null description: null
custom: [] custom: []

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all projects.' description: 'Get all projects.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -29,12 +30,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"name":"Nash Corwin","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":4,"name":"Patience Douglas","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null controller: null
method: null method: null
route: null route: null
@ -50,9 +54,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new project.' description: 'Create a new project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -64,24 +69,27 @@ endpoints:
name: name name: name
description: 'The name of the project.' description: 'The name of the project.'
required: true required: true
example: consequatur example: dignissimos
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: dignissimos
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -97,9 +105,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a project by ID.' description: 'Get a project by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -123,12 +132,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Orville Satterfield","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null controller: null
method: null method: null
route: null route: null
@ -144,9 +156,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: 'Update project.' description: 'Update project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -169,24 +182,27 @@ endpoints:
name: name name: name
description: 'The name of the project.' description: 'The name of the project.'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: sunt
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null controller: null
method: null method: null
route: null route: null
@ -202,9 +218,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete project.' description: 'Delete project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -233,7 +250,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: index title: index
description: 'Get all redirects.' description: 'Get all redirects.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -44,7 +45,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -52,8 +53,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -62,12 +63,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":11,"site_id":1,"mode":308,"from":"dolores","to":"http:\/\/dibbert.com\/eius-est-dolor-dolores-minus-voluptatem-quisquam","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":12,"site_id":1,"mode":302,"from":"sed","to":"http:\/\/williamson.net\/fugit-facilis-perferendis-dolores-molestias.html","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null controller: null
method: null method: null
route: null route: null
@ -83,9 +87,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new redirect.' description: 'Create a new redirect.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -103,7 +108,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -113,7 +118,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -121,8 +126,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -130,7 +135,7 @@ endpoints:
name: from name: from
description: '' description: ''
required: true required: true
example: consequatur example: odit
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -140,7 +145,7 @@ endpoints:
name: to name: to
description: '' description: ''
required: true required: true
example: consequatur example: incidunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -150,7 +155,7 @@ endpoints:
name: mode name: mode
description: '' description: ''
required: true required: true
example: 302 example: 301
type: string type: string
enumValues: enumValues:
- 301 - 301
@ -161,9 +166,9 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
from: consequatur from: odit
to: consequatur to: incidunt
mode: 302 mode: 301
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -173,7 +178,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null controller: null
method: null method: null
route: null route: null
@ -189,9 +197,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete a redirect.' description: 'Delete a redirect.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -209,7 +218,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -219,7 +228,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -237,8 +246,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
redirect_id: 9 redirect_id: 9
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
@ -253,7 +262,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all servers in a project.' description: 'Get all servers in a project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -40,12 +41,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Maiya Connelly","ssh_user":"vito","ip":"7.83.102.177","local_ip":"130.245.181.91","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":34,"project_id":1,"user_id":1,"provider_id":null,"name":"Dr. Kyler Runolfsdottir DVM","ssh_user":"vito","ip":"106.112.51.73","local_ip":"248.246.77.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null controller: null
method: null method: null
route: null route: null
@ -61,9 +65,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -86,7 +91,7 @@ endpoints:
name: provider name: provider
description: 'The server provider type' description: 'The server provider type'
required: true required: true
example: consequatur example: fugiat
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -96,7 +101,7 @@ endpoints:
name: server_provider name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile' description: 'If the provider is not custom, the ID of the server provider profile'
required: true required: true
example: hetzner example: digitalocean
type: string type: string
enumValues: enumValues:
- custom - custom
@ -111,7 +116,7 @@ endpoints:
name: region name: region
description: 'Provider region if the provider is not custom' description: 'Provider region if the provider is not custom'
required: true required: true
example: consequatur example: itaque
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -121,7 +126,7 @@ endpoints:
name: plan name: plan
description: 'Provider plan if the provider is not custom' description: 'Provider plan if the provider is not custom'
required: true required: true
example: consequatur example: voluptatum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -131,7 +136,7 @@ endpoints:
name: ip name: ip
description: 'SSH IP address if the provider is custom' description: 'SSH IP address if the provider is custom'
required: true required: true
example: consequatur example: ut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -141,7 +146,7 @@ endpoints:
name: port name: port
description: 'SSH Port if the provider is custom' description: 'SSH Port if the provider is custom'
required: true required: true
example: consequatur example: reiciendis
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -151,7 +156,7 @@ endpoints:
name: name name: name
description: 'The name of the server.' description: 'The name of the server.'
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -161,7 +166,7 @@ endpoints:
name: os name: os
description: 'The os of the server' description: 'The os of the server'
required: true required: true
example: consequatur example: vel
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -171,7 +176,7 @@ endpoints:
name: webserver name: webserver
description: 'Web server' description: 'Web server'
required: true required: true
example: none example: nginx
type: string type: string
enumValues: enumValues:
- none - none
@ -183,7 +188,7 @@ endpoints:
name: database name: database
description: Database description: Database
required: true required: true
example: mariadb104 example: mysql80
type: string type: string
enumValues: enumValues:
- none - none
@ -204,7 +209,7 @@ endpoints:
name: php name: php
description: 'PHP version' description: 'PHP version'
required: true required: true
example: '8.0' example: '7.2'
type: string type: string
enumValues: enumValues:
- '7.0' - '7.0'
@ -220,27 +225,30 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: fugiat
server_provider: hetzner server_provider: digitalocean
region: consequatur region: itaque
plan: consequatur plan: voluptatum
ip: consequatur ip: ut
port: consequatur port: reiciendis
name: consequatur name: et
os: consequatur os: vel
webserver: none webserver: nginx
database: mariadb104 database: mysql80
php: '8.0' php: '7.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Dr. Cornelius Luettgen V","ssh_user":"vito","ip":"226.187.235.251","local_ip":"18.62.212.253","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null controller: null
method: null method: null
route: null route: null
@ -256,9 +264,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a server by ID.' description: 'Get a server by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -276,7 +285,7 @@ endpoints:
name: id name: id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -284,7 +293,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
id: 32 id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -293,12 +302,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Brandy Reichel","ssh_user":"vito","ip":"26.180.121.142","local_ip":"122.175.6.215","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null controller: null
method: null method: null
route: null route: null
@ -314,9 +326,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: reboot title: reboot
description: 'Reboot a server.' description: 'Reboot a server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -334,7 +347,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -342,7 +355,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -356,7 +369,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b61aD6538PacZEkeghfvV4d'
controller: null controller: null
method: null method: null
route: null route: null
@ -372,9 +388,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: upgrade title: upgrade
description: 'Upgrade server.' description: 'Upgrade server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -392,7 +409,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -400,7 +417,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -414,7 +431,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -430,9 +450,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -450,7 +471,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -458,7 +479,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -472,7 +493,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -40,12 +41,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"quo","provider":"custom","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":5,"project_id":null,"global":true,"name":"sed","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null controller: null
method: null method: null
route: null route: null
@ -61,9 +65,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -86,7 +91,7 @@ endpoints:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: consequatur example: corrupti
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -96,7 +101,7 @@ endpoints:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server provider.'
required: true required: true
example: consequatur example: est
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -106,7 +111,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: rerum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: key name: key
description: 'The key if provider requires key' description: 'The key if provider requires key'
required: true required: true
example: consequatur example: ut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -126,28 +131,31 @@ endpoints:
name: secret name: secret
description: 'The secret if provider requires key' description: 'The secret if provider requires key'
required: true required: true
example: consequatur example: sed
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: corrupti
name: consequatur name: est
token: consequatur token: rerum
key: consequatur key: ut
secret: consequatur secret: sed
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"dolores","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -200,12 +209,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"voluptatem","provider":"vultr","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
controller: null controller: null
method: null method: null
route: null route: null
@ -221,9 +233,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -257,7 +270,7 @@ endpoints:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server provider.'
required: true required: true
example: consequatur example: earum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -276,18 +289,21 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: earum
global: false global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"dolores","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
controller: null controller: null
method: null method: null
route: null route: null
@ -303,9 +319,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -345,7 +362,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: 'Get all ssh keys.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":2,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Prof. Aurelia Buckridge MD","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":3,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Jaylan Lakin","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: 'Deploy ssh key to server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: key_id name: key_id
description: 'The ID of the key.' description: 'The ID of the key.'
required: true required: true
example: consequatur example: explicabo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -118,7 +123,7 @@ endpoints:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'Key name, required if key_id is not provided.'
required: true required: true
example: consequatur example: deleniti
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -128,26 +133,29 @@ endpoints:
name: public_key name: public_key
description: 'Public Key, required if key_id is not provided.' description: 'Public Key, required if key_id is not provided.'
required: true required: true
example: consequatur example: sapiente
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
key_id: consequatur key_id: explicabo
name: consequatur name: deleniti
public_key: consequatur public_key: sapiente
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":2,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete ssh key from server.' description: 'Delete ssh key from server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -183,7 +192,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -201,7 +210,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
sshKey_id: 1 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
@ -216,7 +225,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: 'Get all services.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a service by ID.' description: 'Get a service by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -102,7 +107,7 @@ endpoints:
name: id name: id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -110,8 +115,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 184 id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -120,12 +125,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null}' content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null controller: null
method: null method: null
route: null route: null
@ -141,9 +149,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: start title: start
description: 'Start service.' description: 'Start service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -161,7 +170,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -171,7 +180,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -179,8 +188,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -194,7 +203,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null controller: null
method: null method: null
route: null route: null
@ -210,9 +222,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: stop title: stop
description: 'Stop service.' description: 'Stop service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -230,7 +243,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -240,7 +253,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -248,8 +261,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -263,7 +276,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
controller: null controller: null
method: null method: null
route: null route: null
@ -279,9 +295,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: restart title: restart
description: 'Restart service.' description: 'Restart service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -299,7 +316,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -309,7 +326,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -317,8 +334,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -332,7 +349,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
controller: null controller: null
method: null method: null
route: null route: null
@ -348,9 +368,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: enable title: enable
description: 'Enable service.' description: 'Enable service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -368,7 +389,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -378,7 +399,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -386,8 +407,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -401,7 +422,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
controller: null controller: null
method: null method: null
route: null route: null
@ -417,9 +441,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: disable title: disable
description: 'Disable service.' description: 'Disable service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -437,7 +462,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -447,7 +472,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -455,8 +480,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -470,7 +495,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null controller: null
method: null method: null
route: null route: null
@ -486,9 +514,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: 'Delete service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -506,7 +535,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -516,7 +545,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -524,8 +553,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -539,7 +568,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all sites.' description: 'Get all sites.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -34,7 +35,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -51,12 +52,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":51,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer aD138EgdPf4Vhav5c6bke6Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -72,9 +76,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new site.' description: 'Create a new site.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -92,7 +97,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -108,7 +113,7 @@ endpoints:
name: type name: type
description: '' description: ''
required: true required: true
example: load-balancer example: php-blank
type: string type: string
enumValues: enumValues:
- php - php
@ -124,7 +129,7 @@ endpoints:
name: domain name: domain
description: '' description: ''
required: true required: true
example: consequatur example: impedit
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -135,7 +140,7 @@ endpoints:
description: '' description: ''
required: true required: true
example: example:
- consequatur - cum
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -165,7 +170,7 @@ endpoints:
name: source_control name: source_control
description: 'Source control ID, Required for Sites which support source control' description: 'Source control ID, Required for Sites which support source control'
required: true required: true
example: consequatur example: non
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -215,7 +220,7 @@ endpoints:
name: user name: user
description: 'user, to isolate the website under a new user' description: 'user, to isolate the website under a new user'
required: true required: true
example: consequatur example: voluptate
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -235,29 +240,32 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: load-balancer type: php-blank
domain: consequatur domain: impedit
aliases: aliases:
- consequatur - cum
php_version: '7.4' php_version: '7.4'
web_directory: public web_directory: public
source_control: consequatur source_control: non
repository: organization/repository repository: organization/repository
branch: main branch: main
composer: true composer: true
version: 5.2.1 version: 5.2.1
user: consequatur user: voluptate
method: ip-hash method: ip-hash
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6V3D5c4g6hZaEfb81evPadk'
controller: null controller: null
method: null method: null
route: null route: null
@ -273,9 +281,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a site by ID.' description: 'Get a site by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -293,7 +302,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -303,7 +312,7 @@ endpoints:
name: id name: id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -311,8 +320,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 17 id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -321,12 +330,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer gE86bZ6vfcd3hVP15ka4Dea'
controller: null controller: null
method: null method: null
route: null route: null
@ -342,9 +354,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete site.' description: 'Delete site.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -362,7 +375,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -372,7 +385,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -380,8 +393,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -395,7 +408,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8kEb6Dd613a5afZhcg4VvPe'
controller: null controller: null
method: null method: null
route: null route: null
@ -411,9 +427,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: load-balancer title: load-balancer
description: 'Update load balancer.' description: 'Update load balancer.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -431,7 +448,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -441,7 +458,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -449,8 +466,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -458,7 +475,7 @@ endpoints:
name: method name: method
description: 'Load balancer method, Required if the site type is Load balancer' description: 'Load balancer method, Required if the site type is Load balancer'
required: true required: true
example: ip-hash example: round-robin
type: string type: string
enumValues: enumValues:
- round-robin - round-robin
@ -472,16 +489,16 @@ endpoints:
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)' description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
required: true required: true
example: example:
- consequatur - omnis
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
method: ip-hash method: round-robin
servers: servers:
- consequatur - omnis
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -491,7 +508,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8Da4P1c6d6gfbhZvaE3k5Ve'
controller: null controller: null
method: null method: null
route: null route: null
@ -507,9 +527,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: aliases title: aliases
description: 'Update aliases.' description: 'Update aliases.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -527,7 +548,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -537,7 +558,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -545,8 +566,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -555,7 +576,7 @@ endpoints:
description: 'Array of aliases' description: 'Array of aliases'
required: true required: true
example: example:
- consequatur - doloremque
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -563,7 +584,7 @@ endpoints:
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
aliases: aliases:
- consequatur - doloremque
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -573,7 +594,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer d4EVa8Zkfvg1Dcbe53P6a6h'
controller: null controller: null
method: null method: null
route: null route: null
@ -589,9 +613,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deploy title: deploy
description: 'Run site deployment script' description: 'Run site deployment script'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -609,7 +634,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -619,7 +644,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -627,8 +652,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -642,7 +667,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer dkcV5EZa8fD6vgaP1b36e4h'
controller: null controller: null
method: null method: null
route: null route: null
@ -658,9 +686,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deployment-script title: deployment-script
description: 'Update site deployment script' description: 'Update site deployment script'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -678,7 +707,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -688,7 +717,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -696,8 +725,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -705,14 +734,14 @@ endpoints:
name: script name: script
description: 'Content of the deployment script' description: 'Content of the deployment script'
required: true required: true
example: consequatur example: voluptatem
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
script: consequatur script: voluptatem
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -722,7 +751,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer hevV81bfZE6cdkaa453gDP6'
controller: null controller: null
method: null method: null
route: null route: null
@ -738,9 +770,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deployment-script title: deployment-script
description: 'Get site deployment script content' description: 'Get site deployment script content'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -758,7 +791,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -768,7 +801,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -776,8 +809,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -791,7 +824,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer a1EbvhePag4f5dk6ZV368Dc'
controller: null controller: null
method: null method: null
route: null route: null
@ -807,9 +843,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: env title: env
description: 'Get site .env file content' description: 'Get site .env file content'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -827,7 +864,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -837,7 +874,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -845,8 +882,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -860,7 +897,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer P8Zvch3DgV654abeaE6f1kd'
controller: null controller: null
method: null method: null
route: null route: null
@ -876,9 +916,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: env title: env
description: 'Update site .env file' description: 'Update site .env file'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -896,7 +937,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -906,7 +947,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -914,8 +955,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -923,14 +964,14 @@ endpoints:
name: env name: env
description: 'Content of the .env file' description: 'Content of the .env file'
required: true required: true
example: consequatur example: quam
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
env: consequatur env: quam
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -940,7 +981,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 45acbP1h6eg6kDVdZf8E3av'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -40,12 +41,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Dr. Cornelius Luettgen V","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Orville Satterfield","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Zella Robel","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Jairo Williamson","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
controller: null controller: null
method: null method: null
route: null route: null
@ -61,9 +65,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -99,7 +104,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: molestias
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -109,7 +114,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: in
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -119,7 +124,7 @@ endpoints:
name: url name: url
description: 'The URL if the provider is Gitlab and it is self-hosted' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' example: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -129,7 +134,7 @@ endpoints:
name: username name: username
description: 'The username if the provider is Bitbucket' description: 'The username if the provider is Bitbucket'
required: true required: true
example: consequatur example: consectetur
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -139,7 +144,7 @@ endpoints:
name: password name: password
description: 'The password if the provider is Bitbucket' description: 'The password if the provider is Bitbucket'
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'y*P4_]ZdjE_:'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -147,21 +152,24 @@ endpoints:
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: gitlab provider: gitlab
name: consequatur name: molestias
token: consequatur token: in
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
username: consequatur username: consectetur
password: 'O[2UZ5ij-e/dl4m{o,' password: 'y*P4_]ZdjE_:'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Lonny Ankunding","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Miss Claudine Goyette","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer DfegP56vkEa364Zbhda8V1c'
controller: null controller: null
method: null method: null
route: null route: null
@ -177,9 +185,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -214,12 +223,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Dr. Enoch Harber II","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Mona Stark","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
controller: null controller: null
method: null method: null
route: null route: null
@ -235,9 +247,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -271,7 +284,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: non
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -281,7 +294,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -291,7 +304,7 @@ endpoints:
name: url name: url
description: 'The URL if the provider is Gitlab and it is self-hosted' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' example: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -301,7 +314,7 @@ endpoints:
name: username name: username
description: 'The username if the provider is Bitbucket' description: 'The username if the provider is Bitbucket'
required: true required: true
example: consequatur example: natus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -311,7 +324,7 @@ endpoints:
name: password name: password
description: 'The password if the provider is Bitbucket' description: 'The password if the provider is Bitbucket'
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'A^">*m{p]DI'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -321,7 +334,7 @@ endpoints:
name: global name: global
description: 'Accessible in all projects' description: 'Accessible in all projects'
required: true required: true
example: false example: true
type: string type: string
enumValues: enumValues:
- true - true
@ -330,22 +343,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: non
token: consequatur token: sunt
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
username: consequatur username: natus
password: 'O[2UZ5ij-e/dl4m{o,' password: 'A^">*m{p]DI'
global: false global: true
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Lonny Ankunding","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Neha Little","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
controller: null controller: null
method: null method: null
route: null route: null
@ -361,9 +377,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -403,7 +420,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fgk61vD68E4cZhP3bV5adea'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -14,9 +14,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -40,12 +41,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":6,"project_id":null,"global":true,"name":"dignissimos","provider":"dropbox","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
controller: null controller: null
method: null method: null
route: null route: null
@ -61,9 +65,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -86,7 +91,7 @@ endpoints:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: consequatur example: ab
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -96,7 +101,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: quo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -106,7 +111,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: in
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: key name: key
description: 'The key if provider requires key' description: 'The key if provider requires key'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -126,28 +131,31 @@ endpoints:
name: secret name: secret
description: 'The secret if provider requires key' description: 'The secret if provider requires key'
required: true required: true
example: consequatur example: molestias
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: ab
name: consequatur name: quo
token: consequatur token: in
key: consequatur key: sunt
secret: consequatur secret: molestias
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -200,12 +209,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"facilis","provider":"dropbox","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
controller: null controller: null
method: null method: null
route: null route: null
@ -221,9 +233,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -257,7 +270,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: voluptas
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -276,18 +289,21 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: voluptas
global: true global: true
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
controller: null controller: null
method: null method: null
route: null route: null
@ -303,9 +319,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -345,7 +362,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all cron jobs.' description: 'Get all cron jobs.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":6,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new cron job.' description: 'Create a new cron job.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: command name: command
description: '' description: ''
required: true required: true
example: consequatur example: quia
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: user name: user
description: '' description: ''
required: true required: true
example: vito example: root
type: string type: string
enumValues: enumValues:
- root - root
@ -135,19 +140,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
command: consequatur command: quia
user: vito user: root
frequency: '* * * * *' frequency: '* * * * *'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,9 +171,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a cron job by ID.' description: 'Get a cron job by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -183,7 +192,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -193,7 +202,7 @@ endpoints:
name: cronJob_id name: cronJob_id
description: 'The ID of the cronJob.' description: 'The ID of the cronJob.'
required: true required: true
example: 17 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -201,8 +210,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
cronJob_id: 17 cronJob_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -211,12 +220,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null controller: null
method: null method: null
route: null route: null
@ -232,9 +244,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete cron job.' description: 'Delete cron job.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -252,7 +265,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -262,7 +275,7 @@ endpoints:
name: cronJob_id name: cronJob_id
description: 'The ID of the cronJob.' description: 'The ID of the cronJob.'
required: true required: true
example: 17 example: 13
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -270,8 +283,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
cronJob_id: 17 cronJob_id: 13
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -285,7 +298,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all databases.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":22,"server_id":1,"name":"orville77","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new database.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: quisquam
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: charset name: charset
description: '' description: ''
required: true required: true
example: consequatur example: omnis
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -126,26 +131,29 @@ endpoints:
name: collation name: collation
description: '' description: ''
required: true required: true
example: consequatur example: at
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: quisquam
charset: consequatur charset: omnis
collation: consequatur collation: at
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,9 +169,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database by ID.' description: 'Get a database by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -181,7 +190,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -191,7 +200,7 @@ endpoints:
name: id name: id
description: 'The ID of the database.' description: 'The ID of the database.'
required: true required: true
example: 17 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -199,8 +208,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 17 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -209,12 +218,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":21,"server_id":1,"name":"carolyne.luettgen","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null controller: null
method: null method: null
route: null route: null
@ -230,9 +242,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete database.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -250,7 +263,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -260,7 +273,7 @@ endpoints:
name: database_id name: database_id
description: 'The ID of the database.' description: 'The ID of the database.'
required: true required: true
example: 17 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -268,8 +281,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
database_id: 17 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -283,7 +296,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all database users.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":19,"server_id":1,"username":"graciela37","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":20,"server_id":1,"username":"vconn","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database user.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: username name: username
description: '' description: ''
required: true required: true
example: consequatur example: qui
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: password name: password
description: '' description: ''
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'xYv*3,#HQ=5<w!'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -133,19 +138,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: consequatur username: qui
password: 'O[2UZ5ij-e/dl4m{o,' password: 'xYv*3,#HQ=5<w!'
host: '%' host: '%'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"nolan.jaylan","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,9 +169,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database user by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -181,7 +190,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -191,7 +200,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -199,8 +208,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -209,12 +218,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"carolyne.luettgen","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null controller: null
method: null method: null
route: null route: null
@ -230,9 +242,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: link title: link
description: 'Link to databases' description: 'Link to databases'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -250,7 +263,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -260,7 +273,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 4
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -268,8 +281,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 4
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -277,24 +290,27 @@ endpoints:
name: databases name: databases
description: 'Array of database names to link to the user.' description: 'Array of database names to link to the user.'
required: true required: true
example: consequatur example: maiores
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
databases: consequatur databases: maiores
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":19,"server_id":1,"username":"carolyne.luettgen","databases":[],"host":"%","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null controller: null
method: null method: null
route: null route: null
@ -310,9 +326,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database user.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -330,7 +347,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -340,7 +357,7 @@ endpoints:
name: databaseUser_id name: databaseUser_id
description: 'The ID of the databaseUser.' description: 'The ID of the databaseUser.'
required: true required: true
example: 17 example: 20
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -348,8 +365,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
databaseUser_id: 17 databaseUser_id: 20
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -363,7 +380,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all firewall rules.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":98,"name":"laborum","server_id":1,"type":"allow","protocol":"tcp","port":14235,"source":"100.14.146.200","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: sapiente
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -140,7 +145,7 @@ endpoints:
name: port name: port
description: '' description: ''
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -150,7 +155,7 @@ endpoints:
name: source name: source
description: '' description: ''
required: false required: false
example: consequatur example: doloribus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -167,22 +172,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: sapiente
type: allow type: allow
protocol: tcp protocol: tcp
port: consequatur port: et
source: consequatur source: doloribus
mask: '0' mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3184PbED6aacZveV6hf5dgk'
controller: null controller: null
method: null method: null
route: null route: null
@ -198,9 +206,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: edit title: edit
description: 'Update an existing firewall rule.' description: 'Update an existing firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -218,7 +227,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -228,7 +237,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -236,8 +245,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -245,7 +254,7 @@ endpoints:
name: name name: name
description: '' description: ''
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -279,7 +288,7 @@ endpoints:
name: port name: port
description: '' description: ''
required: true required: true
example: consequatur example: aut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -289,7 +298,7 @@ endpoints:
name: source name: source
description: '' description: ''
required: false required: false
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -306,22 +315,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: et
type: allow type: allow
protocol: tcp protocol: tcp
port: consequatur port: aut
source: consequatur source: et
mask: '0' mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"dolores","server_id":1,"type":"allow","protocol":"tcp","port":40770,"source":"199.76.131.15","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null controller: null
method: null method: null
route: null route: null
@ -337,9 +349,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a firewall rule by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -357,7 +370,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -367,7 +380,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -375,8 +388,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -385,12 +398,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":97,"name":"laborum","server_id":1,"type":"allow","protocol":"tcp","port":14235,"source":"100.14.146.200","mask":"24","note":"test","status":"creating","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null controller: null
method: null method: null
route: null route: null
@ -406,9 +422,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete firewall rule.' description: 'Delete firewall rule.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -426,7 +443,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -436,7 +453,7 @@ endpoints:
name: firewallRule_id name: firewallRule_id
description: 'The ID of the firewallRule.' description: 'The ID of the firewallRule.'
required: true required: true
example: 94 example: 85
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -444,8 +461,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
firewallRule_id: 94 firewallRule_id: 85
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -459,7 +476,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -27,12 +27,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"success":true,"version":"2.5.0"}' content: '{"success":true,"version":"2.4.0"}'
headers: headers:
cache-control: 'no-cache, private' cache-control: 'no-cache, private'
content-type: application/json content-type: application/json
x-ratelimit-limit: '60' x-ratelimit-limit: '60'
x-ratelimit-remaining: '57' x-ratelimit-remaining: '59'
access-control-allow-origin: '*' access-control-allow-origin: '*'
description: null description: null
custom: [] custom: []

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all projects.' description: 'Get all projects.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -27,12 +28,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"name":"Nash Corwin","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":4,"name":"Patience Douglas","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null controller: null
method: null method: null
route: null route: null
@ -48,9 +52,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new project.' description: 'Create a new project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -62,24 +67,27 @@ endpoints:
name: name name: name
description: 'The name of the project.' description: 'The name of the project.'
required: true required: true
example: consequatur example: dignissimos
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: dignissimos
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -95,9 +103,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a project by ID.' description: 'Get a project by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -121,12 +130,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Orville Satterfield","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null controller: null
method: null method: null
route: null route: null
@ -142,9 +154,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: 'Update project.' description: 'Update project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -167,24 +180,27 @@ endpoints:
name: name name: name
description: 'The name of the project.' description: 'The name of the project.'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: sunt
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null controller: null
method: null method: null
route: null route: null
@ -200,9 +216,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete project.' description: 'Delete project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -231,7 +248,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: index title: index
description: 'Get all redirects.' description: 'Get all redirects.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -42,7 +43,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -50,8 +51,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -60,12 +61,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":11,"site_id":1,"mode":308,"from":"dolores","to":"http:\/\/dibbert.com\/eius-est-dolor-dolores-minus-voluptatem-quisquam","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":12,"site_id":1,"mode":302,"from":"sed","to":"http:\/\/williamson.net\/fugit-facilis-perferendis-dolores-molestias.html","status":"ready","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null controller: null
method: null method: null
route: null route: null
@ -81,9 +85,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new redirect.' description: 'Create a new redirect.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -101,7 +106,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -111,7 +116,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -119,8 +124,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -128,7 +133,7 @@ endpoints:
name: from name: from
description: '' description: ''
required: true required: true
example: consequatur example: odit
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -138,7 +143,7 @@ endpoints:
name: to name: to
description: '' description: ''
required: true required: true
example: consequatur example: incidunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -148,7 +153,7 @@ endpoints:
name: mode name: mode
description: '' description: ''
required: true required: true
example: 302 example: 301
type: string type: string
enumValues: enumValues:
- 301 - 301
@ -159,9 +164,9 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
from: consequatur from: odit
to: consequatur to: incidunt
mode: 302 mode: 301
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -171,7 +176,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null controller: null
method: null method: null
route: null route: null
@ -187,9 +195,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete a redirect.' description: 'Delete a redirect.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -207,7 +216,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -217,7 +226,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -235,8 +244,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
redirect_id: 9 redirect_id: 9
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
@ -251,7 +260,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all servers in a project.' description: 'Get all servers in a project.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -38,12 +39,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Maiya Connelly","ssh_user":"vito","ip":"7.83.102.177","local_ip":"130.245.181.91","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":34,"project_id":1,"user_id":1,"provider_id":null,"name":"Dr. Kyler Runolfsdottir DVM","ssh_user":"vito","ip":"106.112.51.73","local_ip":"248.246.77.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null controller: null
method: null method: null
route: null route: null
@ -59,9 +63,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -84,7 +89,7 @@ endpoints:
name: provider name: provider
description: 'The server provider type' description: 'The server provider type'
required: true required: true
example: consequatur example: fugiat
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -94,7 +99,7 @@ endpoints:
name: server_provider name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile' description: 'If the provider is not custom, the ID of the server provider profile'
required: true required: true
example: hetzner example: digitalocean
type: string type: string
enumValues: enumValues:
- custom - custom
@ -109,7 +114,7 @@ endpoints:
name: region name: region
description: 'Provider region if the provider is not custom' description: 'Provider region if the provider is not custom'
required: true required: true
example: consequatur example: itaque
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -119,7 +124,7 @@ endpoints:
name: plan name: plan
description: 'Provider plan if the provider is not custom' description: 'Provider plan if the provider is not custom'
required: true required: true
example: consequatur example: voluptatum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -129,7 +134,7 @@ endpoints:
name: ip name: ip
description: 'SSH IP address if the provider is custom' description: 'SSH IP address if the provider is custom'
required: true required: true
example: consequatur example: ut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -139,7 +144,7 @@ endpoints:
name: port name: port
description: 'SSH Port if the provider is custom' description: 'SSH Port if the provider is custom'
required: true required: true
example: consequatur example: reiciendis
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -149,7 +154,7 @@ endpoints:
name: name name: name
description: 'The name of the server.' description: 'The name of the server.'
required: true required: true
example: consequatur example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -159,7 +164,7 @@ endpoints:
name: os name: os
description: 'The os of the server' description: 'The os of the server'
required: true required: true
example: consequatur example: vel
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -169,7 +174,7 @@ endpoints:
name: webserver name: webserver
description: 'Web server' description: 'Web server'
required: true required: true
example: none example: nginx
type: string type: string
enumValues: enumValues:
- none - none
@ -181,7 +186,7 @@ endpoints:
name: database name: database
description: Database description: Database
required: true required: true
example: mariadb104 example: mysql80
type: string type: string
enumValues: enumValues:
- none - none
@ -202,7 +207,7 @@ endpoints:
name: php name: php
description: 'PHP version' description: 'PHP version'
required: true required: true
example: '8.0' example: '7.2'
type: string type: string
enumValues: enumValues:
- '7.0' - '7.0'
@ -218,27 +223,30 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: fugiat
server_provider: hetzner server_provider: digitalocean
region: consequatur region: itaque
plan: consequatur plan: voluptatum
ip: consequatur ip: ut
port: consequatur port: reiciendis
name: consequatur name: et
os: consequatur os: vel
webserver: none webserver: nginx
database: mariadb104 database: mysql80
php: '8.0' php: '7.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Dr. Cornelius Luettgen V","ssh_user":"vito","ip":"226.187.235.251","local_ip":"18.62.212.253","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null controller: null
method: null method: null
route: null route: null
@ -254,9 +262,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a server by ID.' description: 'Get a server by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -274,7 +283,7 @@ endpoints:
name: id name: id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -282,7 +291,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
id: 32 id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -291,12 +300,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":33,"project_id":1,"user_id":1,"provider_id":null,"name":"Brandy Reichel","ssh_user":"vito","ip":"26.180.121.142","local_ip":"122.175.6.215","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null controller: null
method: null method: null
route: null route: null
@ -312,9 +324,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: reboot title: reboot
description: 'Reboot a server.' description: 'Reboot a server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -332,7 +345,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -340,7 +353,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -354,7 +367,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b61aD6538PacZEkeghfvV4d'
controller: null controller: null
method: null method: null
route: null route: null
@ -370,9 +386,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: upgrade title: upgrade
description: 'Upgrade server.' description: 'Upgrade server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -390,7 +407,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -398,7 +415,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -412,7 +429,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -428,9 +448,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -448,7 +469,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -456,7 +477,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -470,7 +491,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -38,12 +39,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"quo","provider":"custom","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":5,"project_id":null,"global":true,"name":"sed","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null controller: null
method: null method: null
route: null route: null
@ -59,9 +63,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -84,7 +89,7 @@ endpoints:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: consequatur example: corrupti
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -94,7 +99,7 @@ endpoints:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server provider.'
required: true required: true
example: consequatur example: est
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -104,7 +109,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: rerum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -114,7 +119,7 @@ endpoints:
name: key name: key
description: 'The key if provider requires key' description: 'The key if provider requires key'
required: true required: true
example: consequatur example: ut
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -124,28 +129,31 @@ endpoints:
name: secret name: secret
description: 'The secret if provider requires key' description: 'The secret if provider requires key'
required: true required: true
example: consequatur example: sed
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: corrupti
name: consequatur name: est
token: consequatur token: rerum
key: consequatur key: ut
secret: consequatur secret: sed
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"dolores","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,9 +169,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -198,12 +207,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"voluptatem","provider":"vultr","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
controller: null controller: null
method: null method: null
route: null route: null
@ -219,9 +231,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -255,7 +268,7 @@ endpoints:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server provider.'
required: true required: true
example: consequatur example: earum
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -274,18 +287,21 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: earum
global: false global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"dolores","provider":"digitalocean","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
controller: null controller: null
method: null method: null
route: null route: null
@ -301,9 +317,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -343,7 +360,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: 'Get all ssh keys.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":2,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Prof. Aurelia Buckridge MD","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"},{"id":3,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Jaylan Lakin","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: 'Deploy ssh key to server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: key_id name: key_id
description: 'The ID of the key.' description: 'The ID of the key.'
required: true required: true
example: consequatur example: explicabo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -116,7 +121,7 @@ endpoints:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'Key name, required if key_id is not provided.'
required: true required: true
example: consequatur example: deleniti
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -126,26 +131,29 @@ endpoints:
name: public_key name: public_key
description: 'Public Key, required if key_id is not provided.' description: 'Public Key, required if key_id is not provided.'
required: true required: true
example: consequatur example: sapiente
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
key_id: consequatur key_id: explicabo
name: consequatur name: deleniti
public_key: consequatur public_key: sapiente
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":2,"user":{"id":1,"name":"Saeed Vaziry","email":"demo@vitodeploy.com","created_at":"2024-12-19T23:19:20.000000Z","updated_at":"2025-04-19T21:24:56.000000Z"},"name":"Dr. Cornelius Luettgen V","created_at":"2025-04-21T18:40:19.000000Z","updated_at":"2025-04-21T18:40:19.000000Z"}' content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,9 +169,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete ssh key from server.' description: 'Delete ssh key from server.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -181,7 +190,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -199,7 +208,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
sshKey_id: 1 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
@ -214,7 +223,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: 'Get all services.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a service by ID.' description: 'Get a service by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -100,7 +105,7 @@ endpoints:
name: id name: id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -108,8 +113,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 184 id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -118,12 +123,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","is_default":null,"created_at":null,"updated_at":null}' content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null controller: null
method: null method: null
route: null route: null
@ -139,9 +147,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: start title: start
description: 'Start service.' description: 'Start service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -159,7 +168,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -169,7 +178,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -177,8 +186,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -192,7 +201,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null controller: null
method: null method: null
route: null route: null
@ -208,9 +220,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: stop title: stop
description: 'Stop service.' description: 'Stop service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -228,7 +241,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -238,7 +251,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -246,8 +259,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -261,7 +274,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
controller: null controller: null
method: null method: null
route: null route: null
@ -277,9 +293,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: restart title: restart
description: 'Restart service.' description: 'Restart service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -297,7 +314,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -307,7 +324,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -315,8 +332,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -330,7 +347,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
controller: null controller: null
method: null method: null
route: null route: null
@ -346,9 +366,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: enable title: enable
description: 'Enable service.' description: 'Enable service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -366,7 +387,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -376,7 +397,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -384,8 +405,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -399,7 +420,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
controller: null controller: null
method: null method: null
route: null route: null
@ -415,9 +439,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: disable title: disable
description: 'Disable service.' description: 'Disable service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -435,7 +460,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -445,7 +470,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -453,8 +478,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -468,7 +493,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null controller: null
method: null method: null
route: null route: null
@ -484,9 +512,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: 'Delete service.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -504,7 +533,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -514,7 +543,7 @@ endpoints:
name: service_id name: service_id
description: 'The ID of the service.' description: 'The ID of the service.'
required: true required: true
example: 184 example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -522,8 +551,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
service_id: 184 service_id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -537,7 +566,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all sites.' description: 'Get all sites.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -32,7 +33,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -40,7 +41,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -49,12 +50,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":51,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer aD138EgdPf4Vhav5c6bke6Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -70,9 +74,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new site.' description: 'Create a new site.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -90,7 +95,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -98,7 +103,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -106,7 +111,7 @@ endpoints:
name: type name: type
description: '' description: ''
required: true required: true
example: load-balancer example: php-blank
type: string type: string
enumValues: enumValues:
- php - php
@ -122,7 +127,7 @@ endpoints:
name: domain name: domain
description: '' description: ''
required: true required: true
example: consequatur example: impedit
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -133,7 +138,7 @@ endpoints:
description: '' description: ''
required: true required: true
example: example:
- consequatur - cum
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -163,7 +168,7 @@ endpoints:
name: source_control name: source_control
description: 'Source control ID, Required for Sites which support source control' description: 'Source control ID, Required for Sites which support source control'
required: true required: true
example: consequatur example: non
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -213,7 +218,7 @@ endpoints:
name: user name: user
description: 'user, to isolate the website under a new user' description: 'user, to isolate the website under a new user'
required: true required: true
example: consequatur example: voluptate
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -233,29 +238,32 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: load-balancer type: php-blank
domain: consequatur domain: impedit
aliases: aliases:
- consequatur - cum
php_version: '7.4' php_version: '7.4'
web_directory: public web_directory: public
source_control: consequatur source_control: non
repository: organization/repository repository: organization/repository
branch: main branch: main
composer: true composer: true
version: 5.2.1 version: 5.2.1
user: consequatur user: voluptate
method: ip-hash method: ip-hash
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 6V3D5c4g6hZaEfb81evPadk'
controller: null controller: null
method: null method: null
route: null route: null
@ -271,9 +279,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a site by ID.' description: 'Get a site by ID.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -291,7 +300,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -301,7 +310,7 @@ endpoints:
name: id name: id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -309,8 +318,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
id: 17 id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -319,12 +328,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":50,"server_id":1,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer gE86bZ6vfcd3hVP15ka4Dea'
controller: null controller: null
method: null method: null
route: null route: null
@ -340,9 +352,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete site.' description: 'Delete site.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -360,7 +373,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -370,7 +383,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -378,8 +391,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -393,7 +406,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8kEb6Dd613a5afZhcg4VvPe'
controller: null controller: null
method: null method: null
route: null route: null
@ -409,9 +425,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: load-balancer title: load-balancer
description: 'Update load balancer.' description: 'Update load balancer.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -429,7 +446,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -439,7 +456,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -447,8 +464,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -456,7 +473,7 @@ endpoints:
name: method name: method
description: 'Load balancer method, Required if the site type is Load balancer' description: 'Load balancer method, Required if the site type is Load balancer'
required: true required: true
example: ip-hash example: round-robin
type: string type: string
enumValues: enumValues:
- round-robin - round-robin
@ -470,16 +487,16 @@ endpoints:
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)' description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
required: true required: true
example: example:
- consequatur - omnis
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
method: ip-hash method: round-robin
servers: servers:
- consequatur - omnis
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -489,7 +506,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 8Da4P1c6d6gfbhZvaE3k5Ve'
controller: null controller: null
method: null method: null
route: null route: null
@ -505,9 +525,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: aliases title: aliases
description: 'Update aliases.' description: 'Update aliases.'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -525,7 +546,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -535,7 +556,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -543,8 +564,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -553,7 +574,7 @@ endpoints:
description: 'Array of aliases' description: 'Array of aliases'
required: true required: true
example: example:
- consequatur - doloremque
type: 'string[]' type: 'string[]'
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -561,7 +582,7 @@ endpoints:
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
aliases: aliases:
- consequatur - doloremque
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -571,7 +592,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer d4EVa8Zkfvg1Dcbe53P6a6h'
controller: null controller: null
method: null method: null
route: null route: null
@ -587,9 +611,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deploy title: deploy
description: 'Run site deployment script' description: 'Run site deployment script'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -607,7 +632,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -617,7 +642,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -625,8 +650,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -640,7 +665,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer dkcV5EZa8fD6vgaP1b36e4h'
controller: null controller: null
method: null method: null
route: null route: null
@ -656,9 +684,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deployment-script title: deployment-script
description: 'Update site deployment script' description: 'Update site deployment script'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -676,7 +705,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -686,7 +715,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -694,8 +723,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -703,14 +732,14 @@ endpoints:
name: script name: script
description: 'Content of the deployment script' description: 'Content of the deployment script'
required: true required: true
example: consequatur example: voluptatem
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
script: consequatur script: voluptatem
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -720,7 +749,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer hevV81bfZE6cdkaa453gDP6'
controller: null controller: null
method: null method: null
route: null route: null
@ -736,9 +768,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: deployment-script title: deployment-script
description: 'Get site deployment script content' description: 'Get site deployment script content'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -756,7 +789,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -766,7 +799,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -774,8 +807,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -789,7 +822,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer a1EbvhePag4f5dk6ZV368Dc'
controller: null controller: null
method: null method: null
route: null route: null
@ -805,9 +841,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: env title: env
description: 'Get site .env file content' description: 'Get site .env file content'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -825,7 +862,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -835,7 +872,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -843,8 +880,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -858,7 +895,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer P8Zvch3DgV654abeaE6f1kd'
controller: null controller: null
method: null method: null
route: null route: null
@ -874,9 +914,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: env title: env
description: 'Update site .env file' description: 'Update site .env file'
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -894,7 +935,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 32 example: 29
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -904,7 +945,7 @@ endpoints:
name: site_id name: site_id
description: 'The ID of the site.' description: 'The ID of the site.'
required: true required: true
example: 17 example: 44
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -912,8 +953,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 32 server_id: 29
site_id: 17 site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -921,14 +962,14 @@ endpoints:
name: env name: env
description: 'Content of the .env file' description: 'Content of the .env file'
required: true required: true
example: consequatur example: quam
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
env: consequatur env: quam
fileParameters: [] fileParameters: []
responses: responses:
- -
@ -938,7 +979,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer 45acbP1h6eg6kDVdZf8E3av'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -38,12 +39,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Dr. Cornelius Luettgen V","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Orville Satterfield","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Zella Robel","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Jairo Williamson","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
controller: null controller: null
method: null method: null
route: null route: null
@ -59,9 +63,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +102,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: molestias
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -107,7 +112,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: in
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -117,7 +122,7 @@ endpoints:
name: url name: url
description: 'The URL if the provider is Gitlab and it is self-hosted' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' example: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -127,7 +132,7 @@ endpoints:
name: username name: username
description: 'The username if the provider is Bitbucket' description: 'The username if the provider is Bitbucket'
required: true required: true
example: consequatur example: consectetur
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -137,7 +142,7 @@ endpoints:
name: password name: password
description: 'The password if the provider is Bitbucket' description: 'The password if the provider is Bitbucket'
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'y*P4_]ZdjE_:'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -145,21 +150,24 @@ endpoints:
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: gitlab provider: gitlab
name: consequatur name: molestias
token: consequatur token: in
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
username: consequatur username: consectetur
password: 'O[2UZ5ij-e/dl4m{o,' password: 'y*P4_]ZdjE_:'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Lonny Ankunding","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Miss Claudine Goyette","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer DfegP56vkEa364Zbhda8V1c'
controller: null controller: null
method: null method: null
route: null route: null
@ -175,9 +183,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -212,12 +221,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Dr. Enoch Harber II","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Mona Stark","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
controller: null controller: null
method: null method: null
route: null route: null
@ -233,9 +245,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -269,7 +282,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: non
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -279,7 +292,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -289,7 +302,7 @@ endpoints:
name: url name: url
description: 'The URL if the provider is Gitlab and it is self-hosted' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' example: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -299,7 +312,7 @@ endpoints:
name: username name: username
description: 'The username if the provider is Bitbucket' description: 'The username if the provider is Bitbucket'
required: true required: true
example: consequatur example: natus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -309,7 +322,7 @@ endpoints:
name: password name: password
description: 'The password if the provider is Bitbucket' description: 'The password if the provider is Bitbucket'
required: true required: true
example: 'O[2UZ5ij-e/dl4m{o,' example: 'A^">*m{p]DI'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -319,7 +332,7 @@ endpoints:
name: global name: global
description: 'Accessible in all projects' description: 'Accessible in all projects'
required: true required: true
example: false example: true
type: string type: string
enumValues: enumValues:
- true - true
@ -328,22 +341,25 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: non
token: consequatur token: sunt
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html' url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
username: consequatur username: natus
password: 'O[2UZ5ij-e/dl4m{o,' password: 'A^">*m{p]DI'
global: false global: true
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Lonny Ankunding","provider":"github","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"Neha Little","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
controller: null controller: null
method: null method: null
route: null route: null
@ -359,9 +375,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -401,7 +418,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fgk61vD68E4cZhP3bV5adea'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -12,9 +12,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -38,12 +39,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"},{"id":6,"project_id":null,"global":true,"name":"dignissimos","provider":"dropbox","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
controller: null controller: null
method: null method: null
route: null route: null
@ -59,9 +63,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -84,7 +89,7 @@ endpoints:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: consequatur example: ab
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -94,7 +99,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: quo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -104,7 +109,7 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: consequatur example: in
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -114,7 +119,7 @@ endpoints:
name: key name: key
description: 'The key if provider requires key' description: 'The key if provider requires key'
required: true required: true
example: consequatur example: sunt
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -124,28 +129,31 @@ endpoints:
name: secret name: secret
description: 'The secret if provider requires key' description: 'The secret if provider requires key'
required: true required: true
example: consequatur example: molestias
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: consequatur provider: ab
name: consequatur name: quo
token: consequatur token: in
key: consequatur key: sunt
secret: consequatur secret: molestias
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,9 +169,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -198,12 +207,15 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"facilis","provider":"dropbox","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
controller: null controller: null
method: null method: null
route: null route: null
@ -219,9 +231,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -255,7 +268,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: consequatur example: voluptas
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -274,18 +287,21 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: consequatur name: voluptas
global: true global: true
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"dolores","provider":"local","created_at":"2025-04-21T18:40:20.000000Z","updated_at":"2025-04-21T18:40:20.000000Z"}' content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
controller: null controller: null
method: null method: null
route: null route: null
@ -301,9 +317,10 @@ endpoints:
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: false authenticated: true
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -343,7 +360,10 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth:
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -3,7 +3,7 @@ # Introduction
VitoDeploy's API documentation. VitoDeploy's API documentation.
<aside> <aside>
<strong>Base URL</strong>: <code>https://vito.test</code> <strong>Base URL</strong>: <code>https://your-vito-url</code>
</aside> </aside>
This documentation aims to provide all the information you need to work with our API. This documentation aims to provide all the information you need to work with our API.

View File

@ -48,6 +48,11 @@ ## Credits
- PHPSecLib - PHPSecLib
- PHPUnit - PHPUnit
- Tailwindcss - Tailwindcss
- Alpinejs
- Livewire
- Vite - Vite
- Prettier - Prettier
- Postcss
- FilamentPHP
- Mobiledetect
- Spatie - Spatie

View File

@ -17,7 +17,6 @@
use Exception; use Exception;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -30,8 +29,6 @@ class CreateServer
*/ */
public function create(User $creator, Project $project, array $input): Server public function create(User $creator, Project $project, array $input): Server
{ {
Validator::make($input, self::rules($project, $input))->validate();
$server = new Server([ $server = new Server([
'project_id' => $project->id, 'project_id' => $project->id,
'user_id' => $creator->id, 'user_id' => $creator->id,

View File

@ -8,7 +8,6 @@
use App\Models\User; use App\Models\User;
use App\ServerProviders\ServerProvider as ServerProviderContract; use App\ServerProviders\ServerProvider as ServerProviderContract;
use Exception; use Exception;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -21,8 +20,6 @@ class CreateServerProvider
*/ */
public function create(User $user, Project $project, array $input): ServerProvider public function create(User $user, Project $project, array $input): ServerProvider
{ {
Validator::make($input, self::rules($input))->validate();
$provider = self::getProvider($input['provider']); $provider = self::getProvider($input['provider']);
try { try {

View File

@ -15,7 +15,7 @@
* @method static string upload(string $local, string $remote, ?string $owner = null) * @method static string upload(string $local, string $remote, ?string $owner = null)
* @method static string download(string $local, string $remote) * @method static string download(string $local, string $remote)
* @method static string write(string $path, string $content, string $owner = null) * @method static string write(string $path, string $content, string $owner = null)
* @method static string assertExecuted(mixed $commands) * @method static string assertExecuted(array<int, string>|string $commands)
* @method static string assertExecutedContains(string $command) * @method static string assertExecutedContains(string $command)
* @method static string assertFileUploaded(string $toPath, ?string $content = null) * @method static string assertFileUploaded(string $toPath, ?string $content = null)
* @method static string getUploadedLocalPath() * @method static string getUploadedLocalPath()

View File

@ -1,88 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Lockout;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Post;
class AuthenticatedSessionController extends Controller
{
#[Get('login', name: 'login', middleware: 'guest')]
public function create(Request $request): Response
{
return Inertia::render('auth/login', [
'canResetPassword' => Route::has('password.request'),
'status' => $request->session()->get('status'),
]);
}
#[Post('login', name: 'login', middleware: 'guest')]
public function store(Request $request): RedirectResponse
{
$this->validate($request, [
'email' => ['required', 'string', 'email'],
'password' => ['required', 'string'],
]);
$this->ensureIsNotRateLimited();
if (! Auth::attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => __('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
Session::regenerate();
return redirect()->intended(route('servers', absolute: false));
}
#[Post('logout', name: 'logout', middleware: 'auth')]
public function destroy(Request $request): RedirectResponse
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
protected function ensureIsNotRateLimited(): void
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout(request()));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => __('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
protected function throttleKey(): string
{
return Str::transliterate(Str::lower(request()->email).'|'.request()->ip());
}
}

View File

@ -1,43 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('confirm-password')]
#[Middleware('auth')]
class ConfirmablePasswordController extends Controller
{
#[Get('/', name: 'password.confirm')]
public function show(): Response
{
return Inertia::render('auth/confirm-password');
}
#[Post('/', name: 'password.confirm')]
public function store(Request $request): RedirectResponse
{
if (! Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
$request->session()->put('auth.password_confirmed_at', time());
return redirect()->intended(route('dashboard', absolute: false));
}
}

View File

@ -1,69 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
use Illuminate\Validation\ValidationException;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix(('reset-password'))]
#[Middleware('guest')]
class NewPasswordController extends Controller
{
#[Get('{token}', name: 'password.reset')]
public function create(Request $request): Response
{
return Inertia::render('auth/reset-password', [
'email' => $request->email,
'token' => $request->route('token'),
]);
}
#[Post('/', name: 'password.store')]
public function store(Request $request): RedirectResponse
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
// Here we will attempt to reset the user's password. If it is successful we
// will update the password on an actual user model and persist it to the
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
])->save();
event(new PasswordReset($user));
}
);
// If the password was successfully reset, we will redirect the user back to
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
if ($status == Password::PasswordReset) {
return to_route('login')->with('status', __($status));
}
throw ValidationException::withMessages([
'email' => [__($status)],
]);
}
}

View File

@ -1,41 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('forgot-password')]
#[Middleware('guest')]
class PasswordResetLinkController extends Controller
{
#[Get('/', name: 'password.request')]
public function create(Request $request): Response
{
return Inertia::render('auth/forgot-password', [
'status' => $request->session()->get('status'),
]);
}
#[Post('/', name: 'password.email')]
public function store(Request $request): RedirectResponse
{
$request->validate([
'email' => 'required|email',
]);
Password::sendResetLink(
$request->only('email')
);
return back()->with('status', __('A reset link will be sent if the account exists.'));
}
}

View File

@ -1,19 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Spatie\RouteAttributes\Attributes\Get;
class HomeController extends Controller
{
#[Get('/', name: 'home')]
public function __invoke(): RedirectResponse
{
if (auth()->check()) {
return redirect()->route('servers');
}
return redirect()->route('login');
}
}

View File

@ -1,90 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Actions\Server\CreateServer;
use App\Http\Resources\ServerLogResource;
use App\Http\Resources\ServerProviderResource;
use App\Http\Resources\ServerResource;
use App\Models\Server;
use App\Models\ServerProvider;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Inertia\Response;
use Inertia\ResponseFactory;
use Spatie\RouteAttributes\Attributes\Delete;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('servers')]
#[Middleware(['auth', 'has-project'])]
class ServerController extends Controller
{
#[Get('/', name: 'servers')]
public function index(): Response|ResponseFactory
{
$project = user()->currentProject;
$this->authorize('viewAny', [Server::class, $project]);
$servers = $project->servers()->simplePaginate(config('web.pagination_size'));
return inertia('servers/index', [
'servers' => ServerResource::collection($servers),
'public_key' => __('servers.create.public_key_text', ['public_key' => get_public_key_content()]),
'server_providers' => ServerProviderResource::collection(ServerProvider::getByProjectId($project->id)->get()),
]);
}
#[Post('/', name: 'servers.store')]
public function store(Request $request): RedirectResponse
{
$project = user()->currentProject;
$this->authorize('create', [Server::class, $project]);
$server = app(CreateServer::class)->create(user(), $project, $request->all());
return redirect()->route('servers.show', ['server' => $server->id]);
}
#[Get('/{server}', name: 'servers.show')]
public function show(Server $server): Response|ResponseFactory
{
$this->authorize('view', $server);
return inertia('servers/show', [
'server' => ServerResource::make($server),
'logs' => ServerLogResource::collection($server->logs()->latest()->paginate(config('web.pagination_size'))),
]);
}
#[Post('/{server}/switch', name: 'servers.switch')]
public function switch(Server $server): RedirectResponse
{
$this->authorize('view', $server);
return redirect()->route('servers.show', ['server' => $server->id]);
}
#[Delete('/{server}', name: 'servers.destroy')]
public function destroy(Server $server, Request $request): RedirectResponse
{
$this->authorize('delete', $server);
$this->validate($request, [
'name' => [
'required',
Rule::in([$server->name]),
],
]);
$server->delete();
return redirect()->route('servers')
->with('success', __('Server deleted successfully.'));
}
}

View File

@ -1,22 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\Server;
use App\Models\ServerLog;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('servers/{server}/logs')]
#[Middleware(['auth', 'has-project'])]
class ServerLogController extends Controller
{
#[Get('/{log}', name: 'logs.show')]
public function show(Server $server, ServerLog $log): string
{
$this->authorize('view', $log);
return $log->getContent();
}
}

View File

@ -1,91 +0,0 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Password;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Delete;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Patch;
use Spatie\RouteAttributes\Attributes\Prefix;
use Spatie\RouteAttributes\Attributes\Put;
#[Prefix('settings/profile')]
#[Middleware(['auth'])]
class ProfileController extends Controller
{
#[Get('/', name: 'profile')]
public function edit(Request $request): Response
{
return Inertia::render('settings/profile/index', [
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
'status' => $request->session()->get('status'),
]);
}
#[Patch('/', name: 'profile.update')]
public function update(Request $request): RedirectResponse
{
$this->validate($request, [
'name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
'lowercase',
'email',
'max:255',
Rule::unique(User::class)->ignore(user()->id),
],
]);
$request->user()->fill($request->only('name', 'email'));
$request->user()->save();
return to_route('profile');
}
#[Put('/', name: 'profile.password')]
public function password(Request $request): RedirectResponse
{
$validated = $request->validate([
'current_password' => ['required', 'current_password'],
'password' => ['required', Password::defaults(), 'confirmed'],
]);
$request->user()->update([
'password' => Hash::make($validated['password']),
]);
return back();
}
#[Delete('/', name: 'profile.destroy')]
public function destroy(Request $request): RedirectResponse
{
$request->validate([
'password' => ['required', 'current_password'],
]);
$user = $request->user();
Auth::logout();
$user->delete();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\Project;
use Illuminate\Http\RedirectResponse;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('settings/projects')]
#[Middleware(['auth'])]
class ProjectController extends Controller
{
#[Post('switch/{project}', name: 'projects.switch')]
public function switch(Project $project): RedirectResponse
{
$this->authorize('view', $project);
user()->update([
'current_project_id' => $project->id,
]);
return redirect()->route('servers');
}
}

View File

@ -1,57 +0,0 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\ServerProvider\CreateServerProvider;
use App\Http\Controllers\Controller;
use App\Http\Resources\ServerProviderResource;
use App\Models\ServerProvider;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('settings/server-providers')]
#[Middleware(['auth'])]
class ServerProviderController extends Controller
{
public function index(): void {}
#[Get('/', name: 'server-providers.all')]
public function all(): ResourceCollection
{
$this->authorize('viewAny', ServerProvider::class);
return ServerProviderResource::collection(ServerProvider::getByProjectId(user()->current_project_id)->get());
}
#[Post('/', name: 'server-providers.store')]
public function store(Request $request): RedirectResponse
{
$this->authorize('create', ServerProvider::class);
app(CreateServerProvider::class)->create(user(), user()->currentProject, $request->all());
return back()->with('success', 'Server provider created.');
}
#[Get('/{serverProvider}/regions', name: 'server-providers.regions')]
public function regions(ServerProvider $serverProvider): JsonResponse
{
$this->authorize('view', $serverProvider);
return response()->json($serverProvider->provider()->regions());
}
#[Get('{serverProvider}/regions/{region}/plans', name: 'server-providers.plans')]
public function plans(ServerProvider $serverProvider, string $region): JsonResponse
{
$this->authorize('view', $serverProvider);
return response()->json($serverProvider->provider()->plans($region));
}
}

View File

@ -36,9 +36,6 @@ class Kernel extends HttpKernel
\Illuminate\View\Middleware\ShareErrorsFromSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class, \App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\HandleInertiaRequests::class,
\App\Http\Middleware\HandleAppearance::class,
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
], ],
'api' => [ 'api' => [

View File

@ -9,7 +9,10 @@
class CanSeeProjectMiddleware class CanSeeProjectMiddleware
{ {
public function handle(Request $request, Closure $next): mixed /**
* @return mixed
*/
public function handle(Request $request, Closure $next)
{ {
/** @var User $user */ /** @var User $user */
$user = $request->user(); $user = $request->user();

View File

@ -1,23 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Symfony\Component\HttpFoundation\Response;
class HandleAppearance
{
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
View::share('appearance', $request->cookie('appearance') ?? 'system');
return $next($request);
}
}

View File

@ -1,73 +0,0 @@
<?php
namespace App\Http\Middleware;
use App\Http\Resources\ServerResource;
use App\Models\Server;
use App\Models\User;
use Illuminate\Foundation\Inspiring;
use Illuminate\Http\Request;
use Inertia\Middleware;
use Tighten\Ziggy\Ziggy;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
public function share(Request $request): array
{
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');
/** @var ?User $user */
$user = $request->user();
// servers
$servers = [];
if ($user && $user->can('viewAny', [Server::class, $user->currentProject])) {
$servers = ServerResource::collection($user->currentProject?->servers);
}
return [
...parent::share($request),
'name' => config('app.name'),
'quote' => ['message' => trim($message), 'author' => trim($author)],
'auth' => [
'user' => $user,
'projects' => $user?->allProjects()->get(),
'currentProject' => $user?->currentProject,
],
'publicKeyText' => __('servers.create.public_key_text', ['public_key' => get_public_key_content()]),
'projectServers' => $servers,
'configs' => config('core'),
'ziggy' => fn (): array => [
...(new Ziggy)->toArray(),
'location' => $request->url(),
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
];
}
}

View File

@ -2,14 +2,16 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use App\Models\Project;
use App\Models\User; use App\Models\User;
use Closure; use Closure;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class HasProjectMiddleware class HasProjectMiddleware
{ {
public function handle(Request $request, Closure $next): mixed /**
* @return mixed
*/
public function handle(Request $request, Closure $next)
{ {
/** @var ?User $user */ /** @var ?User $user */
$user = $request->user(); $user = $request->user();
@ -19,7 +21,7 @@ public function handle(Request $request, Closure $next): mixed
if (! $user->currentProject) { if (! $user->currentProject) {
if ($user->allProjects()->count() > 0) { if ($user->allProjects()->count() > 0) {
/** @var Project $firstProject */ /** @var \App\Models\Project $firstProject */
$firstProject = $user->allProjects()->first(); $firstProject = $user->allProjects()->first();
$user->current_project_id = $firstProject->id; $user->current_project_id = $firstProject->id;
$user->save(); $user->save();

View File

@ -1,31 +0,0 @@
<?php
namespace App\Http\Resources;
use App\Models\ServerLog;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin ServerLog */
class ServerLogResource extends JsonResource
{
/**
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'server_id' => $this->server_id,
'site_id' => $this->site_id,
'type' => $this->type,
'name' => $this->name,
'disk' => $this->disk,
'is_remote' => $this->is_remote,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'created_at_by_timezone' => $this->created_at_by_timezone,
'updated_at_by_timezone' => $this->updated_at_by_timezone,
];
}
}

View File

@ -22,8 +22,6 @@ public function toArray(Request $request): array
'provider' => $this->provider, 'provider' => $this->provider,
'created_at' => $this->created_at, 'created_at' => $this->created_at,
'updated_at' => $this->updated_at, 'updated_at' => $this->updated_at,
'created_at_by_timezone' => $this->created_at_by_timezone,
'updated_at_by_timezone' => $this->updated_at_by_timezone,
]; ];
} }
} }

View File

@ -38,11 +38,8 @@ public function toArray(Request $request): array
'progress_step' => $this->progress_step, 'progress_step' => $this->progress_step,
'updates' => $this->updates, 'updates' => $this->updates,
'last_update_check' => $this->last_update_check, 'last_update_check' => $this->last_update_check,
'status_color' => $this->getStatusColor(),
'created_at' => $this->created_at, 'created_at' => $this->created_at,
'updated_at' => $this->updated_at, 'updated_at' => $this->updated_at,
'created_at_by_timezone' => $this->created_at_by_timezone,
'updated_at_by_timezone' => $this->updated_at_by_timezone,
]; ];
} }
} }

View File

@ -13,7 +13,6 @@
use App\SSH\Systemd\Systemd; use App\SSH\Systemd\Systemd;
use App\Support\Testing\SSHFake; use App\Support\Testing\SSHFake;
use Carbon\Carbon; use Carbon\Carbon;
use Database\Factories\ServerFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
@ -69,7 +68,7 @@
*/ */
class Server extends AbstractModel class Server extends AbstractModel
{ {
/** @use HasFactory<ServerFactory> */ /** @use HasFactory<\Database\Factories\ServerFactory> */
use HasFactory; use HasFactory;
protected $fillable = [ protected $fillable = [
@ -571,13 +570,4 @@ public function download(string $path, string $disk = 'tmp'): void
$path $path
); );
} }
public function getStatusColor(): string
{
if (isset(self::$statusColors[$this->status])) {
return self::$statusColors[$this->status];
}
return 'gray';
}
} }

View File

@ -5,7 +5,8 @@
use App\Enums\UserRole; use App\Enums\UserRole;
use App\Traits\HasTimezoneTimestamps; use App\Traits\HasTimezoneTimestamps;
use Carbon\Carbon; use Carbon\Carbon;
use Database\Factories\UserFactory; use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
@ -42,11 +43,11 @@
* @property Carbon $created_at * @property Carbon $created_at
* @property Carbon $updated_at * @property Carbon $updated_at
*/ */
class User extends Authenticatable class User extends Authenticatable implements FilamentUser
{ {
use HasApiTokens; use HasApiTokens;
/** @use HasFactory<UserFactory> */ /** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory; use HasFactory;
use HasTimezoneTimestamps; use HasTimezoneTimestamps;
@ -69,7 +70,8 @@ class User extends Authenticatable
'two_factor_secret', 'two_factor_secret',
]; ];
protected $appends = []; protected $appends = [
];
/** /**
* @return HasMany<Server, covariant $this> * @return HasMany<Server, covariant $this>
@ -202,4 +204,9 @@ public function allServers(): Builder
}); });
}); });
} }
public function canAccessPanel(Panel $panel): bool
{
return true;
}
} }

View File

@ -4,6 +4,7 @@
use App\Models\NotificationChannel; use App\Models\NotificationChannel;
use App\Notifications\NotificationInterface; use App\Notifications\NotificationInterface;
use App\Web\Pages\Settings\NotificationChannels\Index;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
class Discord extends AbstractNotificationChannel class Discord extends AbstractNotificationChannel
@ -38,7 +39,7 @@ public function connect(): bool
__('Congratulations! 🎉'), __('Congratulations! 🎉'),
__("You've connected your Discord to :app", ['app' => config('app.name')])."\n". __("You've connected your Discord to :app", ['app' => config('app.name')])."\n".
__('Manage your notification channels')."\n". __('Manage your notification channels')."\n".
'/settings/notification-channels', Index::getUrl()
); );
if (! $connect) { if (! $connect) {

View File

@ -4,6 +4,7 @@
use App\Models\NotificationChannel; use App\Models\NotificationChannel;
use App\Notifications\NotificationInterface; use App\Notifications\NotificationInterface;
use App\Web\Pages\Settings\NotificationChannels\Index;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
class Slack extends AbstractNotificationChannel class Slack extends AbstractNotificationChannel
@ -38,7 +39,7 @@ public function connect(): bool
__('Congratulations! 🎉'), __('Congratulations! 🎉'),
__("You've connected your Slack to :app", ['app' => config('app.name')])."\n". __("You've connected your Slack to :app", ['app' => config('app.name')])."\n".
__('Manage your notification channels')."\n". __('Manage your notification channels')."\n".
'/settings/notification-channels', Index::getUrl()
); );
if (! $connect) { if (! $connect) {

View File

@ -26,9 +26,9 @@ public function boot(): void
ResourceCollection::withoutWrapping(); ResourceCollection::withoutWrapping();
// facades // facades
$this->app->bind('ssh', fn (): SSH => new SSH); $this->app->bind('ssh', fn (): \App\Helpers\SSH => new SSH);
$this->app->bind('notifier', fn (): Notifier => new Notifier); $this->app->bind('notifier', fn (): \App\Helpers\Notifier => new Notifier);
$this->app->bind('ftp', fn (): FTP => new FTP); $this->app->bind('ftp', fn (): \App\Helpers\FTP => new FTP);
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class); Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
} }

View File

@ -0,0 +1,123 @@
<?php
namespace App\Providers;
use App\Http\Middleware\HasProjectMiddleware;
use App\Web\Pages\Login;
use App\Web\Pages\Settings\Profile;
use App\Web\Pages\Settings\Projects\Widgets\SelectProject;
use Exception;
use Filament\Facades\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\MenuItem;
use Filament\Panel;
use Filament\Support\Assets\Js;
use Filament\Support\Colors\Color;
use Filament\Support\Enums\MaxWidth;
use Filament\Support\Facades\FilamentAsset;
use Filament\Support\Facades\FilamentColor;
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\Support\Facades\Vite;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use Livewire\Livewire;
class WebServiceProvider extends ServiceProvider
{
/**
* @throws Exception
*/
public function register(): void
{
Filament::registerPanel($this->panel(Panel::make()));
}
public function boot(): void
{
FilamentView::registerRenderHook(
PanelsRenderHook::SIDEBAR_NAV_START,
fn () => Livewire::mount(SelectProject::class)
);
FilamentView::registerRenderHook(
PanelsRenderHook::SIDEBAR_FOOTER,
fn () => view('components.app-version')
);
FilamentAsset::register([
Js::make('app', Vite::asset('resources/js/app.js'))->module(),
]);
FilamentColor::register([
'slate' => Color::Slate,
'gray' => Color::Zinc,
'red' => Color::Red,
'orange' => Color::Orange,
'amber' => Color::Amber,
'yellow' => Color::Yellow,
'lime' => Color::Lime,
'green' => Color::Green,
'emerald' => Color::Emerald,
'teal' => Color::Teal,
'cyan' => Color::Cyan,
'sky' => Color::Sky,
'blue' => Color::Blue,
'indigo' => Color::Indigo,
'violet' => Color::Violet,
'purple' => Color::Purple,
'fuchsia' => Color::Fuchsia,
'pink' => Color::Pink,
'rose' => Color::Rose,
]);
}
/**
* @throws Exception
*/
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('app')
->path('')
->passwordReset()
->colors([
'primary' => Color::Indigo,
])
->maxContentWidth(MaxWidth::ScreenTwoExtraLarge)
->viteTheme('resources/css/filament/app/theme.css')
->brandLogo(fn () => view('components.brand'))
->brandLogoHeight('30px')
->discoverPages(in: app_path('Web/Pages'), for: 'App\\Web\\Pages')
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
HasProjectMiddleware::class,
])
->userMenuItems([
'profile' => MenuItem::make()
->url(fn (): string => Profile\Index::getUrl()),
])
->login(Login::class)
->spa()
->globalSearchKeyBindings(['command+k', 'ctrl+k'])
->sidebarCollapsibleOnDesktop()
->globalSearchFieldKeyBindingSuffix();
}
}

View File

@ -1,9 +1,12 @@
<?php <?php
use App\Models\User; use App\Exceptions\SSHError;
use Filament\Notifications\Actions\Action;
use Filament\Notifications\Notification;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Validation\ValidationException;
function generate_public_key(string $privateKeyPath, string $publicKeyPath): void function generate_public_key(string $privateKeyPath, string $publicKeyPath): void
{ {
@ -54,10 +57,6 @@ function convert_time_format(string $string): string
function get_public_key_content(): string function get_public_key_content(): string
{ {
if (cache()->has('ssh_public_key_content')) {
return cache()->get('ssh_public_key_content');
}
if (! file_exists(storage_path(config('core.ssh_public_key_name')))) { if (! file_exists(storage_path(config('core.ssh_public_key_name')))) {
Artisan::call('ssh-key:generate --force'); Artisan::call('ssh-key:generate --force');
} }
@ -68,13 +67,46 @@ function get_public_key_content(): string
return ''; return '';
} }
$content = str($content) return str($content)
->replace("\n", '') ->replace("\n", '')
->toString(); ->toString();
}
cache()->put('ssh_public_key_content', $content, 60 * 60 * 24); function run_action(object $static, Closure $callback): void
{
try {
$callback();
} catch (SSHError $e) {
$actions = [];
if ($e->getLog() instanceof \App\Models\ServerLog) {
$actions[] = Action::make('View Logs')
->url(App\Web\Pages\Servers\Logs\Index::getUrl([
'server' => $e->getLog()->server_id,
]))
->openUrlInNewTab();
}
Notification::make()
->danger()
->title($e->getMessage())
->body($e->getLog()?->getContent(30))
->actions($actions)
->send();
return $content; if (method_exists($static, 'halt')) {
$reflectionMethod = new ReflectionMethod($static, 'halt');
$reflectionMethod->invoke($static);
}
} catch (ValidationException $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
if (method_exists($static, 'halt')) {
$reflectionMethod = new ReflectionMethod($static, 'halt');
$reflectionMethod->invoke($static);
}
}
} }
/** /**
@ -219,11 +251,3 @@ function format_nginx_config(string $config): string
return implode("\n", $formattedLines)."\n"; return implode("\n", $formattedLines)."\n";
} }
function user(): User
{
/** @var User $user */
$user = auth()->user();
return $user;
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Web\Components;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class Link extends Component implements Htmlable
{
public function __construct(public string $href, public string $text, public bool $external = false) {}
public function render(): View
{
return view('components.link');
}
public function toHtml(): View|string
{
return $this->render()->with([
'href' => $this->href,
'text' => $this->text,
'external' => $this->external,
]);
}
}

View File

@ -0,0 +1,59 @@
<?php
namespace App\Web\Components;
use App\Models\User;
use Filament\Pages\Page as BasePage;
use Illuminate\View\ComponentAttributeBag;
abstract class Page extends BasePage
{
protected static string $view = 'components.page';
protected ?string $live = '5s';
/**
* @var array<string, mixed>
*/
protected array $extraAttributes = [];
/**
* @return array<string, mixed>
*/
protected function getExtraAttributes(): array
{
$attributes = $this->extraAttributes;
if (! in_array($this->getLive(), [null, '', '0'], true)) {
$attributes['wire:poll.'.$this->getLive()] = '$dispatch(\'$refresh\')';
}
return $attributes;
}
public function getExtraAttributesBag(): ComponentAttributeBag
{
return new ComponentAttributeBag($this->getExtraAttributes());
}
public function getLive(): ?string
{
return $this->live;
}
/**
* @return array<int, mixed>
*/
public function getWidgets(): array
{
return [];
}
protected function getUser(): User
{
/** @var User $user */
$user = auth()->user();
return $user;
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Web\Contracts;
interface HasSecondSubNav
{
/**
* @return array<mixed>
*/
public function getSecondSubNavigation(): array;
}

View File

@ -0,0 +1,72 @@
<?php
namespace App\Web\Fields;
use Filament\Forms\Components\Field;
class AlertField extends Field
{
protected string $view = 'fields.alert';
public string $color = 'blue';
public string $icon = 'heroicon-o-information-circle';
public string $message = '';
public function color(string $color): static
{
$this->color = $color;
return $this;
}
public function icon(string $icon): static
{
$this->icon = $icon;
return $this;
}
public function message(string $message): static
{
$this->message = $message;
return $this;
}
public function success(): static
{
return $this->color('green')->icon('heroicon-o-check-circle');
}
public function warning(): static
{
return $this->color('yellow')->icon('heroicon-o-exclamation-circle');
}
public function danger(): static
{
return $this->color('red')->icon('heroicon-o-x-circle');
}
public function info(): static
{
return $this->color('blue')->icon('heroicon-o-information-circle');
}
public function getColor(): string
{
return $this->color;
}
public function getIcon(): string
{
return $this->icon;
}
public function getMessage(): string
{
return $this->message;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\Web\Fields;
use Filament\Forms\Components\Field;
class CodeEditorField extends Field
{
protected string $view = 'fields.code-editor';
public string $lang = '';
public bool $readonly = false;
/**
* @return array<string, mixed>
*/
public function getOptions(): array
{
return [
'id' => $this->getId(),
'name' => $this->getName(),
'lang' => $this->lang,
'value' => json_encode($this->getState() ?? ''),
];
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Web\Fields;
use Filament\Forms\Components\Field;
class ProviderField extends Field
{
protected string $view = 'fields.provider';
}

156
app/Web/Pages/Login.php Normal file
View File

@ -0,0 +1,156 @@
<?php
namespace App\Web\Pages;
use App\Models\User;
use Filament\Actions\Action;
use Filament\Facades\Filament;
use Filament\Forms\Components\TextInput;
use Filament\Http\Responses\Auth\Contracts\LoginResponse;
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
use Illuminate\Support\Facades\Blade;
use Illuminate\Validation\ValidationException;
use Laravel\Fortify\Http\Requests\TwoFactorLoginRequest;
class Login extends \Filament\Pages\Auth\Login
{
public function mount(): void
{
if (Filament::auth()->check()) {
redirect()->intended(Filament::getUrl());
}
$this->initTwoFactor();
$this->form->fill();
if (config('app.demo')) {
$this->form->fill([
'email' => 'demo@vitodeploy.com',
'password' => 'password',
]);
}
}
public function logoutAction(): Action
{
return Action::make('logout')
->label('Logout')
->color('danger')
->link()
->action(function (): void {
Filament::auth()->logout();
session()->forget('login.id');
$this->redirect(Filament::getLoginUrl());
});
}
protected function getForms(): array
{
if (request()->session()->has('login.id')) {
return [
'form' => $this->form(
$this->makeForm()
->schema([
TextInput::make('code')
->label('2FA Code')
->autofocus(),
TextInput::make('recovery_code')
->label('Recovery Code')
->autofocus(),
])
->statePath('data'),
),
];
}
return parent::getForms();
}
public function authenticate(): ?LoginResponse
{
if (request()->session()->has('login.id')) {
return $this->confirmTwoFactor();
}
$loginResponse = parent::authenticate();
/** @var ?User $user */
$user = Filament::auth()->getUser();
if ($user && $user->two_factor_secret) {
Filament::auth()->logout();
request()->session()->put([
'login.id' => $user->getKey(),
'login.remember' => $this->data['remember'] ?? false,
]);
$this->redirect(Filament::getLoginUrl());
return null;
}
return $loginResponse;
}
private function confirmTwoFactor(): LoginResponse
{
$request = TwoFactorLoginRequest::createFrom(request())->merge([
'code' => $this->data['code'] ?? null,
'recovery_code' => $this->data['recovery_code'] ?? null,
]);
/** @var ?User $user */
$user = $request->challengedUser();
if (! $user) {
$this->redirect(Filament::getLoginUrl());
return app(LoginResponse::class);
}
if ($code = $request->validRecoveryCode()) {
$user->replaceRecoveryCode($code);
} elseif (! $request->hasValidCode()) {
$field = $request->input('recovery_code') ? 'recovery_code' : 'code';
$this->initTwoFactor();
throw ValidationException::withMessages([
'data.'.$field => 'Invalid code!',
]);
}
Filament::auth()->login($user, $request->remember());
return app(LoginResponse::class);
}
protected function getAuthenticateFormAction(): Action
{
if (request()->session()->has('login.id')) {
return Action::make('verify')
->label('Verify')
->submit('authenticate');
}
return parent::getAuthenticateFormAction();
}
private function initTwoFactor(): void
{
if (request()->session()->has('login.id')) {
FilamentView::registerRenderHook(
PanelsRenderHook::AUTH_LOGIN_FORM_BEFORE,
fn (): string => Blade::render(
<<<BLADE
<x-slot name="subheading">{$this->logoutAction()->render()->render()}</x-slot>
BLADE
),
);
}
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace App\Web\Pages\Scripts;
use App\Actions\Script\ExecuteScript;
use App\Models\Script;
use App\Models\Server;
use App\Web\Components\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Support\Enums\MaxWidth;
use Illuminate\Contracts\Support\Htmlable;
class Executions extends Page
{
protected static bool $shouldRegisterNavigation = false;
protected static ?string $slug = 'scripts/{script}/executions';
public Script $script;
public function getTitle(): string|Htmlable
{
return $this->script->name.' - Executions';
}
public function mount(): void
{
$this->authorize('view', $this->script);
}
public function getWidgets(): array
{
return [
[Widgets\ScriptExecutionsList::class, ['script' => $this->script]],
];
}
protected function getHeaderActions(): array
{
$form = [
Select::make('server')
->options(fn () => auth()->user()?->currentProject?->servers?->pluck('name', 'id') ?? [])
->rules(fn (Get $get) => ExecuteScript::rules($get())['server'])
->searchable()
->reactive(),
Select::make('user')
->rules(fn (Get $get) => ExecuteScript::rules($get())['user'])
->native(false)
->options(function (Get $get): array {
$users = ['root'];
/** @var ?Server $server */
$server = Server::query()->find($get('server'));
if ($server) {
$users = $server->getSshUsers();
}
return array_combine($users, $users);
}),
];
foreach ($this->script->getVariables() as $variable) {
$form[] = TextInput::make('variables.'.$variable)
->label($variable)
->rules(fn (Get $get) => ExecuteScript::rules($get())['variables.*']);
}
return [
Action::make('execute')
->icon('heroicon-o-bolt')
->modalWidth(MaxWidth::Large)
->form($form)
->action(function (array $data): void {
app(ExecuteScript::class)->execute($this->script, $data);
$this->dispatch('$refresh');
}),
];
}
}

View File

@ -0,0 +1,78 @@
<?php
namespace App\Web\Pages\Scripts;
use App\Actions\Script\CreateScript;
use App\Models\Script;
use App\Models\User;
use App\Web\Components\Page;
use App\Web\Fields\CodeEditorField;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\MaxWidth;
class Index extends Page
{
protected static ?string $slug = 'scripts';
protected static ?string $navigationIcon = 'heroicon-o-bolt';
protected static ?int $navigationSort = 2;
protected static ?string $title = 'Scripts';
public static function getNavigationItemActiveRoutePattern(): string
{
return static::getRouteName().'*';
}
public static function canAccess(): bool
{
return auth()->user()?->can('viewAny', Script::class) ?? false;
}
public function getWidgets(): array
{
return [
[Widgets\ScriptsList::class],
];
}
protected function getHeaderActions(): array
{
/** @var User $user */
$user = auth()->user();
return [
Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com/scripts')
->openUrlInNewTab(),
Action::make('create')
->label('Create a Script')
->icon('heroicon-o-plus')
->authorize('create', Script::class)
->modalWidth(MaxWidth::ThreeExtraLarge)
->form([
TextInput::make('name')
->rules(CreateScript::rules()['name']),
CodeEditorField::make('content')
->rules(CreateScript::rules()['content'])
->helperText('You can use variables like ${VARIABLE_NAME} in the script. The variables will be asked when executing the script'),
Checkbox::make('global')
->label('Is Global (Accessible in all projects)'),
])
->modalSubmitActionLabel('Create')
->action(function (array $data) use ($user): void {
run_action($this, function () use ($data, $user): void {
app(CreateScript::class)->create($user, $data);
$this->dispatch('$refresh');
});
}),
];
}
}

View File

@ -0,0 +1,87 @@
<?php
namespace App\Web\Pages\Scripts\Widgets;
use App\Models\Script;
use App\Models\ScriptExecution;
use App\Web\Pages\Servers\View;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\View\ComponentAttributeBag;
class ScriptExecutionsList extends Widget
{
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
public Script $script;
/**
* @return Builder<ScriptExecution>
*/
protected function getTableQuery(): Builder
{
return ScriptExecution::query()->where('script_id', $this->script->id);
}
/**
* @param Builder<ScriptExecution> $query
* @return Builder<ScriptExecution>
*/
protected function applyDefaultSortingToTableQuery(Builder $query): Builder
{
return $query->latest('created_at');
}
protected function getTableColumns(): array
{
return [
TextColumn::make('server')
->formatStateUsing(fn (ScriptExecution $record) => $record->getServer()->name ?? 'Unknown')
->url(function (ScriptExecution $record): ?string {
$server = $record->getServer();
return $server instanceof \App\Models\Server ? View::getUrl(['server' => $server]) : null;
})
->searchable()
->sortable(),
TextColumn::make('created_at')
->label('Executed At')
->formatStateUsing(fn (ScriptExecution $record) => $record->created_at_by_timezone)
->searchable()
->sortable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (ScriptExecution $record) => ScriptExecution::$statusColors[$record->status])
->sortable(),
];
}
public function table(Table $table): Table
{
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('logs')
->hiddenLabel()
->tooltip('Logs')
->icon('heroicon-o-eye')
->authorize(fn (ScriptExecution $record) => auth()->user()?->can('view', $record->serverLog))
->modalHeading('View Log')
->modalContent(fn (ScriptExecution $record) => view('components.console-view', [
'slot' => $record->serverLog?->getContent(),
'attributes' => new ComponentAttributeBag,
]))
->modalSubmitAction(false)
->modalCancelActionLabel('Close'),
]);
}
}

View File

@ -0,0 +1,100 @@
<?php
namespace App\Web\Pages\Scripts\Widgets;
use App\Actions\Script\EditScript;
use App\Models\Script;
use App\Models\User;
use App\Web\Fields\CodeEditorField;
use App\Web\Pages\Scripts\Executions;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\MaxWidth;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class ScriptsList extends Widget
{
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<Script>
*/
protected function getTableQuery(): Builder
{
/** @var User $user */
$user = auth()->user();
return Script::getByProjectId($user->current_project_id, $user->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('name')
->searchable()
->sortable(),
TextColumn::make('id')
->label('Global')
->badge()
->color(fn ($record): string => $record->project_id ? 'gray' : 'success')
->formatStateUsing(fn (Script $record): string => $record->project_id ? 'No' : 'Yes'),
TextColumn::make('created_at')
->label('Created At')
->formatStateUsing(fn (Script $record) => $record->created_at_by_timezone)
->searchable()
->sortable(),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->recordUrl(fn (Script $record): string => Executions::getUrl(['script' => $record]))
->actions([
EditAction::make('edit')
->label('Edit')
->modalHeading('Edit Script')
->mutateRecordDataUsing(fn (array $data, Script $record): array => [
'name' => $record->name,
'content' => $record->content,
'global' => $record->project_id === null,
])
->form([
TextInput::make('name')
->rules(EditScript::rules()['name']),
CodeEditorField::make('content')
->rules(EditScript::rules()['content'])
->helperText('You can use variables like ${VARIABLE_NAME} in the script. The variables will be asked when executing the script'),
Checkbox::make('global')
->label('Is Global (Accessible in all projects)'),
])
->authorize(fn (Script $record) => $user->can('update', $record))
->using(function (array $data, Script $record) use ($user): void {
app(EditScript::class)->edit($record, $user, $data);
$this->dispatch('$refresh');
})
->modalWidth(MaxWidth::ThreeExtraLarge),
DeleteAction::make('delete')
->label('Delete')
->modalHeading('Delete Script')
->authorize(fn (Script $record) => $user->can('delete', $record))
->using(function (array $data, Script $record): void {
$record->delete();
}),
]);
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace App\Web\Pages\Servers\Console;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
class Index extends Page
{
protected ?string $live = '';
/**
* @var array<string>
*/
protected $listeners = [];
protected static ?string $slug = 'servers/{server}/console';
protected static ?string $title = 'Headless Console';
protected static ?string $navigationLabel = 'Console';
public function mount(): void
{
$this->authorize('manage', $this->server);
}
public function getWidgets(): array
{
return [
[Widgets\Console::class, ['server' => $this->server]],
];
}
protected function getHeaderActions(): array
{
return [
Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com/servers/console.html')
->openUrlInNewTab(),
];
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Web\Pages\Servers\Console\Widgets;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Console extends Component
{
public Server $server;
public function render(): View
{
return view('components.console', [
'server' => $this->server,
]);
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Web\Pages\Servers\Console\Widgets;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Illuminate\Support\Facades\Cache;
use Livewire\Component;
class StopCommand extends Component implements HasForms
{
use InteractsWithForms;
public function stop(): void
{
Cache::put('console', 0);
}
public function render(): string
{
return <<<'BLADE'
<div>
<x-filament::icon
icon="heroicon-o-stop"
wire:click="stop"
class="h-5 w-5 text-danger-400 cursor-pointer"
/>
</div>
BLADE;
}
}

View File

@ -0,0 +1,87 @@
<?php
namespace App\Web\Pages\Servers\CronJobs;
use App\Actions\CronJob\CreateCronJob;
use App\Models\CronJob;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Index extends Page
{
protected static ?string $slug = 'servers/{server}/cronjobs';
protected static ?string $title = 'Cron Jobs';
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
public function mount(): void
{
$this->authorize('viewAny', [CronJob::class, $this->server]);
}
public function getWidgets(): array
{
return [
[Widgets\CronJobsList::class, ['server' => $this->server]],
];
}
protected function getHeaderActions(): array
{
$users = $this->server->getSshUsers();
return [
Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com/servers/cronjobs')
->openUrlInNewTab(),
Action::make('create')
->authorize(fn () => auth()->user()?->can('create', [CronJob::class, $this->server]))
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::ExtraLarge)
->form([
TextInput::make('command')
->rules(fn (callable $get) => CreateCronJob::rules($get(), $this->server)['command'])
->helperText(fn () => view('components.link', [
'href' => 'https://vitodeploy.com/servers/cronjobs',
'external' => true,
'text' => 'How the command should look like?',
])),
Select::make('user')
->rules(fn (callable $get) => CreateCronJob::rules($get(), $this->server)['user'])
->options(array_combine($users, $users)),
Select::make('frequency')
->options(config('core.cronjob_intervals'))
->reactive()
->rules(fn (callable $get) => CreateCronJob::rules($get(), $this->server)['frequency']),
TextInput::make('custom')
->label('Custom Frequency (Cron)')
->rules(fn (callable $get) => CreateCronJob::rules($get(), $this->server)['custom'])
->visible(fn (callable $get): bool => $get('frequency') === 'custom')
->placeholder('0 * * * *'),
])
->action(function (array $data): void {
run_action($this, function () use ($data): void {
app(CreateCronJob::class)->create($this->server, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Cron Job created!')
->send();
});
}),
];
}
}

View File

@ -0,0 +1,116 @@
<?php
namespace App\Web\Pages\Servers\CronJobs\Widgets;
use App\Actions\CronJob\DeleteCronJob;
use App\Actions\CronJob\DisableCronJob;
use App\Actions\CronJob\EnableCronJob;
use App\Models\CronJob;
use App\Models\Server;
use App\Models\User;
use Exception;
use Filament\Notifications\Notification;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class CronJobsList extends Widget
{
public Server $server;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<CronJob>
*/
protected function getTableQuery(): Builder
{
return CronJob::query()->where('server_id', $this->server->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('command')
->limit(40)
->tooltip(fn (CronJob $cronJob) => $cronJob->command)
->searchable()
->copyable(),
TextColumn::make('frequency')
->formatStateUsing(fn (CronJob $cronJob): string => $cronJob->frequencyLabel())
->searchable()
->sortable()
->copyable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (CronJob $record) => CronJob::$statusColors[$record->status])
->searchable()
->sortable(),
TextColumn::make('created_at')
->formatStateUsing(fn (CronJob $cronJob) => $cronJob->created_at_by_timezone)
->sortable(),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('enable')
->hiddenLabel()
->tooltip('Enable')
->icon('heroicon-o-play')
->requiresConfirmation()
->authorize(fn (CronJob $record) => $user->can('update', [$record, $this->server]))
->visible(fn (CronJob $record): bool => $record->isDisabled())
->action(function (CronJob $record): void {
run_action($this, function () use ($record): void {
app(EnableCronJob::class)->enable($this->server, $record);
});
}),
Action::make('disable')
->hiddenLabel()
->tooltip('Disable')
->icon('heroicon-o-stop')
->requiresConfirmation()
->authorize(fn (CronJob $record) => $user->can('update', [$record, $this->server]))
->visible(fn (CronJob $record): bool => $record->isEnabled())
->action(function (CronJob $record): void {
run_action($this, function () use ($record): void {
app(DisableCronJob::class)->disable($this->server, $record);
});
}),
Action::make('delete')
->icon('heroicon-o-trash')
->tooltip('Delete')
->color('danger')
->hiddenLabel()
->requiresConfirmation()
->authorize(fn (CronJob $record) => $user->can('delete', $record))
->action(function (CronJob $record): void {
try {
app(DeleteCronJob::class)->delete($this->server, $record);
} catch (Exception $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
}
$this->dispatch('$refresh');
}),
]);
}
}

View File

@ -0,0 +1,99 @@
<?php
namespace App\Web\Pages\Servers\Databases;
use App\Actions\Database\ManageBackup;
use App\Models\Backup;
use App\Models\StorageProvider;
use App\Models\User;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Page;
use App\Web\Pages\Settings\StorageProviders\Actions\Create;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Backups extends Page implements HasSecondSubNav
{
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases/backups';
protected static ?string $title = 'Backups';
public function mount(): void
{
$this->authorize('viewAny', [Backup::class, $this->server]);
}
protected function getHeaderActions(): array
{
/** @var User $user */
$user = auth()->user();
return [
Action::make('create')
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::Large)
->authorize(fn () => $user->can('create', [Backup::class, $this->server]))
->form([
Select::make('database')
->label('Database')
->options($this->server->databases()->pluck('name', 'id')->toArray())
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['database'])
->searchable(),
Select::make('storage')
->label('Storage')
->options(StorageProvider::getByProjectId($this->server->project_id)->pluck('profile', 'id')->toArray())
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['storage'])
->suffixAction(
\Filament\Forms\Components\Actions\Action::make('connect')
->form(Create::form())
->modalHeading('Connect to a new storage provider')
->modalSubmitActionLabel('Connect')
->icon('heroicon-o-wifi')
->tooltip('Connect to a new storage provider')
->modalWidth(MaxWidth::Medium)
->authorize(fn () => $user->can('create', StorageProvider::class))
->action(fn (array $data) => Create::action($data))
),
Select::make('interval')
->label('Interval')
->options(config('core.cronjob_intervals'))
->reactive()
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['interval']),
TextInput::make('custom_interval')
->label('Custom Interval (Cron)')
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['custom_interval'])
->visible(fn (callable $get): bool => $get('interval') === 'custom')
->placeholder('0 * * * *'),
TextInput::make('keep')
->label('Backups to Keep')
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['keep'])
->helperText('How many backups to keep before deleting the oldest one'),
])
->modalSubmitActionLabel('Create')
->action(function (array $data): void {
run_action($this, function () use ($data): void {
app(ManageBackup::class)->create($this->server, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Backup created!')
->send();
});
}),
];
}
public function getWidgets(): array
{
return [
[Widgets\BackupsList::class, ['server' => $this->server]],
];
}
}

View File

@ -0,0 +1,163 @@
<?php
namespace App\Web\Pages\Servers\Databases;
use App\Actions\Database\CreateDatabase;
use App\Actions\Database\SyncDatabases;
use App\Models\Database;
use App\Models\Server;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Index extends Page implements HasSecondSubNav
{
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases';
protected static ?string $title = 'Databases';
public function mount(): void
{
$this->authorize('viewAny', [Database::class, $this->server]);
}
public static function getCharsetInput(Server $server): Select
{
return Select::make('charset')
->label('Charset / Encoding')
->native(false)
->live()
->default(function () use ($server) {
$service = $server->defaultService('database');
return $service->type_data['defaultCharset'] ?? null;
})
->options(function () use ($server): array {
$service = $server->defaultService('database');
$charsets = $service->type_data['charsets'] ?? [];
return array_combine(
array_keys($charsets),
array_keys($charsets)
);
})
->afterStateUpdated(function (Get $get, Set $set, $state) use ($server): void {
$service = $server->defaultService('database');
$charsets = $service->type_data['charsets'] ?? [];
$set('collation', $charsets[$state]['default'] ?? null);
})
->rules(fn (callable $get) => CreateDatabase::rules($server, $get())['charset']);
}
public static function getCollationInput(Server $server): Select
{
return Select::make('collation')
->label('Collation')
->native(false)
->live()
->default(function (Get $get) use ($server) {
$service = $server->defaultService('database');
$charsets = $service->type_data['charsets'] ?? [];
$charset = $get('charset') ?? $service->type_data['default'] ?? 'utf8mb4';
return $charsets[$charset]['default'] ?? null;
})
->options(function (Get $get) use ($server): array {
$service = $server->defaultService('database');
$collations = $service->type_data['charsets'][$get('charset')]['list'] ?? [];
return array_combine(
array_values($collations),
array_values($collations)
);
})
->rules(fn (callable $get) => CreateDatabase::rules($server, $get())['collation']);
}
protected function getHeaderActions(): array
{
return [
Action::make('sync')
->color('gray')
->label('Sync Databases')
->icon('heroicon-o-arrow-path')
->authorize(fn () => auth()->user()?->can('create', [Database::class, $this->server]))
->requiresConfirmation()
->modalDescription('This will create databases that exist on the server but not in Vito.')
->modalSubmitActionLabel('Sync')
->action(function (): void {
run_action($this, function (): void {
app(SyncDatabases::class)->sync($this->server);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Databases synced!')
->send();
});
}),
Action::make('create')
->label('Create Database')
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::Large)
->authorize(fn () => auth()->user()?->can('create', [Database::class, $this->server]))
->form([
TextInput::make('name')
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['name']),
self::getCharsetInput($this->server),
self::getCollationInput($this->server),
Checkbox::make('user')
->label('Create User')
->default(false)
->reactive(),
TextInput::make('username')
->label('Username')
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['username'])
->hidden(fn (callable $get): bool => $get('user') !== true),
TextInput::make('password')
->label('Password')
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['password'])
->hidden(fn (callable $get): bool => $get('user') !== true),
Checkbox::make('remote')
->label('Remote')
->default(false)
->hidden(fn (callable $get): bool => $get('user') !== true)
->reactive(),
TextInput::make('host')
->label('Host')
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['host'])
->hidden(fn (callable $get): bool => $get('remote') !== true),
])
->modalSubmitActionLabel('Create')
->action(function (array $data): void {
run_action($this, function () use ($data): void {
app(CreateDatabase::class)->create($this->server, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Database Created!')
->send();
});
}),
];
}
public function getWidgets(): array
{
return [
[Widgets\DatabasesList::class, ['server' => $this->server]],
];
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace App\Web\Pages\Servers\Databases\Traits;
use App\Models\Backup;
use App\Models\Database;
use App\Models\DatabaseUser;
use App\Models\User;
use App\Web\Pages\Servers\Databases\Backups;
use App\Web\Pages\Servers\Databases\Index as Databases;
use App\Web\Pages\Servers\Databases\Users;
use Filament\Navigation\NavigationGroup;
use Filament\Navigation\NavigationItem;
trait Navigation
{
public function getSecondSubNavigation(): array
{
/** @var User $user */
$user = auth()->user();
$items = [];
if ($user->can('viewAny', [Database::class, $this->server])) {
$items[] = NavigationItem::make(Databases::getNavigationLabel())
->icon('heroicon-o-circle-stack')
->isActiveWhen(fn () => request()->routeIs(Databases::getRouteName()))
->url(Databases::getUrl(parameters: ['server' => $this->server]));
}
if ($user->can('viewAny', [DatabaseUser::class, $this->server])) {
$items[] = NavigationItem::make(Users::getNavigationLabel())
->icon('heroicon-o-users')
->isActiveWhen(fn () => request()->routeIs(Users::getRouteName()))
->url(Users::getUrl(parameters: ['server' => $this->server]));
}
if ($user->can('viewAny', [Backup::class, $this->server])) {
$items[] = NavigationItem::make(Backups::getNavigationLabel())
->icon('heroicon-o-cloud')
->isActiveWhen(fn () => request()->routeIs(Backups::getRouteName()))
->url(Backups::getUrl(parameters: ['server' => $this->server]));
}
return [
NavigationGroup::make()
->items($items),
];
}
}

View File

@ -0,0 +1,96 @@
<?php
namespace App\Web\Pages\Servers\Databases;
use App\Actions\Database\CreateDatabase;
use App\Actions\Database\CreateDatabaseUser;
use App\Actions\Database\SyncDatabaseUsers;
use App\Models\DatabaseUser;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Users extends Page implements HasSecondSubNav
{
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases/users';
protected static ?string $title = 'Database Users';
public function mount(): void
{
$this->authorize('viewAny', [DatabaseUser::class, $this->server]);
}
protected function getHeaderActions(): array
{
return [
Action::make('sync')
->color('gray')
->label('Sync Users')
->icon('heroicon-o-arrow-path')
->authorize(fn () => auth()->user()?->can('create', [DatabaseUser::class, $this->server]))
->requiresConfirmation()
->modalDescription('This will create db users that exist on the server but not in Vito.')
->modalSubmitActionLabel('Sync')
->action(function (): void {
run_action($this, function (): void {
app(SyncDatabaseUsers::class)->sync($this->server);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Users synced!')
->send();
});
}),
Action::make('create')
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::Large)
->authorize(fn () => auth()->user()?->can('create', [DatabaseUser::class, $this->server]))
->form([
TextInput::make('username')
->label('Username')
->rules(fn (callable $get) => CreateDatabaseUser::rules($this->server, $get())['username']),
TextInput::make('password')
->label('Password')
->rules(fn (callable $get) => CreateDatabaseUser::rules($this->server, $get())['password']),
Checkbox::make('remote')
->label('Remote')
->default(false)
->visible(in_array($this->server->database()->name, ['mysql', 'mariadb']))
->reactive(),
TextInput::make('host')
->label('Host')
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['host'])
->hidden(fn (callable $get): bool => $get('remote') !== true),
])
->modalSubmitActionLabel('Create')
->action(function (array $data): void {
run_action($this, function () use ($data): void {
app(CreateDatabaseUser::class)->create($this->server, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Database user created!')
->send();
});
}),
];
}
public function getWidgets(): array
{
return [
[Widgets\DatabaseUsersList::class, ['server' => $this->server]],
];
}
}

View File

@ -0,0 +1,136 @@
<?php
namespace App\Web\Pages\Servers\Databases\Widgets;
use App\Actions\Database\ManageBackupFile;
use App\Actions\Database\RestoreBackup;
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Database;
use App\Models\User;
use Filament\Forms\Components\Select;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class BackupFilesList extends Widget
{
public Backup $backup;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<BackupFile>
*/
protected function getTableQuery(): Builder
{
return BackupFile::query()->where('backup_id', $this->backup->id);
}
/**
* @return array<int, mixed>
*/
protected function getTableColumns(): array
{
return [
TextColumn::make('name')
->searchable(),
TextColumn::make('created_at')
->formatStateUsing(fn (BackupFile $record) => $record->created_at_by_timezone)
->sortable(),
TextColumn::make('restored_to')
->searchable(),
TextColumn::make('restored_at')
->formatStateUsing(fn (BackupFile $record): string => $record->getDateTimeByTimezone($record->restored_at))
->sortable(),
TextColumn::make('status')
->badge()
->color(fn ($state) => BackupFile::$statusColors[$state])
->sortable(),
];
}
/**
* @param Builder<BackupFile> $query
* @return Builder<BackupFile>
*/
protected function applyDefaultSortingToTableQuery(Builder $query): Builder
{
return $query->latest('created_at');
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('download')
->hiddenLabel()
->icon('heroicon-o-arrow-down-tray')
->visible(fn (BackupFile $record): bool => $record->isAvailable() && $record->isLocal())
->tooltip('Download')
->action(fn (BackupFile $record) => app(ManageBackupFile::class)->download($record))
->authorize(fn (BackupFile $record) => $user->can('view', $record)),
Action::make('restore')
->hiddenLabel()
->icon('heroicon-o-arrow-path')
->modalHeading('Restore Backup')
->tooltip('Restore Backup')
->disabled(fn (BackupFile $record): bool => ! $record->isAvailable())
->authorize(fn (BackupFile $record) => $user->can('update', $record->backup))
->form([
Select::make('database')
->label('Restore to')
->options($this->backup->server->databases()->pluck('name', 'id'))
->rules(RestoreBackup::rules()['database'])
->native(false),
])
->modalWidth(MaxWidth::Large)
->action(function (BackupFile $record, array $data): void {
run_action($this, function () use ($record, $data): void {
$this->validate();
/** @var Database $database */
$database = Database::query()->findOrFail($data['database']);
$this->authorize('update', $database);
app(RestoreBackup::class)->restore($record, $data);
Notification::make()
->success()
->title('Backup is being restored')
->send();
$this->dispatch('$refresh');
});
}),
Action::make('delete')
->hiddenLabel()
->icon('heroicon-o-trash')
->modalHeading('Delete Backup File')
->color('danger')
->disabled(fn (BackupFile $record): bool => ! $record->isAvailable())
->tooltip('Delete')
->authorize(fn (BackupFile $record) => $user->can('delete', $record))
->requiresConfirmation()
->action(function (BackupFile $record): void {
app(ManageBackupFile::class)->delete($record);
$this->dispatch('$refresh');
}),
]);
}
}

View File

@ -0,0 +1,160 @@
<?php
namespace App\Web\Pages\Servers\Databases\Widgets;
use App\Actions\Database\ManageBackup;
use App\Actions\Database\RunBackup;
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Server;
use App\Models\User;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class BackupsList extends Widget
{
public Server $server;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<Backup>
*/
protected function getTableQuery(): Builder
{
return Backup::query()->where('server_id', $this->server->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('database.name')
->label('Database')
->tooltip(fn (Backup $record) => $record->database->deleted_at ? 'Deleted at '.$record->database->deleted_at->format('Y-m-d H:i:s') : null)
->searchable(),
TextColumn::make('storage.profile')
->label('Storage')
->searchable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (Backup $backup) => Backup::$statusColors[$backup->status])
->sortable(),
TextColumn::make('lastFile.status')
->label('Last file status')
->badge()
->color(fn ($state) => BackupFile::$statusColors[$state])
->sortable(),
TextColumn::make('created_at')
->label('Created At')
->formatStateUsing(fn ($record) => $record->created_at_by_timezone)
->sortable(),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('edit')
->hiddenLabel()
->icon('heroicon-o-pencil')
->tooltip('Edit Configuration')
->disabled(fn (Backup $record): bool => ! in_array($record->status, ['running', 'failed']))
->authorize(fn (Backup $record) => $user->can('update', $record))
->modelLabel('Edit Backup')
->modalWidth(MaxWidth::Large)
->modalSubmitActionLabel('Update')
->form([
Select::make('interval')
->label('Interval')
->options(config('core.cronjob_intervals'))
->reactive()
->default(fn (Backup $record) => $record->isCustomInterval() ? 'custom' : $record->interval)
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['interval']),
TextInput::make('custom_interval')
->label('Custom Interval (Cron)')
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['custom_interval'])
->visible(fn (callable $get): bool => $get('interval') === 'custom')
->default(fn (Backup $record) => $record->isCustomInterval() ? $record->interval : '')
->placeholder('0 * * * *'),
TextInput::make('keep')
->label('Backups to Keep')
->default(fn (Backup $record) => $record->keep_backups)
->rules(fn (callable $get) => ManageBackup::rules($this->server, $get())['keep'])
->helperText('How many backups to keep before deleting the oldest one'),
])
->action(function (Backup $backup, array $data): void {
run_action($this, function () use ($data, $backup): void {
app(ManageBackup::class)->update($backup, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Backup updated!')
->send();
});
}),
Action::make('files')
->hiddenLabel()
->icon('heroicon-o-rectangle-stack')
->modalHeading('Backup Files')
->color('gray')
->tooltip('Show backup files')
->disabled(fn (Backup $record): bool => ! in_array($record->status, ['running', 'failed']))
->authorize(fn (Backup $record) => $user->can('viewAny', [BackupFile::class, $record]))
->modalContent(fn (Backup $record) => view('components.dynamic-widget', [
'widget' => BackupFilesList::class,
'params' => [
'backup' => $record,
],
]))
->modalWidth(MaxWidth::FiveExtraLarge)
->slideOver()
->modalSubmitAction(false)
->modalCancelActionLabel('Close')
->modalFooterActions([
Action::make('backup')
->label('Run Backup')
->icon('heroicon-o-play')
->color('primary')
->action(function (Backup $record): void {
app(RunBackup::class)->run($record);
$this->dispatch('$refresh');
}),
]),
Action::make('delete')
->hiddenLabel()
->icon('heroicon-o-trash')
->modalHeading('Delete Backup & Files')
->disabled(fn (Backup $record): bool => ! in_array($record->status, ['running', 'failed']))
->color('danger')
->tooltip('Delete')
->authorize(fn (Backup $record) => $user->can('delete', $record))
->requiresConfirmation()
->action(function (Backup $record): void {
app(ManageBackup::class)->delete($record);
$this->dispatch('$refresh');
}),
]);
}
}

View File

@ -0,0 +1,145 @@
<?php
namespace App\Web\Pages\Servers\Databases\Widgets;
use App\Actions\Database\DeleteDatabaseUser;
use App\Actions\Database\LinkUser;
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Models\User;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class DatabaseUsersList extends Widget
{
public Server $server;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<DatabaseUser>
*/
protected function getTableQuery(): Builder
{
return DatabaseUser::query()->where('server_id', $this->server->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('username')
->searchable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (DatabaseUser $databaseUser) => DatabaseUser::$statusColors[$databaseUser->status])
->sortable(),
TextColumn::make('created_at')
->label('Created At')
->formatStateUsing(fn ($record) => $record->created_at_by_timezone)
->sortable(),
];
}
public function table(Table $table): Table
{
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
$this->passwordAction(),
$this->linkAction(),
$this->deleteAction(),
]);
}
private function passwordAction(): Action
{
/** @var User $user */
$user = auth()->user();
return Action::make('password')
->hiddenLabel()
->icon('heroicon-o-key')
->color('gray')
->modalHeading('Database user\'s password')
->modalWidth(MaxWidth::Large)
->tooltip('Show the password')
->authorize(fn ($record) => $user->can('view', $record))
->form([
TextInput::make('password')
->label('Password')
->default(fn (DatabaseUser $record) => $record->password)
->disabled(),
])
->action(function (DatabaseUser $record, array $data): void {
//
})
->modalSubmitAction(false)
->modalCancelActionLabel('Close');
}
private function linkAction(): Action
{
/** @var User $user */
$user = auth()->user();
return Action::make('link')
->hiddenLabel()
->icon('heroicon-o-link')
->modalHeading('Link user to databases')
->modalWidth(MaxWidth::Large)
->tooltip('Link user')
->modalSubmitActionLabel('Save')
->authorize(fn ($record) => $user->can('update', $record))
->form([
CheckboxList::make('databases')
->label('Databases')
->options($this->server->databases()->pluck('name', 'name')->toArray())
->rules(fn (callable $get): array => LinkUser::rules($this->server, $get()))
->default(fn (DatabaseUser $record) => $record->databases),
])
->action(function (DatabaseUser $record, array $data): void {
run_action($this, function () use ($record, $data): void {
app(LinkUser::class)->link($record, $data);
Notification::make()
->success()
->title('User linked to databases!')
->send();
});
});
}
private function deleteAction(): Action
{
/** @var User $user */
$user = auth()->user();
return Action::make('delete')
->hiddenLabel()
->icon('heroicon-o-trash')
->modalHeading('Delete Database User')
->color('danger')
->tooltip('Delete')
->authorize(fn ($record) => $user->can('delete', $record))
->requiresConfirmation()
->action(function (DatabaseUser $record): void {
run_action($this, function () use ($record): void {
app(DeleteDatabaseUser::class)->delete($this->server, $record);
$this->dispatch('$refresh');
});
});
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace App\Web\Pages\Servers\Databases\Widgets;
use App\Actions\Database\DeleteDatabase;
use App\Models\Database;
use App\Models\Server;
use App\Models\User;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class DatabasesList extends Widget
{
public Server $server;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<Database>
*/
protected function getTableQuery(): Builder
{
return Database::query()->where('server_id', $this->server->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('name')
->searchable(),
TextColumn::make('charset')
->label('Charset / Encoding')
->sortable(),
TextColumn::make('collation')
->label('Collation')
->sortable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (Database $database) => Database::$statusColors[$database->status])
->sortable(),
TextColumn::make('created_at')
->label('Created At')
->formatStateUsing(fn ($record) => $record->created_at_by_timezone)
->sortable(),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('delete')
->hiddenLabel()
->icon('heroicon-o-trash')
->modalHeading('Delete Database')
->color('danger')
->tooltip('Delete')
->authorize(fn ($record) => $user->can('delete', $record))
->requiresConfirmation()
->action(function (Database $record): void {
run_action($this, function () use ($record): void {
app(DeleteDatabase::class)->delete($this->server, $record);
$this->dispatch('$refresh');
});
}),
]);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Web\Pages\Servers\FileManager;
use App\Web\Pages\Servers\Page;
class Index extends Page
{
protected static ?string $slug = 'servers/{server}/file-manager';
protected static ?string $title = 'File Manager';
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
public function mount(): void
{
$this->authorize('manage', $this->server);
}
public function getWidgets(): array
{
return [
[Widgets\FilesList::class, ['server' => $this->server]],
];
}
}

View File

@ -0,0 +1,379 @@
<?php
namespace App\Web\Pages\Servers\FileManager\Widgets;
use App\Actions\FileManager\FetchFiles;
use App\Exceptions\SSHError;
use App\Models\File;
use App\Models\Server;
use App\Models\User;
use App\Web\Fields\CodeEditorField;
use App\Web\Pages\Servers\FileManager\Index;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\ActionSize;
use Filament\Support\Enums\IconPosition;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Storage;
class FilesList extends Widget
{
public Server $server;
public string $serverUser;
public string $path;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
public function mount(): void
{
$this->serverUser = $this->server->ssh_user;
$this->path = home_path($this->serverUser);
if (request()->has('path') && request()->has('user')) {
$this->path = request('path');
$this->serverUser = request('user');
}
$this->refresh();
}
/**
* @return array<int, mixed>
*/
protected function getTableHeaderActions(): array
{
return [
$this->homeAction(),
$this->userAction(),
ActionGroup::make([
$this->refreshAction(),
$this->newFileAction(),
$this->newDirectoryAction(),
$this->uploadAction(),
])
->tooltip('Toolbar')
->icon('heroicon-o-ellipsis-vertical')
->color('gray')
->size(ActionSize::Large)
->iconPosition(IconPosition::After)
->dropdownPlacement('bottom-end'),
];
}
/**
* @return Builder<File>
*/
protected function getTableQuery(): Builder
{
return File::query()
->where('user_id', auth()->id())
->where('server_id', $this->server->id);
}
public function table(Table $table): Table
{
auth()->user();
return $table
->query($this->getTableQuery())
->headerActions($this->getTableHeaderActions())
->heading(str($this->path)->substr(-50)->start(str($this->path)->length() > 50 ? '...' : ''))
->columns([
IconColumn::make('type')
->sortable()
->icon(fn (File $file): string => $this->getIcon($file)),
TextColumn::make('name')
->sortable(),
TextColumn::make('size')
->sortable(),
TextColumn::make('owner')
->sortable(),
TextColumn::make('group')
->sortable(),
TextColumn::make('date')
->sortable(),
TextColumn::make('permissions')
->sortable(),
])
->recordUrl(function (File $file): string {
if ($file->type === 'directory') {
return Index::getUrl([
'server' => $this->server->id,
'user' => $file->server_user,
'path' => absolute_path($file->path.'/'.$file->name),
]);
}
return '';
})
->defaultSort('type')
->actions([
$this->extractAction(),
$this->downloadAction(),
$this->editAction(),
$this->deleteAction(),
])
->checkIfRecordIsSelectableUsing(
fn (File $file): bool => $file->name !== '..',
)
->bulkActions([
DeleteBulkAction::make()
->requiresConfirmation(),
]);
}
public function changeUser(string $user): void
{
$this->redirect(
Index::getUrl([
'server' => $this->server->id,
'user' => $user,
'path' => home_path($user),
]),
true
);
}
public function refresh(): void
{
/** @var User $user */
$user = auth()->user();
try {
app(FetchFiles::class)->fetch(
$user,
$this->server,
[
'user' => $this->serverUser,
'path' => $this->path,
]
);
} catch (SSHError) {
abort(404);
}
$this->dispatch('$refresh');
}
protected function getIcon(File $file): string
{
if ($file->type === 'directory') {
return 'heroicon-o-folder';
}
if (str($file->name)->endsWith('.blade.php')) {
return 'laravel';
}
if (str($file->name)->endsWith('.php')) {
return 'php';
}
return 'heroicon-o-document-text';
}
protected function homeAction(): Action
{
return Action::make('home')
->label('Home')
->size(ActionSize::Small)
->icon('heroicon-o-home')
->action(function (): void {
$this->path = home_path($this->serverUser);
$this->refresh();
});
}
protected function userAction(): ActionGroup
{
$users = [];
foreach ($this->server->getSshUsers() as $user) {
$users[] = Action::make('user-'.$user)
->action(fn () => $this->changeUser($user))
->label($user);
}
return ActionGroup::make($users)
->tooltip('Change user')
->label($this->serverUser)
->button()
->size(ActionSize::Small)
->color('gray')
->icon('heroicon-o-chevron-up-down')
->iconPosition(IconPosition::After)
->dropdownPlacement('bottom-end');
}
protected function refreshAction(): Action
{
return Action::make('refresh')
->label('Refresh')
->icon('heroicon-o-arrow-path')
->action(fn () => $this->refresh());
}
protected function newFileAction(): Action
{
return Action::make('new-file')
->label('New File')
->icon('heroicon-o-document-text')
->action(function (array $data): void {
run_action($this, function () use ($data): void {
$this->server->os()->write(
$this->path.'/'.$data['name'],
str_replace("\r\n", "\n", $data['content']),
$this->serverUser
);
$this->refresh();
});
})
->form(fn (): array => [
TextInput::make('name')
->placeholder('file-name.txt'),
CodeEditorField::make('content'),
])
->modalSubmitActionLabel('Create')
->modalHeading('New File')
->modalWidth('4xl');
}
protected function newDirectoryAction(): Action
{
return Action::make('new-directory')
->label('New Directory')
->icon('heroicon-o-folder')
->action(function (array $data): void {
run_action($this, function () use ($data): void {
$this->server->os()->mkdir(
$this->path.'/'.$data['name'],
$this->serverUser
);
$this->refresh();
});
})
->form(fn (): array => [
TextInput::make('name')
->placeholder('directory name'),
])
->modalSubmitActionLabel('Create')
->modalHeading('New Directory')
->modalWidth('lg');
}
protected function uploadAction(): Action
{
return Action::make('upload')
->label('Upload File')
->icon('heroicon-o-arrow-up-on-square')
->action(function (array $data): void {
//
})
->after(function (array $data): void {
run_action($this, function () use ($data): void {
foreach ($data['file'] as $file) {
$this->server->ssh()->upload(
Storage::disk('tmp')->path($file),
$this->path.'/'.$file,
$this->serverUser
);
}
$this->refresh();
});
})
->form(fn (): array => [
FileUpload::make('file')
->disk('tmp')
->multiple()
->preserveFilenames(),
])
->modalSubmitActionLabel('Upload to Server')
->modalHeading('Upload File')
->modalWidth('xl');
}
protected function extractAction(): Action
{
return Action::make('extract')
->tooltip('Extract')
->icon('heroicon-o-archive-box')
->hiddenLabel()
->visible(fn (File $file): bool => $file->isExtractable())
->action(function (File $file): void {
$file->server->os()->extract($file->getFilePath(), $file->path, $file->server_user);
$this->refresh();
});
}
protected function downloadAction(): Action
{
return Action::make('download')
->tooltip('Download')
->icon('heroicon-o-arrow-down-tray')
->hiddenLabel()
->visible(fn (File $file): bool => $file->type === 'file')
->action(function (File $file) {
$file->server->ssh($file->server_user)->download(
Storage::disk('tmp')->path($file->name),
$file->getFilePath()
);
return Storage::disk('tmp')->download($file->name);
});
}
protected function editAction(): Action
{
return Action::make('edit')
->tooltip('Edit')
->icon('heroicon-o-pencil')
->hiddenLabel()
->visible(fn (File $file): bool => $file->type === 'file')
->action(function (File $file, array $data): void {
$file->server->os()->write(
$file->getFilePath(),
str_replace("\r\n", "\n", $data['content']),
$file->server_user
);
$this->refresh();
})
->form(fn (File $file): array => [
CodeEditorField::make('content')
->formatStateUsing(function () use ($file) {
$file->server->ssh($file->server_user)->download(
Storage::disk('tmp')->path($file->name),
$file->getFilePath()
);
return Storage::disk('tmp')->get(basename($file->getFilePath()));
}),
])
->modalSubmitActionLabel('Save')
->modalHeading('Edit')
->modalWidth('4xl');
}
protected function deleteAction(): Action
{
return Action::make('delete')
->tooltip('Delete')
->icon('heroicon-o-trash')
->color('danger')
->hiddenLabel()
->requiresConfirmation()
->visible(fn (File $file): bool => $file->name !== '..')
->action(function (File $file): void {
run_action($this, function () use ($file): void {
$file->delete();
});
});
}
}

View File

@ -0,0 +1,133 @@
<?php
namespace App\Web\Pages\Servers\Firewall;
use App\Actions\FirewallRule\ManageRule;
use App\Models\FirewallRule;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
use Illuminate\Support\Facades\Request;
class Index extends Page
{
protected static ?string $slug = 'servers/{server}/firewall';
protected static ?string $title = 'Firewall';
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
public function mount(): void
{
$this->authorize('viewAny', [FirewallRule::class, $this->server]);
}
public function getWidgets(): array
{
return [
[Widgets\RulesList::class, ['server' => $this->server]],
];
}
/**
* @return array<int, mixed>
*/
public static function getFirewallForm(?FirewallRule $record = null): array
{
return [
TextInput::make('name')
->label('Purpose')
->default($record->name ?? null)
->rules(ManageRule::rules()['name']),
Select::make('type')
->label('Type')
->default($record->type ?? 'allow')
->options([
'allow' => 'Allow',
'deny' => 'Deny',
])
->rules(ManageRule::rules()['type']),
Select::make('protocol')
->label('Protocol')
->default($record->protocol ?? 'tcp')
->options([
'tcp' => 'TCP',
'udp' => 'UDP',
])
->rules(ManageRule::rules()['protocol']),
TextInput::make('port')
->label('Port')
->default($record->port ?? null)
->rules(['required', 'integer']),
Checkbox::make('source_any')
->label('Any Source')
->default(($record->source ?? null) == null)
->rules(['boolean'])
->helperText('Allow connections from any source, regardless of their IP address or subnet mask.')
->live(),
TextInput::make('source')
->hidden(fn (Get $get): bool => $get('source_any') == true)
->label('Source')
->helperText('The IP address of the source of the connection.')
->rules(ManageRule::rules()['source'])
->default($record->source ?? null)
->suffixAction(
\Filament\Forms\Components\Actions\Action::make('get_ip')
->icon('heroicon-o-globe-alt')
->color('primary')
->tooltip('Use My IP')
->action(function ($set): void {
$ip = Request::ip();
$set('source', $ip);
})
),
TextInput::make('mask')
->hidden(fn (Get $get): bool => $get('source_any') == true)
->label('Mask')
->default($record->mask ?? null)
->helperText('The subnet mask of the source of the connection. Leave blank for a single IP address.')
->rules(ManageRule::rules()['mask']),
];
}
protected function getHeaderActions(): array
{
return [
Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com/servers/firewall')
->openUrlInNewTab(),
Action::make('create')
->authorize(fn () => auth()->user()?->can('create', [FirewallRule::class, $this->server]))
->label('Create a Rule')
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::Large)
->modalHeading('Create Firewall Rule')
->modalDescription('Add a new rule to the firewall')
->modalSubmitActionLabel('Create')
->form(self::getFirewallForm())
->action(function (array $data): void {
run_action($this, function () use ($data): void {
app(ManageRule::class)->create($this->server, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Applying Firewall Rule')
->send();
});
}),
];
}
}

View File

@ -0,0 +1,130 @@
<?php
namespace App\Web\Pages\Servers\Firewall\Widgets;
use App\Actions\FirewallRule\ManageRule;
use App\Models\FirewallRule;
use App\Models\Server;
use App\Models\User;
use App\Web\Pages\Servers\Firewall\Index;
use Exception;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Str;
class RulesList extends Widget
{
public Server $server;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<FirewallRule>
*/
protected function getTableQuery(): Builder
{
return FirewallRule::query()->where('server_id', $this->server->id);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('name')
->searchable()
->sortable()
->label('Purpose'),
TextColumn::make('type')
->sortable()
->badge()
->color(fn ($state): string => $state === 'allow' ? 'success' : 'warning')
->label('Type')
->formatStateUsing(fn ($state) => Str::upper($state)),
TextColumn::make('id')
->sortable()
->label('Source')
->formatStateUsing(function (FirewallRule $record) {
$source = $record->source == null ? 'any' : $record->source;
if ($source !== 'any' && $record->mask !== null) {
$source .= '/'.$record->mask;
}
return $source;
}),
TextColumn::make('protocol')
->sortable()
->badge()
->color('primary')
->label('Protocol')
->formatStateUsing(fn ($state) => Str::upper($state)),
TextColumn::make('port')
->sortable()
->label('Port'),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (FirewallRule $record): string => $record->getStatusColor()),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
Action::make('edit')
->icon('heroicon-o-pencil')
->tooltip('Edit')
->hiddenLabel()
->modalWidth(MaxWidth::Large)
->modalHeading('Edit Firewall Rule')
->modalDescription('Edit the associated servers firewall rule.')
->modalSubmitActionLabel('Update')
->authorize(fn (FirewallRule $record) => $user->can('update', $record))
->form(fn ($record): array => Index::getFirewallForm($record))
->action(function (FirewallRule $record, array $data): void {
run_action($this, function () use ($record, $data): void {
app(ManageRule::class)->update($record, $data);
$this->dispatch('$refresh');
Notification::make()
->success()
->title('Applying Firewall Rule')
->send();
});
}),
Action::make('delete')
->icon('heroicon-o-trash')
->tooltip('Delete')
->color('danger')
->hiddenLabel()
->requiresConfirmation()
->authorize(fn (FirewallRule $record) => $user->can('delete', $record))
->action(function (FirewallRule $record): void {
try {
app(ManageRule::class)->delete($record);
} catch (Exception $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
}
$this->dispatch('$refresh');
}),
]);
}
}

View File

@ -0,0 +1,251 @@
<?php
namespace App\Web\Pages\Servers;
use App\Actions\Server\CreateServer as CreateServerAction;
use App\Enums\Database;
use App\Enums\PHP;
use App\Enums\ServerProvider;
use App\Enums\Webserver;
use App\Models\Project;
use App\Models\Server;
use App\Models\User;
use App\Web\Components\Page;
use App\Web\Fields\AlertField;
use App\Web\Fields\ProviderField;
use App\Web\Pages\Settings\ServerProviders\Actions\Create;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Index extends Page
{
protected static ?string $slug = 'servers';
protected static ?string $navigationIcon = 'heroicon-o-server-stack';
protected static ?int $navigationSort = 1;
protected static ?string $title = 'Servers';
public static function getNavigationItemActiveRoutePattern(): string
{
return static::getRouteName().'*';
}
public function mount(): void
{
/** @var User $user */
$user = auth()->user();
$this->authorize('viewAny', [Server::class, $user->currentProject]);
}
public function getWidgets(): array
{
return [
[Widgets\ServersList::class],
];
}
protected function getHeaderActions(): array
{
$publicKey = __('servers.create.public_key_text', [
'public_key' => get_public_key_content(),
]);
/** @var User $user */
$user = auth()->user();
/** @var Project $project */
$project = $user->currentProject;
return [
\Filament\Actions\Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com')
->openUrlInNewTab(),
\Filament\Actions\Action::make('create')
->label('Create a Server')
->icon('heroicon-o-plus')
->authorize('create', [Server::class, $user->currentProject])
->modalWidth(MaxWidth::FiveExtraLarge)
->slideOver()
->form([
ProviderField::make('provider')
->label('Select a provider')
->default(ServerProvider::CUSTOM)
->live()
->reactive()
->afterStateUpdated(function (callable $set): void {
$set('server_provider', null);
$set('region', null);
$set('plan', null);
})
->rules(fn ($get) => CreateServerAction::rules($project, $get())['provider']),
AlertField::make('alert')
->warning()
->message(__('servers.create.public_key_warning'))
->visible(fn ($get): bool => $get('provider') === ServerProvider::CUSTOM),
Select::make('server_provider')
->visible(fn ($get): bool => $get('provider') !== ServerProvider::CUSTOM)
->label('Server provider connection')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['server_provider'])
->options(fn ($get) => \App\Models\ServerProvider::getByProjectId($project->id)
->where('provider', $get('provider'))
->pluck('profile', 'id'))
->suffixAction(
Action::make('connect')
->form(Create::form())
->modalHeading('Connect to a new server provider')
->modalSubmitActionLabel('Connect')
->icon('heroicon-o-wifi')
->tooltip('Connect to a new server provider')
->modalWidth(MaxWidth::Medium)
->authorize(fn () => $user->can('create', \App\Models\ServerProvider::class))
->action(fn (array $data) => Create::action($data))
)
->placeholder('Select profile')
->native(false)
->live()
->reactive()
->selectablePlaceholder(false)
->visible(fn ($get): bool => $get('provider') !== ServerProvider::CUSTOM),
Grid::make()
->schema([
Select::make('region')
->label('Region')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['region'] ?? [])
->live()
->reactive()
->options(function ($get): array {
if (! $get('server_provider')) {
return [];
}
return \App\Models\ServerProvider::regions($get('server_provider'));
})
->loadingMessage('Loading regions...')
->disabled(fn ($get): bool => ! $get('server_provider'))
->placeholder(fn ($get): string => $get('server_provider') ? 'Select region' : 'Select connection first')
->searchable(),
Select::make('plan')
->label('Plan')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['plan'] ?? [])
->reactive()
->options(function ($get): array {
if (! $get('server_provider') || ! $get('region')) {
return [];
}
return \App\Models\ServerProvider::plans($get('server_provider'), $get('region'));
})
->loadingMessage('Loading plans...')
->disabled(fn ($get): bool => ! $get('region'))
->placeholder(fn ($get): string => $get('region') ? 'Select plan' : 'Select plan first')
->searchable(),
])
->visible(fn ($get): bool => $get('provider') !== ServerProvider::CUSTOM),
TextInput::make('public_key')
->label('Public Key')
->default($publicKey)
->suffixAction(
Action::make('copy')
->icon('heroicon-o-clipboard-document-list')
->tooltip('Copy')
->action(function ($livewire, string $state): void {
$livewire->js(
'window.navigator.clipboard.writeText("'.$state.'");'
);
Notification::make()
->success()
->title('Copied!')
->send();
})
)
->helperText('Run this command on your server as root user')
->disabled()
->visible(fn ($get): bool => $get('provider') === ServerProvider::CUSTOM),
Grid::make()
->schema([
TextInput::make('name')
->label('Name')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['name']),
Select::make('os')
->label('OS')
->native(false)
->rules(fn ($get) => CreateServerAction::rules($project, $get())['os'])
->options(
collect((array) config('core.operating_systems'))
->mapWithKeys(fn ($value) => [$value => $value])
),
]),
Grid::make()
->schema([
TextInput::make('ip')
->label('SSH IP Address')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['ip']),
TextInput::make('port')
->label('SSH Port')
->rules(fn ($get) => CreateServerAction::rules($project, $get())['port']),
])
->visible(fn ($get): bool => $get('provider') === ServerProvider::CUSTOM),
Fieldset::make('Services')
->columns(1)
->schema([
AlertField::make('alert')
->info()
->message('You can install/uninstall services later'),
Grid::make(3)
->schema([
Select::make('webserver')
->label('Webserver')
->native(false)
->selectablePlaceholder(false)
->rules(fn ($get) => CreateServerAction::rules($project, $get())['webserver'] ?? [])
->default(Webserver::NONE)
->options(
collect((array) config('core.webservers'))->mapWithKeys(fn ($value) => [$value => $value])
),
Select::make('database')
->label('Database')
->native(false)
->selectablePlaceholder(false)
->rules(fn ($get) => CreateServerAction::rules($project, $get())['database'] ?? [])
->default(Database::NONE)
->options(
collect((array) config('core.databases_name'))
->mapWithKeys(fn ($value, $key) => [
$key => $value.' '.config('core.databases_version')[$key],
])
),
Select::make('php')
->label('PHP')
->native(false)
->selectablePlaceholder(false)
->rules(fn ($get) => CreateServerAction::rules($project, $get())['php'] ?? [])
->default(PHP::NONE)
->options(
collect((array) config('core.php_versions'))
->mapWithKeys(fn ($value) => [$value => $value])
),
]),
]),
])
->modalSubmitActionLabel('Create')
->action(function (array $data) use ($user, $project): void {
run_action($this, function () use ($data, $user, $project): void {
$server = app(CreateServerAction::class)->create($user, $project, $data);
$this->redirect(View::getUrl(['server' => $server]));
});
}),
];
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Web\Pages\Servers\Logs;
use App\Models\ServerLog;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Logs\Widgets\LogsList;
use App\Web\Pages\Servers\Page;
class Index extends Page implements HasSecondSubNav
{
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/logs';
protected static ?string $title = 'Logs';
public function mount(): void
{
$this->authorize('viewAny', [ServerLog::class, $this->server]);
}
public function getWidgets(): array
{
return [
[LogsList::class, ['server' => $this->server]],
];
}
protected function getHeaderActions(): array
{
return [];
}
}

View File

@ -0,0 +1,54 @@
<?php
namespace App\Web\Pages\Servers\Logs;
use App\Actions\Server\CreateServerLog;
use App\Models\ServerLog;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Logs\Widgets\LogsList;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\MaxWidth;
class RemoteLogs extends Page implements HasSecondSubNav
{
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/logs/remote';
protected static ?string $title = 'Remote Logs';
public function mount(): void
{
$this->authorize('viewAny', [ServerLog::class, $this->server]);
}
public function getWidgets(): array
{
return [
[LogsList::class, ['server' => $this->server, 'remote' => true]],
];
}
protected function getHeaderActions(): array
{
return [
Action::make('create')
->icon('heroicon-o-plus')
->modalWidth(MaxWidth::Large)
->authorize(fn () => auth()->user()?->can('create', [ServerLog::class, $this->server]))
->form([
TextInput::make('path')
->helperText('The full path of the log file on the server')
->rules(fn (callable $get) => CreateServerLog::rules()['path']),
])
->modalSubmitActionLabel('Create')
->action(function (array $data): void {
app(CreateServerLog::class)->create($this->server, $data);
$this->dispatch('$refresh');
}),
];
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace App\Web\Pages\Servers\Logs\Traits;
use App\Models\ServerLog;
use App\Models\User;
use App\Web\Pages\Servers\Logs\Index;
use App\Web\Pages\Servers\Logs\RemoteLogs;
use Filament\Navigation\NavigationGroup;
use Filament\Navigation\NavigationItem;
trait Navigation
{
public function getSecondSubNavigation(): array
{
/** @var User $user */
$user = auth()->user();
$items = [];
if ($user->can('viewAny', [ServerLog::class, $this->server])) {
$items[] = NavigationItem::make(Index::getNavigationLabel())
->icon('heroicon-o-square-3-stack-3d')
->isActiveWhen(fn () => request()->routeIs(Index::getRouteName()))
->url(Index::getUrl(parameters: ['server' => $this->server]));
$items[] = NavigationItem::make(RemoteLogs::getNavigationLabel())
->icon('heroicon-o-wifi')
->isActiveWhen(fn () => request()->routeIs(RemoteLogs::getRouteName()))
->url(RemoteLogs::getUrl(parameters: ['server' => $this->server]));
}
return [
NavigationGroup::make()
->items($items),
];
}
}

View File

@ -0,0 +1,134 @@
<?php
namespace App\Web\Pages\Servers\Logs\Widgets;
use App\Models\Server;
use App\Models\ServerLog;
use App\Models\Site;
use App\Models\User;
use Exception;
use Filament\Forms\Components\DatePicker;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\View\ComponentAttributeBag;
use Symfony\Component\HttpFoundation\StreamedResponse;
class LogsList extends Widget
{
public Server $server;
public ?Site $site = null;
public bool $remote = false;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<ServerLog>
*/
protected function getTableQuery(): Builder
{
return ServerLog::query()
->where('server_id', $this->server->id)
->where(function (Builder $query): void {
if ($this->site instanceof Site) {
$query->where('site_id', $this->site->id);
}
})
->where('is_remote', $this->remote);
}
protected function getTableColumns(): array
{
return [
TextColumn::make('name')
->label('Event')
->searchable()
->sortable(),
TextColumn::make('created_at')
->label('Created At')
->formatStateUsing(fn ($record) => $record->created_at_by_timezone)
->sortable(),
];
}
/**
* @param Builder<ServerLog> $query
* @return Builder<ServerLog>
*/
protected function applyDefaultSortingToTableQuery(Builder $query): Builder
{
return $query->latest('created_at');
}
/**
* @throws Exception
*/
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->filters([
Filter::make('created_at')
->form([
DatePicker::make('created_from'),
DatePicker::make('created_until'),
])
->query(fn (Builder $query, array $data): Builder => $query
->when(
$data['created_from'],
fn (Builder $query, $date): Builder => $query->whereDate('created_at', '>=', $date),
)
->when(
$data['created_until'],
fn (Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date),
)),
])
->actions([
Action::make('view')
->hiddenLabel()
->tooltip('View')
->icon('heroicon-o-eye')
->authorize(fn ($record) => $user->can('view', $record))
->modalHeading('View Log')
->modalContent(fn (ServerLog $record) => view('components.console-view', [
'slot' => $record->getContent(),
'attributes' => new ComponentAttributeBag,
]))
->modalSubmitAction(false)
->modalCancelActionLabel('Close'),
Action::make('download')
->hiddenLabel()
->tooltip('Download')
->color('gray')
->icon('heroicon-o-archive-box-arrow-down')
->authorize(fn ($record) => $user->can('view', $record))
->action(fn (ServerLog $record): StreamedResponse => $record->download()),
DeleteAction::make()
->hiddenLabel()
->tooltip('Delete')
->icon('heroicon-o-trash')
->color('danger')
->authorize(fn ($record) => $user->can('delete', $record)),
])
->bulkActions([
DeleteBulkAction::make()
->requiresConfirmation()
->authorize($user->can('deleteMany', [ServerLog::class, $this->server])),
]);
}
}

View File

@ -0,0 +1,67 @@
<?php
namespace App\Web\Pages\Servers\Metrics;
use App\Actions\Monitoring\UpdateMetricSettings;
use App\Models\Metric;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
class Index extends Page
{
protected static ?string $slug = 'servers/{server}/metrics';
protected static ?string $title = 'Metrics';
public function mount(): void
{
$this->authorize('viewAny', [Metric::class, $this->server]);
}
public function getWidgets(): array
{
return [
[Widgets\FilterForm::class, ['server' => $this->server]],
[Widgets\MetricDetails::class, ['server' => $this->server]],
];
}
protected function getHeaderActions(): array
{
return [
Action::make('data-retention')
->button()
->color('gray')
->icon('heroicon-o-trash')
->label('Data Retention')
->modalWidth(MaxWidth::Large)
->form([
Select::make('data_retention')
->options([
7 => '7 days',
14 => '14 days',
30 => '30 days',
60 => '60 days',
90 => '90 days',
180 => '180 days',
365 => '365 days',
])
->rules(UpdateMetricSettings::rules()['data_retention'])
->label('Data Retention')
->default($this->server->monitoring()?->type_data['data_retention'] ?? 30),
])
->modalSubmitActionLabel('Save')
->action(function (array $data): void {
app(UpdateMetricSettings::class)->update($this->server, $data);
Notification::make()
->success()
->title('Data retention updated')
->send();
}),
];
}
}

View File

@ -0,0 +1,92 @@
<?php
namespace App\Web\Pages\Servers\Metrics\Widgets;
use App\Actions\Monitoring\GetMetrics;
use App\Models\Server;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\ViewField;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Widgets\Widget;
class FilterForm extends Widget implements HasForms
{
use InteractsWithForms;
protected static string $view = 'components.form';
/**
* @var ?array<string, mixed>
*/
public ?array $data = [
'period' => '1h',
'from' => null,
'to' => null,
];
public function updated(string $name, mixed $value): void
{
if ($value !== 'custom') {
$this->dispatch('updateFilters', filters: $this->data);
}
$from = $this->data['from'] ?? null;
$to = $this->data['to'] ?? null;
if ($value === 'custom' && $from && $to) {
$this->dispatch('updateFilters', filters: $this->data);
}
}
public Server $server;
public function form(Form $form): Form
{
return $form
->schema([
Grid::make()
->columns(3)
->schema([
Select::make('period')
->live()
->reactive()
->options([
'10m' => '10 Minutes',
'30m' => '30 Minutes',
'1h' => '1 Hour',
'12h' => '12 Hours',
'1d' => '1 Day',
'7d' => '7 Days',
'custom' => 'Custom',
])
->rules(fn (Get $get) => GetMetrics::rules($get())['period']),
DatePicker::make('from')
->reactive()
->visible(fn (Get $get): bool => $get('period') === 'custom')
->maxDate(fn (Get $get) => now())
->rules(fn (Get $get) => GetMetrics::rules($get())['from']),
DatePicker::make('to')
->reactive()
->visible(fn (Get $get): bool => $get('period') === 'custom')
->minDate(fn (Get $get) => $get('from') ?: now())
->maxDate(now())
->rules(fn (Get $get) => GetMetrics::rules($get())['to']),
]),
ViewField::make('data')
->reactive()
->view('components.dynamic-widget', [
'widget' => Metrics::class,
'params' => [
'server' => $this->server,
'filters' => $this->data,
],
]),
])
->statePath('data');
}
}

View File

@ -0,0 +1,86 @@
<?php
namespace App\Web\Pages\Servers\Metrics\Widgets;
use App\Models\Metric;
use App\Models\Server;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Infolists\Components\Grid;
use Filament\Infolists\Components\Section;
use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Concerns\InteractsWithInfolists;
use Filament\Infolists\Contracts\HasInfolists;
use Filament\Infolists\Infolist;
use Filament\Widgets\Widget;
use Illuminate\Support\Number;
class MetricDetails extends Widget implements HasForms, HasInfolists
{
use InteractsWithForms;
use InteractsWithInfolists;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
protected static bool $isLazy = false;
protected static string $view = 'components.infolist';
public Server $server;
public function infolist(Infolist $infolist): Infolist
{
return $infolist
->record($this->server->metrics()->latest()->first() ?? new Metric)
->schema([
Grid::make()
->schema([
Section::make()
->heading('Memory')
->description('More details on memory')
->columnSpan(1)
->schema([
TextEntry::make('memory_total')
->label('Total Memory')
->alignRight()
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->memory_total_in_bytes, 2))
->inlineLabel(),
TextEntry::make('memory_used')
->label('Used Memory')
->alignRight()
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->memory_used_in_bytes, 2))
->inlineLabel(),
TextEntry::make('memory_free')
->label('Free Memory')
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->memory_free_in_bytes, 2))
->alignRight()
->inlineLabel(),
]),
Section::make()
->heading('Disk')
->description('More details on disk')
->columnSpan(1)
->schema([
TextEntry::make('disk_total')
->label('Total Disk')
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->disk_total_in_bytes, 2))
->alignRight()
->inlineLabel(),
TextEntry::make('disk_used')
->label('Used Disk')
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->disk_used_in_bytes, 2))
->alignRight()
->inlineLabel(),
TextEntry::make('disk_free')
->label('Free Disk')
->formatStateUsing(fn (Metric $record) => Number::fileSize($record->disk_free_in_bytes, 2))
->alignRight()
->inlineLabel(),
]),
]),
]);
}
}

View File

@ -0,0 +1,54 @@
<?php
namespace App\Web\Pages\Servers\Metrics\Widgets;
use App\Actions\Monitoring\GetMetrics;
use App\Models\Metric;
use App\Models\Server;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
use Illuminate\Support\Number;
use Livewire\Attributes\On;
class Metrics extends BaseWidget
{
public Server $server;
/**
* @var array<string, mixed>
*/
public array $filters = [];
protected static bool $isLazy = false;
/**
* @param array<string, mixed> $filters
*/
#[On('updateFilters')]
public function updateFilters(array $filters): void
{
$this->filters = $filters;
}
protected function getStats(): array
{
/** @var Metric $lastMetric */
$lastMetric = $this->server
->metrics()
->latest()
->first();
$metrics = app(GetMetrics::class)->filter($this->server, $this->filters);
return [
Stat::make('CPU Load', $lastMetric->load ?? 0)
->color('success')
->chart($metrics->pluck('load')->toArray()),
Stat::make('Memory Usage', Number::fileSize($lastMetric->memory_used_in_bytes ?? 0, 2))
->color('warning')
->chart($metrics->pluck('memory_used')->toArray()),
Stat::make('Disk Usage', Number::fileSize($lastMetric->disk_used_in_bytes ?? 0, 2))
->color('primary')
->chart($metrics->pluck('disk_used')->toArray()),
];
}
}

Some files were not shown because too many files have changed in this diff Show More