mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-01 05:56:16 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
90b63d065d | |||
2318e1b1df | |||
65898b0ee6 | |||
3124f8c795 |
@ -3,15 +3,12 @@ root = true
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 2
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
ij_any_block_comment_at_first_column = false
|
||||
|
||||
[*.php]
|
||||
indent_size = 4
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
|
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
github: [saeedvaziry]
|
@ -13,6 +13,3 @@ sail
|
||||
!*.blade.php
|
||||
!*.sh
|
||||
resources/views/ssh/
|
||||
resources/views/scribe/
|
||||
resources/js/ziggy.js
|
||||
resources/views/mail/*
|
||||
|
68
.prettierrc
68
.prettierrc
@ -1,46 +1,26 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"singleAttributePerLine": false,
|
||||
"htmlWhitespaceSensitivity": "css",
|
||||
"printWidth": 150,
|
||||
"tailwindFunctions": [
|
||||
"clsx",
|
||||
"cn"
|
||||
],
|
||||
"tabWidth": 2,
|
||||
"plugins": [
|
||||
"prettier-plugin-blade",
|
||||
"prettier-plugin-tailwindcss",
|
||||
"prettier-plugin-sh"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.blade.php"
|
||||
],
|
||||
"options": {
|
||||
"parser": "blade",
|
||||
"printWidth": 120,
|
||||
"htmlWhitespaceSensitivity": "ignore",
|
||||
"tabWidth": 4,
|
||||
"quoteProps": "consistent",
|
||||
"trailingComma": "none"
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.sh"
|
||||
],
|
||||
"options": {
|
||||
"parser": "sh"
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": "**/*.yml",
|
||||
"options": {
|
||||
"tabWidth": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
"plugins": [
|
||||
"prettier-plugin-blade",
|
||||
"prettier-plugin-tailwindcss",
|
||||
"prettier-plugin-sh"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.blade.php"],
|
||||
"options": {
|
||||
"parser": "blade",
|
||||
"printWidth": 120,
|
||||
"htmlWhitespaceSensitivity": "ignore",
|
||||
"tabWidth": 4,
|
||||
"quoteProps": "consistent",
|
||||
"trailingComma": "none"
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["*.sh"],
|
||||
"options": {
|
||||
"parser": "sh"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE.
|
||||
# Scribe uses this file to know when you change something manually in your docs.
|
||||
.scribe/intro.md=ce7ca21baf0406f807aed85ee1d8fa6e
|
||||
.scribe/auth.md=9bee2b1ef8a238b2e58613fa636d5f39
|
||||
.scribe/intro.md=98adb6862b118c06e02e4e22390feb6f
|
||||
.scribe/auth.md=7fcc12b2e5a86fa9c49f509d348f3cc2
|
@ -1,3 +1,7 @@
|
||||
# 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>
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all cron jobs.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new cron job.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: command
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quia
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -118,7 +123,7 @@ endpoints:
|
||||
name: user
|
||||
description: ''
|
||||
required: true
|
||||
example: vito
|
||||
example: root
|
||||
type: string
|
||||
enumValues:
|
||||
- root
|
||||
@ -137,19 +142,22 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
command: consequatur
|
||||
user: vito
|
||||
command: quia
|
||||
user: root
|
||||
frequency: '* * * * *'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -165,9 +173,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a cron job by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -185,7 +194,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -195,7 +204,7 @@ endpoints:
|
||||
name: cronJob_id
|
||||
description: 'The ID of the cronJob.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 6
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -203,8 +212,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
cronJob_id: 17
|
||||
server_id: 29
|
||||
cronJob_id: 6
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -213,12 +222,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -234,9 +246,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete cron job.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -254,7 +267,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -264,7 +277,7 @@ endpoints:
|
||||
name: cronJob_id
|
||||
description: 'The ID of the cronJob.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 13
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -272,8 +285,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
cronJob_id: 17
|
||||
server_id: 29
|
||||
cronJob_id: 13
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -287,7 +300,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all databases.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new database.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quisquam
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -118,7 +123,7 @@ endpoints:
|
||||
name: charset
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: omnis
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -128,26 +133,29 @@ endpoints:
|
||||
name: collation
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: at
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
charset: consequatur
|
||||
collation: consequatur
|
||||
name: quisquam
|
||||
charset: omnis
|
||||
collation: at
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a database by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -183,7 +192,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -193,7 +202,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the database.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 8
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -201,8 +210,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 17
|
||||
server_id: 29
|
||||
id: 8
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -211,12 +220,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer EP64D8g51adf6hbceavVZ3k'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -232,9 +244,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete database.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -252,7 +265,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -262,7 +275,7 @@ endpoints:
|
||||
name: database_id
|
||||
description: 'The ID of the database.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 8
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -270,8 +283,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
database_id: 17
|
||||
server_id: 29
|
||||
database_id: 8
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -285,7 +298,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all database users.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new database user.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: username
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: qui
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -118,7 +123,7 @@ endpoints:
|
||||
name: password
|
||||
description: ''
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'xYv*3,#HQ=5<w!'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -135,19 +140,22 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
username: qui
|
||||
password: 'xYv*3,#HQ=5<w!'
|
||||
host: '%'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a database user by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -183,7 +192,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -193,7 +202,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 1
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -201,8 +210,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 1
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -211,12 +220,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -232,9 +244,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: link
|
||||
description: 'Link to databases'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -252,7 +265,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -262,7 +275,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 4
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -270,8 +283,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 4
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -279,24 +292,27 @@ endpoints:
|
||||
name: databases
|
||||
description: 'Array of database names to link to the user.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: maiores
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
databases: consequatur
|
||||
databases: maiores
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -312,9 +328,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete database user.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -332,7 +349,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -342,7 +359,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 20
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -350,8 +367,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 20
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -365,7 +382,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all firewall rules.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer eD368kaZfVEab4v61ghdP5c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sapiente
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -142,7 +147,7 @@ endpoints:
|
||||
name: port
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -152,7 +157,7 @@ endpoints:
|
||||
name: source
|
||||
description: ''
|
||||
required: false
|
||||
example: consequatur
|
||||
example: doloribus
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -169,22 +174,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: sapiente
|
||||
type: allow
|
||||
protocol: tcp
|
||||
port: consequatur
|
||||
source: consequatur
|
||||
port: et
|
||||
source: doloribus
|
||||
mask: '0'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3184PbED6aacZveV6hf5dgk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -200,9 +208,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: edit
|
||||
description: 'Update an existing firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -220,7 +229,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -230,7 +239,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -238,8 +247,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -247,7 +256,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -281,7 +290,7 @@ endpoints:
|
||||
name: port
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: aut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -291,7 +300,7 @@ endpoints:
|
||||
name: source
|
||||
description: ''
|
||||
required: false
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -308,22 +317,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: et
|
||||
type: allow
|
||||
protocol: tcp
|
||||
port: consequatur
|
||||
source: consequatur
|
||||
port: aut
|
||||
source: et
|
||||
mask: '0'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -339,9 +351,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a firewall rule by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -359,7 +372,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -369,7 +382,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -377,8 +390,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -387,12 +400,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -408,9 +424,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -428,7 +445,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -438,7 +455,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -446,8 +463,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -461,7 +478,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -29,12 +29,12 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
status: 200
|
||||
content: '{"success":true,"version":"2.5.0"}'
|
||||
content: '{"success":true,"version":"2.4.0"}'
|
||||
headers:
|
||||
cache-control: 'no-cache, private'
|
||||
content-type: application/json
|
||||
x-ratelimit-limit: '60'
|
||||
x-ratelimit-remaining: '57'
|
||||
x-ratelimit-remaining: '59'
|
||||
access-control-allow-origin: '*'
|
||||
description: null
|
||||
custom: []
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all projects.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters: []
|
||||
@ -29,12 +30,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -50,9 +54,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters: []
|
||||
@ -64,24 +69,27 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the project.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: dignissimos
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: dignissimos
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -97,9 +105,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a project by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -123,12 +132,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -144,9 +156,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: 'Update project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -169,24 +182,27 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the project.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: sunt
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -202,9 +218,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -233,7 +250,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h5gZ63DPVbcevE4faka86d1'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: index
|
||||
description: 'Get all redirects.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -44,7 +45,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -52,8 +53,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -62,12 +63,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer cV16fevgEZhPadD43685akb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -83,9 +87,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new redirect.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -103,7 +108,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -113,7 +118,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -121,8 +126,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -130,7 +135,7 @@ endpoints:
|
||||
name: from
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: odit
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -140,7 +145,7 @@ endpoints:
|
||||
name: to
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: incidunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -150,7 +155,7 @@ endpoints:
|
||||
name: mode
|
||||
description: ''
|
||||
required: true
|
||||
example: 302
|
||||
example: 301
|
||||
type: string
|
||||
enumValues:
|
||||
- 301
|
||||
@ -161,9 +166,9 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
from: consequatur
|
||||
to: consequatur
|
||||
mode: 302
|
||||
from: odit
|
||||
to: incidunt
|
||||
mode: 301
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -173,7 +178,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ZD45hPk638abev61EVcagdf'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -189,9 +197,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete a redirect.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -209,7 +218,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -219,7 +228,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -237,8 +246,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
redirect_id: 9
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
@ -253,7 +262,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all servers in a project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -40,12 +41,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -61,9 +65,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -86,7 +91,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The server provider type'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: fugiat
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -96,7 +101,7 @@ endpoints:
|
||||
name: server_provider
|
||||
description: 'If the provider is not custom, the ID of the server provider profile'
|
||||
required: true
|
||||
example: hetzner
|
||||
example: digitalocean
|
||||
type: string
|
||||
enumValues:
|
||||
- custom
|
||||
@ -111,7 +116,7 @@ endpoints:
|
||||
name: region
|
||||
description: 'Provider region if the provider is not custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: itaque
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -121,7 +126,7 @@ endpoints:
|
||||
name: plan
|
||||
description: 'Provider plan if the provider is not custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptatum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -131,7 +136,7 @@ endpoints:
|
||||
name: ip
|
||||
description: 'SSH IP address if the provider is custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -141,7 +146,7 @@ endpoints:
|
||||
name: port
|
||||
description: 'SSH Port if the provider is custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: reiciendis
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -151,7 +156,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -161,7 +166,7 @@ endpoints:
|
||||
name: os
|
||||
description: 'The os of the server'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: vel
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -171,7 +176,7 @@ endpoints:
|
||||
name: webserver
|
||||
description: 'Web server'
|
||||
required: true
|
||||
example: none
|
||||
example: nginx
|
||||
type: string
|
||||
enumValues:
|
||||
- none
|
||||
@ -183,7 +188,7 @@ endpoints:
|
||||
name: database
|
||||
description: Database
|
||||
required: true
|
||||
example: mariadb104
|
||||
example: mysql80
|
||||
type: string
|
||||
enumValues:
|
||||
- none
|
||||
@ -204,7 +209,7 @@ endpoints:
|
||||
name: php
|
||||
description: 'PHP version'
|
||||
required: true
|
||||
example: '8.0'
|
||||
example: '7.2'
|
||||
type: string
|
||||
enumValues:
|
||||
- '7.0'
|
||||
@ -220,27 +225,30 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
server_provider: hetzner
|
||||
region: consequatur
|
||||
plan: consequatur
|
||||
ip: consequatur
|
||||
port: consequatur
|
||||
name: consequatur
|
||||
os: consequatur
|
||||
webserver: none
|
||||
database: mariadb104
|
||||
php: '8.0'
|
||||
provider: fugiat
|
||||
server_provider: digitalocean
|
||||
region: itaque
|
||||
plan: voluptatum
|
||||
ip: ut
|
||||
port: reiciendis
|
||||
name: et
|
||||
os: vel
|
||||
webserver: nginx
|
||||
database: mysql80
|
||||
php: '7.2'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -256,9 +264,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a server by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -276,7 +285,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -284,7 +293,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
id: 32
|
||||
id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -293,12 +302,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -314,9 +326,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: reboot
|
||||
description: 'Reboot a server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -334,7 +347,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -342,7 +355,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -356,7 +369,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b61aD6538PacZEkeghfvV4d'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -372,9 +388,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: upgrade
|
||||
description: 'Upgrade server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -392,7 +409,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -400,7 +417,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -414,7 +431,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -430,9 +450,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -450,7 +471,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -458,7 +479,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -472,7 +493,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6aDkZEfdP16V58gb43avhec'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -40,12 +41,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -61,9 +65,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -86,7 +91,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: corrupti
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -96,7 +101,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: est
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: rerum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: key
|
||||
description: 'The key if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -126,28 +131,31 @@ endpoints:
|
||||
name: secret
|
||||
description: 'The secret if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sed
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
key: consequatur
|
||||
secret: consequatur
|
||||
provider: corrupti
|
||||
name: est
|
||||
token: rerum
|
||||
key: ut
|
||||
secret: sed
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -200,12 +209,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -221,9 +233,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -257,7 +270,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: earum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -276,18 +289,21 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: earum
|
||||
global: false
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -303,9 +319,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -345,7 +362,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all ssh keys.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 165aZvb46PhacEfke83dVgD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Deploy ssh key to server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: key_id
|
||||
description: 'The ID of the key.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: explicabo
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -118,7 +123,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'Key name, required if key_id is not provided.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: deleniti
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -128,26 +133,29 @@ endpoints:
|
||||
name: public_key
|
||||
description: 'Public Key, required if key_id is not provided.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sapiente
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
key_id: consequatur
|
||||
name: consequatur
|
||||
public_key: consequatur
|
||||
key_id: explicabo
|
||||
name: deleniti
|
||||
public_key: sapiente
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete ssh key from server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -183,7 +192,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -201,7 +210,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
sshKey_id: 1
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
@ -216,7 +225,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all services.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a service by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -102,7 +107,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -110,8 +115,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 184
|
||||
server_id: 29
|
||||
id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -120,12 +125,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -141,9 +149,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: start
|
||||
description: 'Start service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -161,7 +170,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -171,7 +180,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -179,8 +188,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -194,7 +203,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -210,9 +222,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: stop
|
||||
description: 'Stop service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -230,7 +243,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -240,7 +253,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -248,8 +261,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -263,7 +276,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -279,9 +295,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: restart
|
||||
description: 'Restart service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -299,7 +316,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -309,7 +326,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -317,8 +334,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -332,7 +349,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -348,9 +368,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: enable
|
||||
description: 'Enable service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -368,7 +389,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -378,7 +399,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -386,8 +407,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -401,7 +422,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer EvcehkDbdV43f61P86Za5ga'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -417,9 +441,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: disable
|
||||
description: 'Disable service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -437,7 +462,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -447,7 +472,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -455,8 +480,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -470,7 +495,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -486,9 +514,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -506,7 +535,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -516,7 +545,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -524,8 +553,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -539,7 +568,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all sites.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -34,7 +35,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -51,12 +52,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer aD138EgdPf4Vhav5c6bke6Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -72,9 +76,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new site.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -92,7 +97,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -108,7 +113,7 @@ endpoints:
|
||||
name: type
|
||||
description: ''
|
||||
required: true
|
||||
example: load-balancer
|
||||
example: php-blank
|
||||
type: string
|
||||
enumValues:
|
||||
- php
|
||||
@ -124,7 +129,7 @@ endpoints:
|
||||
name: domain
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: impedit
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -135,7 +140,7 @@ endpoints:
|
||||
description: ''
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- cum
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -165,7 +170,7 @@ endpoints:
|
||||
name: source_control
|
||||
description: 'Source control ID, Required for Sites which support source control'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: non
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -215,7 +220,7 @@ endpoints:
|
||||
name: user
|
||||
description: 'user, to isolate the website under a new user'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptate
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -235,29 +240,32 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
type: load-balancer
|
||||
domain: consequatur
|
||||
type: php-blank
|
||||
domain: impedit
|
||||
aliases:
|
||||
- consequatur
|
||||
- cum
|
||||
php_version: '7.4'
|
||||
web_directory: public
|
||||
source_control: consequatur
|
||||
source_control: non
|
||||
repository: organization/repository
|
||||
branch: main
|
||||
composer: true
|
||||
version: 5.2.1
|
||||
user: consequatur
|
||||
user: voluptate
|
||||
method: ip-hash
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6V3D5c4g6hZaEfb81evPadk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -273,9 +281,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a site by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -293,7 +302,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -303,7 +312,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -311,8 +320,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 17
|
||||
server_id: 29
|
||||
id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -321,12 +330,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer gE86bZ6vfcd3hVP15ka4Dea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -342,9 +354,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete site.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -362,7 +375,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -372,7 +385,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -380,8 +393,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -395,7 +408,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8kEb6Dd613a5afZhcg4VvPe'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -411,9 +427,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: load-balancer
|
||||
description: 'Update load balancer.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -431,7 +448,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -441,7 +458,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -449,8 +466,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -458,7 +475,7 @@ endpoints:
|
||||
name: method
|
||||
description: 'Load balancer method, Required if the site type is Load balancer'
|
||||
required: true
|
||||
example: ip-hash
|
||||
example: round-robin
|
||||
type: string
|
||||
enumValues:
|
||||
- round-robin
|
||||
@ -472,16 +489,16 @@ endpoints:
|
||||
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- omnis
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
method: ip-hash
|
||||
method: round-robin
|
||||
servers:
|
||||
- consequatur
|
||||
- omnis
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -491,7 +508,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8Da4P1c6d6gfbhZvaE3k5Ve'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -507,9 +527,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: aliases
|
||||
description: 'Update aliases.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -527,7 +548,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -537,7 +558,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -545,8 +566,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -555,7 +576,7 @@ endpoints:
|
||||
description: 'Array of aliases'
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- doloremque
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -563,7 +584,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
aliases:
|
||||
- consequatur
|
||||
- doloremque
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -573,7 +594,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer d4EVa8Zkfvg1Dcbe53P6a6h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -589,9 +613,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deploy
|
||||
description: 'Run site deployment script'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -609,7 +634,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -619,7 +644,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -627,8 +652,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -642,7 +667,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer dkcV5EZa8fD6vgaP1b36e4h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -658,9 +686,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deployment-script
|
||||
description: 'Update site deployment script'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -678,7 +707,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -688,7 +717,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -696,8 +725,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -705,14 +734,14 @@ endpoints:
|
||||
name: script
|
||||
description: 'Content of the deployment script'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptatem
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
script: consequatur
|
||||
script: voluptatem
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -722,7 +751,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer hevV81bfZE6cdkaa453gDP6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -738,9 +770,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deployment-script
|
||||
description: 'Get site deployment script content'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -758,7 +791,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -768,7 +801,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -776,8 +809,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -791,7 +824,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer a1EbvhePag4f5dk6ZV368Dc'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -807,9 +843,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: env
|
||||
description: 'Get site .env file content'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -827,7 +864,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -837,7 +874,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -845,8 +882,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -860,7 +897,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer P8Zvch3DgV654abeaE6f1kd'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -876,9 +916,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: env
|
||||
description: 'Update site .env file'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -896,7 +937,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -906,7 +947,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -914,8 +955,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -923,14 +964,14 @@ endpoints:
|
||||
name: env
|
||||
description: 'Content of the .env file'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quam
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
env: consequatur
|
||||
env: quam
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -940,7 +981,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 45acbP1h6eg6kDVdZf8E3av'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -40,12 +41,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -61,9 +65,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -99,7 +104,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: molestias
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -109,7 +114,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: in
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -119,7 +124,7 @@ endpoints:
|
||||
name: url
|
||||
description: 'The URL if the provider is Gitlab and it is self-hosted'
|
||||
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
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -129,7 +134,7 @@ endpoints:
|
||||
name: username
|
||||
description: 'The username if the provider is Bitbucket'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: consectetur
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -139,7 +144,7 @@ endpoints:
|
||||
name: password
|
||||
description: 'The password if the provider is Bitbucket'
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'y*P4_]ZdjE_:'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -147,21 +152,24 @@ endpoints:
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: gitlab
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
name: molestias
|
||||
token: in
|
||||
url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
|
||||
username: consectetur
|
||||
password: 'y*P4_]ZdjE_:'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer DfegP56vkEa364Zbhda8V1c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -177,9 +185,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -214,12 +223,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -235,9 +247,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -271,7 +284,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: non
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -281,7 +294,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -291,7 +304,7 @@ endpoints:
|
||||
name: url
|
||||
description: 'The URL if the provider is Gitlab and it is self-hosted'
|
||||
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
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -301,7 +314,7 @@ endpoints:
|
||||
name: username
|
||||
description: 'The username if the provider is Bitbucket'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: natus
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -311,7 +324,7 @@ endpoints:
|
||||
name: password
|
||||
description: 'The password if the provider is Bitbucket'
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'A^">*m{p]DI'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -321,7 +334,7 @@ endpoints:
|
||||
name: global
|
||||
description: 'Accessible in all projects'
|
||||
required: true
|
||||
example: false
|
||||
example: true
|
||||
type: string
|
||||
enumValues:
|
||||
- true
|
||||
@ -330,22 +343,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
global: false
|
||||
name: non
|
||||
token: sunt
|
||||
url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
|
||||
username: natus
|
||||
password: 'A^">*m{p]DI'
|
||||
global: true
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -361,9 +377,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -403,7 +420,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fgk61vD68E4cZhP3bV5adea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -14,9 +14,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -40,12 +41,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -61,9 +65,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -86,7 +91,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ab
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -96,7 +101,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quo
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: in
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: key
|
||||
description: 'The key if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -126,28 +131,31 @@ endpoints:
|
||||
name: secret
|
||||
description: 'The secret if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: molestias
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
key: consequatur
|
||||
secret: consequatur
|
||||
provider: ab
|
||||
name: quo
|
||||
token: in
|
||||
key: sunt
|
||||
secret: molestias
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer e584613dkZaPDEVvgcahbf6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -200,12 +209,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -221,9 +233,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -257,7 +270,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptas
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -276,18 +289,21 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: voluptas
|
||||
global: true
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -303,9 +319,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -345,7 +362,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all cron jobs.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new cron job.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: command
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quia
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: user
|
||||
description: ''
|
||||
required: true
|
||||
example: vito
|
||||
example: root
|
||||
type: string
|
||||
enumValues:
|
||||
- root
|
||||
@ -135,19 +140,22 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
command: consequatur
|
||||
user: vito
|
||||
command: quia
|
||||
user: root
|
||||
frequency: '* * * * *'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -163,9 +171,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a cron job by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -183,7 +192,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -193,7 +202,7 @@ endpoints:
|
||||
name: cronJob_id
|
||||
description: 'The ID of the cronJob.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 6
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -201,8 +210,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
cronJob_id: 17
|
||||
server_id: 29
|
||||
cronJob_id: 6
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -211,12 +220,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -232,9 +244,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete cron job.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -252,7 +265,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -262,7 +275,7 @@ endpoints:
|
||||
name: cronJob_id
|
||||
description: 'The ID of the cronJob.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 13
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -270,8 +283,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
cronJob_id: 17
|
||||
server_id: 29
|
||||
cronJob_id: 13
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -285,7 +298,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all databases.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new database.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quisquam
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: charset
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: omnis
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -126,26 +131,29 @@ endpoints:
|
||||
name: collation
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: at
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
charset: consequatur
|
||||
collation: consequatur
|
||||
name: quisquam
|
||||
charset: omnis
|
||||
collation: at
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -161,9 +169,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a database by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -181,7 +190,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -191,7 +200,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the database.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 8
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -199,8 +208,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 17
|
||||
server_id: 29
|
||||
id: 8
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -209,12 +218,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer EP64D8g51adf6hbceavVZ3k'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -230,9 +242,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete database.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -250,7 +263,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -260,7 +273,7 @@ endpoints:
|
||||
name: database_id
|
||||
description: 'The ID of the database.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 8
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -268,8 +281,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
database_id: 17
|
||||
server_id: 29
|
||||
database_id: 8
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -283,7 +296,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all database users.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new database user.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: username
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: qui
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: password
|
||||
description: ''
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'xYv*3,#HQ=5<w!'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -133,19 +138,22 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
username: qui
|
||||
password: 'xYv*3,#HQ=5<w!'
|
||||
host: '%'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -161,9 +169,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a database user by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -181,7 +190,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -191,7 +200,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 1
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -199,8 +208,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 1
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -209,12 +218,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -230,9 +242,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: link
|
||||
description: 'Link to databases'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -250,7 +263,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -260,7 +273,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 4
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -268,8 +281,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 4
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -277,24 +290,27 @@ endpoints:
|
||||
name: databases
|
||||
description: 'Array of database names to link to the user.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: maiores
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
databases: consequatur
|
||||
databases: maiores
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -310,9 +326,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete database user.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -330,7 +347,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -340,7 +357,7 @@ endpoints:
|
||||
name: databaseUser_id
|
||||
description: 'The ID of the databaseUser.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 20
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -348,8 +365,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
databaseUser_id: 17
|
||||
server_id: 29
|
||||
databaseUser_id: 20
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -363,7 +380,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all firewall rules.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer eD368kaZfVEab4v61ghdP5c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sapiente
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -140,7 +145,7 @@ endpoints:
|
||||
name: port
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -150,7 +155,7 @@ endpoints:
|
||||
name: source
|
||||
description: ''
|
||||
required: false
|
||||
example: consequatur
|
||||
example: doloribus
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -167,22 +172,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: sapiente
|
||||
type: allow
|
||||
protocol: tcp
|
||||
port: consequatur
|
||||
source: consequatur
|
||||
port: et
|
||||
source: doloribus
|
||||
mask: '0'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3184PbED6aacZveV6hf5dgk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -198,9 +206,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: edit
|
||||
description: 'Update an existing firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -218,7 +227,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -228,7 +237,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -236,8 +245,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -245,7 +254,7 @@ endpoints:
|
||||
name: name
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -279,7 +288,7 @@ endpoints:
|
||||
name: port
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: aut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -289,7 +298,7 @@ endpoints:
|
||||
name: source
|
||||
description: ''
|
||||
required: false
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -306,22 +315,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: et
|
||||
type: allow
|
||||
protocol: tcp
|
||||
port: consequatur
|
||||
source: consequatur
|
||||
port: aut
|
||||
source: et
|
||||
mask: '0'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -337,9 +349,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a firewall rule by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -357,7 +370,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -367,7 +380,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -375,8 +388,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -385,12 +398,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -406,9 +422,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete firewall rule.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -426,7 +443,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -436,7 +453,7 @@ endpoints:
|
||||
name: firewallRule_id
|
||||
description: 'The ID of the firewallRule.'
|
||||
required: true
|
||||
example: 94
|
||||
example: 85
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -444,8 +461,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
firewallRule_id: 94
|
||||
server_id: 29
|
||||
firewallRule_id: 85
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -459,7 +476,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -27,12 +27,12 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
status: 200
|
||||
content: '{"success":true,"version":"2.5.0"}'
|
||||
content: '{"success":true,"version":"2.4.0"}'
|
||||
headers:
|
||||
cache-control: 'no-cache, private'
|
||||
content-type: application/json
|
||||
x-ratelimit-limit: '60'
|
||||
x-ratelimit-remaining: '57'
|
||||
x-ratelimit-remaining: '59'
|
||||
access-control-allow-origin: '*'
|
||||
description: null
|
||||
custom: []
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all projects.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters: []
|
||||
@ -27,12 +28,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -48,9 +52,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters: []
|
||||
@ -62,24 +67,27 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the project.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: dignissimos
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: dignissimos
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -95,9 +103,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a project by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -121,12 +130,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -142,9 +154,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: 'Update project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -167,24 +180,27 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the project.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: sunt
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -200,9 +216,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -231,7 +248,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h5gZ63DPVbcevE4faka86d1'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: index
|
||||
description: 'Get all redirects.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -42,7 +43,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -50,8 +51,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -60,12 +61,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer cV16fevgEZhPadD43685akb'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -81,9 +85,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new redirect.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -101,7 +106,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -111,7 +116,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -119,8 +124,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -128,7 +133,7 @@ endpoints:
|
||||
name: from
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: odit
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -138,7 +143,7 @@ endpoints:
|
||||
name: to
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: incidunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -148,7 +153,7 @@ endpoints:
|
||||
name: mode
|
||||
description: ''
|
||||
required: true
|
||||
example: 302
|
||||
example: 301
|
||||
type: string
|
||||
enumValues:
|
||||
- 301
|
||||
@ -159,9 +164,9 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
from: consequatur
|
||||
to: consequatur
|
||||
mode: 302
|
||||
from: odit
|
||||
to: incidunt
|
||||
mode: 301
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -171,7 +176,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ZD45hPk638abev61EVcagdf'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -187,9 +195,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete a redirect.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -207,7 +216,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -217,7 +226,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -235,8 +244,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
redirect_id: 9
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
@ -251,7 +260,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all servers in a project.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -38,12 +39,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -59,9 +63,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -84,7 +89,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The server provider type'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: fugiat
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -94,7 +99,7 @@ endpoints:
|
||||
name: server_provider
|
||||
description: 'If the provider is not custom, the ID of the server provider profile'
|
||||
required: true
|
||||
example: hetzner
|
||||
example: digitalocean
|
||||
type: string
|
||||
enumValues:
|
||||
- custom
|
||||
@ -109,7 +114,7 @@ endpoints:
|
||||
name: region
|
||||
description: 'Provider region if the provider is not custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: itaque
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -119,7 +124,7 @@ endpoints:
|
||||
name: plan
|
||||
description: 'Provider plan if the provider is not custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptatum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -129,7 +134,7 @@ endpoints:
|
||||
name: ip
|
||||
description: 'SSH IP address if the provider is custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -139,7 +144,7 @@ endpoints:
|
||||
name: port
|
||||
description: 'SSH Port if the provider is custom'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: reiciendis
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -149,7 +154,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: et
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -159,7 +164,7 @@ endpoints:
|
||||
name: os
|
||||
description: 'The os of the server'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: vel
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -169,7 +174,7 @@ endpoints:
|
||||
name: webserver
|
||||
description: 'Web server'
|
||||
required: true
|
||||
example: none
|
||||
example: nginx
|
||||
type: string
|
||||
enumValues:
|
||||
- none
|
||||
@ -181,7 +186,7 @@ endpoints:
|
||||
name: database
|
||||
description: Database
|
||||
required: true
|
||||
example: mariadb104
|
||||
example: mysql80
|
||||
type: string
|
||||
enumValues:
|
||||
- none
|
||||
@ -202,7 +207,7 @@ endpoints:
|
||||
name: php
|
||||
description: 'PHP version'
|
||||
required: true
|
||||
example: '8.0'
|
||||
example: '7.2'
|
||||
type: string
|
||||
enumValues:
|
||||
- '7.0'
|
||||
@ -218,27 +223,30 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
server_provider: hetzner
|
||||
region: consequatur
|
||||
plan: consequatur
|
||||
ip: consequatur
|
||||
port: consequatur
|
||||
name: consequatur
|
||||
os: consequatur
|
||||
webserver: none
|
||||
database: mariadb104
|
||||
php: '8.0'
|
||||
provider: fugiat
|
||||
server_provider: digitalocean
|
||||
region: itaque
|
||||
plan: voluptatum
|
||||
ip: ut
|
||||
port: reiciendis
|
||||
name: et
|
||||
os: vel
|
||||
webserver: nginx
|
||||
database: mysql80
|
||||
php: '7.2'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -254,9 +262,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a server by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -274,7 +283,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -282,7 +291,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
id: 32
|
||||
id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -291,12 +300,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -312,9 +324,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: reboot
|
||||
description: 'Reboot a server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -332,7 +345,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -340,7 +353,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -354,7 +367,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b61aD6538PacZEkeghfvV4d'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -370,9 +386,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: upgrade
|
||||
description: 'Upgrade server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -390,7 +407,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -398,7 +415,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -412,7 +429,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -428,9 +448,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -448,7 +469,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -456,7 +477,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -470,7 +491,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6aDkZEfdP16V58gb43avhec'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -38,12 +39,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -59,9 +63,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -84,7 +89,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: corrupti
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -94,7 +99,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: est
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -104,7 +109,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: rerum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -114,7 +119,7 @@ endpoints:
|
||||
name: key
|
||||
description: 'The key if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ut
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -124,28 +129,31 @@ endpoints:
|
||||
name: secret
|
||||
description: 'The secret if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sed
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
key: consequatur
|
||||
secret: consequatur
|
||||
provider: corrupti
|
||||
name: est
|
||||
token: rerum
|
||||
key: ut
|
||||
secret: sed
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -161,9 +169,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -198,12 +207,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -219,9 +231,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -255,7 +268,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the server provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: earum
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -274,18 +287,21 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: earum
|
||||
global: false
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -301,9 +317,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -343,7 +360,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all ssh keys.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 165aZvb46PhacEfke83dVgD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Deploy ssh key to server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: key_id
|
||||
description: 'The ID of the key.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: explicabo
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -116,7 +121,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'Key name, required if key_id is not provided.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: deleniti
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -126,26 +131,29 @@ endpoints:
|
||||
name: public_key
|
||||
description: 'Public Key, required if key_id is not provided.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sapiente
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
key_id: consequatur
|
||||
name: consequatur
|
||||
public_key: consequatur
|
||||
key_id: explicabo
|
||||
name: deleniti
|
||||
public_key: sapiente
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -161,9 +169,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete ssh key from server.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -181,7 +190,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -199,7 +208,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
sshKey_id: 1
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
@ -214,7 +223,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all services.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a service by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -100,7 +105,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -108,8 +113,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 184
|
||||
server_id: 29
|
||||
id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -118,12 +123,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -139,9 +147,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: start
|
||||
description: 'Start service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -159,7 +168,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -169,7 +178,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -177,8 +186,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -192,7 +201,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -208,9 +220,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: stop
|
||||
description: 'Stop service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -228,7 +241,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -238,7 +251,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -246,8 +259,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -261,7 +274,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -277,9 +293,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: restart
|
||||
description: 'Restart service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -297,7 +314,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -307,7 +324,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -315,8 +332,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -330,7 +347,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -346,9 +366,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: enable
|
||||
description: 'Enable service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -366,7 +387,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -376,7 +397,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -384,8 +405,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -399,7 +420,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer EvcehkDbdV43f61P86Za5ga'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -415,9 +439,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: disable
|
||||
description: 'Disable service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -435,7 +460,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -445,7 +470,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -453,8 +478,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -468,7 +493,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -484,9 +512,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete service.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -504,7 +533,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -514,7 +543,7 @@ endpoints:
|
||||
name: service_id
|
||||
description: 'The ID of the service.'
|
||||
required: true
|
||||
example: 184
|
||||
example: 169
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -522,8 +551,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
service_id: 184
|
||||
server_id: 29
|
||||
service_id: 169
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -537,7 +566,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: 'Get all sites.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -32,7 +33,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -40,7 +41,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -49,12 +50,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer aD138EgdPf4Vhav5c6bke6Z'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -70,9 +74,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: 'Create a new site.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -90,7 +95,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -98,7 +103,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
server_id: 29
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -106,7 +111,7 @@ endpoints:
|
||||
name: type
|
||||
description: ''
|
||||
required: true
|
||||
example: load-balancer
|
||||
example: php-blank
|
||||
type: string
|
||||
enumValues:
|
||||
- php
|
||||
@ -122,7 +127,7 @@ endpoints:
|
||||
name: domain
|
||||
description: ''
|
||||
required: true
|
||||
example: consequatur
|
||||
example: impedit
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -133,7 +138,7 @@ endpoints:
|
||||
description: ''
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- cum
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -163,7 +168,7 @@ endpoints:
|
||||
name: source_control
|
||||
description: 'Source control ID, Required for Sites which support source control'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: non
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -213,7 +218,7 @@ endpoints:
|
||||
name: user
|
||||
description: 'user, to isolate the website under a new user'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptate
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -233,29 +238,32 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
type: load-balancer
|
||||
domain: consequatur
|
||||
type: php-blank
|
||||
domain: impedit
|
||||
aliases:
|
||||
- consequatur
|
||||
- cum
|
||||
php_version: '7.4'
|
||||
web_directory: public
|
||||
source_control: consequatur
|
||||
source_control: non
|
||||
repository: organization/repository
|
||||
branch: main
|
||||
composer: true
|
||||
version: 5.2.1
|
||||
user: consequatur
|
||||
user: voluptate
|
||||
method: ip-hash
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 6V3D5c4g6hZaEfb81evPadk'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -271,9 +279,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: 'Get a site by ID.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -291,7 +300,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -301,7 +310,7 @@ endpoints:
|
||||
name: id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -309,8 +318,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
id: 17
|
||||
server_id: 29
|
||||
id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -319,12 +328,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer gE86bZ6vfcd3hVP15ka4Dea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -340,9 +352,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: 'Delete site.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -360,7 +373,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -370,7 +383,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -378,8 +391,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -393,7 +406,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8kEb6Dd613a5afZhcg4VvPe'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -409,9 +425,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: load-balancer
|
||||
description: 'Update load balancer.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -429,7 +446,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -439,7 +456,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -447,8 +464,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -456,7 +473,7 @@ endpoints:
|
||||
name: method
|
||||
description: 'Load balancer method, Required if the site type is Load balancer'
|
||||
required: true
|
||||
example: ip-hash
|
||||
example: round-robin
|
||||
type: string
|
||||
enumValues:
|
||||
- round-robin
|
||||
@ -470,16 +487,16 @@ endpoints:
|
||||
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- omnis
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
method: ip-hash
|
||||
method: round-robin
|
||||
servers:
|
||||
- consequatur
|
||||
- omnis
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -489,7 +506,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 8Da4P1c6d6gfbhZvaE3k5Ve'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -505,9 +525,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: aliases
|
||||
description: 'Update aliases.'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -525,7 +546,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -535,7 +556,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -543,8 +564,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -553,7 +574,7 @@ endpoints:
|
||||
description: 'Array of aliases'
|
||||
required: true
|
||||
example:
|
||||
- consequatur
|
||||
- doloremque
|
||||
type: 'string[]'
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -561,7 +582,7 @@ endpoints:
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
aliases:
|
||||
- consequatur
|
||||
- doloremque
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -571,7 +592,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer d4EVa8Zkfvg1Dcbe53P6a6h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -587,9 +611,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deploy
|
||||
description: 'Run site deployment script'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -607,7 +632,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -617,7 +642,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -625,8 +650,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -640,7 +665,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer dkcV5EZa8fD6vgaP1b36e4h'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -656,9 +684,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deployment-script
|
||||
description: 'Update site deployment script'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -676,7 +705,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -686,7 +715,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -694,8 +723,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -703,14 +732,14 @@ endpoints:
|
||||
name: script
|
||||
description: 'Content of the deployment script'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptatem
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
script: consequatur
|
||||
script: voluptatem
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -720,7 +749,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer hevV81bfZE6cdkaa453gDP6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -736,9 +768,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: deployment-script
|
||||
description: 'Get site deployment script content'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -756,7 +789,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -766,7 +799,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -774,8 +807,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -789,7 +822,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer a1EbvhePag4f5dk6ZV368Dc'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -805,9 +841,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: env
|
||||
description: 'Get site .env file content'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -825,7 +862,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -835,7 +872,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -843,8 +880,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters: []
|
||||
@ -858,7 +895,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer P8Zvch3DgV654abeaE6f1kd'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -874,9 +914,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: env
|
||||
description: 'Update site .env file'
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -894,7 +935,7 @@ endpoints:
|
||||
name: server_id
|
||||
description: 'The ID of the server.'
|
||||
required: true
|
||||
example: 32
|
||||
example: 29
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -904,7 +945,7 @@ endpoints:
|
||||
name: site_id
|
||||
description: 'The ID of the site.'
|
||||
required: true
|
||||
example: 17
|
||||
example: 44
|
||||
type: integer
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -912,8 +953,8 @@ endpoints:
|
||||
custom: []
|
||||
cleanUrlParameters:
|
||||
project_id: 1
|
||||
server_id: 32
|
||||
site_id: 17
|
||||
server_id: 29
|
||||
site_id: 44
|
||||
queryParameters: []
|
||||
cleanQueryParameters: []
|
||||
bodyParameters:
|
||||
@ -921,14 +962,14 @@ endpoints:
|
||||
name: env
|
||||
description: 'Content of the .env file'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quam
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
env: consequatur
|
||||
env: quam
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
@ -938,7 +979,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer 45acbP1h6eg6kDVdZf8E3av'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -38,12 +39,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -59,9 +63,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -97,7 +102,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: molestias
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -107,7 +112,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: in
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -117,7 +122,7 @@ endpoints:
|
||||
name: url
|
||||
description: 'The URL if the provider is Gitlab and it is self-hosted'
|
||||
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
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -127,7 +132,7 @@ endpoints:
|
||||
name: username
|
||||
description: 'The username if the provider is Bitbucket'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: consectetur
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -137,7 +142,7 @@ endpoints:
|
||||
name: password
|
||||
description: 'The password if the provider is Bitbucket'
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'y*P4_]ZdjE_:'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -145,21 +150,24 @@ endpoints:
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: gitlab
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
name: molestias
|
||||
token: in
|
||||
url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
|
||||
username: consectetur
|
||||
password: 'y*P4_]ZdjE_:'
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer DfegP56vkEa364Zbhda8V1c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -175,9 +183,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -212,12 +221,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -233,9 +245,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -269,7 +282,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: non
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -279,7 +292,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -289,7 +302,7 @@ endpoints:
|
||||
name: url
|
||||
description: 'The URL if the provider is Gitlab and it is self-hosted'
|
||||
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
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -299,7 +312,7 @@ endpoints:
|
||||
name: username
|
||||
description: 'The username if the provider is Bitbucket'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: natus
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -309,7 +322,7 @@ endpoints:
|
||||
name: password
|
||||
description: 'The password if the provider is Bitbucket'
|
||||
required: true
|
||||
example: 'O[2UZ5ij-e/dl4m{o,'
|
||||
example: 'A^">*m{p]DI'
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -319,7 +332,7 @@ endpoints:
|
||||
name: global
|
||||
description: 'Accessible in all projects'
|
||||
required: true
|
||||
example: false
|
||||
example: true
|
||||
type: string
|
||||
enumValues:
|
||||
- true
|
||||
@ -328,22 +341,25 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
url: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
|
||||
username: consequatur
|
||||
password: 'O[2UZ5ij-e/dl4m{o,'
|
||||
global: false
|
||||
name: non
|
||||
token: sunt
|
||||
url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
|
||||
username: natus
|
||||
password: 'A^">*m{p]DI'
|
||||
global: true
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -359,9 +375,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -401,7 +418,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fgk61vD68E4cZhP3bV5adea'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -12,9 +12,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: list
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -38,12 +39,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","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":"« Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
|
||||
headers: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -59,9 +63,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: create
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -84,7 +89,7 @@ endpoints:
|
||||
name: provider
|
||||
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: ab
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -94,7 +99,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: quo
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -104,7 +109,7 @@ endpoints:
|
||||
name: token
|
||||
description: 'The token if provider requires api token'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: in
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -114,7 +119,7 @@ endpoints:
|
||||
name: key
|
||||
description: 'The key if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: sunt
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -124,28 +129,31 @@ endpoints:
|
||||
name: secret
|
||||
description: 'The secret if provider requires key'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: molestias
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
provider: consequatur
|
||||
name: consequatur
|
||||
token: consequatur
|
||||
key: consequatur
|
||||
secret: consequatur
|
||||
provider: ab
|
||||
name: quo
|
||||
token: in
|
||||
key: sunt
|
||||
secret: molestias
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer e584613dkZaPDEVvgcahbf6'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -161,9 +169,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: show
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -198,12 +207,15 @@ endpoints:
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -219,9 +231,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: update
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -255,7 +268,7 @@ endpoints:
|
||||
name: name
|
||||
description: 'The name of the storage provider.'
|
||||
required: true
|
||||
example: consequatur
|
||||
example: voluptas
|
||||
type: string
|
||||
enumValues: []
|
||||
exampleWasSpecified: false
|
||||
@ -274,18 +287,21 @@ endpoints:
|
||||
nullable: false
|
||||
custom: []
|
||||
cleanBodyParameters:
|
||||
name: consequatur
|
||||
name: voluptas
|
||||
global: true
|
||||
fileParameters: []
|
||||
responses:
|
||||
-
|
||||
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: []
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
@ -301,9 +317,10 @@ endpoints:
|
||||
subgroupDescription: ''
|
||||
title: delete
|
||||
description: ''
|
||||
authenticated: false
|
||||
authenticated: true
|
||||
custom: []
|
||||
headers:
|
||||
Authorization: 'Bearer YOUR-API-KEY'
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
urlParameters:
|
||||
@ -343,7 +360,10 @@ endpoints:
|
||||
description: ''
|
||||
custom: []
|
||||
responseFields: []
|
||||
auth: []
|
||||
auth:
|
||||
- headers
|
||||
- Authorization
|
||||
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
|
||||
controller: null
|
||||
method: null
|
||||
route: null
|
||||
|
@ -3,11 +3,11 @@ # Introduction
|
||||
VitoDeploy's API documentation.
|
||||
|
||||
<aside>
|
||||
<strong>Base URL</strong>: <code>https://vito.test</code>
|
||||
<strong>Base URL</strong>: <code>https://your-vito-url</code>
|
||||
</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.
|
||||
|
||||
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
|
||||
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
|
||||
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
|
||||
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
|
||||
|
||||
|
@ -48,6 +48,11 @@ ## Credits
|
||||
- PHPSecLib
|
||||
- PHPUnit
|
||||
- Tailwindcss
|
||||
- Alpinejs
|
||||
- Livewire
|
||||
- Vite
|
||||
- Prettier
|
||||
- Postcss
|
||||
- FilamentPHP
|
||||
- Mobiledetect
|
||||
- Spatie
|
||||
|
@ -17,7 +17,6 @@
|
||||
use Exception;
|
||||
use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
@ -30,8 +29,6 @@ class CreateServer
|
||||
*/
|
||||
public function create(User $creator, Project $project, array $input): Server
|
||||
{
|
||||
Validator::make($input, self::rules($project, $input))->validate();
|
||||
|
||||
$server = new Server([
|
||||
'project_id' => $project->id,
|
||||
'user_id' => $creator->id,
|
||||
|
@ -8,7 +8,6 @@
|
||||
use App\Models\User;
|
||||
use App\ServerProviders\ServerProvider as ServerProviderContract;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
@ -21,8 +20,6 @@ class CreateServerProvider
|
||||
*/
|
||||
public function create(User $user, Project $project, array $input): ServerProvider
|
||||
{
|
||||
Validator::make($input, self::rules($input))->validate();
|
||||
|
||||
$provider = self::getProvider($input['provider']);
|
||||
|
||||
try {
|
||||
|
@ -7,4 +7,6 @@ final class Webserver
|
||||
const NONE = 'none';
|
||||
|
||||
const NGINX = 'nginx';
|
||||
|
||||
const CADDY = 'caddy';
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
* @method static string upload(string $local, string $remote, ?string $owner = null)
|
||||
* @method static string download(string $local, string $remote)
|
||||
* @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 assertFileUploaded(string $toPath, ?string $content = null)
|
||||
* @method static string getUploadedLocalPath()
|
||||
|
@ -52,7 +52,7 @@ public function index(Project $project): ResourceCollection
|
||||
#[BodyParam(name: 'port', description: 'SSH Port if the provider is custom')]
|
||||
#[BodyParam(name: 'name', description: 'The name of the server.', required: true)]
|
||||
#[BodyParam(name: 'os', description: 'The os of the server', required: true)]
|
||||
#[BodyParam(name: 'webserver', description: 'Web server', required: true, enum: [Webserver::NONE, Webserver::NGINX])]
|
||||
#[BodyParam(name: 'webserver', description: 'Web server', required: true, enum: [Webserver::NONE, Webserver::NGINX, Webserver::CADDY])]
|
||||
#[BodyParam(name: 'database', description: 'Database', required: true, enum: [Database::NONE, Database::MYSQL57, Database::MYSQL80, Database::MARIADB103, Database::MARIADB104, Database::MARIADB103, Database::POSTGRESQL12, Database::POSTGRESQL13, Database::POSTGRESQL14, Database::POSTGRESQL15, Database::POSTGRESQL16], )]
|
||||
#[BodyParam(name: 'php', description: 'PHP version', required: true, enum: [PHP::V70, PHP::V71, PHP::V72, PHP::V73, PHP::V74, PHP::V80, PHP::V81, PHP::V82, PHP::V83])]
|
||||
#[ResponseFromApiResource(ServerResource::class, Server::class)]
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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)],
|
||||
]);
|
||||
}
|
||||
}
|
@ -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.'));
|
||||
}
|
||||
}
|
@ -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');
|
||||
}
|
||||
}
|
@ -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.'));
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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('/');
|
||||
}
|
||||
}
|
@ -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');
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -36,9 +36,6 @@ class Kernel extends HttpKernel
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
\App\Http\Middleware\HandleInertiaRequests::class,
|
||||
\App\Http\Middleware\HandleAppearance::class,
|
||||
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
|
@ -9,7 +9,10 @@
|
||||
|
||||
class CanSeeProjectMiddleware
|
||||
{
|
||||
public function handle(Request $request, Closure $next): mixed
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $request->user();
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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',
|
||||
];
|
||||
}
|
||||
}
|
@ -2,14 +2,16 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Models\Project;
|
||||
use App\Models\User;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class HasProjectMiddleware
|
||||
{
|
||||
public function handle(Request $request, Closure $next): mixed
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
/** @var ?User $user */
|
||||
$user = $request->user();
|
||||
@ -19,7 +21,7 @@ public function handle(Request $request, Closure $next): mixed
|
||||
|
||||
if (! $user->currentProject) {
|
||||
if ($user->allProjects()->count() > 0) {
|
||||
/** @var Project $firstProject */
|
||||
/** @var \App\Models\Project $firstProject */
|
||||
$firstProject = $user->allProjects()->first();
|
||||
$user->current_project_id = $firstProject->id;
|
||||
$user->save();
|
||||
|
@ -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,
|
||||
];
|
||||
}
|
||||
}
|
@ -22,8 +22,6 @@ public function toArray(Request $request): array
|
||||
'provider' => $this->provider,
|
||||
'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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -38,11 +38,8 @@ public function toArray(Request $request): array
|
||||
'progress_step' => $this->progress_step,
|
||||
'updates' => $this->updates,
|
||||
'last_update_check' => $this->last_update_check,
|
||||
'status_color' => $this->getStatusColor(),
|
||||
'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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,6 @@
|
||||
use App\SSH\Systemd\Systemd;
|
||||
use App\Support\Testing\SSHFake;
|
||||
use Carbon\Carbon;
|
||||
use Database\Factories\ServerFactory;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
@ -69,7 +68,7 @@
|
||||
*/
|
||||
class Server extends AbstractModel
|
||||
{
|
||||
/** @use HasFactory<ServerFactory> */
|
||||
/** @use HasFactory<\Database\Factories\ServerFactory> */
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
@ -571,13 +570,4 @@ public function download(string $path, string $disk = 'tmp'): void
|
||||
$path
|
||||
);
|
||||
}
|
||||
|
||||
public function getStatusColor(): string
|
||||
{
|
||||
if (isset(self::$statusColors[$this->status])) {
|
||||
return self::$statusColors[$this->status];
|
||||
}
|
||||
|
||||
return 'gray';
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,8 @@
|
||||
use App\Enums\UserRole;
|
||||
use App\Traits\HasTimezoneTimestamps;
|
||||
use Carbon\Carbon;
|
||||
use Database\Factories\UserFactory;
|
||||
use Filament\Models\Contracts\FilamentUser;
|
||||
use Filament\Panel;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
@ -42,11 +43,11 @@
|
||||
* @property Carbon $created_at
|
||||
* @property Carbon $updated_at
|
||||
*/
|
||||
class User extends Authenticatable
|
||||
class User extends Authenticatable implements FilamentUser
|
||||
{
|
||||
use HasApiTokens;
|
||||
|
||||
/** @use HasFactory<UserFactory> */
|
||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||
use HasFactory;
|
||||
|
||||
use HasTimezoneTimestamps;
|
||||
@ -69,7 +70,8 @@ class User extends Authenticatable
|
||||
'two_factor_secret',
|
||||
];
|
||||
|
||||
protected $appends = [];
|
||||
protected $appends = [
|
||||
];
|
||||
|
||||
/**
|
||||
* @return HasMany<Server, covariant $this>
|
||||
@ -202,4 +204,9 @@ public function allServers(): Builder
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public function canAccessPanel(Panel $panel): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Models\NotificationChannel;
|
||||
use App\Notifications\NotificationInterface;
|
||||
use App\Web\Pages\Settings\NotificationChannels\Index;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class Discord extends AbstractNotificationChannel
|
||||
@ -38,7 +39,7 @@ public function connect(): bool
|
||||
__('Congratulations! 🎉'),
|
||||
__("You've connected your Discord to :app", ['app' => config('app.name')])."\n".
|
||||
__('Manage your notification channels')."\n".
|
||||
'/settings/notification-channels',
|
||||
Index::getUrl()
|
||||
);
|
||||
|
||||
if (! $connect) {
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Models\NotificationChannel;
|
||||
use App\Notifications\NotificationInterface;
|
||||
use App\Web\Pages\Settings\NotificationChannels\Index;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class Slack extends AbstractNotificationChannel
|
||||
@ -38,7 +39,7 @@ public function connect(): bool
|
||||
__('Congratulations! 🎉'),
|
||||
__("You've connected your Slack to :app", ['app' => config('app.name')])."\n".
|
||||
__('Manage your notification channels')."\n".
|
||||
'/settings/notification-channels',
|
||||
Index::getUrl()
|
||||
);
|
||||
|
||||
if (! $connect) {
|
||||
|
@ -26,9 +26,9 @@ public function boot(): void
|
||||
ResourceCollection::withoutWrapping();
|
||||
|
||||
// facades
|
||||
$this->app->bind('ssh', fn (): SSH => new SSH);
|
||||
$this->app->bind('notifier', fn (): Notifier => new Notifier);
|
||||
$this->app->bind('ftp', fn (): FTP => new FTP);
|
||||
$this->app->bind('ssh', fn (): \App\Helpers\SSH => new SSH);
|
||||
$this->app->bind('notifier', fn (): \App\Helpers\Notifier => new Notifier);
|
||||
$this->app->bind('ftp', fn (): \App\Helpers\FTP => new FTP);
|
||||
|
||||
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
|
||||
}
|
||||
|
123
app/Providers/WebServiceProvider.php
Normal file
123
app/Providers/WebServiceProvider.php
Normal 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();
|
||||
}
|
||||
}
|
@ -3,5 +3,37 @@
|
||||
namespace App\SSH\Services\Webserver;
|
||||
|
||||
use App\SSH\Services\AbstractService;
|
||||
use Closure;
|
||||
|
||||
abstract class AbstractWebserver extends AbstractService implements Webserver {}
|
||||
abstract class AbstractWebserver extends AbstractService implements Webserver
|
||||
{
|
||||
public function creationRules(array $input): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
'required',
|
||||
function (string $attribute, mixed $value, Closure $fail): void {
|
||||
$webserverExists = $this->service->server->webserver();
|
||||
if ($webserverExists) {
|
||||
$fail('You already have a webserver service on the server.');
|
||||
}
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function deletionRules(): array
|
||||
{
|
||||
return [
|
||||
'service' => [
|
||||
function (string $attribute, mixed $value, Closure $fail): void {
|
||||
$hasSite = $this->service->server->sites()
|
||||
->exists();
|
||||
if ($hasSite) {
|
||||
$fail('Cannot uninstall webserver while you have websites using it.');
|
||||
}
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
195
app/SSH/Services/Webserver/Caddy.php
Executable file
195
app/SSH/Services/Webserver/Caddy.php
Executable file
@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
namespace App\SSH\Services\Webserver;
|
||||
|
||||
use App\Exceptions\SSHError;
|
||||
use App\Exceptions\SSLCreationException;
|
||||
use App\Models\Site;
|
||||
use App\Models\Ssl;
|
||||
use Throwable;
|
||||
|
||||
class Caddy extends AbstractWebserver
|
||||
{
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function install(): void
|
||||
{
|
||||
$this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.install-caddy'),
|
||||
'install-caddy'
|
||||
);
|
||||
|
||||
$this->service->server->ssh()->write(
|
||||
'/etc/caddy/Caddyfile',
|
||||
view('ssh.services.webserver.caddy.caddy'),
|
||||
'root'
|
||||
);
|
||||
|
||||
$this->service->server->ssh()->write(
|
||||
'/etc/systemd/system/caddy.service',
|
||||
view('ssh.services.webserver.caddy.caddy-systemd'),
|
||||
'root'
|
||||
);
|
||||
|
||||
$this->service->server->systemd()->reload();
|
||||
|
||||
$this->service->server->systemd()->restart('caddy');
|
||||
|
||||
$this->service->server->os()->cleanup();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function uninstall(): void
|
||||
{
|
||||
$this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.uninstall-caddy'),
|
||||
'uninstall-caddy'
|
||||
);
|
||||
$this->service->server->os()->cleanup();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function createVHost(Site $site): void
|
||||
{
|
||||
// We need to get the isolated user first, if the site is isolated
|
||||
// otherwise, use the default ssh user
|
||||
$ssh = $this->service->server->ssh($site->user);
|
||||
|
||||
$ssh->exec(
|
||||
view('ssh.services.webserver.caddy.create-path', [
|
||||
'path' => $site->path,
|
||||
]),
|
||||
'create-path',
|
||||
$site->id
|
||||
);
|
||||
|
||||
$this->service->server->ssh()->write(
|
||||
'/etc/caddy/sites-available/'.$site->domain,
|
||||
$this->generateVhost($site),
|
||||
'root'
|
||||
);
|
||||
|
||||
$this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.create-vhost', [
|
||||
'domain' => $site->domain,
|
||||
]),
|
||||
'create-vhost',
|
||||
$site->id
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function updateVHost(Site $site, ?string $vhost = null): void
|
||||
{
|
||||
$this->service->server->ssh()->write(
|
||||
'/etc/caddy/sites-available/'.$site->domain,
|
||||
$vhost ?? $this->generateVhost($site),
|
||||
'root'
|
||||
);
|
||||
|
||||
$this->service->server->systemd()->restart('caddy');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function getVHost(Site $site): string
|
||||
{
|
||||
return $this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.get-vhost', [
|
||||
'domain' => $site->domain,
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function deleteSite(Site $site): void
|
||||
{
|
||||
$this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.delete-site', [
|
||||
'domain' => $site->domain,
|
||||
'path' => $site->path,
|
||||
]),
|
||||
'delete-vhost',
|
||||
$site->id
|
||||
);
|
||||
$this->service->restart();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function changePHPVersion(Site $site, string $version): void
|
||||
{
|
||||
$this->service->server->ssh()->exec(
|
||||
view('ssh.services.webserver.caddy.change-php-version', [
|
||||
'domain' => $site->domain,
|
||||
'oldVersion' => $site->php_version,
|
||||
'newVersion' => $version,
|
||||
]),
|
||||
'change-php-version',
|
||||
$site->id
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function setupSSL(Ssl $ssl): void
|
||||
{
|
||||
if ($ssl->type == 'custom') {
|
||||
$ssl->certificate_path = '/etc/ssl/'.$ssl->id.'/cert.pem';
|
||||
$ssl->pk_path = '/etc/ssl/'.$ssl->id.'/privkey.pem';
|
||||
$ssl->save();
|
||||
$command = view('ssh.services.webserver.caddy.create-custom-ssl', [
|
||||
'path' => dirname($ssl->certificate_path),
|
||||
'certificate' => $ssl->certificate,
|
||||
'pk' => $ssl->pk,
|
||||
'certificatePath' => $ssl->certificate_path,
|
||||
'pkPath' => $ssl->pk_path,
|
||||
]);
|
||||
$result = $this->service->server->ssh()->setLog($ssl->log)->exec(
|
||||
$command,
|
||||
'create-ssl',
|
||||
$ssl->site_id
|
||||
);
|
||||
if (! $ssl->validateSetup($result)) {
|
||||
throw new SSLCreationException;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function removeSSL(Ssl $ssl): void
|
||||
{
|
||||
if ($ssl->certificate_path) {
|
||||
$this->service->server->ssh()->exec(
|
||||
'sudo rm -rf '.dirname($ssl->certificate_path),
|
||||
'remove-ssl',
|
||||
$ssl->site_id
|
||||
);
|
||||
}
|
||||
|
||||
$this->updateVHost($ssl->site);
|
||||
}
|
||||
|
||||
private function generateVhost(Site $site): string
|
||||
{
|
||||
$vhost = view('ssh.services.webserver.caddy.vhost', [
|
||||
'site' => $site,
|
||||
]);
|
||||
|
||||
return format_nginx_config($vhost);
|
||||
}
|
||||
}
|
@ -6,7 +6,6 @@
|
||||
use App\Exceptions\SSLCreationException;
|
||||
use App\Models\Site;
|
||||
use App\Models\Ssl;
|
||||
use Closure;
|
||||
use Throwable;
|
||||
|
||||
class Nginx extends AbstractWebserver
|
||||
@ -34,21 +33,6 @@ public function install(): void
|
||||
$this->service->server->os()->cleanup();
|
||||
}
|
||||
|
||||
public function deletionRules(): array
|
||||
{
|
||||
return [
|
||||
'service' => [
|
||||
function (string $attribute, mixed $value, Closure $fail): void {
|
||||
$hasSite = $this->service->server->sites()
|
||||
->exists();
|
||||
if ($hasSite) {
|
||||
$fail('Cannot uninstall webserver while you have websites using it.');
|
||||
}
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
|
@ -87,4 +87,16 @@ public function disable(string $unit): string
|
||||
|
||||
return $this->server->ssh()->exec($command, sprintf('disable-%s', $unit));
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SSHError
|
||||
*/
|
||||
public function reload(): string
|
||||
{
|
||||
$command = <<<'EOD'
|
||||
sudo systemctl daemon-reload
|
||||
EOD;
|
||||
|
||||
return $this->server->ssh()->exec($command, 'reload-systemctl');
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
<?php
|
||||
|
||||
use App\Models\User;
|
||||
use App\Exceptions\SSHError;
|
||||
use Filament\Notifications\Actions\Action;
|
||||
use Filament\Notifications\Notification;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
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
|
||||
{
|
||||
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')))) {
|
||||
Artisan::call('ssh-key:generate --force');
|
||||
}
|
||||
@ -68,13 +67,46 @@ function get_public_key_content(): string
|
||||
return '';
|
||||
}
|
||||
|
||||
$content = str($content)
|
||||
return str($content)
|
||||
->replace("\n", '')
|
||||
->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";
|
||||
}
|
||||
|
||||
function user(): User
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
26
app/Web/Components/Link.php
Normal file
26
app/Web/Components/Link.php
Normal 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,
|
||||
]);
|
||||
}
|
||||
}
|
59
app/Web/Components/Page.php
Normal file
59
app/Web/Components/Page.php
Normal 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;
|
||||
}
|
||||
}
|
11
app/Web/Contracts/HasSecondSubNav.php
Normal file
11
app/Web/Contracts/HasSecondSubNav.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Web\Contracts;
|
||||
|
||||
interface HasSecondSubNav
|
||||
{
|
||||
/**
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function getSecondSubNavigation(): array;
|
||||
}
|
72
app/Web/Fields/AlertField.php
Normal file
72
app/Web/Fields/AlertField.php
Normal 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;
|
||||
}
|
||||
}
|
27
app/Web/Fields/CodeEditorField.php
Normal file
27
app/Web/Fields/CodeEditorField.php
Normal 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() ?? ''),
|
||||
];
|
||||
}
|
||||
}
|
10
app/Web/Fields/ProviderField.php
Normal file
10
app/Web/Fields/ProviderField.php
Normal 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
156
app/Web/Pages/Login.php
Normal 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
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
83
app/Web/Pages/Scripts/Executions.php
Normal file
83
app/Web/Pages/Scripts/Executions.php
Normal 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');
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
78
app/Web/Pages/Scripts/Index.php
Normal file
78
app/Web/Pages/Scripts/Index.php
Normal 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');
|
||||
});
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
87
app/Web/Pages/Scripts/Widgets/ScriptExecutionsList.php
Normal file
87
app/Web/Pages/Scripts/Widgets/ScriptExecutionsList.php
Normal 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'),
|
||||
]);
|
||||
}
|
||||
}
|
100
app/Web/Pages/Scripts/Widgets/ScriptsList.php
Normal file
100
app/Web/Pages/Scripts/Widgets/ScriptsList.php
Normal 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();
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
46
app/Web/Pages/Servers/Console/Index.php
Normal file
46
app/Web/Pages/Servers/Console/Index.php
Normal 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(),
|
||||
];
|
||||
}
|
||||
}
|
19
app/Web/Pages/Servers/Console/Widgets/Console.php
Normal file
19
app/Web/Pages/Servers/Console/Widgets/Console.php
Normal 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,
|
||||
]);
|
||||
}
|
||||
}
|
31
app/Web/Pages/Servers/Console/Widgets/StopCommand.php
Normal file
31
app/Web/Pages/Servers/Console/Widgets/StopCommand.php
Normal 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;
|
||||
}
|
||||
}
|
87
app/Web/Pages/Servers/CronJobs/Index.php
Normal file
87
app/Web/Pages/Servers/CronJobs/Index.php
Normal 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();
|
||||
});
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
116
app/Web/Pages/Servers/CronJobs/Widgets/CronJobsList.php
Normal file
116
app/Web/Pages/Servers/CronJobs/Widgets/CronJobsList.php
Normal 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');
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
99
app/Web/Pages/Servers/Databases/Backups.php
Normal file
99
app/Web/Pages/Servers/Databases/Backups.php
Normal 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]],
|
||||
];
|
||||
}
|
||||
}
|
163
app/Web/Pages/Servers/Databases/Index.php
Normal file
163
app/Web/Pages/Servers/Databases/Index.php
Normal 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]],
|
||||
];
|
||||
}
|
||||
}
|
50
app/Web/Pages/Servers/Databases/Traits/Navigation.php
Normal file
50
app/Web/Pages/Servers/Databases/Traits/Navigation.php
Normal 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),
|
||||
];
|
||||
}
|
||||
}
|
96
app/Web/Pages/Servers/Databases/Users.php
Normal file
96
app/Web/Pages/Servers/Databases/Users.php
Normal 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]],
|
||||
];
|
||||
}
|
||||
}
|
136
app/Web/Pages/Servers/Databases/Widgets/BackupFilesList.php
Normal file
136
app/Web/Pages/Servers/Databases/Widgets/BackupFilesList.php
Normal 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');
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
160
app/Web/Pages/Servers/Databases/Widgets/BackupsList.php
Normal file
160
app/Web/Pages/Servers/Databases/Widgets/BackupsList.php
Normal 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');
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
145
app/Web/Pages/Servers/Databases/Widgets/DatabaseUsersList.php
Normal file
145
app/Web/Pages/Servers/Databases/Widgets/DatabaseUsersList.php
Normal 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');
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
81
app/Web/Pages/Servers/Databases/Widgets/DatabasesList.php
Normal file
81
app/Web/Pages/Servers/Databases/Widgets/DatabasesList.php
Normal 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');
|
||||
});
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
29
app/Web/Pages/Servers/FileManager/Index.php
Normal file
29
app/Web/Pages/Servers/FileManager/Index.php
Normal 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]],
|
||||
];
|
||||
}
|
||||
}
|
379
app/Web/Pages/Servers/FileManager/Widgets/FilesList.php
Normal file
379
app/Web/Pages/Servers/FileManager/Widgets/FilesList.php
Normal 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();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
133
app/Web/Pages/Servers/Firewall/Index.php
Normal file
133
app/Web/Pages/Servers/Firewall/Index.php
Normal 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();
|
||||
});
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
130
app/Web/Pages/Servers/Firewall/Widgets/RulesList.php
Normal file
130
app/Web/Pages/Servers/Firewall/Widgets/RulesList.php
Normal 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');
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
251
app/Web/Pages/Servers/Index.php
Normal file
251
app/Web/Pages/Servers/Index.php
Normal 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]));
|
||||
});
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
34
app/Web/Pages/Servers/Logs/Index.php
Normal file
34
app/Web/Pages/Servers/Logs/Index.php
Normal 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 [];
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user