Compare commits

...

16 Commits
2.4.0 ... 2.x

Author SHA1 Message Date
90b63d065d Create FUNDING.yml 2025-06-05 21:58:32 +02:00
2318e1b1df 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
2025-05-29 11:25:36 +02:00
65898b0ee6 Fix mysqldump backup error
This reverts commit 564b97e2aa.
2025-05-21 20:57:38 +02:00
3124f8c795 Bump league/commonmark from 2.6.1 to 2.7.0 (#595)
Bumps [league/commonmark](https://github.com/thephpleague/commonmark) from 2.6.1 to 2.7.0.
- [Release notes](https://github.com/thephpleague/commonmark/releases)
- [Changelog](https://github.com/thephpleague/commonmark/blob/2.7/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/commonmark/compare/2.6.1...2.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-10 11:12:50 +03:00
76059aff3c Update app.php 2025-04-12 21:15:58 +02:00
ff4d560e44 Fix aws connect bug (#577) 2025-04-05 23:50:12 +02:00
dda345f565 Bump vite from 6.2.3 to 6.2.5 (#576)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.3 to 6.2.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-05 23:38:30 +02:00
564b97e2aa fix: add missing backticks in Blade for MySQL/MariaDB database names with hyphens (#523)
* fix: add missing backticks in Blade for MySQL/MariaDB database names with hyphens

Before:
The CREATE DATABASE command failed for database names containing hyphens (-) because MySQL/MariaDB requires backticks around such names, but they were missing in the Blade template.

After:
Backticks (```) are now correctly added in the Blade template, ensuring MySQL properly interprets database names with hyphens.

Why:
MySQL/MariaDB does not allow hyphens in database names unless they are enclosed in backticks. The Blade template was missing these backticks, causing syntax errors. Adding them ensures the command executes successfully. 🚀

* fix: added hyphens to other places as well

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
2025-04-05 21:58:25 +02:00
4e5f975917 fix: allow reuse of a database name (#571)
* fix: allow reuse of a database name

* style

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-04-05 21:50:14 +02:00
f3500497d0 fix(site/workers): add-all-ssh-users-to-worker-edit (#567)
* fix(site/workers): add-all-ssh-users-to-worker-edit

* adjust site users and server users for workers

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-04-05 20:57:29 +02:00
996df64386 Bump vite from 6.2.0 to 6.2.3 (#574)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.0 to 6.2.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
2025-04-05 20:00:16 +02:00
e98e974e20 Add endpoint for reading and updating site .env file (#564)
* feat(api): Add endpoint for reading site .env file

- Add GET /api/projects/{project}/servers/{server}/sites/{site}/env endpoint
- Add feature tests with SSH mocking

* added updating env

* fix coding style

* generate docs

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-04-05 19:59:57 +02:00
2a670146d8 Add endpoint for triggering site deployment (#563)
* feat(api): Add endpoint for triggering site deployment

- Add POST /api/projects/{project}/servers/{server}/sites/{site}/deploy endpoint
- Add feature tests

* fix merge issue and generate api docs

* fix merge

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-04-05 19:41:52 +02:00
f483f7fdca Add site redirects (#552)
* feat(redirects): add redirects to sites

* chore(style): fixed coding style issues

* style: fix php-stan docblocks

* style: pint cleanup

* tests: fixed redirect test suite

* feat: vhosts include additional configs

* fix: use exact location matching

* - add enums
- use queues
- use vhost rather than separate conf files
- vhost formatter
- cleanup

* generate docs

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-03-31 17:30:57 +02:00
7882d2022c Add endpoint for reading & updating site deployment script (#562)
* feat(api): Add endpoint for updating site deployment script

- Add PUT /api/projects/{project}/servers/{server}/sites/{site}/deployment-script endpoint
- Add feature tests for successful and failed updates

* added reading deployment script as well

* generate docs

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-03-29 21:49:28 +01:00
03be2d3ee2 Add API endpoint to update site aliases (#551) 2025-03-21 10:26:51 +01:00
95 changed files with 11293 additions and 4337 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
github: [saeedvaziry]

View File

@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -60,7 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer ge6ZVa4kfD86hdv5a31EcbP'
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null
method: null
route: null
@ -97,7 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -105,7 +105,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -113,7 +113,7 @@ endpoints:
name: command
description: ''
required: true
example: itaque
example: quia
type: string
enumValues: []
exampleWasSpecified: false
@ -142,7 +142,7 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
command: itaque
command: quia
user: root
frequency: '* * * * *'
fileParameters: []
@ -157,7 +157,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer cdh5bD8gVPkf34e1ZEva6a6'
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null
method: null
route: null
@ -194,7 +194,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -204,7 +204,7 @@ endpoints:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 18
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -212,8 +212,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
cronJob_id: 18
server_id: 29
cronJob_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -230,7 +230,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer fa5VgdkaD8cZ6vh34Pb16eE'
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null
method: null
route: null
@ -267,7 +267,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -277,7 +277,7 @@ endpoints:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 10
example: 13
type: integer
enumValues: []
exampleWasSpecified: false
@ -285,8 +285,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
cronJob_id: 10
server_id: 29
cronJob_id: 13
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -303,7 +303,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P8hkva3ZD4fgb166adEVce5'
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null
method: null
route: null

View File

@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"amalia38","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"troy.rippin","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,7 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Z641ebPacDV6f38kEgdah5v'
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null
method: null
route: null
@ -97,7 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -105,7 +105,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -113,19 +113,41 @@ endpoints:
name: name
description: ''
required: true
example: et
example: quisquam
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
charset:
name: charset
description: ''
required: true
example: omnis
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
collation:
name: collation
description: ''
required: true
example: at
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: et
name: quisquam
charset: omnis
collation: at
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"harvey.haskell","status":"ready","created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -133,7 +155,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer d4gbv56caV3aZ8D1h6kfEPe'
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null
method: null
route: null
@ -170,7 +192,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -180,7 +202,7 @@ endpoints:
name: id
description: 'The ID of the database.'
required: true
example: 19
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -188,8 +210,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 19
server_id: 29
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -198,7 +220,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"ruthie.koepp","status":"ready","created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -206,7 +228,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P68VgDcaEZvk63f4b5aed1h'
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null
method: null
route: null
@ -243,7 +265,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -253,7 +275,7 @@ endpoints:
name: database_id
description: 'The ID of the database.'
required: true
example: 15
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -261,8 +283,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
database_id: 15
server_id: 29
database_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -279,7 +301,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DkPc6d1heEv5a8fb4V63agZ'
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null
method: null
route: null

View File

@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"xgaylord","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"una37","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,7 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P4gD36fZeckvVh5ab86Ead1'
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null
method: null
route: null
@ -97,7 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -105,7 +105,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -113,7 +113,7 @@ endpoints:
name: username
description: ''
required: true
example: consequuntur
example: qui
type: string
enumValues: []
exampleWasSpecified: false
@ -123,7 +123,7 @@ endpoints:
name: password
description: ''
required: true
example: 'fI/i2.O4u&dla?eXvR2'
example: 'xYv*3,#HQ=5<w!'
type: string
enumValues: []
exampleWasSpecified: false
@ -140,14 +140,14 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
username: consequuntur
password: 'fI/i2.O4u&dla?eXvR2'
username: qui
password: 'xYv*3,#HQ=5<w!'
host: '%'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kari.farrell","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -155,7 +155,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5k8Vced1baaE6f4ZvDPgh36'
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null
method: null
route: null
@ -192,7 +192,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -202,7 +202,7 @@ endpoints:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 18
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -210,8 +210,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
databaseUser_id: 18
server_id: 29
databaseUser_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -220,7 +220,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"caterina.mosciski","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -228,7 +228,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3kDveP5V8a6dghfa4E16cbZ'
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null
method: null
route: null
@ -265,7 +265,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -283,7 +283,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
@ -292,19 +292,19 @@ endpoints:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: non
example: maiores
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: non
databases: maiores
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kurtis05","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -312,7 +312,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DgPea43EvV51a866dfbZckh'
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null
method: null
route: null
@ -349,7 +349,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -359,7 +359,7 @@ endpoints:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 6
example: 20
type: integer
enumValues: []
exampleWasSpecified: false
@ -367,8 +367,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
databaseUser_id: 6
server_id: 29
databaseUser_id: 20
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -385,7 +385,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 6ackVP8hEZd3164gD5evafb'
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null
method: null
route: null

View File

@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":38781,"source":"79.116.255.150","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":32141,"source":"52.174.114.251","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,7 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer h3P5gD8E4dkeZ6abac6vfV1'
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null
method: null
route: null
@ -97,7 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -105,15 +105,25 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: sapiente
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
example: allow
type: string
enumValues:
- allow
@ -125,7 +135,7 @@ endpoints:
name: protocol
description: ''
required: true
example: udp
example: tcp
type: string
enumValues:
- tcp
@ -146,8 +156,8 @@ endpoints:
source:
name: source
description: ''
required: true
example: voluptates
required: false
example: doloribus
type: string
enumValues: []
exampleWasSpecified: false
@ -164,16 +174,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
type: deny
protocol: udp
name: sapiente
type: allow
protocol: tcp
port: et
source: voluptates
source: doloribus
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":47148,"source":"119.182.8.45","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -181,7 +192,150 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 6a8DVv5k3gZfEe6hb1daPc4'
- 'Bearer 3184PbED6aacZveV6hf5dgk'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: et
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: aut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: et
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: et
type: allow
protocol: tcp
port: aut
source: et
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null
method: null
route: null
@ -218,7 +372,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -228,7 +382,7 @@ endpoints:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 29
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
@ -236,8 +390,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
firewallRule_id: 29
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -246,7 +400,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":2317,"source":"44.161.134.114","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -254,7 +408,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P4bZdV1geED3kfh568aa6cv'
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null
method: null
route: null
@ -291,7 +445,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -301,7 +455,7 @@ endpoints:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 29
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
@ -309,8 +463,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
firewallRule_id: 29
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -327,7 +481,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Dh3kcaafdg6E5ZvV46ePb81'
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null
method: null
route: null

View File

@ -29,7 +29,7 @@ endpoints:
responses:
-
status: 200
content: '{"success":true,"version":"2.1.0"}'
content: '{"success":true,"version":"2.4.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json

View File

@ -30,7 +30,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":3,"name":"Jeffry Dickinson","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":4,"name":"Miss Tianna Dietrich PhD","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -38,7 +38,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5DaveP3d6b6khEZVcg4fa18'
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null
method: null
route: null
@ -69,19 +69,19 @@ endpoints:
name: name
description: 'The name of the project.'
required: true
example: quos
example: dignissimos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: quos
name: dignissimos
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Isidro Franecki","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -89,7 +89,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer a6P53EvkcZV6D4ghad1efb8'
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null
method: null
route: null
@ -132,7 +132,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":3,"name":"Rhoda Parisian","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -140,7 +140,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer v48Ve5ZghdcbE1akP66fD3a'
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null
method: null
route: null
@ -182,19 +182,19 @@ endpoints:
name: name
description: 'The name of the project.'
required: true
example: ullam
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: ullam
name: sunt
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Mr. Dashawn Jacobson Sr.","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -202,7 +202,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer fvEdh3Vgbk56Z4a61eP8caD'
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null
method: null
route: null
@ -253,7 +253,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer eg4c3vZ1Dhaa68d6PEfk5bV'
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null
method: null
route: null

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: servers
name: redirects
description: ''
endpoints:
-
httpMethods:
- GET
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: list
description: 'Get all servers in a project.'
title: index
description: 'Get all redirects.'
authenticated: true
custom: []
headers:
@ -31,8 +31,30 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -41,7 +63,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Amina DuBuque","ssh_user":"vito","ip":"163.77.69.73","local_ip":"137.139.200.70","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Floy Cummerata","ssh_user":"vito","ip":"62.53.140.25","local_ip":"34.59.35.195","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -49,7 +71,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer E81avahec6365dbZfgD4kPV'
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null
method: null
route: null
@ -57,14 +79,14 @@ endpoints:
-
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: true
custom: []
headers:
@ -82,288 +104,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
from:
name: from
description: ''
required: true
example: iste
example: odit
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: custom
example: incidunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 301
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: libero
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: laudantium
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: illum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: autem
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: postgresql12
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: '7.4'
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: iste
server_provider: custom
region: libero
plan: ut
ip: molestias
port: laudantium
name: illum
os: autem
webserver: none
database: postgresql12
php: '7.4'
from: odit
to: incidunt
mode: 301
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Archibald Nolan","ssh_user":"vito","ip":"226.168.13.177","local_ip":"143.14.43.182","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer aad3Pvc4e65DghZVEk8f1b6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Tevin Sipes","ssh_user":"vito","ip":"61.41.183.152","local_ip":"197.160.239.147","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 5EhD3v6Z8Vdakfg46eP1cab'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
@ -372,69 +181,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Pc5Da6Vhdk1vag6fE84e3Zb'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer a61v48DfkeEbcg3a6hd5PZV'
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null
method: null
route: null
@ -442,14 +189,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: true
custom: []
headers:
@ -471,7 +218,27 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
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
@ -479,7 +246,9 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
site_id: 44
redirect_id: 9
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -496,7 +265,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer haE8D6Z6gePk1vadVb53c4f'
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -41,7 +41,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"laudantium","provider":"vultr","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":3,"project_id":null,"global":true,"name":"aut","provider":"aws","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -49,7 +49,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Df16eda8Pa345EkgbZ6cvhV'
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null
method: null
route: null
@ -57,14 +57,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: true
custom: []
headers:
@ -89,9 +89,64 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The server provider type'
required: true
example: voluptatem
example: fugiat
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: digitalocean
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: itaque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: voluptatum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: reiciendis
type: string
enumValues: []
exampleWasSpecified: false
@ -99,55 +154,93 @@ endpoints:
custom: []
name:
name: name
description: 'The name of the server provider.'
description: 'The name of the server.'
required: true
example: repellat
example: et
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: omnis
example: vel
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: recusandae
example: nginx
type: string
enumValues: []
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
database:
name: database
description: Database
required: true
example: in
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: '7.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: voluptatem
name: repellat
token: omnis
key: recusandae
secret: in
provider: fugiat
server_provider: digitalocean
region: itaque
plan: voluptatum
ip: ut
port: reiciendis
name: et
os: vel
webserver: nginx
database: mysql80
php: '7.2'
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"quia","provider":"vultr","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -155,7 +248,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 8fbgDV6vdhakE1c64e3P5aZ'
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null
method: null
route: null
@ -163,14 +256,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: true
custom: []
headers:
@ -188,11 +281,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: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -200,7 +293,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -209,7 +302,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"ab","provider":"hetzner","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -217,22 +310,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer eVE816Pc4ak3bdfahDZv6g5'
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null
method: null
route: null
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: true
custom: []
headers:
@ -250,11 +343,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: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -262,93 +355,7 @@ 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: est
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: est
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"nesciunt","provider":"linode","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer va86keaPDdh3b16Z54EgfcV'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -365,7 +372,131 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer abv13ag8h5fZ4EPVDe6dc6k'
- 'Bearer b61aD6538PacZEkeghfvV4d'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -31,19 +31,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +41,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"user":null,"name":"Godfrey Mills","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Donato Streich","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,7 +49,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1gEva8Z6e6abPDhk453fdVc'
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null
method: null
route: null
@ -68,14 +57,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: true
custom: []
headers:
@ -93,27 +82,16 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
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: numquam
example: corrupti
type: string
enumValues: []
exampleWasSpecified: false
@ -121,33 +99,55 @@ 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: alias
example: est
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: voluptate
example: rerum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: sed
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: numquam
name: alias
public_key: voluptate
provider: corrupti
name: est
token: rerum
key: ut
secret: sed
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"user":null,"name":"Mr. Stanton Bergnaum","created_at":null,"updated_at":null}'
content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -155,22 +155,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer V64Z86fEdbavh1PgackDe53'
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
- GET
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.'
title: show
description: ''
authenticated: true
custom: []
headers:
@ -188,19 +188,9 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
@ -210,8 +200,155 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
sshKey_id: 1
serverProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: earum
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: earum
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -228,7 +365,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3deg1vc65k8D6abahfZVPE4'
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,22 +60,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer cdhb5VevgkZ6DafP6184a3E'
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null
method: null
route: null
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: true
custom: []
headers:
@ -97,17 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 53
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -115,17 +105,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 53
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: explicabo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: deleniti
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: sapiente
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: explicabo
name: deleniti
public_key: sapiente
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -133,372 +155,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3vDaE6Pc51Zg8kbheadVf64'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer a6e6Db5VcP314EgZdka8vhf'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer kefg56PEc4a18aDdvVZb3h6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer edhaE164avZ6gbVDPf3k8c5'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer D4c1hbfV6Pad68v3gEkaeZ5'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer be41fvh6a8d5PkDVEgZ36ca'
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null
method: null
route: null
@ -506,14 +163,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: true
custom: []
headers:
@ -535,17 +192,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
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: 53
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -553,8 +210,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
server_id: 29
sshKey_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -571,7 +228,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer dcb68hg634P1DaZvef5VakE'
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null
method: null
route: null

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: sites
name: services
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
uri: 'api/projects/{project_id}/servers/{server_id}/services'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all sites.'
description: 'Get all services.'
authenticated: true
custom: []
headers:
@ -35,7 +35,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -43,7 +43,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,212 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3gE54ahkea166PfvbVD8Zdc'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new site.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters:
type:
name: type
description: ''
required: true
example: php
type: string
enumValues:
- php
- php-blank
- phpmyadmin
- laravel
- wordpress
- load-balancer
exampleWasSpecified: false
nullable: false
custom: []
domain:
name: domain
description: ''
required: true
example: rem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
aliases:
name: aliases
description: ''
required: true
example:
- libero
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
php_version:
name: php_version
description: 'One of the installed PHP Versions'
required: true
example: '7.4'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
web_directory:
name: web_directory
description: 'Required for PHP and Laravel sites'
required: true
example: public
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source_control:
name: source_control
description: 'Source control ID, Required for Sites which support source control'
required: true
example: dolor
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
repository:
name: repository
description: 'Repository, Required for Sites which support source control'
required: true
example: organization/repository
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
branch:
name: branch
description: 'Branch, Required for Sites which support source control'
required: true
example: main
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
composer:
name: composer
description: 'Run composer if site supports composer'
required: true
example: true
type: boolean
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
version:
name: version
description: 'Version, if the site type requires a version like PHPMyAdmin'
required: true
example: 5.2.1
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: 'user, to isolate the website under a new user'
required: true
example: vitae
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: ip-hash
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
type: php
domain: rem
aliases:
- libero
php_version: '7.4'
web_directory: public
source_control: dolor
repository: organization/repository
branch: main
composer: true
version: 5.2.1
user: vitae
method: ip-hash
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer e1V4ga3Pavk6ch6b5E8fZdD'
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null
method: null
route: null
@ -273,14 +68,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{id}'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a site by ID.'
description: 'Get a service by ID.'
authenticated: true
custom: []
headers:
@ -302,7 +97,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -310,9 +105,9 @@ endpoints:
custom: []
id:
name: id
description: 'The ID of the site.'
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -320,8 +115,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 26
server_id: 29
id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -330,7 +125,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -338,22 +133,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 8gZkEaehfd4v3bac615DVP6'
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete site.'
title: start
description: 'Start service.'
authenticated: true
custom: []
headers:
@ -375,17 +170,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -393,8 +188,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
site_id: 26
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -411,7 +206,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer aadb1h6f6kD4V8vePZgcE35'
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null
method: null
route: null
@ -419,14 +214,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/load-balancer'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: load-balancer
description: 'Update load balancer.'
title: stop
description: 'Stop service.'
authenticated: true
custom: []
headers:
@ -448,17 +243,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -466,43 +261,16 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
site_id: 26
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters:
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: least-connections
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
servers:
name: servers
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
required: true
example:
- deleniti
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
method: least-connections
servers:
- deleniti
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
status: 204
content: null
headers: []
description: ''
@ -511,7 +279,299 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5E6hZa64bka1cV3Pdvf8Deg'
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null
method: null
route: null

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: ''
@ -41,7 +41,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"dolorem","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":6,"project_id":null,"global":true,"name":"itaque","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Zella Robel","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Jairo Williamson","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -49,7 +49,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer D16Vg58E6Pfkh3Zveab4dca'
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
controller: null
method: null
route: null
@ -57,9 +57,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: ''
@ -89,11 +89,14 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The provider'
required: true
example: alias
example: gitlab
type: string
enumValues: []
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
@ -101,7 +104,7 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: explicabo
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
@ -111,43 +114,54 @@ endpoints:
name: token
description: 'The token if provider requires api token'
required: true
example: ut
example: in
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: libero
example: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
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: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'y*P4_]ZdjE_:'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: alias
name: explicabo
token: ut
key: libero
secret: consequatur
provider: gitlab
name: molestias
token: in
url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
username: consectetur
password: 'y*P4_]ZdjE_:'
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"quos","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Miss Claudine Goyette","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -155,7 +169,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DaZ6d6Eck1bhVe3g4aP85vf'
- 'Bearer DfegP56vkEa364Zbhda8V1c'
controller: null
method: null
route: null
@ -163,9 +177,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: ''
@ -188,11 +202,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
@ -200,7 +214,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -209,7 +223,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"id","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Mona Stark","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -217,7 +231,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1dekD4gva56bc683VPEhZfa'
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
controller: null
method: null
route: null
@ -225,9 +239,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: ''
@ -250,11 +264,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
@ -262,7 +276,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -270,7 +284,47 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: sequi
example: non
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: sunt
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: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: natus
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'A^">*m{p]DI'
type: string
enumValues: []
exampleWasSpecified: false
@ -280,7 +334,7 @@ endpoints:
name: global
description: 'Accessible in all projects'
required: true
example: false
example: true
type: string
enumValues:
- true
@ -289,13 +343,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
name: sequi
global: false
name: non
token: sunt
url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
username: natus
password: 'A^">*m{p]DI'
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"velit","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Neha Little","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -303,7 +361,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer V65g18Pca4v3hDEkbZfe6da'
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
controller: null
method: null
route: null
@ -311,9 +369,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: ''
@ -336,11 +394,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
@ -348,7 +406,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -365,7 +423,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1v6a6efgch3DbZ4aVE5d8kP'
- 'Bearer fgk61vD68E4cZhP3bV5adea'
controller: null
method: null
route: null

View File

@ -0,0 +1,372 @@
## 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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: ab
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: quo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: in
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: ab
name: quo
token: in
key: sunt
secret: molestias
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: voluptas
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: voluptas
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null
method: null
route: null
custom: []

View File

@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -58,7 +58,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer ge6ZVa4kfD86hdv5a31EcbP'
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null
method: null
route: null
@ -95,7 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -103,7 +103,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -111,7 +111,7 @@ endpoints:
name: command
description: ''
required: true
example: itaque
example: quia
type: string
enumValues: []
exampleWasSpecified: false
@ -140,7 +140,7 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
command: itaque
command: quia
user: root
frequency: '* * * * *'
fileParameters: []
@ -155,7 +155,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer cdh5bD8gVPkf34e1ZEva6a6'
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null
method: null
route: null
@ -192,7 +192,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -202,7 +202,7 @@ endpoints:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 18
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
@ -210,8 +210,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
cronJob_id: 18
server_id: 29
cronJob_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -228,7 +228,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer fa5VgdkaD8cZ6vh34Pb16eE'
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null
method: null
route: null
@ -265,7 +265,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -275,7 +275,7 @@ endpoints:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 10
example: 13
type: integer
enumValues: []
exampleWasSpecified: false
@ -283,8 +283,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
cronJob_id: 10
server_id: 29
cronJob_id: 13
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -301,7 +301,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P8hkva3ZD4fgb166adEVce5'
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null
method: null
route: null

View File

@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +50,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"amalia38","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"troy.rippin","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,7 +58,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Z641ebPacDV6f38kEgdah5v'
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null
method: null
route: null
@ -95,7 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -103,7 +103,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -111,19 +111,41 @@ endpoints:
name: name
description: ''
required: true
example: et
example: quisquam
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
charset:
name: charset
description: ''
required: true
example: omnis
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
collation:
name: collation
description: ''
required: true
example: at
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: et
name: quisquam
charset: omnis
collation: at
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"harvey.haskell","status":"ready","created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -131,7 +153,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer d4gbv56caV3aZ8D1h6kfEPe'
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null
method: null
route: null
@ -168,7 +190,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -178,7 +200,7 @@ endpoints:
name: id
description: 'The ID of the database.'
required: true
example: 19
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -186,8 +208,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 19
server_id: 29
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -196,7 +218,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"ruthie.koepp","status":"ready","created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -204,7 +226,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P68VgDcaEZvk63f4b5aed1h'
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null
method: null
route: null
@ -241,7 +263,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -251,7 +273,7 @@ endpoints:
name: database_id
description: 'The ID of the database.'
required: true
example: 15
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
@ -259,8 +281,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
database_id: 15
server_id: 29
database_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -277,7 +299,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DkPc6d1heEv5a8fb4V63agZ'
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null
method: null
route: null

View File

@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +50,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"xgaylord","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"una37","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,7 +58,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P4gD36fZeckvVh5ab86Ead1'
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null
method: null
route: null
@ -95,7 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -103,7 +103,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -111,7 +111,7 @@ endpoints:
name: username
description: ''
required: true
example: consequuntur
example: qui
type: string
enumValues: []
exampleWasSpecified: false
@ -121,7 +121,7 @@ endpoints:
name: password
description: ''
required: true
example: 'fI/i2.O4u&dla?eXvR2'
example: 'xYv*3,#HQ=5<w!'
type: string
enumValues: []
exampleWasSpecified: false
@ -138,14 +138,14 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
username: consequuntur
password: 'fI/i2.O4u&dla?eXvR2'
username: qui
password: 'xYv*3,#HQ=5<w!'
host: '%'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kari.farrell","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -153,7 +153,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5k8Vced1baaE6f4ZvDPgh36'
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null
method: null
route: null
@ -190,7 +190,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -200,7 +200,7 @@ endpoints:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 18
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -208,8 +208,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
databaseUser_id: 18
server_id: 29
databaseUser_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -218,7 +218,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"caterina.mosciski","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -226,7 +226,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3kDveP5V8a6dghfa4E16cbZ'
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null
method: null
route: null
@ -263,7 +263,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -281,7 +281,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
@ -290,19 +290,19 @@ endpoints:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: non
example: maiores
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: non
databases: maiores
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kurtis05","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -310,7 +310,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DgPea43EvV51a866dfbZckh'
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null
method: null
route: null
@ -347,7 +347,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -357,7 +357,7 @@ endpoints:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 6
example: 20
type: integer
enumValues: []
exampleWasSpecified: false
@ -365,8 +365,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
databaseUser_id: 6
server_id: 29
databaseUser_id: 20
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -383,7 +383,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 6ackVP8hEZd3164gD5evafb'
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null
method: null
route: null

View File

@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +50,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":38781,"source":"79.116.255.150","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":32141,"source":"52.174.114.251","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,7 +58,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer h3P5gD8E4dkeZ6abac6vfV1'
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null
method: null
route: null
@ -95,7 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -103,15 +103,25 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: sapiente
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
example: allow
type: string
enumValues:
- allow
@ -123,7 +133,7 @@ endpoints:
name: protocol
description: ''
required: true
example: udp
example: tcp
type: string
enumValues:
- tcp
@ -144,8 +154,8 @@ endpoints:
source:
name: source
description: ''
required: true
example: voluptates
required: false
example: doloribus
type: string
enumValues: []
exampleWasSpecified: false
@ -162,16 +172,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
type: deny
protocol: udp
name: sapiente
type: allow
protocol: tcp
port: et
source: voluptates
source: doloribus
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":47148,"source":"119.182.8.45","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -179,7 +190,150 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 6a8DVv5k3gZfEe6hb1daPc4'
- 'Bearer 3184PbED6aacZveV6hf5dgk'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: et
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: aut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: et
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: et
type: allow
protocol: tcp
port: aut
source: et
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null
method: null
route: null
@ -216,7 +370,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -226,7 +380,7 @@ endpoints:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 29
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
@ -234,8 +388,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
firewallRule_id: 29
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -244,7 +398,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":2317,"source":"44.161.134.114","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -252,7 +406,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer P4bZdV1geED3kfh568aa6cv'
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null
method: null
route: null
@ -289,7 +443,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -299,7 +453,7 @@ endpoints:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 29
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
@ -307,8 +461,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
firewallRule_id: 29
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -325,7 +479,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Dh3kcaafdg6E5ZvV46ePb81'
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null
method: null
route: null

View File

@ -27,7 +27,7 @@ endpoints:
responses:
-
status: 200
content: '{"success":true,"version":"2.1.0"}'
content: '{"success":true,"version":"2.4.0"}'
headers:
cache-control: 'no-cache, private'
content-type: application/json

View File

@ -28,7 +28,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":3,"name":"Jeffry Dickinson","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":4,"name":"Miss Tianna Dietrich PhD","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -36,7 +36,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5DaveP3d6b6khEZVcg4fa18'
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null
method: null
route: null
@ -67,19 +67,19 @@ endpoints:
name: name
description: 'The name of the project.'
required: true
example: quos
example: dignissimos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: quos
name: dignissimos
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Isidro Franecki","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -87,7 +87,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer a6P53EvkcZV6D4ghad1efb8'
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null
method: null
route: null
@ -130,7 +130,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":3,"name":"Rhoda Parisian","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -138,7 +138,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer v48Ve5ZghdcbE1akP66fD3a'
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null
method: null
route: null
@ -180,19 +180,19 @@ endpoints:
name: name
description: 'The name of the project.'
required: true
example: ullam
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: ullam
name: sunt
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Mr. Dashawn Jacobson Sr.","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -200,7 +200,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer fvEdh3Vgbk56Z4a61eP8caD'
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null
method: null
route: null
@ -251,7 +251,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer eg4c3vZ1Dhaa68d6PEfk5bV'
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null
method: null
route: null

View File

@ -1,17 +1,17 @@
name: servers
name: redirects
description: ''
endpoints:
-
httpMethods:
- GET
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: list
description: 'Get all servers in a project.'
title: index
description: 'Get all redirects.'
authenticated: true
custom: []
headers:
@ -29,8 +29,30 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -39,7 +61,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Amina DuBuque","ssh_user":"vito","ip":"163.77.69.73","local_ip":"137.139.200.70","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Floy Cummerata","ssh_user":"vito","ip":"62.53.140.25","local_ip":"34.59.35.195","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -47,7 +69,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer E81avahec6365dbZfgD4kPV'
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null
method: null
route: null
@ -55,14 +77,14 @@ endpoints:
-
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: true
custom: []
headers:
@ -80,288 +102,75 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
from:
name: from
description: ''
required: true
example: iste
example: odit
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: custom
example: incidunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 301
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: libero
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: laudantium
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: illum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: autem
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: postgresql12
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: '7.4'
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: iste
server_provider: custom
region: libero
plan: ut
ip: molestias
port: laudantium
name: illum
os: autem
webserver: none
database: postgresql12
php: '7.4'
from: odit
to: incidunt
mode: 301
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Archibald Nolan","ssh_user":"vito","ip":"226.168.13.177","local_ip":"143.14.43.182","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer aad3Pvc4e65DghZVEk8f1b6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Tevin Sipes","ssh_user":"vito","ip":"61.41.183.152","local_ip":"197.160.239.147","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 5EhD3v6Z8Vdakfg46eP1cab'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
@ -370,69 +179,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Pc5Da6Vhdk1vag6fE84e3Zb'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer a61v48DfkeEbcg3a6hd5PZV'
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null
method: null
route: null
@ -440,14 +187,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: true
custom: []
headers:
@ -469,7 +216,27 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
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
@ -477,7 +244,9 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
site_id: 44
redirect_id: 9
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -494,7 +263,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer haE8D6Z6gePk1vadVb53c4f'
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -39,7 +39,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"laudantium","provider":"vultr","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":3,"project_id":null,"global":true,"name":"aut","provider":"aws","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -47,7 +47,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer Df16eda8Pa345EkgbZ6cvhV'
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null
method: null
route: null
@ -55,14 +55,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: true
custom: []
headers:
@ -87,9 +87,64 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The server provider type'
required: true
example: voluptatem
example: fugiat
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: digitalocean
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: itaque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: voluptatum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: reiciendis
type: string
enumValues: []
exampleWasSpecified: false
@ -97,55 +152,93 @@ endpoints:
custom: []
name:
name: name
description: 'The name of the server provider.'
description: 'The name of the server.'
required: true
example: repellat
example: et
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: omnis
example: vel
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: recusandae
example: nginx
type: string
enumValues: []
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
database:
name: database
description: Database
required: true
example: in
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: '7.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: voluptatem
name: repellat
token: omnis
key: recusandae
secret: in
provider: fugiat
server_provider: digitalocean
region: itaque
plan: voluptatum
ip: ut
port: reiciendis
name: et
os: vel
webserver: nginx
database: mysql80
php: '7.2'
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"quia","provider":"vultr","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -153,7 +246,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 8fbgDV6vdhakE1c64e3P5aZ'
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null
method: null
route: null
@ -161,14 +254,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: true
custom: []
headers:
@ -186,11 +279,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: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -198,7 +291,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -207,7 +300,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"ab","provider":"hetzner","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -215,22 +308,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer eVE816Pc4ak3bdfahDZv6g5'
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null
method: null
route: null
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: true
custom: []
headers:
@ -248,11 +341,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: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -260,93 +353,7 @@ 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: est
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: est
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"nesciunt","provider":"linode","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer va86keaPDdh3b16Z54EgfcV'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -363,7 +370,131 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer abv13ag8h5fZ4EPVDe6dc6k'
- 'Bearer b61aD6538PacZEkeghfvV4d'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -29,19 +29,8 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +39,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"user":null,"name":"Godfrey Mills","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Donato Streich","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,7 +47,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1gEva8Z6e6abPDhk453fdVc'
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null
method: null
route: null
@ -66,14 +55,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: true
custom: []
headers:
@ -91,27 +80,16 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
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: numquam
example: corrupti
type: string
enumValues: []
exampleWasSpecified: false
@ -119,33 +97,55 @@ 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: alias
example: est
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: voluptate
example: rerum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: sed
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: numquam
name: alias
public_key: voluptate
provider: corrupti
name: est
token: rerum
key: ut
secret: sed
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"user":null,"name":"Mr. Stanton Bergnaum","created_at":null,"updated_at":null}'
content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -153,22 +153,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer V64Z86fEdbavh1PgackDe53'
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
- GET
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.'
title: show
description: ''
authenticated: true
custom: []
headers:
@ -186,19 +186,9 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
@ -208,8 +198,155 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
sshKey_id: 1
serverProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: earum
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: earum
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -226,7 +363,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3deg1vc65k8D6abahfZVPE4'
- 'Bearer fcVa8ev63gP5DaZbkdhE461'
controller: null
method: null
route: null

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: true
custom: []
headers:
@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +50,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,22 +58,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer cdhb5VevgkZ6DafP6184a3E'
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null
method: null
route: null
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: true
custom: []
headers:
@ -95,17 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 53
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -113,17 +103,49 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 53
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: explicabo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: deleniti
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: sapiente
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: explicabo
name: deleniti
public_key: sapiente
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -131,372 +153,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3vDaE6Pc51Zg8kbheadVf64'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer a6e6Db5VcP314EgZdka8vhf'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer kefg56PEc4a18aDdvVZb3h6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer edhaE164avZ6gbVDPf3k8c5'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer D4c1hbfV6Pad68v3gEkaeZ5'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 53
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer be41fvh6a8d5PkDVEgZ36ca'
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null
method: null
route: null
@ -504,14 +161,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: true
custom: []
headers:
@ -533,17 +190,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
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: 53
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
@ -551,8 +208,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
service_id: 53
server_id: 29
sshKey_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -569,7 +226,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer dcb68hg634P1DaZvef5VakE'
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null
method: null
route: null

View File

@ -1,17 +1,17 @@
name: sites
name: services
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
uri: 'api/projects/{project_id}/servers/{server_id}/services'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all sites.'
description: 'Get all services.'
authenticated: true
custom: []
headers:
@ -33,7 +33,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -41,7 +41,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -50,7 +50,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -58,212 +58,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3gE54ahkea166PfvbVD8Zdc'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new site.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters:
type:
name: type
description: ''
required: true
example: php
type: string
enumValues:
- php
- php-blank
- phpmyadmin
- laravel
- wordpress
- load-balancer
exampleWasSpecified: false
nullable: false
custom: []
domain:
name: domain
description: ''
required: true
example: rem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
aliases:
name: aliases
description: ''
required: true
example:
- libero
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
php_version:
name: php_version
description: 'One of the installed PHP Versions'
required: true
example: '7.4'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
web_directory:
name: web_directory
description: 'Required for PHP and Laravel sites'
required: true
example: public
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source_control:
name: source_control
description: 'Source control ID, Required for Sites which support source control'
required: true
example: dolor
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
repository:
name: repository
description: 'Repository, Required for Sites which support source control'
required: true
example: organization/repository
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
branch:
name: branch
description: 'Branch, Required for Sites which support source control'
required: true
example: main
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
composer:
name: composer
description: 'Run composer if site supports composer'
required: true
example: true
type: boolean
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
version:
name: version
description: 'Version, if the site type requires a version like PHPMyAdmin'
required: true
example: 5.2.1
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: 'user, to isolate the website under a new user'
required: true
example: vitae
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: ip-hash
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
type: php
domain: rem
aliases:
- libero
php_version: '7.4'
web_directory: public
source_control: dolor
repository: organization/repository
branch: main
composer: true
version: 5.2.1
user: vitae
method: ip-hash
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer e1V4ga3Pavk6ch6b5E8fZdD'
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null
method: null
route: null
@ -271,14 +66,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{id}'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a site by ID.'
description: 'Get a service by ID.'
authenticated: true
custom: []
headers:
@ -300,7 +95,7 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
@ -308,9 +103,9 @@ endpoints:
custom: []
id:
name: id
description: 'The ID of the site.'
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -318,8 +113,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
id: 26
server_id: 29
id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -328,7 +123,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -336,22 +131,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 8gZkEaehfd4v3bac615DVP6'
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete site.'
title: start
description: 'Start service.'
authenticated: true
custom: []
headers:
@ -373,17 +168,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -391,8 +186,8 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
site_id: 26
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -409,7 +204,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer aadb1h6f6kD4V8vePZgcE35'
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null
method: null
route: null
@ -417,14 +212,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/load-balancer'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: load-balancer
description: 'Update load balancer.'
title: stop
description: 'Stop service.'
authenticated: true
custom: []
headers:
@ -446,17 +241,17 @@ endpoints:
name: server_id
description: 'The ID of the server.'
required: true
example: 8
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 26
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -464,43 +259,16 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
server_id: 8
site_id: 26
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters:
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: least-connections
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
servers:
name: servers
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
required: true
example:
- deleniti
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
method: least-connections
servers:
- deleniti
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
status: 204
content: null
headers: []
description: ''
@ -509,7 +277,299 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 5E6hZa64bka1cV3Pdvf8Deg'
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null
method: null
route: null

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: ''
@ -39,7 +39,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"dolorem","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"},{"id":6,"project_id":null,"global":true,"name":"itaque","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Zella Robel","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Jairo Williamson","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -47,7 +47,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer D16Vg58E6Pfkh3Zveab4dca'
- 'Bearer e3f4ag8hkb5vZcDadPEV661'
controller: null
method: null
route: null
@ -55,9 +55,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: ''
@ -87,11 +87,14 @@ endpoints:
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
description: 'The provider'
required: true
example: alias
example: gitlab
type: string
enumValues: []
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
@ -99,7 +102,7 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: explicabo
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
@ -109,43 +112,54 @@ endpoints:
name: token
description: 'The token if provider requires api token'
required: true
example: ut
example: in
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: libero
example: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
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: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'y*P4_]ZdjE_:'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: alias
name: explicabo
token: ut
key: libero
secret: consequatur
provider: gitlab
name: molestias
token: in
url: 'https://www.white.com/aperiam-dolor-nemo-qui-rerum-quod-quas'
username: consectetur
password: 'y*P4_]ZdjE_:'
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"quos","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Miss Claudine Goyette","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -153,7 +167,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer DaZ6d6Eck1bhVe3g4aP85vf'
- 'Bearer DfegP56vkEa364Zbhda8V1c'
controller: null
method: null
route: null
@ -161,9 +175,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: ''
@ -186,11 +200,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
@ -198,7 +212,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -207,7 +221,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"id","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Mona Stark","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -215,7 +229,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1dekD4gva56bc683VPEhZfa'
- 'Bearer ePc6fb65vh1Z4aakE3Dgd8V'
controller: null
method: null
route: null
@ -223,9 +237,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: ''
@ -248,11 +262,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
@ -260,7 +274,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
@ -268,7 +282,47 @@ endpoints:
name: name
description: 'The name of the storage provider.'
required: true
example: sequi
example: non
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: sunt
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: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: natus
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'A^">*m{p]DI'
type: string
enumValues: []
exampleWasSpecified: false
@ -278,7 +332,7 @@ endpoints:
name: global
description: 'Accessible in all projects'
required: true
example: false
example: true
type: string
enumValues:
- true
@ -287,13 +341,17 @@ endpoints:
nullable: false
custom: []
cleanBodyParameters:
name: sequi
global: false
name: non
token: sunt
url: 'https://www.frami.org/ex-at-minus-rerum-quo-minus-ea'
username: natus
password: 'A^">*m{p]DI'
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"velit","provider":"s3","created_at":"2025-01-30T22:42:49.000000Z","updated_at":"2025-01-30T22:42:49.000000Z"}'
content: '{"id":5,"project_id":null,"global":true,"name":"Neha Little","provider":"github","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
@ -301,7 +359,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer V65g18Pca4v3hDEkbZfe6da'
- 'Bearer v3f6aaPk61Ze8hVdDbE5g4c'
controller: null
method: null
route: null
@ -309,9 +367,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: ''
@ -334,11 +392,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
@ -346,7 +404,7 @@ endpoints:
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -363,7 +421,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1v6a6efgch3DbZ4aVE5d8kP'
- 'Bearer fgk61vD68E4cZhP3bV5adea'
controller: null
method: null
route: null

370
.scribe/endpoints/13.yaml Normal file
View File

@ -0,0 +1,370 @@
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: ab
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: quo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: in
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: molestias
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: ab
name: quo
token: in
key: sunt
secret: molestias
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: voluptas
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: voluptas
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
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: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null
method: null
route: null
custom: []

View File

@ -53,7 +53,7 @@ public static function rules(Server $server, array $input): array
'name' => [
'required',
'alpha_dash',
Rule::unique('databases', 'name')->where('server_id', $server->id),
Rule::unique('databases', 'name')->where('server_id', $server->id)->whereNull('deleted_at'),
],
'charset' => [
'required',

View File

@ -2,6 +2,7 @@
namespace App\Actions\Database;
use App\Models\Backup;
use App\Models\Database;
use App\Models\Server;
use App\Models\Service;
@ -16,5 +17,9 @@ public function delete(Server $server, Database $database): void
$handler = $service->handler();
$handler->delete($database->name);
$database->delete();
$database->backups()->each(function (Backup $backup): void {
app(ManageBackup::class)->stop($backup);
});
}
}

View File

@ -100,4 +100,10 @@ public static function rules(Server $server, array $input): array
return $rules;
}
public function stop(Backup $backup): void
{
$backup->status = BackupStatus::STOPPED;
$backup->save();
}
}

View File

@ -0,0 +1,75 @@
<?php
namespace App\Actions\Redirect;
use App\Enums\RedirectStatus;
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\Webserver\Webserver;
use Illuminate\Validation\Rule;
class CreateRedirect
{
/**
* @param array<string, mixed> $input
*/
public function create(Site $site, array $input): Redirect
{
$redirect = new Redirect;
$redirect->site_id = $site->id;
$redirect->from = $input['from'];
$redirect->to = $input['to'];
$redirect->mode = $input['mode'];
$redirect->status = RedirectStatus::CREATING;
$redirect->save();
dispatch(function () use ($site, $redirect): void {
/** @var Service $service */
$service = $site->server->webserver();
/** @var Webserver $webserver */
$webserver = $service->handler();
$webserver->updateVHost($site);
$redirect->status = RedirectStatus::READY;
$redirect->save();
})
->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})
->onConnection('ssh');
return $redirect->refresh();
}
/**
* @return array<string, array<string>>
*/
public static function rules(Site $site): array
{
return [
'from' => [
'required',
'string',
'max:255',
'not_regex:/^http(s)?:\/\//',
Rule::unique('redirects', 'from')->where('site_id', $site->id),
],
'to' => [
'required',
'url:http,https',
],
'mode' => [
'required',
'integer',
Rule::in([
301,
302,
307,
308,
]),
],
];
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Actions\Redirect;
use App\Enums\RedirectStatus;
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\SSH\Services\Webserver\Webserver;
class DeleteRedirect
{
public function delete(Site $site, Redirect $redirect): void
{
$redirect->status = RedirectStatus::DELETING;
$redirect->save();
dispatch(function () use ($site, $redirect): void {
/** @var Service $service */
$service = $site->server->webserver();
/** @var Webserver $webserver */
$webserver = $service->handler();
$webserver->updateVHost($site);
$redirect->delete();
})->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})->onConnection('ssh');
}
}

View File

@ -9,4 +9,6 @@ final class BackupStatus
const FAILED = 'failed';
const DELETING = 'deleting';
const STOPPED = 'stopped';
}

View File

@ -0,0 +1,14 @@
<?php
namespace App\Enums;
final class RedirectStatus
{
const CREATING = 'creating';
const READY = 'ready';
const DELETING = 'deleting';
const FAILED = 'failed';
}

View File

@ -7,4 +7,6 @@ final class Webserver
const NONE = 'none';
const NGINX = 'nginx';
const CADDY = 'caddy';
}

View File

@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers\API;
use App\Actions\Redirect\CreateRedirect;
use App\Actions\Redirect\DeleteRedirect;
use App\Http\Controllers\Controller;
use App\Http\Resources\RedirectResource;
use App\Models\Project;
use App\Models\Redirect;
use App\Models\Server;
use App\Models\Site;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Http\Response as HttpResponse;
use Knuckles\Scribe\Attributes\BodyParam;
use Knuckles\Scribe\Attributes\Endpoint;
use Knuckles\Scribe\Attributes\Group;
use Knuckles\Scribe\Attributes\Response;
use Knuckles\Scribe\Attributes\ResponseFromApiResource;
use Spatie\RouteAttributes\Attributes\Delete;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('api/projects/{project}/servers/{server}/sites/{site}/redirects')]
#[Middleware(['auth:sanctum', 'can-see-project'])]
#[Group(name: 'redirects')]
class RedirectController extends Controller
{
#[Get('/', name: 'api.projects.servers.sites.redirects.index', middleware: 'ability:read')]
#[Endpoint(title: 'index', description: 'Get all redirects.')]
#[ResponseFromApiResource(RedirectResource::class, Redirect::class, collection: true, paginate: 25)]
public function index(Project $project, Server $server, Site $site): ResourceCollection
{
$this->authorize('view', [Redirect::class, $site, $server]);
$this->validateRoute($project, $server, $site);
return RedirectResource::collection($site->redirects()->simplePaginate(25));
}
#[Post('/', name: 'api.projects.servers.sites.redirects.create', middleware: 'ability:write')]
#[Endpoint(title: 'create', description: 'Create a new redirect.')]
#[BodyParam(name: 'from', required: true)]
#[BodyParam(name: 'to', required: true)]
#[BodyParam(name: 'mode', required: true, enum: [301, 302, 307, 308])]
#[Response(status: 200)]
public function create(Request $request, Project $project, Server $server, Site $site): RedirectResource
{
$this->authorize('create', [Redirect::class, $site, $server]);
$this->validateRoute($project, $server, $site);
$this->validate($request, CreateRedirect::rules($site));
$redirect = app(CreateRedirect::class)->create($site, $request->all());
return new RedirectResource($redirect);
}
#[Delete('/{redirect}', name: 'api.projects.servers.sites.redirects.delete', middleware: 'ability:write')]
#[Endpoint(title: 'delete', description: 'Delete a redirect.')]
#[Response(status: 204)]
public function delete(Project $project, Server $server, Site $site, Redirect $redirect): HttpResponse
{
$this->authorize('delete', [Redirect::class, $site, $server]);
$this->validateRoute($project, $server, $site);
app(DeleteRedirect::class)->delete($site, $redirect);
return response()->noContent();
}
private function validateRoute(Project $project, Server $server, Site $site): void
{
if ($project->id !== $server->project_id) {
abort(404, 'Server not found in project');
}
if ($site->server_id !== $server->id) {
abort(404, 'Site not found in server');
}
}
}

View File

@ -52,7 +52,7 @@ public function index(Project $project): ResourceCollection
#[BodyParam(name: 'port', description: 'SSH Port if the provider is custom')]
#[BodyParam(name: 'name', description: 'The name of the server.', required: true)]
#[BodyParam(name: 'os', description: 'The os of the server', required: true)]
#[BodyParam(name: 'webserver', description: 'Web server', required: true, enum: [Webserver::NONE, Webserver::NGINX])]
#[BodyParam(name: 'webserver', description: 'Web server', required: true, enum: [Webserver::NONE, Webserver::NGINX, Webserver::CADDY])]
#[BodyParam(name: 'database', description: 'Database', required: true, enum: [Database::NONE, Database::MYSQL57, Database::MYSQL80, Database::MARIADB103, Database::MARIADB104, Database::MARIADB103, Database::POSTGRESQL12, Database::POSTGRESQL13, Database::POSTGRESQL14, Database::POSTGRESQL15, Database::POSTGRESQL16], )]
#[BodyParam(name: 'php', description: 'PHP version', required: true, enum: [PHP::V70, PHP::V71, PHP::V72, PHP::V73, PHP::V74, PHP::V80, PHP::V81, PHP::V82, PHP::V83])]
#[ResponseFromApiResource(ServerResource::class, Server::class)]

View File

@ -3,9 +3,14 @@
namespace App\Http\Controllers\API;
use App\Actions\Site\CreateSite;
use App\Actions\Site\Deploy;
use App\Actions\Site\UpdateAliases;
use App\Actions\Site\UpdateDeploymentScript;
use App\Actions\Site\UpdateEnv;
use App\Actions\Site\UpdateLoadBalancer;
use App\Enums\LoadBalancerMethod;
use App\Enums\SiteType;
use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Http\Controllers\Controller;
use App\Http\Resources\SiteResource;
use App\Models\Project;
@ -23,6 +28,7 @@
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
use Spatie\RouteAttributes\Attributes\Put;
#[Prefix('api/projects/{project}/servers/{server}/sites')]
#[Middleware(['auth:sanctum', 'can-see-project'])]
@ -113,6 +119,111 @@ public function updateLoadBalancer(Request $request, Project $project, Server $s
return new SiteResource($site);
}
#[Put('{site}/aliases', name: 'api.projects.servers.sites.aliases', middleware: 'ability:write')]
#[Endpoint(title: 'aliases', description: 'Update aliases.')]
#[BodyParam(name: 'aliases', type: 'array', description: 'Array of aliases')]
#[Response(status: 200)]
public function updateAliases(Request $request, Project $project, Server $server, Site $site): SiteResource
{
$this->authorize('update', [$site, $server]);
$this->validateRoute($project, $server, $site);
$this->validate($request, UpdateAliases::rules());
app(UpdateAliases::class)->update($site, $request->all());
return new SiteResource($site);
}
#[Post('{site}/deploy', name: 'api.projects.servers.sites.deploy', middleware: 'ability:write')]
#[Endpoint(title: 'deploy', description: 'Run site deployment script')]
#[Response(status: 200)]
public function deploy(Request $request, Project $project, Server $server, Site $site): SiteResource
{
$this->authorize('update', [$site, $server]);
$this->validateRoute($project, $server, $site);
try {
app(Deploy::class)->run($site);
return new SiteResource($site);
} catch (DeploymentScriptIsEmptyException) {
abort(422, 'Deployment script is empty');
}
}
#[Put('{site}/deployment-script', name: 'api.projects.servers.sites.deployment-script', middleware: 'ability:write')]
#[Endpoint(title: 'deployment-script', description: 'Update site deployment script')]
#[BodyParam(name: 'script', type: 'string', description: 'Content of the deployment script')]
#[Response(status: 204)]
public function updateDeploymentScript(Request $request, Project $project, Server $server, Site $site): \Illuminate\Http\Response
{
$this->authorize('update', [$site, $server]);
$this->validateRoute($project, $server, $site);
$this->validate($request, UpdateDeploymentScript::rules());
app(UpdateDeploymentScript::class)->update($site, $request->all());
return response()->noContent();
}
#[Get('{site}/deployment-script', name: 'api.projects.servers.sites.deployment-script.show', middleware: 'ability:read')]
#[Endpoint(title: 'deployment-script', description: 'Get site deployment script content')]
#[Response(status: 200)]
public function showDeploymentScript(Project $project, Server $server, Site $site): \Illuminate\Http\JsonResponse
{
$this->authorize('view', [$site, $server]);
$this->validateRoute($project, $server, $site);
return response()->json([
'script' => $site->deploymentScript?->content,
]);
}
#[Get('{site}/env', name: 'api.projects.servers.sites.env.show', middleware: 'ability:read')]
#[Endpoint(title: 'env', description: 'Get site .env file content')]
#[Response(content: [
'data' => [
'env' => 'APP_NAME=Laravel\nAPP_ENV=production',
],
], status: 200)]
public function showEnv(Project $project, Server $server, Site $site): \Illuminate\Http\JsonResponse
{
$this->authorize('view', [$site, $server]);
$this->validateRoute($project, $server, $site);
return response()->json([
'data' => [
'env' => $site->getEnv(),
],
]);
}
#[Put('{site}/env', name: 'api.projects.servers.sites.env', middleware: 'ability:write')]
#[Endpoint(title: 'env', description: 'Update site .env file')]
#[BodyParam(name: 'env', type: 'string', description: 'Content of the .env file')]
#[Response(status: 200)]
public function updateEnv(Request $request, Project $project, Server $server, Site $site): SiteResource
{
$this->authorize('update', [$site, $server]);
$this->validateRoute($project, $server, $site);
$this->validate($request, [
'env' => ['required', 'string'],
]);
app(UpdateEnv::class)->update($site, $request->all());
return new SiteResource($site);
}
private function validateRoute(Project $project, Server $server, ?Site $site = null): void
{
if ($project->id !== $server->project_id) {

View File

@ -0,0 +1,28 @@
<?php
namespace App\Http\Resources;
use App\Models\Redirect;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin Redirect */
class RedirectResource extends JsonResource
{
/**
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'site_id' => $this->site_id,
'mode' => $this->mode,
'from' => $this->from,
'to' => $this->to,
'status' => $this->status,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}

View File

@ -63,6 +63,7 @@ public static function boot(): void
BackupStatus::RUNNING => 'success',
BackupStatus::FAILED => 'danger',
BackupStatus::DELETING => 'warning',
BackupStatus::STOPPED => 'danger',
];
public function isCustomInterval(): bool

View File

@ -17,7 +17,7 @@
* @property string $status
* @property Server $server
* @property Backup[] $backups
* @property Carbon $deleted_at
* @property ?Carbon $deleted_at
*/
class Database extends AbstractModel
{

49
app/Models/Redirect.php Normal file
View File

@ -0,0 +1,49 @@
<?php
namespace App\Models;
use App\Enums\RedirectStatus;
use Database\Factories\RedirectFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* @property int $id
* @property int $site_id
* @property string $from
* @property string $to
* @property string $mode
* @property string $status
* @property Site $site
*/
class Redirect extends AbstractModel
{
/** @use HasFactory<RedirectFactory> */
use HasFactory;
protected $fillable = [
'site_id',
'from',
'to',
'mode',
'status',
];
/**
* @var array<string, string>
*/
public static array $statusColors = [
RedirectStatus::CREATING => 'warning',
RedirectStatus::READY => 'success',
RedirectStatus::DELETING => 'warning',
RedirectStatus::FAILED => 'danger',
];
/**
* @return BelongsTo<Site, covariant $this>
*/
public function site(): BelongsTo
{
return $this->belongsTo(Site::class);
}
}

View File

@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\RedirectStatus;
use App\Enums\SiteStatus;
use App\Enums\SslStatus;
use App\Exceptions\FailedToDestroyGitHook;
@ -52,6 +53,8 @@
* @property ?SourceControl $sourceControl
* @property Collection<int, LoadBalancerServer> $loadBalancerServers
* @property Project $project
* @property Collection<int, Redirect> $redirects
* @property Collection<int, Redirect> $activeRedirects
*/
class Site extends AbstractModel
{
@ -419,4 +422,20 @@ public function getSshUsers(): array
return $users;
}
/**
* @return HasMany<Redirect, covariant $this>
*/
public function redirects(): HasMany
{
return $this->hasMany(Redirect::class);
}
/**
* @return HasMany<Redirect, covariant $this>
*/
public function activeRedirects(): HasMany
{
return $this->redirects()->whereIn('status', [RedirectStatus::CREATING, RedirectStatus::READY]);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace App\Policies;
use App\Models\Server;
use App\Models\Site;
use App\Models\User;
class RedirectPolicy
{
public function view(User $user, Site $site, Server $server): bool
{
if ($user->isAdmin()) {
return true;
}
return $site->server->project->users->contains($user);
}
public function create(User $user, Site $site, Server $server): bool
{
return ($user->isAdmin() || $site->server->project->users->contains($user))
&& $site->server_id === $server->id
&& $site->server->isReady()
&& $site->server->webserver();
}
public function delete(User $user, Site $site, Server $server): bool
{
return ($user->isAdmin() || $site->server->project->users->contains($user))
&& $site->server_id === $server->id
&& $site->server->isReady()
&& $site->server->webserver();
}
}

View File

@ -3,5 +3,37 @@
namespace App\SSH\Services\Webserver;
use App\SSH\Services\AbstractService;
use Closure;
abstract class AbstractWebserver extends AbstractService implements Webserver {}
abstract class AbstractWebserver extends AbstractService implements Webserver
{
public function creationRules(array $input): array
{
return [
'type' => [
'required',
function (string $attribute, mixed $value, Closure $fail): void {
$webserverExists = $this->service->server->webserver();
if ($webserverExists) {
$fail('You already have a webserver service on the server.');
}
},
],
];
}
public function deletionRules(): array
{
return [
'service' => [
function (string $attribute, mixed $value, Closure $fail): void {
$hasSite = $this->service->server->sites()
->exists();
if ($hasSite) {
$fail('Cannot uninstall webserver while you have websites using it.');
}
},
],
];
}
}

View File

@ -0,0 +1,195 @@
<?php
namespace App\SSH\Services\Webserver;
use App\Exceptions\SSHError;
use App\Exceptions\SSLCreationException;
use App\Models\Site;
use App\Models\Ssl;
use Throwable;
class Caddy extends AbstractWebserver
{
/**
* @throws SSHError
*/
public function install(): void
{
$this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.install-caddy'),
'install-caddy'
);
$this->service->server->ssh()->write(
'/etc/caddy/Caddyfile',
view('ssh.services.webserver.caddy.caddy'),
'root'
);
$this->service->server->ssh()->write(
'/etc/systemd/system/caddy.service',
view('ssh.services.webserver.caddy.caddy-systemd'),
'root'
);
$this->service->server->systemd()->reload();
$this->service->server->systemd()->restart('caddy');
$this->service->server->os()->cleanup();
}
/**
* @throws SSHError
*/
public function uninstall(): void
{
$this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.uninstall-caddy'),
'uninstall-caddy'
);
$this->service->server->os()->cleanup();
}
/**
* @throws SSHError
*/
public function createVHost(Site $site): void
{
// We need to get the isolated user first, if the site is isolated
// otherwise, use the default ssh user
$ssh = $this->service->server->ssh($site->user);
$ssh->exec(
view('ssh.services.webserver.caddy.create-path', [
'path' => $site->path,
]),
'create-path',
$site->id
);
$this->service->server->ssh()->write(
'/etc/caddy/sites-available/'.$site->domain,
$this->generateVhost($site),
'root'
);
$this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.create-vhost', [
'domain' => $site->domain,
]),
'create-vhost',
$site->id
);
}
/**
* @throws SSHError
*/
public function updateVHost(Site $site, ?string $vhost = null): void
{
$this->service->server->ssh()->write(
'/etc/caddy/sites-available/'.$site->domain,
$vhost ?? $this->generateVhost($site),
'root'
);
$this->service->server->systemd()->restart('caddy');
}
/**
* @throws SSHError
*/
public function getVHost(Site $site): string
{
return $this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.get-vhost', [
'domain' => $site->domain,
]),
);
}
/**
* @throws SSHError
*/
public function deleteSite(Site $site): void
{
$this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.delete-site', [
'domain' => $site->domain,
'path' => $site->path,
]),
'delete-vhost',
$site->id
);
$this->service->restart();
}
/**
* @throws SSHError
*/
public function changePHPVersion(Site $site, string $version): void
{
$this->service->server->ssh()->exec(
view('ssh.services.webserver.caddy.change-php-version', [
'domain' => $site->domain,
'oldVersion' => $site->php_version,
'newVersion' => $version,
]),
'change-php-version',
$site->id
);
}
/**
* @throws SSHError
*/
public function setupSSL(Ssl $ssl): void
{
if ($ssl->type == 'custom') {
$ssl->certificate_path = '/etc/ssl/'.$ssl->id.'/cert.pem';
$ssl->pk_path = '/etc/ssl/'.$ssl->id.'/privkey.pem';
$ssl->save();
$command = view('ssh.services.webserver.caddy.create-custom-ssl', [
'path' => dirname($ssl->certificate_path),
'certificate' => $ssl->certificate,
'pk' => $ssl->pk,
'certificatePath' => $ssl->certificate_path,
'pkPath' => $ssl->pk_path,
]);
$result = $this->service->server->ssh()->setLog($ssl->log)->exec(
$command,
'create-ssl',
$ssl->site_id
);
if (! $ssl->validateSetup($result)) {
throw new SSLCreationException;
}
}
}
/**
* @throws Throwable
*/
public function removeSSL(Ssl $ssl): void
{
if ($ssl->certificate_path) {
$this->service->server->ssh()->exec(
'sudo rm -rf '.dirname($ssl->certificate_path),
'remove-ssl',
$ssl->site_id
);
}
$this->updateVHost($ssl->site);
}
private function generateVhost(Site $site): string
{
$vhost = view('ssh.services.webserver.caddy.vhost', [
'site' => $site,
]);
return format_nginx_config($vhost);
}
}

View File

@ -6,7 +6,6 @@
use App\Exceptions\SSLCreationException;
use App\Models\Site;
use App\Models\Ssl;
use Closure;
use Throwable;
class Nginx extends AbstractWebserver
@ -34,21 +33,6 @@ public function install(): void
$this->service->server->os()->cleanup();
}
public function deletionRules(): array
{
return [
'service' => [
function (string $attribute, mixed $value, Closure $fail): void {
$hasSite = $this->service->server->sites()
->exists();
if ($hasSite) {
$fail('Cannot uninstall webserver while you have websites using it.');
}
},
],
];
}
/**
* @throws SSHError
*/
@ -80,18 +64,14 @@ public function createVHost(Site $site): void
$this->service->server->ssh()->write(
'/etc/nginx/sites-available/'.$site->domain,
view('ssh.services.webserver.nginx.vhost', [
'site' => $site,
]),
$this->generateVhost($site),
'root'
);
$this->service->server->ssh()->exec(
view('ssh.services.webserver.nginx.create-vhost', [
'domain' => $site->domain,
'vhost' => view('ssh.services.webserver.nginx.vhost', [
'site' => $site,
]),
'vhost' => $this->generateVhost($site),
]),
'create-vhost',
$site->id
@ -105,9 +85,7 @@ public function updateVHost(Site $site, ?string $vhost = null): void
{
$this->service->server->ssh()->write(
'/etc/nginx/sites-available/'.$site->domain,
$vhost ?? view('ssh.services.webserver.nginx.vhost', [
'site' => $site,
]),
$vhost ?? $this->generateVhost($site),
'root'
);
@ -209,4 +187,13 @@ public function removeSSL(Ssl $ssl): void
$this->updateVHost($ssl->site);
}
private function generateVhost(Site $site): string
{
$vhost = view('ssh.services.webserver.nginx.vhost', [
'site' => $site,
]);
return format_nginx_config($vhost);
}
}

View File

@ -87,4 +87,16 @@ public function disable(string $unit): string
return $this->server->ssh()->exec($command, sprintf('disable-%s', $unit));
}
/**
* @throws SSHError
*/
public function reload(): string
{
$command = <<<'EOD'
sudo systemctl daemon-reload
EOD;
return $this->server->ssh()->exec($command, 'reload-systemctl');
}
}

View File

@ -186,7 +186,7 @@ private function connectToEc2Client(?string $region = null): void
$credentials = $this->serverProvider->getCredentials();
if ($region === null || $region === '' || $region === '0') {
$region = $this->server->provider_data['region'];
$region = $this->server->provider_data['region'] ?? null;
}
$this->ec2Client = new Ec2Client([

View File

@ -218,3 +218,36 @@ function home_path(string $user): string
return '/home/'.$user;
}
function format_nginx_config(string $config): string
{
$lines = explode("\n", trim($config));
$indent = 0;
$formattedLines = [];
foreach ($lines as $line) {
$trimmed = trim($line);
// Preserve empty lines exactly as they are
if ($trimmed === '') {
$formattedLines[] = '';
continue;
}
// If line is a closing brace, decrease indentation first
if ($trimmed === '}') {
$indent--;
}
// Apply indentation
$formattedLines[] = str_repeat(' ', max(0, $indent)).$trimmed;
// If line contains an opening brace, increase indentation
if (str_ends_with($trimmed, '{')) {
$indent++;
}
}
return implode("\n", $formattedLines)."\n";
}

View File

@ -40,6 +40,7 @@ protected function getTableColumns(): array
return [
TextColumn::make('database.name')
->label('Database')
->tooltip(fn (Backup $record) => $record->database->deleted_at ? 'Deleted at '.$record->database->deleted_at->format('Y-m-d H:i:s') : null)
->searchable(),
TextColumn::make('storage.profile')
->label('Storage')

View File

@ -2,6 +2,7 @@
namespace App\Web\Pages\Servers\Sites;
use App\Models\Redirect;
use App\Models\ServerLog;
use App\Models\Site;
use App\Models\Ssl;
@ -75,6 +76,16 @@ public function getSecondSubNavigation(): array
]));
}
if ($user->can('view', [Redirect::class, $this->site, $this->server])) {
$items[] = NavigationItem::make(Pages\Redirects\Index::getNavigationLabel())
->icon('heroicon-o-arrows-right-left')
->isActiveWhen(fn () => request()->routeIs(Pages\Redirects\Index::getRouteName()))
->url(Pages\Redirects\Index::getUrl(parameters: [
'server' => $this->server,
'site' => $this->site,
]));
}
return [
NavigationGroup::make()
->items($items),

View File

@ -0,0 +1,43 @@
<?php
namespace App\Web\Pages\Servers\Sites\Pages\Redirects\Actions;
use App\Actions\Redirect\CreateRedirect;
use App\Models\Site;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Livewire\Component;
class Create
{
/**
* @return array<int, mixed>
*/
public static function form(Site $site): array
{
return [
TextInput::make('from')
->rules(CreateRedirect::rules($site)['from']),
TextInput::make('to')
->rules(CreateRedirect::rules($site)['to']),
Select::make('mode')
->rules(CreateRedirect::rules($site)['mode'])
->options([
'301' => '301 - Moved Permanently',
'302' => '302 - Found',
'307' => '307 - Temporary Redirect',
'308' => '308 - Permanent Redirect',
]),
];
}
/**
* @param array<string, mixed> $data
*/
public static function action(Component $component, array $data, Site $site): void
{
app(CreateRedirect::class)->create($site, $data);
$component->dispatch('$refresh');
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\Web\Pages\Servers\Sites\Pages\Redirects;
use App\Models\Redirect;
use App\Web\Pages\Servers\Sites\Page;
use App\Web\Pages\Servers\Sites\Pages\Redirects\Actions\Create;
use App\Web\Pages\Servers\Sites\Pages\Redirects\Widgets\RedirectsList;
use Filament\Actions\Action;
use Filament\Actions\CreateAction;
use Filament\Support\Enums\MaxWidth;
class Index extends Page
{
protected static ?string $slug = 'servers/{server}/sites/{site}/redirects';
protected static ?string $title = 'Redirects';
public function mount(): void
{
$this->authorize('view', [Redirect::class, $this->site, $this->server]);
}
public function getWidgets(): array
{
return [
[
RedirectsList::class, [
'site' => $this->site,
],
],
];
}
protected function getHeaderActions(): array
{
return [
Action::make('read-the-docs')
->label('Read the Docs')
->icon('heroicon-o-document-text')
->color('gray')
->url('https://vitodeploy.com/docs/sites/redirects')
->openUrlInNewTab(),
CreateAction::make('create')
->icon('heroicon-o-plus')
->createAnother(false)
->modalWidth(MaxWidth::ExtraLarge)
->label('New Redirect')
->form(Create::form($this->site))
->using(fn (array $data) => run_action($this, function () use ($data): void {
Create::action($this, $data, $this->site);
})),
];
}
}

View File

@ -0,0 +1,85 @@
<?php
namespace App\Web\Pages\Servers\Sites\Pages\Redirects\Widgets;
use App\Actions\Redirect\DeleteRedirect;
use App\Models\Redirect;
use App\Models\Site;
use App\Models\User;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as Widget;
use Illuminate\Database\Eloquent\Builder;
class RedirectsList extends Widget
{
public Site $site;
/**
* @var array<string>
*/
protected $listeners = ['$refresh'];
/**
* @return Builder<Redirect>
*/
protected function getTableQuery(): Builder
{
return Redirect::query()->where('site_id', $this->site->id);
}
protected function getTableColumns(): array
{
auth()->user();
return [
TextColumn::make('from')
->limit(40)
->tooltip(fn (Redirect $redirect) => $redirect->from)
->searchable()
->copyable(),
TextColumn::make('to')
->limit(40)
->tooltip(fn (Redirect $redirect) => $redirect->to)
->searchable()
->copyable(),
TextColumn::make('mode')
->searchable()
->sortable(),
TextColumn::make('status')
->label('Status')
->badge()
->color(fn (Redirect $redirect) => Redirect::$statusColors[$redirect->status])
->searchable()
->sortable(),
TextColumn::make('created_at')
->formatStateUsing(fn (Redirect $record) => $record->created_at)
->sortable(),
];
}
public function table(Table $table): Table
{
/** @var User $user */
$user = auth()->user();
return $table
->heading(null)
->query($this->getTableQuery())
->columns($this->getTableColumns())
->actions([
DeleteAction::make('delete')
->hiddenLabel()
->tooltip('Delete')
->icon('heroicon-o-trash')
->authorize(fn (Redirect $record) => $user->can('delete', [$this->site, $this->site->server]))
->using(function (Redirect $record): void {
run_action($this, function () use ($record): void {
app(DeleteRedirect::class)->delete($this->site, $record);
$this->dispatch('$refresh');
});
}),
]);
}
}

View File

@ -24,7 +24,11 @@ public static function form(Server $server, ?Site $site = null): array
->helperText('Example: php /home/vito/your-site/artisan queue:work'),
Select::make('user')
->rules(fn (callable $get) => CreateWorker::rules($server, $site)['user'])
->options(array_combine($server->getSshUsers(), $server->getSshUsers())),
->options(
$site instanceof Site ?
array_combine($site->getSshUsers(), $site->getSshUsers()) :
array_combine($server->getSshUsers(), $server->getSshUsers())
),
TextInput::make('numprocs')
->default(1)
->rules(CreateWorker::rules($server, $site)['numprocs'])

View File

@ -147,10 +147,11 @@ private function editAction(): Action
->helperText('Example: php /home/vito/your-site/artisan queue:work'),
Select::make('user')
->rules(fn (callable $get) => EditWorker::rules($this->server, $this->site)['user'])
->options([
'vito' => $this->server->ssh_user,
'root' => 'root',
]),
->options(
$this->site instanceof Site ?
array_combine($this->site->getSshUsers(), $this->site->getSshUsers()) :
array_combine($this->server->getSshUsers(), $this->server->getSshUsers())
),
TextInput::make('numprocs')
->default(1)
->rules(EditWorker::rules($this->server, $this->site)['numprocs'])

42
composer.lock generated
View File

@ -2808,16 +2808,16 @@
},
{
"name": "league/commonmark",
"version": "2.6.1",
"version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "d990688c91cedfb69753ffc2512727ec646df2ad"
"reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad",
"reference": "d990688c91cedfb69753ffc2512727ec646df2ad",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
"reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
"shasum": ""
},
"require": {
@ -2854,7 +2854,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.7-dev"
"dev-main": "2.8-dev"
}
},
"autoload": {
@ -2911,7 +2911,7 @@
"type": "tidelift"
}
],
"time": "2024-12-29T14:10:59+00:00"
"time": "2025-05-05T12:20:28+00:00"
},
{
"name": "league/config",
@ -3995,16 +3995,16 @@
},
{
"name": "nette/utils",
"version": "v4.0.5",
"version": "v4.0.6",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
"reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96"
"reference": "ce708655043c7050eb050df361c5e313cf708309"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
"reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
"url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309",
"reference": "ce708655043c7050eb050df361c5e313cf708309",
"shasum": ""
},
"require": {
@ -4075,9 +4075,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v4.0.5"
"source": "https://github.com/nette/utils/tree/v4.0.6"
},
"time": "2024-08-07T15:39:19+00:00"
"time": "2025-03-30T21:06:30+00:00"
},
{
"name": "nikic/php-parser",
@ -7172,16 +7172,16 @@
},
{
"name": "symfony/polyfill-php80",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
@ -7232,7 +7232,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
},
"funding": [
{
@ -7248,7 +7248,7 @@
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php83",
@ -11717,7 +11717,7 @@
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {},
"stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
@ -11725,6 +11725,6 @@
"ext-ftp": "*",
"ext-intl": "*"
},
"platform-dev": {},
"plugin-api-version": "2.6.0"
"platform-dev": [],
"plugin-api-version": "2.3.0"
}

View File

@ -211,7 +211,7 @@
// 'ExampleClass' => App\Example\ExampleClass::class,
])->toArray(),
'version' => '2.4.0',
'version' => '2.5.0',
'demo' => env('APP_DEMO', false),
];

View File

@ -26,6 +26,7 @@
'webservers' => [
\App\Enums\Webserver::NONE,
\App\Enums\Webserver::NGINX,
\App\Enums\Webserver::CADDY,
],
'php_versions' => [
\App\Enums\PHP::NONE,
@ -173,6 +174,7 @@
*/
'service_types' => [
'nginx' => 'webserver',
'caddy' => 'webserver',
'mysql' => 'database',
'mariadb' => 'database',
'postgresql' => 'database',
@ -186,6 +188,7 @@
],
'service_handlers' => [
'nginx' => \App\SSH\Services\Webserver\Nginx::class,
'caddy' => \App\SSH\Services\Webserver\Caddy::class,
'mysql' => \App\SSH\Services\Database\Mysql::class,
'mariadb' => \App\SSH\Services\Database\Mariadb::class,
'postgresql' => \App\SSH\Services\Database\Postgresql::class,
@ -201,6 +204,9 @@
'nginx' => [
'latest',
],
'caddy' => [
'latest',
],
'mysql' => [
'5.7',
'8.0',
@ -273,6 +279,17 @@
'latest' => 'nginx',
],
],
'caddy' => [
\App\Enums\OperatingSystem::UBUNTU20 => [
'latest' => 'caddy',
],
\App\Enums\OperatingSystem::UBUNTU22 => [
'latest' => 'caddy',
],
\App\Enums\OperatingSystem::UBUNTU24 => [
'latest' => 'caddy',
],
],
'mysql' => [
\App\Enums\OperatingSystem::UBUNTU20 => [
'5.7' => 'mysql',

View File

@ -0,0 +1,28 @@
<?php
namespace Database\Factories;
use App\Enums\RedirectStatus;
use App\Models\Redirect;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<Redirect>
*/
class RedirectFactory extends Factory
{
protected $model = Redirect::class;
/**
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'from' => $this->faker->word,
'to' => $this->faker->url,
'mode' => $this->faker->randomElement([301, 302, 307, 308]),
'status' => RedirectStatus::READY,
];
}
}

8
package-lock.json generated
View File

@ -19,7 +19,7 @@
"prettier-plugin-sh": "^0.14.0",
"prettier-plugin-tailwindcss": "^0.5.11",
"tailwindcss": "^3.4.10",
"vite": "^6.2.0"
"vite": "^6.2.5"
}
},
"node_modules/@alloc/quick-lru": {
@ -2832,9 +2832,9 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
"integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
"version": "6.2.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
"integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@ -21,6 +21,6 @@
"prettier-plugin-sh": "^0.14.0",
"prettier-plugin-tailwindcss": "^0.5.11",
"tailwindcss": "^3.4.10",
"vite": "^6.2.0"
"vite": "^6.2.5"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

9
resources/svg/caddy.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,19 @@
[Unit]
Description=Caddy web server
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,59 @@
{
# Global Errors Log
log {
output file /var/log/caddy/errors.log {
roll_size 100MB
roll_keep 10
roll_keep_for 720h # 30 days
}
format json {
time_format iso8601
}
level ERROR
exclude http.log.access
}
}
# Common snippets
(access_log) {
log {
output file /var/log/caddy/{args[0]}-access.log {
roll_size 100MB
roll_keep 10
roll_keep_for 720h # 30 days
}
format json {
time_format iso8601
}
}
}
(security_headers) {
header {
# Remove server and software information
-Server
-X-Powered-By
-Via
# Security headers
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "strict-origin-when-cross-origin"
X-XSS-Protection "1; mode=block"
Content-Security-Policy "upgrade-insecure-requests"
# Enable compression
defer
}
}
(compression) {
encode {
gzip 6
zstd
minimum_length 1024
}
}
import sites-enabled/*

View File

@ -0,0 +1,9 @@
if ! sudo sed -i 's/php{{ $oldVersion }}/php{{ $newVersion }}/g' /etc/caddy/sites-available/{{ $domain }}; then
echo 'VITO_SSH_ERROR' && exit 1
fi
if ! sudo service caddy restart; then
echo 'VITO_SSH_ERROR' && exit 1
fi
echo "PHP Version Changed to {{ $newVersion }}"

View File

@ -0,0 +1,13 @@
if ! sudo mkdir -p {{ $path }}; then
echo 'VITO_SSH_ERROR' && exit 1
fi
if ! echo "{{ $certificate }}" | sudo tee {{ $certificatePath }}; then
echo 'VITO_SSH_ERROR' && exit 1
fi
if ! echo "{{ $pk }}" | sudo tee {{ $pkPath }}; then
echo 'VITO_SSH_ERROR' && exit 1
fi
echo "Successfully received certificate."

View File

@ -0,0 +1,7 @@
export DEBIAN_FRONTEND=noninteractive
rm -rf {{ $path }}
mkdir {{ $path }}
chmod -R 755 {{ $path }}

View File

@ -0,0 +1,7 @@
if ! sudo ln -s /etc/caddy/sites-available/{{ $domain }} /etc/caddy/sites-enabled/; then
echo 'VITO_SSH_ERROR' && exit 1
fi
if ! sudo service caddy restart; then
echo 'VITO_SSH_ERROR' && exit 1
fi

View File

@ -0,0 +1,7 @@
rm -rf {{ $path }}
sudo rm /etc/caddy/sites-available/{{ $domain }}
sudo rm /etc/caddy/sites-enabled/{{ $domain }}
echo "Site deleted"

View File

@ -0,0 +1 @@
cat /etc/caddy/sites-available/{{ $domain }}

View File

@ -0,0 +1,20 @@
# Add Caddy's GPG key and repository
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
sudo tee /etc/apt/sources.list.d/caddy-stable.list
# Install required packages
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \
debian-keyring debian-archive-keyring apt-transport-https curl
# Update package list
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
# Install Caddy
sudo DEBIAN_FRONTEND=noninteractive apt-get install caddy -y
sudo mkdir /etc/caddy/sites-available
sudo mkdir /etc/caddy/sites-enabled

View File

@ -0,0 +1,3 @@
@foreach($site->activeRedirects as $redirect)
redir {{ $redirect->from }} {{ $redirect->to }} {{ $redirect->mode }}
@endforeach

View File

@ -0,0 +1,12 @@
sudo service caddy stop
sudo DEBIAN_FRONTEND=noninteractive sudo apt remove caddy -y
sudo rm -rf /etc/caddy
sudo rm -rf /var/log/caddy
sudo rm -rf /var/lib/caddy
sudo rm -rf /var/cache/caddy
sudo rm -rf /usr/share/caddy
sudo rm -rf /etc/systemd/system/caddy.service
sudo systemctl daemon-reload

View File

@ -0,0 +1,47 @@
{{ $site->domain }} {{ $site->getAliasesString() }} {
@if ($site->activeSsl)
tls {{ $site->activeSsl->certificate_path }} {{ $site->activeSsl->pk_path }}
@endif
@if ($site->activeSsl && $site->force_ssl)
redir @http https://{host}{uri} permanent
@endif
import access_log {{ $site->domain }}
import compression
import security_headers
@if ($site->type()->language() === 'php')
root * {{ $site->getWebDirectoryPath() }}
@php
$phpSocket = "unix//var/run/php/php{$site->php_version}-fpm.sock";
if ($site->isIsolated()) {
$phpSocket = "unix//run/php/php{$site->php_version}-fpm-{$site->user}.sock";
}
@endphp
try_files {path} {path}/ /index.php?{query}
php_fastcgi {{ $phpSocket }}
file_server
@endif
@if ($site->type === \App\Enums\SiteType::LOAD_BALANCER)
reverse_proxy {
@if ($site->loadBalancerServers()->count() > 0)
@foreach($site->loadBalancerServers as $server)
to {{ $server->ip }}:{{ $server->port }}
@endforeach
@else
to 127.0.0.1
@endif
@switch($site->type_data['method'] ?? \App\Enums\LoadBalancerMethod::ROUND_ROBIN)
@case(\App\Enums\LoadBalancerMethod::LEAST_CONNECTIONS)
lb_policy least_conn
@break
@case(\App\Enums\LoadBalancerMethod::IP_HASH)
lb_policy ip_hash
@break
@default
lb_policy round_robin
@endswitch
header_up Host {host}
header_up X-Real-IP {remote}
}
@endif
@include('ssh.services.webserver.caddy.redirects', ['site' => $site])
}

View File

@ -1,3 +0,0 @@
location {{ $from }} {
return {{ $mode }} {{ $to }};
}

View File

@ -0,0 +1,5 @@
@foreach($site->activeRedirects as $redirect)
location = {{ $redirect->from }} {
return {{ $redirect->mode }} {{ $redirect->to }};
}
@endforeach

View File

@ -1,7 +0,0 @@
if ! echo '{!! $redirects !!}' | sudo tee /etc/nginx/conf.d/{{ $domain }}_redirects; then
echo 'VITO_SSH_ERROR' && exit 1
fi
if ! sudo service nginx restart; then
echo 'VITO_SSH_ERROR' && exit 1
fi

View File

@ -1,9 +1,9 @@
@if ($site->activeSsl && $site->force_ssl)
server {
listen 80;
server_name {{ $site->domain }} {{ $site->getAliasesString() }};
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name {{ $site->domain }} {{ $site->getAliasesString() }};
return 301 https://$host$request_uri;
}
@endif
@php
@ -12,22 +12,22 @@
@if ($site->type === \App\Enums\SiteType::LOAD_BALANCER)
upstream {{ $backendName }} {
@switch($site->type_data['method'] ?? \App\Enums\LoadBalancerMethod::ROUND_ROBIN)
@case(\App\Enums\LoadBalancerMethod::LEAST_CONNECTIONS)
least_conn;
@break
@case(\App\Enums\LoadBalancerMethod::IP_HASH)
ip_hash;
@break
@default
@endswitch
@if ($site->loadBalancerServers()->count() > 0)
@foreach($site->loadBalancerServers as $server)
server {{ $server->ip }}:{{ $server->port }} {{ $server->backup ? 'backup' : '' }} {{ $server->weight ? 'weight='.$server->weight : '' }};
@endforeach
@else
server 127.0.0.1;
@endif
@switch($site->type_data['method'] ?? \App\Enums\LoadBalancerMethod::ROUND_ROBIN)
@case(\App\Enums\LoadBalancerMethod::LEAST_CONNECTIONS)
least_conn;
@break
@case(\App\Enums\LoadBalancerMethod::IP_HASH)
ip_hash;
@break
@default
@endswitch
@if ($site->loadBalancerServers()->count() > 0)
@foreach($site->loadBalancerServers as $server)
server {{ $server->ip }}:{{ $server->port }} {{ $server->backup ? 'backup' : '' }} {{ $server->weight ? 'weight='.$server->weight : '' }};
@endforeach
@else
server 127.0.0.1;
@endif
}
@endif
@ -71,11 +71,11 @@
@if ($site->type === \App\Enums\SiteType::LOAD_BALANCER)
location / {
proxy_pass http://{{ $backendName }}$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://{{ $backendName }}$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
@endif
@ -87,4 +87,6 @@
location ~ /\.(?!well-known).* {
deny all;
}
@include('ssh.services.webserver.nginx.redirects', ['site' => $site])
}

View File

@ -0,0 +1,82 @@
<?php
namespace Tests\Feature\API;
use App\Enums\RedirectStatus;
use App\Facades\SSH;
use App\Models\Redirect;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
class RedirectsTest extends TestCase
{
use RefreshDatabase;
public function test_create_redirect(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['read', 'write']);
$this->json('POST', route('api.projects.servers.sites.redirects.create', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $this->site,
]), [
'from' => 'testing/path',
'to' => 'https://example.com',
'mode' => 301,
])
->assertSuccessful()
->assertJsonFragment([
'from' => 'testing/path',
'to' => 'https://example.com',
'mode' => 301,
'status' => RedirectStatus::READY,
]);
}
public function test_see_redirects_list(): void
{
Sanctum::actingAs($this->user, ['read']);
/** @var Redirect $redirect */
$redirect = Redirect::factory()->create([
'site_id' => $this->site->id,
]);
$this->json('GET', route('api.projects.servers.sites.redirects.index', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $this->site,
]))
->assertSuccessful()
->assertJsonFragment([
'from' => $redirect->from,
'to' => $redirect->to,
'mode' => $redirect->mode,
'status' => $redirect->status,
]);
}
public function test_delete_redirect(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['write']);
$this->json('DELETE', route('api.projects.servers.sites.redirects.delete', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $this->site,
'redirect' => $this->redirect->id,
]))
->assertSuccessful()
->assertNoContent();
$this->assertDatabaseMissing('redirects', [
'id' => $this->redirect->id,
]);
}
}

View File

@ -68,6 +68,31 @@ public function test_create_server(): void
]);
}
public function test_create_server_with_caddy(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
SSH::fake('Active: active'); // fake output for service installations
$this->json('POST', route('api.projects.servers.create', [
'project' => $this->user->current_project_id,
]), [
'provider' => ServerProvider::CUSTOM,
'name' => 'test',
'ip' => '1.1.1.1',
'port' => '22',
'os' => OperatingSystem::UBUNTU22,
'webserver' => Webserver::CADDY,
'database' => Database::MYSQL80,
'php' => '8.2',
])
->assertSuccessful()
->assertJsonFragment([
'name' => 'test',
'type' => ServerType::REGULAR,
]);
}
public function test_delete_server(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);

View File

@ -2,6 +2,7 @@
namespace Tests\Feature\API;
use App\Enums\DeploymentStatus;
use App\Enums\LoadBalancerMethod;
use App\Enums\SourceControl;
use App\Facades\SSH;
@ -118,6 +119,30 @@ public function test_delete_site(): void
->assertNoContent();
}
public function test_update_aliases(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$this->json('PUT', route('api.projects.servers.sites.aliases', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]), [
'aliases' => ['example.com', 'example.net'],
])
->assertSuccessful()
->assertJsonFragment([
'aliases' => ['example.com', 'example.net'],
]);
}
public function test_update_load_balancer(): void
{
SSH::fake();
@ -166,6 +191,202 @@ public function test_update_load_balancer(): void
]);
}
public function test_deploy_site(): void
{
SSH::fake();
Http::fake([
'https://api.github.com/repos/*' => Http::response([
'commit' => [
'sha' => 'abc123',
'commit' => [
'message' => 'Test commit',
'author' => [
'name' => 'Test Author',
'email' => 'test@example.com',
'date' => now()->toIso8601String(),
],
],
],
], 200),
]);
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$script = $site->deploymentScript;
$script->content = 'git pull';
$script->save();
$this->json('POST', route('api.projects.servers.sites.deploy', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]))
->assertSuccessful()
->assertJsonStructure([
'id',
'status',
]);
$this->assertDatabaseHas('deployments', [
'site_id' => $site->id,
'status' => DeploymentStatus::FINISHED,
]);
}
public function test_update_deployment_script(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$scriptContent = "git pull\ncomposer install\nphp artisan migrate";
$this->json('PUT', route('api.projects.servers.sites.deployment-script', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]), [
'script' => $scriptContent,
])
->assertSuccessful()
->assertNoContent();
$this->assertDatabaseHas('deployment_scripts', [
'site_id' => $site->id,
'content' => $scriptContent,
]);
}
public function test_update_deployment_script_without_content(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$this->json('PUT', route('api.projects.servers.sites.deployment-script', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]), [])
->assertStatus(422)
->assertJsonValidationErrors(['script']);
}
public function test_show_deployment_script(): void
{
Sanctum::actingAs($this->user, ['read']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$scriptContent = "git pull\ncomposer install";
$site->deploymentScript->update([
'content' => $scriptContent,
]);
$this->json('GET', route('api.projects.servers.sites.deployment-script.show', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]))
->assertSuccessful()
->assertJsonPath('script', $scriptContent);
}
public function test_show_env(): void
{
$envContent = "APP_NAME=Laravel\nAPP_ENV=production";
SSH::fake($envContent);
Sanctum::actingAs($this->user, ['read']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$this->json('GET', route('api.projects.servers.sites.env.show', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]))
->assertSuccessful()
->assertJsonStructure([
'data' => [
'env',
],
])
->assertJsonFragment([
'env' => $envContent,
]);
}
public function test_show_env_unauthorized(): void
{
SSH::fake();
Sanctum::actingAs($this->user, []); // no abilities
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$this->json('GET', route('api.projects.servers.sites.env.show', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]))
->assertForbidden();
}
public function test_update_env(): void
{
SSH::fake();
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var Site $site */
$site = Site::factory()->create([
'server_id' => $this->server->id,
]);
$envContent = "APP_NAME=Laravel\nAPP_ENV=production";
$this->json('PUT', route('api.projects.servers.sites.env', [
'project' => $this->server->project,
'server' => $this->server,
'site' => $site,
]), [
'env' => $envContent,
])
->assertSuccessful()
->assertJsonFragment([
'domain' => $site->domain,
]);
SSH::assertExecuted('edit-file');
}
public static function create_data(): array
{
return \Tests\Feature\SitesTest::create_data();

View File

@ -0,0 +1,82 @@
<?php
namespace Tests\Feature;
use App\Enums\RedirectStatus;
use App\Facades\SSH;
use App\Models\Redirect;
use App\Web\Pages\Servers\Sites\Pages\Redirects\Index;
use App\Web\Pages\Servers\Sites\Pages\Redirects\Widgets\RedirectsList;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Livewire;
use Tests\TestCase;
class RedirectsTest extends TestCase
{
use RefreshDatabase;
public function test_see_redirects(): void
{
$this->actingAs($this->user);
$redirect = Redirect::factory()->create([
'site_id' => $this->site->id,
]);
$this->get(
Index::getUrl([
'server' => $this->server,
'site' => $this->site,
])
)
->assertSuccessful()
->assertSee($redirect->from);
}
public function test_delete_redirect(): void
{
SSH::fake();
$this->actingAs($this->user);
$redirect = Redirect::factory()->create([
'site_id' => $this->site->id,
]);
Livewire::test(RedirectsList::class, [
'server' => $this->server,
'site' => $this->site,
])
->callTableAction('delete', $redirect->id)
->assertSuccessful();
$this->assertDatabaseMissing('redirects', [
'id' => $redirect->id,
]);
}
public function test_create_redirect(): void
{
SSH::fake();
$this->actingAs($this->user);
Livewire::test(Index::class, [
'server' => $this->server,
'site' => $this->site,
])
->callAction('create', [
'from' => 'some-path',
'to' => 'https://example.com/redirect',
'mode' => 301,
])
->assertSuccessful();
$this->assertDatabaseHas('redirects', [
'from' => 'some-path',
'to' => 'https://example.com/redirect',
'mode' => 301,
'status' => RedirectStatus::READY,
]);
}
}

View File

@ -83,6 +83,63 @@ public function test_create_regular_server(): void
]);
}
public function test_create_regular_server_with_caddy(): void
{
$this->actingAs($this->user);
SSH::fake('Active: active'); // fake output for service installations
Livewire::test(Index::class)
->callAction('create', [
'provider' => ServerProvider::CUSTOM,
'name' => 'caddy-test',
'ip' => '2.2.2.2',
'port' => '22',
'os' => OperatingSystem::UBUNTU22,
'webserver' => Webserver::CADDY,
'database' => Database::MYSQL80,
'php' => '8.2',
])
->assertSuccessful();
$this->assertDatabaseHas('servers', [
'name' => 'caddy-test',
'ip' => '2.2.2.2',
'status' => ServerStatus::READY,
]);
$this->assertDatabaseHas('services', [
'server_id' => 2,
'type' => 'php',
'version' => '8.2',
'status' => ServiceStatus::READY,
]);
$this->assertDatabaseHas('services', [
'server_id' => 2,
'type' => 'webserver',
'name' => 'caddy',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
$this->assertDatabaseHas('services', [
'server_id' => 2,
'type' => 'database',
'name' => 'mysql',
'version' => '8.0',
'status' => ServiceStatus::READY,
]);
$this->assertDatabaseHas('services', [
'server_id' => 2,
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
}
public function test_delete_server(): void
{
$this->actingAs($this->user);

View File

@ -7,6 +7,7 @@
use App\Enums\UserRole;
use App\Enums\Webserver;
use App\Models\NotificationChannel;
use App\Models\Redirect;
use App\Models\Server;
use App\Models\Site;
use App\Models\SourceControl;
@ -24,6 +25,8 @@ abstract class TestCase extends BaseTestCase
protected Site $site;
protected Redirect $redirect;
protected NotificationChannel $notificationChannel;
public const EXPECT_SUCCESS = true;
@ -108,6 +111,10 @@ private function setupSite(): void
'web_directory' => 'public',
'branch' => 'main',
]);
$this->redirect = Redirect::factory()->create([
'site_id' => $this->site->id,
]);
}
private function setupKeys(): void

View File

@ -75,6 +75,29 @@ public function test_install_nginx(): void
$this->assertNotNull($service->type_data);
}
public function test_install_caddy(): void
{
$this->server->webserver()->delete();
SSH::fake('Active: active');
$service = app(Install::class)->install($this->server, [
'type' => 'webserver',
'name' => 'caddy',
'version' => 'latest',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'caddy',
'type' => 'webserver',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
public function test_install_mysql(): void
{
$this->server->database()->delete();

View File

@ -51,6 +51,18 @@ public function test_cannot_uninstall_nginx(): void
app(Uninstall::class)->uninstall($this->server->webserver());
}
/**
* Cannot uninstall caddy because some sites using it
*/
public function test_cannot_uninstall_caddy(): void
{
SSH::fake();
$this->expectException(ValidationException::class);
app(Uninstall::class)->uninstall($this->server->webserver());
}
/**
* Cannot uninstall mysql because some databases exist
*/