Compare commits

..

84 Commits
main ... 3.x

Author SHA1 Message Date
1da1d5d413 Update app.php 2025-06-27 09:32:25 +02:00
f3df6b8673 revert disable 2fa on demo 2025-06-27 08:39:43 +02:00
f532b56abb disable 2fa on demo 2025-06-27 08:39:18 +02:00
194143d7ef Add two factor (#632) 2025-06-27 01:07:33 +02:00
73c836bfe7 add optional force https config 2025-06-26 15:13:00 +02:00
ad5af0cd9e Update SECURITY.md 2025-06-25 23:49:35 +02:00
15d8cb1705 add postgresql 17 (#630) 2025-06-25 22:01:39 +02:00
f4414a931e add custom path to site env (#629) 2025-06-25 21:50:07 +02:00
a593525939 provision lighter servers (#628) 2025-06-25 21:24:45 +02:00
a2841f673b fix DO api connect (#623) 2025-06-23 17:12:47 +02:00
231e90076f fix resource usage chart 2025-06-22 23:08:07 +02:00
dc7fa6b55c Add app command/search (#622) 2025-06-22 22:58:05 +02:00
5689e751af Migrate queues to Horizon (#621) 2025-06-22 11:07:23 +02:00
e59448d30a fix demo 2025-06-21 23:18:24 +02:00
346bd03f4f Merge remote-tracking branch 'origin/3.x' into 3.x 2025-06-21 22:32:56 +02:00
085504605b fix demo 2025-06-21 22:32:45 +02:00
d1a7eb24a7 Update README.md 2025-06-21 22:30:29 +02:00
c10a3ee4bb Update README.md 2025-06-21 22:29:27 +02:00
dd14e69239 Add auto refresh dropdown (#620) 2025-06-21 22:17:49 +02:00
736e27fa4e fix auto upgrade script 2025-06-21 20:56:33 +02:00
961d2021bd auto upgrade script 2025-06-21 19:46:30 +02:00
e52500ad47 fix update.sh 2025-06-21 16:09:48 +02:00
3732d690db fix Dockerfile 2025-06-21 14:47:35 +02:00
a123145d84 version bump 2025-06-21 14:40:58 +02:00
ada56065cb fix updater 2025-06-21 14:38:11 +02:00
a3db7cbc85 fix installer 2025-06-21 12:43:46 +02:00
d2eb2c4e4a fix tests (#619)
* fix tests

* fix tests
2025-06-21 10:21:35 +02:00
7bfa9ef91d use redis for queues, sessions and cache (#618) 2025-06-21 09:48:07 +02:00
3196c0d954 fix installer 2025-06-20 13:32:50 +02:00
45521d2616 fix githook deletion 2025-06-20 00:13:54 +02:00
7a94e28da2 fix optimizer 2025-06-20 00:02:22 +02:00
cf9bb35615 fix phpstan 2025-06-19 21:29:34 +02:00
9a3578f3ac fix docker ssh issue by downgrading phpseclib 2025-06-19 21:25:25 +02:00
632a56bf4d fix importer on docker 2025-06-19 19:45:09 +02:00
f97fffe654 fix importer
fix plugins on docker
2025-06-19 16:41:46 +02:00
2081bdd46e add log viewer 2025-06-19 15:32:52 +02:00
48c4d53d31 optimize docker 2025-06-19 15:07:15 +02:00
69939f8aad fix docker 2025-06-19 14:49:01 +02:00
798542673f fix docker 2025-06-19 14:23:33 +02:00
49c29de962 fix command typo 2025-06-19 14:12:27 +02:00
342a3aa4c6 Plugins (#616)
* wip

* fix plugin uninstall

* marketplace
2025-06-19 14:07:15 +02:00
131b828807 Plugins base (#613)
* wip

* wip

* cleanup

* notification channels

* phpstan

* services

* remove server types

* refactoring

* refactoring
2025-06-14 14:35:18 +02:00
adc0653d15 api-docs fix 2025-06-10 12:23:42 +02:00
c6ed3f029d upgrade installer to php 8.4 2025-06-10 00:26:09 +02:00
eceacffb0d docker php upgrade 2025-06-10 00:16:51 +02:00
09a9735962 reverse proxy basics (#609) 2025-06-10 00:14:05 +02:00
4e6491a080 Export and Import vito settings (#606)
* Export and Import vito settings

* fix tests
2025-06-05 17:01:22 +02:00
8e8859b305 #591 - fix tests 2025-06-04 21:40:26 +02:00
56baba74d7 #591 - fix tests 2025-06-04 21:36:01 +02:00
ab68964d43 #591 - load balancer 2025-06-04 21:30:47 +02:00
0bd390f27c #591 - force npm 2025-06-04 19:05:34 +02:00
f8f8d57fe2 #591 - tests 2025-06-04 19:04:02 +02:00
35894003f5 #591 - scripts 2025-06-04 15:38:07 +02:00
c3f69f3247 #591 - sites 2025-06-04 08:08:20 +02:00
efacadba10 #591 - node 2025-06-01 12:02:25 +02:00
84476db764 #591 - php 2025-06-01 11:31:09 +02:00
41388dafbf #591 - server-settings 2025-05-31 20:33:36 +02:00
0b7dd1732b #591 - console 2025-05-31 12:39:46 +02:00
c09c7a63fa #591 - monitoring 2025-05-31 00:18:04 +02:00
857319025f #591 - server-logs 2025-05-30 13:52:39 +02:00
104cd2fce8 #591 - services 2025-05-30 11:02:07 +02:00
1b9f826bcb #591 - fix server-ssh-keys 2025-05-29 21:24:47 +02:00
0fce4dba9c #591 - server-ssh-keys 2025-05-29 21:20:33 +02:00
8b6f65db97 #591 - workers 2025-05-29 20:05:13 +02:00
984c1f3a8e Add Caddy Server Support Alongside Nginx (#600)
* added enum

* add config for caddy

* add svg icon

* add caddy service class

* wip

* install caddy

* create base Caddyfile with common snippets

* Create a systemd service to run Caddy in the background.

* create uninstall file

* wip

* create path

* create vhost

* get vhost

* delete site

* add php version change file

* add custom ssl

* create redirect file

* add vhost for caddy site & load balancer

* update svg

* fix caddy icon

* fix style

* add systemctl reload method

* Reload systemd after modifying the Caddy service file.

* add caddy

* added tests

* format with pint

* prevent multiple web server installations

* added error log & access log

(cherry picked from commit 2318e1b1df)
2025-05-29 11:39:00 +02:00
61506ff70e #591 - cron jobs 2025-05-28 00:19:25 +02:00
6032bd1098 #591 - firewall 2025-05-27 00:30:29 +02:00
f5fdbae4ac #591 - sites [wip] 2025-05-25 22:17:19 +02:00
ff11fb44e0 #591 - backups 2025-05-23 18:27:24 +02:00
a5ce0d33b3 Fix mysqldump backup error
This reverts commit 564b97e2aa.
2025-05-21 21:05:16 +02:00
a40c2828c2 #591 - backups 2025-05-21 21:05:13 +02:00
fe3317692b #591 - database-users 2025-05-21 17:21:10 +02:00
2850c1fa59 #591 - databases 2025-05-20 17:35:20 +02:00
eb86204069 #591 - api keys 2025-05-20 08:15:10 +02:00
f7ac3c32f0 #591 - fix typo 2025-05-19 22:40:42 +02:00
61faaabb85 #591 - tags 2025-05-19 22:22:21 +02:00
04d52f6742 #591 - ssh-keys 2025-05-19 20:55:32 +02:00
cdc012c270 #591 - notification-channels 2025-05-19 20:05:38 +02:00
563b9c5909 #591 - storage-providers 2025-05-19 00:13:17 +02:00
5a00d35eba #591 - source-controls 2025-05-18 23:46:28 +02:00
1ed5d7362b #591 - server-providers 2025-05-18 21:12:06 +02:00
8b4d156afa #591 - profile, users and projects 2025-05-18 18:25:27 +02:00
edd4ba1bc2 #591 - app search bar UI 2025-05-15 22:38:24 +03:00
b8ba83949b projects 2025-05-15 14:23:26 +03:00
837 changed files with 61805 additions and 31763 deletions

View File

@ -9,7 +9,7 @@ insert_final_newline = true
trim_trailing_whitespace = true
ij_any_block_comment_at_first_column = false
[*.php]
[{*.php,composer.json,composer.lock}]
indent_size = 4
[*.md]

View File

@ -15,3 +15,6 @@ MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="noreply@${APP_NAME}"
MAIL_FROM_NAME="${APP_NAME}"
REDIS_HOST=redis
REDIS_PORT=6379

View File

@ -4,9 +4,11 @@ on:
push:
branches:
- 2.x
- 3.x
pull_request:
branches:
- 2.x
- 3.x
jobs:
tests:
@ -15,7 +17,7 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [ 8.2 ]
php: [ 8.4 ]
steps:
- uses: actions/checkout@v4

View File

@ -6,6 +6,7 @@ on:
- main
- 1.x
- 2.x
- 3.x
pull_request:
jobs:
@ -15,7 +16,7 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [ 8.2 ]
php: [ 8.4 ]
node-version: [ "20.x" ]
steps:
@ -48,7 +49,7 @@ jobs:
node-version: "20.x"
- name: Install NPM Dependencies
run: npm install
run: npm install --force
- name: Run lint
run: npm run lint

View File

@ -6,6 +6,7 @@ on:
- main
- 1.x
- 2.x
- 3.x
pull_request:
jobs:
@ -15,7 +16,8 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [ 8.2 ]
php: [ 8.4 ]
node-version: [ "22.x" ]
steps:
- uses: actions/checkout@v4
@ -44,5 +46,19 @@ jobs:
- name: Set up the .env file
run: touch .env
- name: Generate Application Key
run: php artisan key:generate
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
- name: Install NPM Dependencies
run: npm install --force
- name: Build assets
run: npm run build
- name: Run test suite
run: php artisan test

1
.gitignore vendored
View File

@ -22,3 +22,4 @@ yarn-error.log
/.idea
/.vscode
laradumps.yaml
/public/build

View File

@ -1,153 +1,131 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: cron-jobs
name: Endpoints
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
uri: 'api/servers/{server_id}/agent/{id}'
metadata:
groupName: cron-jobs
groupName: Endpoints
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new cron job.'
title: ''
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
id:
name: id
description: 'The ID of the agent.'
required: true
example: 32
type: integer
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
id: architecto
queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
load:
name: load
description: ''
required: true
example: consequatur
type: string
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
memory_total:
name: memory_total
description: ''
required: true
example: vito
type: string
enumValues:
- root
- vito
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
memory_used:
name: memory_used
description: ''
required: true
example: '* * * * *'
type: string
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: consequatur
user: vito
frequency: '* * * * *'
load: 4326.41688
memory_total: 4326.41688
memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
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"}'
headers: []
description: ''
custom: []
responses: []
responseFields: []
auth: []
controller: null
@ -156,55 +134,27 @@ endpoints:
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
0: GET
2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata:
groupName: cron-jobs
groupName: Endpoints
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
title: ''
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
cronJob_id: 17
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -212,79 +162,18 @@ endpoints:
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete cron job.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
cronJob_id: 17
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
status: 404
content: |-
{
"message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: []
responseFields: []
auth: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: databases
name: cron-jobs
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all databases.'
description: 'Get all cron jobs.'
authenticated: false
custom: []
headers:
@ -34,7 +34,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -42,7 +42,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -51,7 +51,7 @@ 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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -64,14 +64,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new database.'
description: 'Create a new cron job.'
authenticated: false
custom: []
headers:
@ -92,7 +92,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -100,49 +100,51 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
command:
name: command
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
charset:
name: charset
user:
name: user
description: ''
required: true
example: consequatur
example: vito
type: string
enumValues: []
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
collation:
name: collation
description: ''
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: consequatur
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
charset: consequatur
collation: consequatur
command: architecto
user: vito
frequency: '* * * * *'
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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -155,14 +157,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database by ID.'
description: 'Get a cron job by ID.'
authenticated: false
custom: []
headers:
@ -183,17 +185,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the database.'
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -201,8 +203,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
id: 17
server_id: 6
cronJob_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -211,7 +213,7 @@ 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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -224,14 +226,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database.'
description: 'Delete cron job.'
authenticated: false
custom: []
headers:
@ -252,17 +254,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
database_id:
name: database_id
description: 'The ID of the database.'
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -270,8 +272,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
database_id: 17
server_id: 6
cronJob_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: database-users
name: databases
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all database users.'
description: 'Get all databases.'
authenticated: false
custom: []
headers:
@ -34,7 +34,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -42,7 +42,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -51,7 +51,7 @@ 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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -64,14 +64,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new database user.'
description: 'Create a new database.'
authenticated: false
custom: []
headers:
@ -92,7 +92,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -100,49 +100,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
username:
name: username
name:
name: name
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
charset:
name: charset
description: ''
required: true
example: 'O[2UZ5ij-e/dl4m{o,'
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
host:
name: host
description: 'Host, if it is a remote user.'
collation:
name: collation
description: ''
required: true
example: '%'
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
username: consequatur
password: 'O[2UZ5ij-e/dl4m{o,'
host: '%'
name: architecto
charset: architecto
collation: architecto
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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -155,14 +155,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database user by ID.'
description: 'Get a database by ID.'
authenticated: false
custom: []
headers:
@ -183,17 +183,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
id:
name: id
description: 'The ID of the database.'
required: true
example: 17
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -201,8 +201,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
server_id: 6
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -211,87 +211,7 @@ 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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: consequatur
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":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -304,14 +224,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
description: 'Delete database.'
authenticated: false
custom: []
headers:
@ -332,17 +252,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
database_id:
name: database_id
description: 'The ID of the database.'
required: true
example: 17
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -350,8 +270,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
server_id: 6
database_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: firewall-rules
name: database-users
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all firewall rules.'
description: 'Get all database users.'
authenticated: false
custom: []
headers:
@ -34,7 +34,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -42,7 +42,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -51,7 +51,7 @@ 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":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -64,14 +64,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
description: 'Create a new database user.'
authenticated: false
custom: []
headers:
@ -92,7 +92,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -100,225 +100,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
username:
name: username
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
password:
name: password
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: consequatur
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
host:
name: host
description: 'Host, if it is a remote user.'
required: true
example: '0'
example: '%'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
type: allow
protocol: tcp
port: consequatur
source: consequatur
mask: '0'
username: architecto
password: '|]|{+-'
host: '%'
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 94
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
type: allow
protocol: tcp
port: consequatur
source: consequatur
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":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -331,14 +155,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
description: 'Get a database user by ID.'
authenticated: false
custom: []
headers:
@ -359,17 +183,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 94
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
@ -377,8 +201,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -387,7 +211,87 @@ 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":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -400,14 +304,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
description: 'Delete database user.'
authenticated: false
custom: []
headers:
@ -428,17 +332,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 94
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
@ -446,8 +350,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,26 +1,48 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: general
name: firewall-rules
description: ''
endpoints:
-
httpMethods:
- GET
uri: api/health
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: general
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: health-check
description: ''
title: list
description: 'Get all firewall rules.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -29,14 +51,414 @@ endpoints:
responses:
-
status: 200
content: '{"success":true,"version":"2.5.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
content: '{"data":[{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":23,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: allow
protocol: tcp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: deny
protocol: udp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: projects
name: general
description: ''
endpoints:
-
httpMethods:
- GET
uri: api/projects
uri: api/health
metadata:
groupName: projects
groupName: general
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all projects.'
title: health-check
description: ''
authenticated: false
custom: []
headers:
@ -29,208 +29,14 @@ 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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
content: '{"success":true,"version":"2.5.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: []
responseFields: []
auth: []

View File

@ -1,59 +1,26 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: redirects
name: projects
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
uri: api/projects
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: index
description: 'Get all redirects.'
title: list
description: 'Get all projects.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -62,7 +29,7 @@ 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":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -75,22 +42,69 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
uri: api/projects
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new redirect.'
description: 'Create a new project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
@ -99,76 +113,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
from:
name: from
description: ''
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
to:
name: to
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 302
type: string
enumValues:
- 301
- 302
- 307
- 308
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
from: consequatur
to: consequatur
mode: 302
name: architecto
fileParameters: []
responses:
-
status: 200
content: null
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -181,14 +194,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
uri: 'api/projects/{project_id}'
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete a redirect.'
description: 'Delete project.'
authenticated: false
custom: []
headers:
@ -205,41 +218,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 9
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
redirect_id: 9
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,66 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: servers
name: redirects
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all servers in a project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers'
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata:
groupName: servers
groupName: redirects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new server.'
description: 'Create a new redirect.'
authenticated: false
custom: []
headers:
@ -77,338 +30,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
site_id: 14
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
from:
name: from
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
to:
name: to
description: ''
required: true
example: hetzner
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: none
type: string
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mariadb104
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.0'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
- 301
- 302
- 307
- 308
exampleWasSpecified: false
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'
from: architecto
to: architecto
mode: 307
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a server by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
@ -422,14 +112,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata:
groupName: servers
groupName: redirects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
description: 'Delete a redirect.'
authenticated: false
custom: []
headers:
@ -450,7 +140,27 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer
enumValues: []
exampleWasSpecified: false
@ -458,7 +168,9 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
site_id: 14
redirect_id: 2
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: server-providers
name: servers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers'
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
description: 'Get all servers in a project.'
authenticated: false
custom: []
headers:
@ -40,7 +40,7 @@ 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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -53,14 +53,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/server-providers'
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
description: 'Create a new server.'
authenticated: false
custom: []
headers:
@ -84,9 +84,64 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The server provider type'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
required: true
example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -94,55 +149,94 @@ endpoints:
custom: []
name:
name: name
description: 'The name of the server provider.'
description: 'The name of the server.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
os:
name: os
description: 'The os of the server'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
webserver:
name: webserver
description: 'Web server'
required: true
example: consequatur
example: none
type: string
enumValues: []
enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
database:
name: database
description: Database
required: true
example: consequatur
example: mysql80
type: string
enumValues: []
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: consequatur
name: consequatur
token: consequatur
key: consequatur
secret: consequatur
provider: architecto
server_provider: linode
region: architecto
plan: architecto
ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -155,14 +249,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
description: 'Get a server by ID.'
authenticated: false
custom: []
headers:
@ -179,11 +273,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
id:
name: id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -191,7 +285,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -200,7 +294,7 @@ 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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -212,15 +306,15 @@ endpoints:
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: []
headers:
@ -237,11 +331,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -249,89 +343,123 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: ssh-keys
name: server-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all ssh keys.'
description: ''
authenticated: false
custom: []
headers:
@ -30,19 +30,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -51,7 +40,7 @@ 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":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -64,14 +53,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Deploy ssh key to server.'
description: ''
authenticated: false
custom: []
headers:
@ -88,27 +77,16 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -116,33 +94,195 @@ endpoints:
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
description: 'The name of the server provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
token:
name: token
description: 'The token if provider requires api token'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: consequatur
name: consequatur
public_key: consequatur
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
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":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -155,14 +295,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete ssh key from server.'
description: ''
authenticated: false
custom: []
headers:
@ -179,21 +319,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 1
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
@ -201,8 +331,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
sshKey_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: services
name: ssh-keys
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services'
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all services.'
description: 'Get all ssh keys.'
authenticated: false
custom: []
headers:
@ -34,7 +34,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -42,7 +42,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -51,7 +51,7 @@ 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":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -63,15 +63,15 @@ endpoints:
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a service by ID.'
title: create
description: 'Deploy ssh key to server.'
authenticated: false
custom: []
headers:
@ -92,17 +92,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 184
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -110,362 +100,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
id: 184
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: architecto
name: architecto
public_key: architecto
fileParameters: []
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}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: start
description: 'Start service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -478,14 +155,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
description: 'Delete ssh key from server.'
authenticated: false
custom: []
headers:
@ -506,17 +183,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 184
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -524,8 +201,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
server_id: 6
sshKey_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: storage-providers
name: source-controls
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -40,7 +40,7 @@ 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":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -53,9 +53,9 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -84,11 +84,14 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The provider'
required: true
example: consequatur
example: gitlab
type: string
enumValues: []
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
@ -96,7 +99,7 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -106,43 +109,54 @@ endpoints:
name: token
description: 'The token if provider requires api token'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: consequatur
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: consequatur
name: consequatur
token: consequatur
key: consequatur
secret: consequatur
provider: gitlab
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
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":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -155,9 +169,9 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -179,11 +193,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -191,7 +205,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -200,7 +214,7 @@ 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":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -213,9 +227,9 @@ endpoints:
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -237,11 +251,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -249,7 +263,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -257,7 +271,47 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
@ -267,7 +321,7 @@ endpoints:
name: global
description: 'Accessible in all projects'
required: true
example: true
example: false
type: string
enumValues:
- true
@ -276,13 +330,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
global: true
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
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":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -295,9 +353,9 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -319,11 +377,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -331,7 +389,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -0,0 +1,352 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: storage-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"harum","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"commodi","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"et","provider":"dropbox","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: true
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

View File

@ -1,151 +1,129 @@
name: cron-jobs
name: Endpoints
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
uri: 'api/servers/{server_id}/agent/{id}'
metadata:
groupName: cron-jobs
groupName: Endpoints
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new cron job.'
title: ''
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
id:
name: id
description: 'The ID of the agent.'
required: true
example: 32
type: integer
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
id: architecto
queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
load:
name: load
description: ''
required: true
example: consequatur
type: string
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
memory_total:
name: memory_total
description: ''
required: true
example: vito
type: string
enumValues:
- root
- vito
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
memory_used:
name: memory_used
description: ''
required: true
example: '* * * * *'
type: string
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: consequatur
user: vito
frequency: '* * * * *'
load: 4326.41688
memory_total: 4326.41688
memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
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"}'
headers: []
description: ''
custom: []
responses: []
responseFields: []
auth: []
controller: null
@ -154,55 +132,27 @@ endpoints:
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
0: GET
2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata:
groupName: cron-jobs
groupName: Endpoints
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
title: ''
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
cronJob_id: 17
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -210,79 +160,18 @@ endpoints:
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete cron job.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
cronJob_id: 17
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
status: 404
content: |-
{
"message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: []
responseFields: []
auth: []

View File

@ -1,17 +1,17 @@
name: databases
name: cron-jobs
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all databases.'
description: 'Get all cron jobs.'
authenticated: false
custom: []
headers:
@ -32,7 +32,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -40,7 +40,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -49,7 +49,7 @@ 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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -62,14 +62,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new database.'
description: 'Create a new cron job.'
authenticated: false
custom: []
headers:
@ -90,7 +90,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -98,49 +98,51 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
command:
name: command
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
charset:
name: charset
user:
name: user
description: ''
required: true
example: consequatur
example: vito
type: string
enumValues: []
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
collation:
name: collation
description: ''
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: consequatur
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
charset: consequatur
collation: consequatur
command: architecto
user: vito
frequency: '* * * * *'
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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -153,14 +155,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database by ID.'
description: 'Get a cron job by ID.'
authenticated: false
custom: []
headers:
@ -181,17 +183,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the database.'
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -199,8 +201,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
id: 17
server_id: 6
cronJob_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -209,7 +211,7 @@ 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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -222,14 +224,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: databases
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database.'
description: 'Delete cron job.'
authenticated: false
custom: []
headers:
@ -250,17 +252,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
database_id:
name: database_id
description: 'The ID of the database.'
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -268,8 +270,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
database_id: 17
server_id: 6
cronJob_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,17 +1,17 @@
name: database-users
name: databases
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all database users.'
description: 'Get all databases.'
authenticated: false
custom: []
headers:
@ -32,7 +32,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -40,7 +40,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -49,7 +49,7 @@ 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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -62,14 +62,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new database user.'
description: 'Create a new database.'
authenticated: false
custom: []
headers:
@ -90,7 +90,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -98,49 +98,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
username:
name: username
name:
name: name
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
charset:
name: charset
description: ''
required: true
example: 'O[2UZ5ij-e/dl4m{o,'
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
host:
name: host
description: 'Host, if it is a remote user.'
collation:
name: collation
description: ''
required: true
example: '%'
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
username: consequatur
password: 'O[2UZ5ij-e/dl4m{o,'
host: '%'
name: architecto
charset: architecto
collation: architecto
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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -153,14 +153,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database user by ID.'
description: 'Get a database by ID.'
authenticated: false
custom: []
headers:
@ -181,17 +181,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
id:
name: id
description: 'The ID of the database.'
required: true
example: 17
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -199,8 +199,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
server_id: 6
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -209,87 +209,7 @@ 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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: consequatur
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":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -302,14 +222,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata:
groupName: database-users
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
description: 'Delete database.'
authenticated: false
custom: []
headers:
@ -330,17 +250,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
database_id:
name: database_id
description: 'The ID of the database.'
required: true
example: 17
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -348,8 +268,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
databaseUser_id: 17
server_id: 6
database_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,17 +1,17 @@
name: firewall-rules
name: database-users
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all firewall rules.'
description: 'Get all database users.'
authenticated: false
custom: []
headers:
@ -32,7 +32,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -40,7 +40,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -49,7 +49,7 @@ 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":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -62,14 +62,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
description: 'Create a new database user.'
authenticated: false
custom: []
headers:
@ -90,7 +90,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -98,225 +98,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
username:
name: username
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
password:
name: password
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: consequatur
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
host:
name: host
description: 'Host, if it is a remote user.'
required: true
example: '0'
example: '%'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
type: allow
protocol: tcp
port: consequatur
source: consequatur
mask: '0'
username: architecto
password: '|]|{+-'
host: '%'
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 94
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
type: allow
protocol: tcp
port: consequatur
source: consequatur
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":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -329,14 +153,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
description: 'Get a database user by ID.'
authenticated: false
custom: []
headers:
@ -357,17 +181,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 94
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
@ -375,8 +199,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -385,7 +209,87 @@ 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":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -398,14 +302,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: firewall-rules
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
description: 'Delete database user.'
authenticated: false
custom: []
headers:
@ -426,17 +330,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 94
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
@ -444,8 +348,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
firewallRule_id: 94
server_id: 6
databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,24 +1,46 @@
name: general
name: firewall-rules
description: ''
endpoints:
-
httpMethods:
- GET
uri: api/health
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: general
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: health-check
description: ''
title: list
description: 'Get all firewall rules.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -27,14 +49,414 @@ endpoints:
responses:
-
status: 200
content: '{"success":true,"version":"2.5.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
content: '{"data":[{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":23,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: allow
protocol: tcp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: deny
protocol: udp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []

View File

@ -1,17 +1,17 @@
name: projects
name: general
description: ''
endpoints:
-
httpMethods:
- GET
uri: api/projects
uri: api/health
metadata:
groupName: projects
groupName: general
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all projects.'
title: health-check
description: ''
authenticated: false
custom: []
headers:
@ -27,208 +27,14 @@ 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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
content: '{"success":true,"version":"2.5.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: []
responseFields: []
auth: []

View File

@ -1,57 +1,24 @@
name: redirects
name: projects
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
uri: api/projects
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: index
description: 'Get all redirects.'
title: list
description: 'Get all projects.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -60,7 +27,7 @@ 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":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -73,22 +40,69 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
uri: api/projects
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new redirect.'
description: 'Create a new project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
@ -97,76 +111,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 17
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
from:
name: from
description: ''
name:
name: name
description: 'The name of the project.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
to:
name: to
description: ''
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 302
type: string
enumValues:
- 301
- 302
- 307
- 308
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
from: consequatur
to: consequatur
mode: 302
name: architecto
fileParameters: []
responses:
-
status: 200
content: null
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -179,14 +192,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
uri: 'api/projects/{project_id}'
metadata:
groupName: redirects
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete a redirect.'
description: 'Delete project.'
authenticated: false
custom: []
headers:
@ -203,41 +216,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 17
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 9
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
site_id: 17
redirect_id: 9
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,64 +1,17 @@
name: servers
name: redirects
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all servers in a project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers'
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata:
groupName: servers
groupName: redirects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new server.'
description: 'Create a new redirect.'
authenticated: false
custom: []
headers:
@ -75,338 +28,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
site_id: 14
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
from:
name: from
description: ''
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
to:
name: to
description: ''
required: true
example: hetzner
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: none
type: string
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mariadb104
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.0'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
- 301
- 302
- 307
- 308
exampleWasSpecified: false
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'
from: architecto
to: architecto
mode: 307
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a server by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
@ -420,14 +110,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata:
groupName: servers
groupName: redirects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
description: 'Delete a redirect.'
authenticated: false
custom: []
headers:
@ -448,7 +138,27 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer
enumValues: []
exampleWasSpecified: false
@ -456,7 +166,9 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
site_id: 14
redirect_id: 2
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,17 +1,17 @@
name: server-providers
name: servers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers'
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
description: 'Get all servers in a project.'
authenticated: false
custom: []
headers:
@ -38,7 +38,7 @@ 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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -51,14 +51,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/server-providers'
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
description: 'Create a new server.'
authenticated: false
custom: []
headers:
@ -82,9 +82,64 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The server provider type'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
required: true
example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -92,55 +147,94 @@ endpoints:
custom: []
name:
name: name
description: 'The name of the server provider.'
description: 'The name of the server.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
os:
name: os
description: 'The os of the server'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
webserver:
name: webserver
description: 'Web server'
required: true
example: consequatur
example: none
type: string
enumValues: []
enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
database:
name: database
description: Database
required: true
example: consequatur
example: mysql80
type: string
enumValues: []
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: consequatur
name: consequatur
token: consequatur
key: consequatur
secret: consequatur
provider: architecto
server_provider: linode
region: architecto
plan: architecto
ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -153,14 +247,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
description: 'Get a server by ID.'
authenticated: false
custom: []
headers:
@ -177,11 +271,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
id:
name: id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -189,7 +283,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -198,7 +292,7 @@ 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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","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,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -210,15 +304,15 @@ endpoints:
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: server-providers
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: []
headers:
@ -235,11 +329,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 1
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -247,89 +341,123 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: consequatur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
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"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,17 +1,17 @@
name: ssh-keys
name: server-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all ssh keys.'
description: ''
authenticated: false
custom: []
headers:
@ -28,19 +28,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -49,7 +38,7 @@ 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":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -62,14 +51,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Deploy ssh key to server.'
description: ''
authenticated: false
custom: []
headers:
@ -86,27 +75,16 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
queryParameters: []
cleanQueryParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -114,33 +92,195 @@ endpoints:
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
description: 'The name of the server provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
token:
name: token
description: 'The token if provider requires api token'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: consequatur
name: consequatur
public_key: consequatur
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
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":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -153,14 +293,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: ssh-keys
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete ssh key from server.'
description: ''
authenticated: false
custom: []
headers:
@ -177,21 +317,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 1
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
@ -199,8 +329,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
sshKey_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

View File

@ -1,17 +1,17 @@
name: services
name: ssh-keys
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services'
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all services.'
description: 'Get all ssh keys.'
authenticated: false
custom: []
headers:
@ -32,7 +32,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -40,7 +40,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -49,7 +49,7 @@ 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":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -61,15 +61,15 @@ endpoints:
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a service by ID.'
title: create
description: 'Deploy ssh key to server.'
authenticated: false
custom: []
headers:
@ -90,17 +90,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 184
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -108,362 +98,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
id: 184
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: architecto
name: architecto
public_key: architecto
fileParameters: []
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}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: start
description: 'Start service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 184
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -476,14 +153,14 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata:
groupName: services
groupName: ssh-keys
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
description: 'Delete ssh key from server.'
authenticated: false
custom: []
headers:
@ -504,17 +181,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 32
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 184
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -522,8 +199,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 32
service_id: 184
server_id: 6
sshKey_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
name: storage-providers
name: source-controls
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -38,7 +38,7 @@ 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":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
@ -51,9 +51,9 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -82,11 +82,14 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The provider'
required: true
example: consequatur
example: gitlab
type: string
enumValues: []
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
@ -94,7 +97,7 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
@ -104,43 +107,54 @@ endpoints:
name: token
description: 'The token if provider requires api token'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: consequatur
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: consequatur
name: consequatur
token: consequatur
key: consequatur
secret: consequatur
provider: gitlab
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
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":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -153,9 +167,9 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -177,11 +191,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -189,7 +203,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -198,7 +212,7 @@ 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":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -211,9 +225,9 @@ endpoints:
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -235,11 +249,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -247,7 +261,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -255,7 +269,47 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: consequatur
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
@ -265,7 +319,7 @@ endpoints:
name: global
description: 'Accessible in all projects'
required: true
example: true
example: false
type: string
enumValues:
- true
@ -274,13 +328,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
name: consequatur
global: true
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
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":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
@ -293,9 +351,9 @@ endpoints:
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: storage-providers
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
@ -317,11 +375,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -329,7 +387,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []

350
.scribe/endpoints/14.yaml Normal file
View File

@ -0,0 +1,350 @@
name: storage-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"harum","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"commodi","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"et","provider":"dropbox","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: true
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

View File

@ -1,5 +1,5 @@
<p align="center">
<img src="https://github.com/user-attachments/assets/57f77bd5-bd3f-4367-84c0-aff6ecd392b4" alt="VitoDeploy>
<img src="https://github.com/user-attachments/assets/b06531f3-2066-436e-a0e3-0a5f1b7d5118" alt="VitoDeploy>
<p align="center">
<a href="https://github.com/vitodeploy/vito/actions"><img alt="GitHub Workflow Status" src="https://github.com/vitodeploy/vito/workflows/tests/badge.svg"></a>
</p>
@ -14,6 +14,14 @@ ## About Vito
## Quick Start
Version 3 (Alpha):
```sh
bash <(curl -Ls https://raw.githubusercontent.com/vitodeploy/vito/3.x/scripts/install.sh)
```
Version 2:
```sh
bash <(curl -Ls https://raw.githubusercontent.com/vitodeploy/vito/2.x/scripts/install.sh)
```
@ -30,6 +38,8 @@ ## Features
- Deploy your SSH Keys to the server
- Create and Manage cron jobs on the server
- API
- Plugins
- Export and Import
## Useful Links
@ -45,9 +55,14 @@ ## Useful Links
## Credits
- Laravel
- InertiaJS
- ReactJS
- Shadcn UI
- PHPSecLib
- PHPUnit
- Tailwindcss
- Vite
- Prettier
- Spatie
- Opcodesio log viewer
- Tightenco

View File

@ -2,11 +2,12 @@ # Security Policy
## Supported Versions
| Version | New Features | Bug Fixes | Security Fixes |
|---------|--------------|-----------|----------------------|
| 0.x | ❌ | ❌ | ❌ |
| 1.x | ❌ | ❌ | ✅ (Until March 2025) |
| 2.x | | ✅ | ✅ |
| Version | New Features | Bug Fixes | Security Fixes |
|---------|--------------|-----------|----------------|
| 0.x | ❌ | ❌ | ❌ |
| 1.x | ❌ | ❌ | |
| 2.x | | ✅ | ✅ |
| 3.x | ✅ | ✅ | ✅ |
## Reporting a Vulnerability

View File

@ -3,18 +3,24 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CreateCronJob
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function create(Server $server, array $input): CronJob
{
Validator::make($input, self::rules($input, $server))->validate();
$cronJob = new CronJob([
'server_id' => $server->id,
'user' => $input['user'],
@ -33,7 +39,7 @@ public function create(Server $server, array $input): CronJob
/**
* @param array<string, mixed> $input
* @return array<string, array<mixed>>
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class DeleteCronJob
{
/**
* @throws SSHError
*/
public function delete(Server $server, CronJob $cronJob): void
{
$user = $cronJob->user;

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class DisableCronJob
{
/**
* @throws SSHError
*/
public function disable(Server $server, CronJob $cronJob): void
{
$cronJob->status = CronjobStatus::DISABLING;

View File

@ -0,0 +1,68 @@
<?php
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class EditCronJob
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function edit(Server $server, CronJob $cronJob, array $input): CronJob
{
Validator::make($input, self::rules($input, $server))->validate();
$cronJob->update([
'user' => $input['user'],
'command' => $input['command'],
'frequency' => $input['frequency'] == 'custom' ? $input['custom'] : $input['frequency'],
'status' => CronjobStatus::UPDATING,
]);
$cronJob->save();
$server->cron()->update($cronJob->user, CronJob::crontab($server, $cronJob->user));
$cronJob->status = CronjobStatus::READY;
$cronJob->save();
return $cronJob;
}
/**
* @param array<string, mixed> $input
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{
$rules = [
'command' => [
'required',
],
'user' => [
'required',
Rule::in($server->getSshUsers()),
],
'frequency' => [
'required',
new CronRule(acceptCustom: true),
],
];
if (isset($input['frequency']) && $input['frequency'] == 'custom') {
$rules['custom'] = [
'required',
new CronRule,
];
}
return $rules;
}
}

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class EnableCronJob
{
/**
* @throws SSHError
*/
public function enable(Server $server, CronJob $cronJob): void
{
$cronJob->status = CronjobStatus::ENABLING;

View File

@ -6,6 +6,7 @@
use App\Models\Database;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -16,6 +17,8 @@ class CreateDatabase
*/
public function create(Server $server, array $input): Database
{
Validator::make($input, self::rules($server, $input))->validate();
$database = new Database([
'server_id' => $server->id,
'charset' => $input['charset'],
@ -26,7 +29,7 @@ public function create(Server $server, array $input): Database
/** @var Service $service */
$service = $server->database();
/** @var \App\SSH\Services\Database\Database $databaseHandler */
/** @var \App\Services\Database\Database $databaseHandler */
$databaseHandler = $service->handler();
$databaseHandler->create($database->name, $database->charset, $database->collation);
$database->status = DatabaseStatus::READY;

View File

@ -6,7 +6,8 @@
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\Database\Database;
use App\Services\Database\Database;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -20,6 +21,8 @@ class CreateDatabaseUser
*/
public function create(Server $server, array $input, array $links = []): DatabaseUser
{
Validator::make($input, self::rules($server, $input))->validate();
$databaseUser = new DatabaseUser([
'server_id' => $server->id,
'username' => $input['username'],

View File

@ -13,7 +13,7 @@ public function delete(Server $server, Database $database): void
{
/** @var Service $service */
$service = $server->database();
/** @var \App\SSH\Services\Database\Database $handler */
/** @var \App\Services\Database\Database $handler */
$handler = $service->handler();
$handler->delete($database->name);
$database->delete();

View File

@ -5,7 +5,7 @@
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\Database\Database;
use App\Services\Database\Database;
class DeleteDatabaseUser
{

View File

@ -6,6 +6,7 @@
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -19,6 +20,8 @@ class LinkUser
*/
public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
{
Validator::make($input, self::rules($databaseUser->server))->validate();
if (! isset($input['databases']) || ! is_array($input['databases'])) {
$input['databases'] = [];
}
@ -36,7 +39,7 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
/** @var Service $service */
$service = $databaseUser->server->database();
/** @var \App\SSH\Services\Database\Database $handler */
/** @var \App\Services\Database\Database $handler */
$handler = $service->handler();
// Unlink the user from all databases
@ -60,10 +63,9 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
}
/**
* @param array<string, mixed> $input
* @return array<string, mixed>
*/
public static function rules(Server $server, array $input): array
public static function rules(Server $server): array
{
return [
'databases.*' => [

View File

@ -8,6 +8,7 @@
use App\Models\Backup;
use App\Models\Server;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class ManageBackup
*/
public function create(Server $server, array $input): Backup
{
Validator::make($input, self::rules($server, $input))->validate();
$backup = new Backup([
'type' => 'database',
'server_id' => $server->id,
@ -62,7 +65,7 @@ public function delete(Backup $backup): void
}
$backup->delete();
});
})->onQueue('ssh');
}
/**
@ -92,7 +95,7 @@ public static function rules(Server $server, array $input): array
->where('status', DatabaseStatus::READY),
],
];
if ($input['interval'] == 'custom') {
if (isset($input['interval']) && $input['interval'] == 'custom') {
$rules['custom_interval'] = [
'required',
];

View File

@ -30,6 +30,6 @@ public function delete(BackupFile $file): void
dispatch(function () use ($file): void {
$file->deleteFile();
});
})->onQueue('ssh');
}
}

View File

@ -5,7 +5,10 @@
use App\Enums\BackupFileStatus;
use App\Models\BackupFile;
use App\Models\Database;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class RestoreBackup
{
@ -14,6 +17,8 @@ class RestoreBackup
*/
public function restore(BackupFile $backupFile, array $input): void
{
Validator::make($input, self::rules($backupFile->backup->server))->validate();
/** @var Database $database */
$database = Database::query()->findOrFail($input['database']);
$backupFile->status = BackupFileStatus::RESTORING;
@ -23,7 +28,7 @@ public function restore(BackupFile $backupFile, array $input): void
dispatch(function () use ($backupFile, $database): void {
/** @var Service $service */
$service = $database->server->database();
/** @var \App\SSH\Services\Database\Database $databaseHandler */
/** @var \App\Services\Database\Database $databaseHandler */
$databaseHandler = $service->handler();
$databaseHandler->restoreBackup($backupFile, $database->name);
$backupFile->status = BackupFileStatus::RESTORED;
@ -32,18 +37,18 @@ public function restore(BackupFile $backupFile, array $input): void
})->catch(function () use ($backupFile): void {
$backupFile->status = BackupFileStatus::RESTORE_FAILED;
$backupFile->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
/**
* @return array<string, array<string>>
*/
public static function rules(): array
public static function rules(Server $server): array
{
return [
'database' => [
'required',
'exists:databases,id',
Rule::exists('databases', 'id')->where('server_id', $server->id),
],
];
}

View File

@ -7,7 +7,7 @@
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Service;
use App\SSH\Services\Database\Database;
use App\Services\Database\Database;
use Illuminate\Support\Str;
class RunBackup
@ -39,7 +39,7 @@ public function run(Backup $backup): BackupFile
$backup->save();
$file->status = BackupFileStatus::FAILED;
$file->save();
})->onConnection('ssh');
})->onQueue('ssh');
return $file;
}

View File

@ -5,14 +5,15 @@
use App\Enums\DatabaseUserStatus;
use App\Models\DatabaseUser;
use App\Models\Server;
use App\SSH\Services\Database\Database;
use App\Models\Service;
use App\Services\Database\Database;
class SyncDatabaseUsers
{
public function sync(Server $server): void
{
$service = $server->database();
if (! $service instanceof \App\Models\Service) {
if (! $service instanceof Service) {
return;
}
/** @var Database $handler */

View File

@ -5,14 +5,14 @@
use App\Enums\DatabaseStatus;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\Database\Database;
use App\Services\Database\Database;
class SyncDatabases
{
public function sync(Server $server): void
{
$service = $server->database();
if (! $service instanceof \App\Models\Service) {
if (! $service instanceof Service) {
return;
}
/** @var Database $handler */

View File

@ -6,8 +6,9 @@
use App\Models\FirewallRule;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\Firewall\Firewall;
use App\Services\Firewall\Firewall;
use Exception;
use Illuminate\Support\Facades\Validator;
class ManageRule
{
@ -17,6 +18,8 @@ class ManageRule
*/
public function create(Server $server, array $input): FirewallRule
{
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule = new FirewallRule([
'name' => $input['name'],
@ -31,7 +34,7 @@ public function create(Server $server, array $input): FirewallRule
$rule->save();
dispatch(fn () => $this->applyRule($rule));
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
return $rule;
}
@ -42,6 +45,8 @@ public function create(Server $server, array $input): FirewallRule
*/
public function update(FirewallRule $rule, array $input): FirewallRule
{
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule->update([
'name' => $input['name'],
@ -53,7 +58,7 @@ public function update(FirewallRule $rule, array $input): FirewallRule
'status' => FirewallRuleStatus::UPDATING,
]);
dispatch(fn () => $this->applyRule($rule));
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
return $rule;
}
@ -63,7 +68,7 @@ public function delete(FirewallRule $rule): void
$rule->status = FirewallRuleStatus::DELETING;
$rule->save();
dispatch(fn () => $this->applyRule($rule));
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
}
protected function applyRule(FirewallRule $rule): void
@ -93,11 +98,12 @@ protected function applyRule(FirewallRule $rule): void
}
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
public static function rules(): array
public static function rules(array $input): array
{
return [
$rules = [
'name' => [
'required',
'string',
@ -128,5 +134,12 @@ public static function rules(): array
'max:32',
],
];
if (isset($input['source_any']) && $input['source_any'] === false) {
$rules['source'] = ['required', 'ip'];
$rules['mask'] = ['required', 'numeric', 'min:1', 'max:32'];
}
return $rules;
}
}

View File

@ -7,7 +7,9 @@
use Illuminate\Contracts\Database\Query\Expression;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use stdClass;
class GetMetrics
{
@ -17,8 +19,13 @@ class GetMetrics
*/
public function filter(Server $server, array $input): Collection
{
if (isset($input['from']) && isset($input['to']) && $input['from'] === $input['to']) {
Validator::make($input, self::rules($input))->validate();
if (isset($input['from'])) {
$input['from'] = Carbon::parse($input['from'])->format('Y-m-d').' 00:00:00';
}
if (isset($input['to'])) {
$input['to'] = Carbon::parse($input['to'])->format('Y-m-d').' 23:59:59';
}
@ -64,7 +71,7 @@ private function metrics(
->groupByRaw('date_interval')
->orderBy('date_interval')
->get()
->map(function ($item): \stdClass {
->map(function ($item): stdClass {
$item->date = Carbon::parse($item->date)->format('Y-m-d H:i');
return $item;
@ -145,8 +152,8 @@ public static function rules(array $input): array
];
if (isset($input['period']) && $input['period'] === 'custom') {
$rules['from'] = ['required', 'date', 'before:to'];
$rules['to'] = ['required', 'date', 'after:from'];
$rules['from'] = ['required', 'date', 'before_or_equal:to'];
$rules['to'] = ['required', 'date', 'after_or_equal:from'];
}
return $rules;

View File

@ -4,7 +4,8 @@
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\ServiceInterface;
use App\Services\ServiceInterface;
use Illuminate\Support\Facades\Validator;
class UpdateMetricSettings
{
@ -13,6 +14,8 @@ class UpdateMetricSettings
*/
public function update(Server $server, array $input): void
{
Validator::make($input, self::rules())->validate();
/** @var Service $service */
$service = $server->monitoring();
/** @var ServiceInterface $handler */

View File

@ -6,7 +6,7 @@
use App\Exceptions\SSHError;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\NodeJS\NodeJS;
use App\Services\NodeJS\NodeJS;
use Illuminate\Validation\ValidationException;
class ChangeDefaultCli

View File

@ -1,51 +0,0 @@
<?php
namespace App\Actions\NodeJS;
use App\Enums\NodeJS;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Validation\Rule;
class InstallNewNodeJsVersion
{
/**
* @param array<string, mixed> $input
*/
public function install(Server $server, array $input): void
{
$nodejs = new Service([
'server_id' => $server->id,
'type' => 'nodejs',
'type_data' => [],
'name' => 'nodejs',
'version' => $input['version'],
'status' => ServiceStatus::INSTALLING,
'is_default' => false,
]);
$nodejs->save();
dispatch(function () use ($nodejs): void {
$nodejs->handler()->install();
$nodejs->status = ServiceStatus::READY;
$nodejs->save();
})->catch(function () use ($nodejs): void {
$nodejs->delete();
})->onConnection('ssh');
}
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array
{
return [
'version' => [
'required',
Rule::in(config('core.nodejs_versions')),
Rule::notIn(array_merge($server->installedNodejsVersions(), [NodeJS::NONE])),
],
];
}
}

View File

@ -1,60 +0,0 @@
<?php
namespace App\Actions\NodeJS;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UninstallNodeJS
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function uninstall(Server $server, array $input): void
{
$this->validate($server, $input);
/** @var Service $nodejs */
$nodejs = $server->nodejs($input['version']);
$nodejs->status = ServiceStatus::UNINSTALLING;
$nodejs->save();
dispatch(function () use ($nodejs): void {
$nodejs->handler()->uninstall();
$nodejs->delete();
})->catch(function () use ($nodejs): void {
$nodejs->status = ServiceStatus::FAILED;
$nodejs->save();
})->onConnection('ssh');
}
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
private function validate(Server $server, array $input): void
{
Validator::make($input, [
'version' => 'required|string',
])->validate();
if (! in_array($input['version'], $server->installedNodejsVersions())) {
throw ValidationException::withMessages(
['version' => __('This version is not installed')]
);
}
$hasSite = $server->sites()->where('nodejs_version', $input['version'])->first();
if ($hasSite) {
throw ValidationException::withMessages(
['version' => __('Cannot uninstall this version because some sites are using it!')]
);
}
}
}

View File

@ -4,7 +4,9 @@
use App\Models\NotificationChannel;
use App\Models\User;
use App\NotificationChannels\Email;
use Exception;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -17,10 +19,12 @@ class AddChannel
*/
public function add(User $user, array $input): void
{
Validator::make($input, self::rules($input))->validate();
$channel = new NotificationChannel([
'user_id' => $user->id,
'provider' => $input['provider'],
'label' => $input['label'],
'label' => $input['name'],
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]);
$channel->data = $channel->provider()->createData($input);
@ -30,7 +34,7 @@ public function add(User $user, array $input): void
if (! $channel->provider()->connect()) {
$channel->delete();
if ($channel->provider === \App\Enums\NotificationChannel::EMAIL) {
if ($channel->provider === Email::id()) {
throw ValidationException::withMessages([
'email' => __('Could not connect! Make sure you configured `.env` file correctly.'),
]);
@ -61,9 +65,9 @@ public static function rules(array $input): array
$rules = [
'provider' => [
'required',
Rule::in(config('core.notification_channels_providers')),
Rule::in(array_keys(config('notification-channel.providers'))),
],
'label' => 'required',
'name' => 'required',
];
return array_merge($rules, self::providerRules($input));

View File

@ -13,7 +13,7 @@ class EditChannel
public function edit(NotificationChannel $notificationChannel, User $user, array $input): void
{
$notificationChannel->fill([
'label' => $input['label'],
'label' => $input['name'],
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]);
$notificationChannel->save();
@ -26,7 +26,7 @@ public function edit(NotificationChannel $notificationChannel, User $user, array
public static function rules(array $input): array
{
return [
'label' => 'required',
'name' => 'required',
];
}
}

View File

@ -6,7 +6,7 @@
use App\Exceptions\SSHError;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\PHP\PHP;
use App\Services\PHP\PHP;
use Illuminate\Validation\ValidationException;
class ChangeDefaultCli
@ -21,6 +21,13 @@ public function change(Server $server, array $input): void
$this->validate($server, $input);
/** @var Service $service */
$service = $server->php($input['version']);
if ($service->is_default) {
throw ValidationException::withMessages(
['version' => __('This version is already the default CLI')]
);
}
/** @var PHP $handler */
$handler = $service->handler();
$handler->setDefaultCli();

View File

@ -5,7 +5,7 @@
use App\Enums\PHPIniType;
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\PHP\PHP;
use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;

View File

@ -1,54 +0,0 @@
<?php
namespace App\Actions\PHP;
use App\Enums\PHP;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Validation\Rule;
class InstallNewPHP
{
/**
* @param array<string, mixed> $input
*/
public function install(Server $server, array $input): void
{
$php = new Service([
'server_id' => $server->id,
'type' => 'php',
'type_data' => [
'extensions' => [],
'settings' => config('core.php_settings'),
],
'name' => 'php',
'version' => $input['version'],
'status' => ServiceStatus::INSTALLING,
'is_default' => false,
]);
$php->save();
dispatch(function () use ($php): void {
$php->handler()->install();
$php->status = ServiceStatus::READY;
$php->save();
})->catch(function () use ($php): void {
$php->delete();
})->onConnection('ssh');
}
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array
{
return [
'version' => [
'required',
Rule::in(config('core.php_versions')),
Rule::notIn(array_merge($server->installedPHPVersions(), [PHP::NONE])),
],
];
}
}

View File

@ -4,7 +4,8 @@
use App\Models\Server;
use App\Models\Service;
use App\SSH\Services\PHP\PHP;
use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -12,11 +13,11 @@ class InstallPHPExtension
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function install(Server $server, array $input): Service
{
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */
$service = $server->php($input['version']);
@ -43,7 +44,7 @@ function () use ($service, $input): void {
$typeData['extensions'] = array_values(array_diff($typeData['extensions'], [$input['extension']]));
$service->type_data = $typeData;
$service->save();
})->onConnection('ssh');
})->onQueue('ssh-unique');
return $service;
}
@ -56,7 +57,7 @@ public static function rules(Server $server): array
return [
'extension' => [
'required',
Rule::in(config('core.php_extensions')),
Rule::in(config('service.services.php.data.extensions', []) ?? []),
],
'version' => [
'required',

View File

@ -1,60 +0,0 @@
<?php
namespace App\Actions\PHP;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UninstallPHP
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function uninstall(Server $server, array $input): void
{
$this->validate($server, $input);
/** @var Service $php */
$php = $server->php($input['version']);
$php->status = ServiceStatus::UNINSTALLING;
$php->save();
dispatch(function () use ($php): void {
$php->handler()->uninstall();
$php->delete();
})->catch(function () use ($php): void {
$php->status = ServiceStatus::FAILED;
$php->save();
})->onConnection('ssh');
}
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
private function validate(Server $server, array $input): void
{
Validator::make($input, [
'version' => 'required|string',
])->validate();
if (! in_array($input['version'], $server->installedPHPVersions())) {
throw ValidationException::withMessages(
['version' => __('This version is not installed')]
);
}
$hasSite = $server->sites()->where('php_version', $input['version'])->first();
if ($hasSite) {
throw ValidationException::withMessages(
['version' => __('Cannot uninstall this version because some sites are using it!')]
);
}
}
}

View File

@ -7,6 +7,7 @@
use App\Models\Service;
use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class UpdatePHPIni
*/
public function update(Server $server, array $input): void
{
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */
$service = $server->php($input['version']);

View File

@ -5,6 +5,7 @@
use App\Models\Project;
use App\Models\User;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class AddUser
@ -14,6 +15,8 @@ class AddUser
*/
public function add(Project $project, array $input): void
{
Validator::make($input, self::rules($project))->validate();
/** @var User $user */
$user = User::query()->findOrFail($input['user']);

View File

@ -13,6 +13,8 @@ class CreateProject
*/
public function create(User $user, array $input): Project
{
Validator::make($input, self::rules())->validate();
if (isset($input['name'])) {
$input['name'] = strtolower((string) $input['name']);
}

View File

@ -4,21 +4,29 @@
use App\Models\Project;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class DeleteProject
{
public function delete(User $user, Project $project): void
/**
* @param array<string, mixed> $input
*/
public function delete(User $user, Project $project, array $input): void
{
Validator::make($input, [
'name' => 'required',
])->validate();
if ($user->projects()->count() === 1) {
throw ValidationException::withMessages([
'project' => __('Cannot delete the last project.'),
'name' => __('Cannot delete the last project.'),
]);
}
if ($user->current_project_id == $project->id) {
throw ValidationException::withMessages([
'project' => __('Cannot delete your current project.'),
'name' => __('Cannot delete your current project.'),
]);
}

View File

@ -6,7 +6,8 @@
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\Webserver\Webserver;
use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CreateRedirect
@ -16,6 +17,8 @@ class CreateRedirect
*/
public function create(Site $site, array $input): Redirect
{
Validator::make($input, self::rules($site))->validate();
$redirect = new Redirect;
$redirect->site_id = $site->id;
@ -30,7 +33,9 @@ public function create(Site $site, array $input): Redirect
$service = $site->server->webserver();
/** @var Webserver $webserver */
$webserver = $service->handler();
$webserver->updateVHost($site);
$webserver->updateVHost($site, regenerate: [
'redirects',
]);
$redirect->status = RedirectStatus::READY;
$redirect->save();
})
@ -38,7 +43,7 @@ public function create(Site $site, array $input): Redirect
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})
->onConnection('ssh');
->onQueue('ssh-unique');
return $redirect->refresh();
}

View File

@ -6,7 +6,7 @@
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\Webserver\Webserver;
use App\Services\Webserver\Webserver;
class DeleteRedirect
{
@ -20,11 +20,13 @@ public function delete(Site $site, Redirect $redirect): void
$service = $site->server->webserver();
/** @var Webserver $webserver */
$webserver = $service->handler();
$webserver->updateVHost($site);
$webserver->updateVHost($site, regenerate: [
'redirects',
]);
$redirect->delete();
})->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})->onConnection('ssh');
})->onQueue('ssh-unique');
}
}

View File

@ -11,6 +11,8 @@ public function activate(Ssl $ssl): void
$ssl->site->ssls()->update(['is_active' => false]);
$ssl->is_active = true;
$ssl->save();
$ssl->site->webserver()->updateVHost($ssl->site);
$ssl->site->webserver()->updateVHost($ssl->site, regenerate: [
'port',
]);
}
}

View File

@ -8,7 +8,8 @@
use App\Models\Service;
use App\Models\Site;
use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver;
use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class CreateSSL
*/
public function create(Site $site, array $input): void
{
Validator::make($input, self::rules($input))->validate();
$site->ssls()
->where('type', $input['type'])
->where('status', SslStatus::FAILED)
@ -51,11 +54,13 @@ public function create(Site $site, array $input): void
$webserver->setupSSL($ssl);
$ssl->status = SslStatus::CREATED;
$ssl->save();
$webserver->updateVHost($site);
$webserver->updateVHost($site, regenerate: [
'port',
]);
})->catch(function () use ($ssl): void {
$ssl->status = SslStatus::FAILED;
$ssl->save();
})->onConnection('ssh');
})->onQueue('ssh-unique');
}
/**

View File

@ -0,0 +1,17 @@
<?php
namespace App\Actions\SSL;
use App\Models\Ssl;
class DeactivateSSL
{
public function deactivate(Ssl $ssl): void
{
$ssl->is_active = false;
$ssl->save();
$ssl->site->webserver()->updateVHost($ssl->site, regenerate: [
'port',
]);
}
}

View File

@ -5,7 +5,7 @@
use App\Enums\SslStatus;
use App\Models\Service;
use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver;
use App\Services\Webserver\Webserver;
class DeleteSSL
{

View File

@ -4,6 +4,7 @@
use App\Models\Script;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class CreateScript
{
@ -12,6 +13,8 @@ class CreateScript
*/
public function create(User $user, array $input): Script
{
Validator::make($input, self::rules())->validate();
$script = new Script([
'user_id' => $user->id,
'name' => $input['name'],

View File

@ -7,6 +7,8 @@
use App\Models\ScriptExecution;
use App\Models\Server;
use App\Models\ServerLog;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class ExecuteScript
@ -14,24 +16,44 @@ class ExecuteScript
/**
* @param array<string, mixed> $input
*/
public function execute(Script $script, array $input): ScriptExecution
public function execute(Script $script, User $user, array $input): ScriptExecution
{
Validator::make($input, self::rules($script, $input))->validate();
$variables = [];
foreach ($script->getVariables() as $variable) {
if (array_key_exists($variable, $input)) {
$variables[$variable] = $input[$variable] ?? '';
}
}
/** @var Server $server */
$server = Server::query()->findOrFail($input['server']);
if (! $user->can('update', $server)) {
abort(403, 'You do not have permission to execute scripts on this server.');
}
$execution = new ScriptExecution([
'script_id' => $script->id,
'server_id' => $input['server'],
'user' => $input['user'],
'variables' => $input['variables'] ?? [],
'variables' => $variables,
'status' => ScriptExecutionStatus::EXECUTING,
]);
$execution->save();
dispatch(function () use ($execution, $script): void {
$log = ServerLog::newLog($execution->server, 'script-'.$script->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
dispatch(function () use ($execution, $log): void {
/** @var Server $server */
$server = $execution->server;
$content = $execution->getContent();
$log = ServerLog::newLog($server, 'script-'.$script->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
$server->os()->runScript('~/', $content, $log, $execution->user);
@ -40,7 +62,7 @@ public function execute(Script $script, array $input): ScriptExecution
})->catch(function () use ($execution): void {
$execution->status = ScriptExecutionStatus::FAILED;
$execution->save();
})->onConnection('ssh');
})->onQueue('ssh');
return $execution;
}
@ -49,7 +71,7 @@ public function execute(Script $script, array $input): ScriptExecution
* @param array<string, mixed> $input
* @return array<string, mixed>
*/
public static function rules(array $input): array
public static function rules(Script $script, array $input): array
{
$users = ['root'];
if (isset($input['server'])) {
@ -58,7 +80,7 @@ public static function rules(array $input): array
$users = $server->getSshUsers();
}
return [
$rules = [
'server' => [
'required',
Rule::exists('servers', 'id'),
@ -67,12 +89,16 @@ public static function rules(array $input): array
'required',
Rule::in($users),
],
'variables' => 'array',
'variables.*' => [
];
foreach ($script->getVariables() as $variable) {
$rules[$variable] = [
'required',
'string',
'max:255',
],
];
];
}
return $rules;
}
}

View File

@ -3,16 +3,13 @@
namespace App\Actions\Server;
use App\Enums\FirewallRuleStatus;
use App\Enums\ServerProvider;
use App\Enums\ServerStatus;
use App\Enums\ServerType;
use App\Exceptions\SSHConnectionError;
use App\Facades\Notifier;
use App\Models\Project;
use App\Models\Server;
use App\Models\User;
use App\Notifications\ServerInstallationFailed;
use App\Notifications\ServerInstallationSucceed;
use App\ServerProviders\Custom;
use App\ValidationRules\RestrictedIPAddressesRule;
use Exception;
use Illuminate\Database\Query\Builder;
@ -25,6 +22,8 @@
class CreateServer
{
protected Server $server;
/**
* @param array<string, mixed> $input
*/
@ -32,15 +31,14 @@ public function create(User $creator, Project $project, array $input): Server
{
Validator::make($input, self::rules($project, $input))->validate();
$server = new Server([
$this->server = new Server([
'project_id' => $project->id,
'user_id' => $creator->id,
'name' => $input['name'],
'ssh_user' => config('core.server_providers_default_user')[$input['provider']][$input['os']],
'ssh_user' => data_get(config('server-provider.providers'), $input['provider'].'.default_user') ?? 'root',
'ip' => $input['ip'] ?? '',
'port' => $input['port'] ?? 22,
'os' => $input['os'],
'type' => ServerType::REGULAR,
'provider' => $input['provider'],
'authentication' => [
'user' => config('core.ssh_user'),
@ -52,32 +50,42 @@ public function create(User $creator, Project $project, array $input): Server
]);
try {
if ($server->provider != 'custom') {
$server->provider_id = $input['server_provider'];
if ($this->server->provider != 'custom') {
$this->server->provider_id = $input['server_provider'];
}
$server->type_data = $server->type()->data($input);
$server->provider_data = $server->provider()->data($input);
$this->server->provider_data = $this->server->provider()->data($input);
// save
$server->save();
$this->server->save();
// create firewall rules
$this->createFirewallRules($server);
$this->createFirewallRules($this->server);
// create instance
$server->provider()->create();
$this->server->provider()->create();
// add services
$server->type()->createServices($input);
// create services
$this->createServices();
// install server
$this->install($server);
dispatch(function (): void {
app(InstallServer::class)->run($this->server);
})
->catch(function (Throwable $e): void {
$this->server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($this->server, new ServerInstallationFailed($this->server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
})
->onQueue('ssh');
return $server;
return $this->server;
} catch (Exception $e) {
$server->delete();
$this->server->delete();
throw ValidationException::withMessages([
'provider' => $e->getMessage(),
@ -85,41 +93,6 @@ public function create(User $creator, Project $project, array $input): Server
}
}
private function install(Server $server): void
{
dispatch(function () use ($server): void {
$maxWait = 180;
while ($maxWait > 0) {
sleep(10);
$maxWait -= 10;
if (! $server->provider()->isRunning()) {
continue;
}
try {
$server->ssh()->connect();
break;
} catch (SSHConnectionError) {
// ignore
}
}
$server->type()->install();
$server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($server, new ServerInstallationSucceed($server));
})
->catch(function (Throwable $e) use ($server): void {
$server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($server, new ServerInstallationFailed($server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
})
->onConnection('ssh');
}
/**
* @param array<string, mixed> $input
* @return array<string, mixed>
@ -129,7 +102,7 @@ public static function rules(Project $project, array $input): array
$rules = [
'provider' => [
'required',
Rule::in(config('core.server_providers')),
Rule::in(array_keys(config('server-provider.providers'))),
],
'name' => [
'required',
@ -139,7 +112,7 @@ public static function rules(Project $project, array $input): array
Rule::in(config('core.operating_systems')),
],
'server_provider' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] != ServerProvider::CUSTOM, [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] != Custom::id(), [
'required',
Rule::exists('server_providers', 'id')->where(function (Builder $query) use ($project): void {
$query->where('project_id', $project->id)
@ -148,13 +121,13 @@ public static function rules(Project $project, array $input): array
]),
],
'ip' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM, [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
'required',
new RestrictedIPAddressesRule,
]),
],
'port' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM, [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
'required',
'numeric',
'min:1',
@ -163,22 +136,7 @@ public static function rules(Project $project, array $input): array
],
];
return array_merge($rules, self::typeRules($input), self::providerRules($input));
}
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
private static function typeRules(array $input): array
{
if (! isset($input['type']) || ! in_array($input['type'], config('core.server_types'))) {
return [];
}
$server = new Server(['type' => $input['type']]);
return $server->type()->createRules($input);
return array_merge($rules, self::providerRules($input));
}
/**
@ -190,8 +148,8 @@ private static function providerRules(array $input): array
if (
! isset($input['provider']) ||
! isset($input['server_provider']) ||
! in_array($input['provider'], config('core.server_providers')) ||
$input['provider'] == ServerProvider::CUSTOM
! config('server-provider.providers.'.$input['provider']) ||
$input['provider'] == Custom::id()
) {
return [];
}
@ -236,4 +194,29 @@ public function createFirewallRules(Server $server): void
],
]);
}
private function createServices(): void
{
$this->server->services()->forceDelete();
$this->addUfw();
$this->addMonitoring();
}
private function addUfw(): void
{
$this->server->services()->create([
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
]);
}
private function addMonitoring(): void
{
$this->server->services()->create([
'type' => 'monitoring',
'name' => 'remote-monitor',
'version' => 'latest',
]);
}
}

View File

@ -4,6 +4,7 @@
use App\Models\Server;
use App\ValidationRules\RestrictedIPAddressesRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -17,6 +18,8 @@ class EditServer
*/
public function edit(Server $server, array $input): Server
{
Validator::make($input, self::rules($server))->validate();
$checkConnection = false;
if (isset($input['name'])) {
$server->name = $input['name'];
@ -62,6 +65,7 @@ public static function rules(Server $server): array
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
],
'local_ip' => [
'nullable',
'string',
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
],

View File

@ -1,15 +1,47 @@
<?php
namespace App\ServerTypes;
namespace App\Actions\Server;
use App\Enums\ServerStatus;
use App\Enums\ServiceStatus;
use App\Exceptions\SSHConnectionError;
use App\Exceptions\SSHError;
use App\Facades\Notifier;
use App\Models\Server;
use App\SSH\Services\PHP\PHP;
use App\Notifications\ServerInstallationSucceed;
use App\Services\PHP\PHP;
abstract class AbstractType implements ServerType
class InstallServer
{
public function __construct(protected Server $server) {}
protected Server $server;
/**
* @throws SSHError
*/
public function run(Server $server): void
{
$this->server = $server;
$maxWait = 180;
while ($maxWait > 0) {
if (! $this->server->provider()->isRunning()) {
continue;
}
try {
$this->server->ssh()->connect();
break;
} catch (SSHConnectionError) {
// ignore
}
sleep(10);
$maxWait -= 10;
}
$this->install();
$this->server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($this->server, new ServerInstallationSucceed($this->server));
}
/**
* @throws SSHError
@ -39,6 +71,9 @@ public function install(): void
$this->progress(100, 'finishing');
}
/**
* @throws SSHError
*/
protected function createUser(): void
{
$this->server->os()->createUser(
@ -59,67 +94,4 @@ protected function progress(int|float $percentage, ?string $step = null): void
$this->server->progress_step = $step;
$this->server->save();
}
protected function addWebserver(string $service): void
{
if ($service !== 'none') {
$this->server->services()->create([
'type' => 'webserver',
'name' => $service,
'version' => 'latest',
]);
}
}
protected function addDatabase(string $service): void
{
if ($service !== 'none') {
$this->server->services()->create([
'type' => 'database',
'name' => config('core.databases_name.'.$service),
'version' => config('core.databases_version.'.$service),
]);
}
}
protected function addPHP(string $version): void
{
if ($version !== 'none') {
$this->server->services()->create([
'type' => 'php',
'type_data' => [
'extensions' => [],
],
'name' => 'php',
'version' => $version,
]);
}
}
protected function addSupervisor(): void
{
$this->server->services()->create([
'type' => 'process_manager',
'name' => 'supervisor',
'version' => 'latest',
]);
}
protected function addRedis(): void
{
$this->server->services()->create([
'type' => 'memory_database',
'name' => 'redis',
'version' => 'latest',
]);
}
protected function addUfw(): void
{
$this->server->services()->create([
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
]);
}
}

View File

@ -20,6 +20,6 @@ public function update(Server $server): void
})->catch(function () use ($server): void {
Notifier::send($server, new ServerUpdateFailed($server));
$server->checkConnection();
})->onConnection('ssh');
})->onQueue('ssh-unique');
}
}

View File

@ -1,11 +1,12 @@
<?php
namespace App\Actions\Server;
namespace App\Actions\ServerLog;
use App\Models\Server;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class CreateServerLog
class CreateLog
{
/**
* @param array<string, mixed> $input
@ -14,6 +15,8 @@ class CreateServerLog
*/
public function create(Server $server, array $input): void
{
Validator::make($input, self::rules())->validate();
$server->logs()->create([
'is_remote' => true,
'name' => $input['path'],

View File

@ -0,0 +1,34 @@
<?php
namespace App\Actions\ServerLog;
use App\Models\ServerLog;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UpdateLog
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function update(ServerLog $serverLog, array $input): void
{
Validator::make($input, self::rules())->validate();
$serverLog->update([
'name' => $input['path'],
]);
}
/**
* @return array<string, string>
*/
public static function rules(): array
{
return [
'path' => 'required',
];
}
}

View File

@ -48,7 +48,7 @@ public function create(User $user, Project $project, array $input): ServerProvid
private static function getProvider(string $name): ServerProviderContract
{
$providerClass = config('core.server_providers_class.'.$name);
$providerClass = config('server-provider.providers.'.$name.'.handler');
/** @var ServerProviderContract $provider */
$provider = new $providerClass(new ServerProvider, new Server);
@ -67,7 +67,7 @@ public static function rules(array $input): array
],
'provider' => [
'required',
Rule::in(config('core.server_providers')),
Rule::in(array_keys(config('server-provider.providers'))),
Rule::notIn('custom'),
],
];

View File

@ -4,6 +4,7 @@
use App\Models\Project;
use App\Models\ServerProvider;
use Illuminate\Support\Facades\Validator;
class EditServerProvider
{
@ -12,6 +13,8 @@ class EditServerProvider
*/
public function edit(ServerProvider $serverProvider, Project $project, array $input): ServerProvider
{
Validator::make($input, self::rules())->validate();
$serverProvider->profile = $input['name'];
$serverProvider->project_id = isset($input['global']) && $input['global'] ? null : $project->id;

View File

@ -15,7 +15,14 @@ class Install
*/
public function install(Server $server, array $input): Service
{
$input['type'] = config('core.service_types')[$input['name']];
Validator::make($input, self::rules($input))->validate();
$name = $input['name'];
$input['type'] = config("service.services.$name.type");
if (! $input['type']) {
throw new \InvalidArgumentException("Service type is not defined for $name");
}
$service = new Service([
'server_id' => $server->id,
@ -24,6 +31,7 @@ public function install(Server $server, array $input): Service
'version' => $input['version'],
'status' => ServiceStatus::INSTALLING,
]);
$service->is_default = ! $server->defaultService($input['type']);
Validator::make($input, $service->handler()->creationRules($input))->validate();
@ -38,7 +46,7 @@ public function install(Server $server, array $input): Service
})->catch(function () use ($service): void {
$service->status = ServiceStatus::INSTALLATION_FAILED;
$service->save();
})->onConnection('ssh');
})->onQueue('ssh-unique');
return $service;
}
@ -52,14 +60,14 @@ public static function rules(array $input): array
$rules = [
'name' => [
'required',
Rule::in(array_keys(config('core.service_types'))),
Rule::in(array_keys(config('service.services'))),
],
'version' => [
'required',
],
];
if (isset($input['name'])) {
$rules['version'][] = Rule::in(config("core.service_versions.{$input['name']}"));
$rules['version'][] = Rule::in(config("service.services.{$input['name']}.versions", []));
}
return $rules;

View File

@ -4,81 +4,96 @@
use App\Enums\ServiceStatus;
use App\Models\Service;
use Illuminate\Validation\ValidationException;
class Manage
{
public function start(Service $service): void
{
$this->validate($service);
$service->status = ServiceStatus::STARTING;
$service->save();
dispatch(function () use ($service): void {
$status = $service->server->systemd()->start($service->unit);
$status = $service->server->systemd()->start($service->handler()->unit());
if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY;
} else {
$service->status = ServiceStatus::FAILED;
}
$service->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
public function stop(Service $service): void
{
$this->validate($service);
$service->status = ServiceStatus::STOPPING;
$service->save();
dispatch(function () use ($service): void {
$status = $service->server->systemd()->stop($service->unit);
$status = $service->server->systemd()->stop($service->handler()->unit());
if (str($status)->contains('Active: inactive')) {
$service->status = ServiceStatus::STOPPED;
} else {
$service->status = ServiceStatus::FAILED;
}
$service->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
public function restart(Service $service): void
{
$this->validate($service);
$service->status = ServiceStatus::RESTARTING;
$service->save();
dispatch(function () use ($service): void {
$status = $service->server->systemd()->restart($service->unit);
$status = $service->server->systemd()->restart($service->handler()->unit());
if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY;
} else {
$service->status = ServiceStatus::FAILED;
}
$service->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
public function enable(Service $service): void
{
$this->validate($service);
$service->status = ServiceStatus::ENABLING;
$service->save();
dispatch(function () use ($service): void {
$status = $service->server->systemd()->enable($service->unit);
$status = $service->server->systemd()->enable($service->handler()->unit());
if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY;
} else {
$service->status = ServiceStatus::FAILED;
}
$service->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
public function disable(Service $service): void
{
$this->validate($service);
$service->status = ServiceStatus::DISABLING;
$service->save();
dispatch(function () use ($service): void {
$status = $service->server->systemd()->disable($service->unit);
$status = $service->server->systemd()->disable($service->handler()->unit());
if (str($status)->contains('Active: inactive')) {
$service->status = ServiceStatus::DISABLED;
} else {
$service->status = ServiceStatus::FAILED;
}
$service->save();
})->onConnection('ssh');
})->onQueue('ssh');
}
private function validate(Service $service): void
{
if (! $service->handler()->unit()) {
throw ValidationException::withMessages([
'service' => __('This service does not have a systemd unit configured.'),
]);
}
}
}

View File

@ -26,6 +26,6 @@ public function uninstall(Service $service): void
})->catch(function () use ($service): void {
$service->status = ServiceStatus::FAILED;
$service->save();
})->onConnection('ssh');
})->onQueue('ssh-unique');
}
}

View File

@ -4,6 +4,7 @@
use App\Models\Command;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class CreateCommand
{
@ -12,6 +13,8 @@ class CreateCommand
*/
public function create(Site $site, array $input): Command
{
Validator::make($input, self::rules())->validate();
$script = new Command([
'site_id' => $site->id,
'name' => $input['name'],

View File

@ -14,18 +14,22 @@
use App\ValidationRules\DomainRule;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Throwable;
class CreateSite
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
* @throws Throwable
*/
public function create(Server $server, array $input): Site
{
Validator::make($input, self::rules($server, $input))->validate();
DB::beginTransaction();
try {
$user = $input['user'] ?? $server->getSshUser();
@ -88,7 +92,7 @@ public function create(Server $server, array $input): Site
$site->status = SiteStatus::INSTALLATION_FAILED;
$site->save();
Notifier::send($site, new SiteInstallationFailed($site));
})->onConnection('ssh');
})->onQueue('ssh-unique');
DB::commit();
@ -110,7 +114,7 @@ public static function rules(Server $server, array $input): array
$rules = [
'type' => [
'required',
Rule::in(config('core.site_types')),
Rule::in(array_keys(config('site.types'))),
],
'domain' => [
'required',
@ -121,6 +125,7 @@ public static function rules(Server $server, array $input): array
new DomainRule,
],
'user' => [
'nullable',
'regex:/^[a-z_][a-z0-9_-]*[a-z0-9]$/',
'min:3',
'max:32',
@ -138,7 +143,7 @@ public static function rules(Server $server, array $input): array
*/
private static function typeRules(Server $server, array $input): array
{
if (! isset($input['type']) || ! in_array($input['type'], config('core.site_types'))) {
if (! isset($input['type']) || ! config('site.types.'.$input['type'])) {
return [];
}

View File

@ -5,16 +5,22 @@
use App\Exceptions\SSHError;
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\PHP\PHP;
use App\SSH\Services\Webserver\Webserver;
use App\Services\PHP\PHP;
use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class DeleteSite
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function delete(Site $site): void
public function delete(Site $site, array $input): void
{
$this->validate($site, $input);
/** @var Service $service */
$service = $site->server->webserver();
@ -35,4 +41,17 @@ public function delete(Site $site): void
$site->delete();
}
/**
* @param array<string, mixed> $input
*/
private function validate(Site $site, array $input): void
{
Validator::make($input, [
'domain' => [
'required',
Rule::in($site->domain),
],
])->validate();
}
}

View File

@ -4,7 +4,6 @@
use App\Enums\DeploymentStatus;
use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Exceptions\SSHError;
use App\Facades\Notifier;
use App\Models\Deployment;
use App\Models\ServerLog;
@ -15,7 +14,6 @@ class Deploy
{
/**
* @throws DeploymentScriptIsEmptyException
* @throws SSHError
*/
public function run(Site $site): Deployment
{
@ -32,6 +30,11 @@ public function run(Site $site): Deployment
'deployment_script_id' => $site->deploymentScript->id,
'status' => DeploymentStatus::DEPLOYING,
]);
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
$lastCommit = $site->sourceControl?->provider()?->getLastCommit($site->repository, $site->branch);
if ($lastCommit) {
$deployment->commit_id = $lastCommit['commit_id'];
@ -39,12 +42,7 @@ public function run(Site $site): Deployment
}
$deployment->save();
dispatch(function () use ($site, $deployment): void {
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
dispatch(function () use ($site, $deployment, $log): void {
$site->server->os()->runScript(
path: $site->path,
script: $site->deploymentScript->content,
@ -59,7 +57,7 @@ public function run(Site $site): Deployment
$deployment->status = DeploymentStatus::FAILED;
$deployment->save();
Notifier::send($site, new DeploymentCompleted($deployment, $site));
})->onConnection('ssh');
})->onQueue('ssh-unique');
return $deployment;
}

View File

@ -3,6 +3,7 @@
namespace App\Actions\Site;
use App\Models\Command;
use Illuminate\Support\Facades\Validator;
class EditCommand
{
@ -11,6 +12,8 @@ class EditCommand
*/
public function edit(Command $command, array $input): Command
{
Validator::make($input, self::rules())->validate();
$command->name = $input['name'];
$command->command = $input['command'];
$command->save();

View File

@ -7,6 +7,7 @@
use App\Models\CommandExecution;
use App\Models\ServerLog;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class ExecuteCommand
{
@ -15,19 +16,31 @@ class ExecuteCommand
*/
public function execute(Command $command, User $user, array $input): CommandExecution
{
Validator::make($input, self::rules($command))->validate();
$variables = [];
foreach ($command->getVariables() as $variable) {
if (array_key_exists($variable, $input)) {
$variables[$variable] = $input[$variable] ?? '';
}
}
$execution = new CommandExecution([
'command_id' => $command->id,
'server_id' => $command->site->server_id,
'user_id' => $user->id,
'variables' => $input['variables'] ?? [],
'variables' => $variables,
'status' => CommandExecutionStatus::EXECUTING,
]);
$execution->save();
dispatch(function () use ($execution, $command): void {
$log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
dispatch(function () use ($execution, $command, $log): void {
$content = $execution->getContent();
$log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
$execution->server->os()->runScript(
@ -42,24 +55,25 @@ public function execute(Command $command, User $user, array $input): CommandExec
})->catch(function () use ($execution): void {
$execution->status = CommandExecutionStatus::FAILED;
$execution->save();
})->onConnection('ssh');
})->onQueue('ssh');
return $execution;
}
/**
* @param array<string, mixed> $input
* @return array<string, string|array<int, mixed>>
*/
public static function rules(array $input): array
public static function rules(Command $command): array
{
return [
'variables' => 'array',
'variables.*' => [
$rules = [];
foreach ($command->getVariables() as $variable) {
$rules[$variable] = [
'required',
'string',
'max:255',
],
];
];
}
return $rules;
}
}

View File

@ -4,7 +4,7 @@
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\Webserver\Webserver;
use App\Services\Webserver\Webserver;
use App\ValidationRules\DomainRule;
class UpdateAliases
@ -21,7 +21,9 @@ public function update(Site $site, array $input): void
/** @var Webserver $webserver */
$webserver = $service->handler();
$webserver->updateVHost($site);
$webserver->updateVHost($site, regenerate: [
'core',
]);
$site->save();
}

View File

@ -4,7 +4,8 @@
use App\Exceptions\SSHError;
use App\Models\Site;
use App\SSH\Git\Git;
use App\SSH\OS\Git;
use Illuminate\Support\Facades\Validator;
class UpdateBranch
{
@ -15,6 +16,8 @@ class UpdateBranch
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules())->validate();
$site->branch = $input['branch'];
app(Git::class)->fetchOrigin($site);
app(Git::class)->checkout($site);

View File

@ -4,6 +4,7 @@
use App\Models\DeploymentScript;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class UpdateDeploymentScript
{
@ -12,6 +13,8 @@ class UpdateDeploymentScript
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules())->validate();
/** @var DeploymentScript $script */
$script = $site->deploymentScript;
$script->content = $input['script'];

View File

@ -4,6 +4,7 @@
use App\Exceptions\SSHError;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class UpdateEnv
{
@ -14,10 +15,17 @@ class UpdateEnv
*/
public function update(Site $site, array $input): void
{
$site->server->os()->editFileAs(
$site->path.'/.env',
$site->user,
Validator::make($input, [
'env' => ['required', 'string'],
'path' => ['required', 'string'],
])->validate();
$site->server->os()->write(
$input['path'],
trim((string) $input['env']),
$site->user,
);
$site->jsonUpdate('type_data', 'env_path', $input['path']);
}
}

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