Compare commits

...

171 Commits

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

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

* fix plugin uninstall

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

* wip

* cleanup

* notification channels

* phpstan

* services

* remove server types

* refactoring

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

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

* add config for caddy

* add svg icon

* add caddy service class

* wip

* install caddy

* create base Caddyfile with common snippets

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

* create uninstall file

* wip

* create path

* create vhost

* get vhost

* delete site

* add php version change file

* add custom ssl

* create redirect file

* add vhost for caddy site & load balancer

* update svg

* fix caddy icon

* fix style

* add systemctl reload method

* Reload systemd after modifying the Caddy service file.

* add caddy

* added tests

* format with pint

* prevent multiple web server installations

* added error log & access log

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

* upgrade scribe to v5

* fix lint
2025-04-21 21:56:53 +02: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
f89e7af34e fix server workers 500 error 2025-03-16 14:38:10 +01:00
7886e2a113 Bump version 2.4.0 (#548) 2025-03-16 14:10:55 +01:00
72352aad8d Add workers to servers (#547) 2025-03-16 14:09:15 +01:00
48ae561ea4 code-style 2025-03-13 20:53:14 +01:00
0f06d81aac Add database and database users sync (#537)
* Add database and database users sync

* get mysl users

* add mariadb and postgres

* fix phpstan
2025-03-12 22:59:25 +01:00
493cbb0849 Add phpstan level 7(#544) 2025-03-12 13:31:10 +01:00
c22bb1fa80 Add isolated users to headless console (#533) 2025-03-07 00:14:45 +01:00
babf59350b Fix run_action helper (#540)
* Fix run_action helper

* upgrade actions

* upgrade actions
2025-03-05 20:36:18 +01:00
5a12ed76bb Database collations (#489)
* SyncDatabases

* Collation on Create inc WordPress

* Refactored Enum

* Resolve sync issue

* Fix for PostgreSQL

* pint

* reversed enum

* style adjustments

* add unit tests

* style

* fix tests

* more tests

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-03-02 17:18:27 +01:00
269ee8d962 Fix: Sail default container name to match docker-compose.yml (#532)
By default, Sail looks for the `laravel.test` container when running `sail artisan`, but the `docker-compose.yml` in this project defines the service as `app`. This caused `sail artisan` and other Sail commands to fail locally.

Updated the `APP_SERVICE` environment variable in `sail` to default to `app` instead of `laravel.test`, ensuring consistency with the service name in `docker-compose.yml`.
2025-03-02 14:06:58 +01:00
a060a06e73 add default commands 2025-03-02 12:08:18 +01:00
49137a757b Fix console working directory for root user (#525)
Previously, `$(pwd)` was expanded too early by the parent shell, leading to incorrect working directory output when `cd` was executed within `$request->command`. Replaced `echo "VITO_WORKING_DIR: $(pwd)"` with `echo -n "VITO_WORKING_DIR: " && pwd` to ensure `pwd` executes at the right moment inside the same shell session.

Closes #515
2025-03-02 10:55:06 +01:00
97e20206e8 ite Commands (#298) (#519)
* feat: Implement Site Commands (#298)

- Introduced a Commands widget/table for Site view, allowing users to create, edit, delete, and execute commands.
- Each Site Type now has a predefined set of commands inserted upon site creation.
- A migration script ensures commands are created for existing sites.
- Implemented necessary policies for command management.
- Added feature tests to validate functionality.

* I'm trying to fix the tests, but it seems like it might not work. I'm having trouble running the tests locally for some reason.

* I'm trying to fix the tests, but it seems like it might not work. I'm having trouble running the tests locally for some reason.

* I'm trying to fix the tests, but it seems like it might not work. I'm having trouble running the tests locally for some reason.

* I'm trying to fix the tests, but it seems like it might not work. I'm having trouble running the tests locally for some reason.

* Remove feature tests for commands due to inconsistencies for now

* fixes

* add tests for commands

* ui fix and add to wordpress

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-03-02 10:43:26 +01:00
176ff3bbc4 fix: Fix variables not being saved in database when executing a script (#518) 2025-02-28 23:26:18 +01:00
b2440586d6 fix: Fix regex in File Manager to support hyphenated usernames and groups (#516) 2025-02-28 19:49:33 +01:00
4b8e798e66 fix: prevent "null" from appearing in console after user selection (#501) (#514)
Ensure a default working directory is returned when fetching the console working directory. Previously, if a user is switched before running any commands, `Cache::get` would return `null`. Now, it defaults to `'~'` if no value exists.

Closes #501.
2025-02-28 19:44:12 +01:00
6143eb94b4 feat: display repository and branch in site details (#512)
Added `repository` and `branch` fields to the site details view. These fields are now visible when a site has a corresponding repository or branch and are formatted accordingly.
2025-02-28 19:43:20 +01:00
e52903c649 fix: ensure newly created branches are available for switching (#511)
Fixed an issue where the "Change Branch" button didn't work when switching to a newly created remote branch after initially cloning the repository. Added `git fetch origin` to update branch references before switching.
2025-02-28 19:38:38 +01:00
1a5cf4c57a fix: add missing php-intl package (#510)
Added `php{{ $version }}-intl` to the installation list as it was missing. This package is a standard component in most projects and should be included by default.
2025-02-28 19:38:10 +01:00
d8ece27964 Add logs:clear command (#509) 2025-02-27 22:19:50 +01:00
f54c754971 update docker publish script 2025-02-26 21:22:59 +01:00
7cda14cb76 Bump version 2.3.0 2025-02-26 20:49:20 +01:00
3bf3f7eebc Fix filemanager permissions (#508)
* Fix filemanager permissions

* fix filemanager permissions

* fix tests warning
2025-02-26 20:46:07 +01:00
e17fdbb1a0 Bump esbuild, laravel-vite-plugin and vite (#507)
Bumps [esbuild](https://github.com/evanw/esbuild) to 0.25.0 and updates ancestor dependencies [esbuild](https://github.com/evanw/esbuild), [laravel-vite-plugin](https://github.com/laravel/vite-plugin) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). These dependencies need to be updated together.


Updates `esbuild` from 0.18.20 to 0.25.0
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2023.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.18.20...v0.25.0)

Updates `laravel-vite-plugin` from 0.7.8 to 1.2.0
- [Release notes](https://github.com/laravel/vite-plugin/releases)
- [Changelog](https://github.com/laravel/vite-plugin/blob/1.x/CHANGELOG.md)
- [Upgrade guide](https://github.com/laravel/vite-plugin/blob/1.x/UPGRADE.md)
- [Commits](https://github.com/laravel/vite-plugin/compare/v0.7.8...v1.2.0)

Updates `vite` from 4.5.9 to 6.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.2.0/packages/vite)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-type: indirect
- dependency-name: laravel-vite-plugin
  dependency-type: direct:development
- 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>
2025-02-26 19:33:33 +01:00
e99146209e Fix auto-deployment branch (#506) 2025-02-23 12:50:46 +01:00
1223ea1499 Fix .env Files for Isolated Users (#496) 2025-02-22 09:23:03 +01:00
2356e44f5b Fix deployment script command (#498) 2025-02-19 20:13:26 +01:00
8c7c3d2192 Refactor firewall and add edit rule (#488) 2025-02-16 20:31:58 +01:00
e2b9d18a71 Built-in File Manager (#458) 2025-02-16 19:56:21 +01:00
75e554ad74 Disable docker build action (#494) 2025-02-16 16:25:59 +01:00
4d59529767 Increase the content width (#492) 2025-02-16 15:22:44 +01:00
ea31d0978f Cache docker build 2025-02-16 13:15:02 +01:00
ee4e9e5452 Upgrade docker to Ubuntu 24.04 2025-02-16 12:38:48 +01:00
48c12e26b2 Fix docker build 2025-02-16 12:36:33 +01:00
72f68b5917 Fix docker build (#491) 2025-02-16 12:32:36 +01:00
a889cf11a2 Fix different PHP version for sites (#487) 2025-02-16 10:58:58 +01:00
75a4fde8de Update the vhost file to name the backend after the domain (#485) 2025-02-15 09:33:40 +01:00
fd67097884 Add mariadb missing blades (#476)
* Add missing views for Mariadb

* Add missing restore link

* adding test to avoid such issues

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-02-07 20:24:08 +01:00
705d029a63 bump version to 2.2.1 (#474) 2025-02-07 18:24:02 +01:00
7be63384d4 fix html especial characters in commands (#467) 2025-02-06 20:34:01 +01:00
dd78c86a60 Fix missing ip for AWS and DO (#461)
* Fix missing ip for AWS and DO

* Fix Vultr
2025-02-05 21:26:09 +01:00
262c5e040d Force SSL and Multi SSL (#456) 2025-02-01 01:33:04 +01:00
ea396786e4 Start installing servers quicker (#454) 2025-01-31 00:20:41 +01:00
6966f06b1a Add load balancer (#453) 2025-01-30 23:52:51 +01:00
53e20cbc2a Ask for email when generating LetsEncrypt SSLs (#452) 2025-01-29 21:00:43 +01:00
270928af13 Fix server creation validation error (#451) 2025-01-29 20:55:22 +01:00
1e4a944acb Fix isolated user validation (#450) 2025-01-29 20:17:47 +01:00
d702b95e0c Add notification for deployment completion (#445)
* Add notification for deployment completion

Add notification for deployment completion status.

* Create `DeploymentCompleted` notification class in `app/Notifications/DeploymentCompleted.php` to handle deployment completion notifications.
* Update `app/Actions/Site/Deploy.php` to send `DeploymentCompleted` notification using `Notifier` when a deployment completes or fails.
* Import `Notifier` and `DeploymentCompleted` classes in `app/Actions/Site/Deploy.php`.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/vitodeploy/vito?shareId=XXXX-XXXX-XXXX-XXXX).

* Format with pint

* Add tests

* Pint format

* Delete tests/Feature/Notifications/DeploymentCompletedTest.php

* Delete tests/Unit/Notifications/DeploymentCompletedTest.php

* 🍻🍻

* tests

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-01-29 19:29:51 +01:00
7b723bcba5 move site logs to separate sub-menu (#449) 2025-01-28 23:06:43 +01:00
8b58834a31 update composer and npm packages and rebuild (#448) 2025-01-28 22:40:21 +01:00
cdbde063f0 use blade as conmmands template (#444)
* use blade as conmmands template

* fix lint

* fix ssl
2025-01-27 21:27:58 +01:00
a73476c1dd Edit & Download (local) Backups (#436)
* Allow editing of backups

* pint updates

* setup of backup download

* allow download for local backup files

* delete uploaded files on delete of BackupFile

* pint updates

* S3 upload & download fixes

* Deletion of backup files

* support $ARCH selector for s3 installation

* delete files when deleting backup

* fixed ui issue

* adjustment

* Use system temp path for downloads

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-01-25 21:59:35 +01:00
465951fd1e drop telescope tables (#442) 2025-01-25 20:56:16 +01:00
b63ddfc568 WordPress Deployment Fix (#441)
* Resolved Issue with WordPress

* Fix for Vito User
2025-01-22 20:24:44 +01:00
bfdf3533fd Filter out project users (#437) 2025-01-18 21:29:18 +01:00
c1ae58772c Isolate Users (#431)
* WIP to isolate users

* Resolved issue with SSH AsUser

Updated Isolated User Script to use Server User for Team Access
Updated Path creation script to simplify for running as the isolated user

* Included the server user

* PHPMyAdmin script updated

Wordpress Script Updated
Updated Execute Script to support executing as isolated users

* Issue Resolution & Resolved Failing Unit Tests

* Fix for isolated_username vs user

* Run the deploy as the isolated user

* queue updates for isolated user

* Support isolated users in cronjobs

* script tests for isolated users

* Queue tests for isolated users

* Cronjob tests for isolated user

* Removed default queue command for laravel apps

* add default user to factory

* laravel pint fixes

* ensure echos are consistent

* removed unneeded parameter

* update

* fix queues for isolated users

* revert addslashes

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-01-18 01:17:48 +01:00
5947ae80bb Fix Deployment Script on Windows Clients (#433)
* resolve issue with EOL

* Manual Run

* reverse change for manual run of tests

* remove logging
2025-01-16 21:03:53 +01:00
93a7bf9c3a make mask nullable and do a strict compare to allow firwall rules without masks (#432) 2025-01-13 17:28:59 +01:00
a0940d4581 Bump nesbot/carbon from 3.8.2 to 3.8.4 (#426)
Bumps [nesbot/carbon](https://github.com/CarbonPHP/carbon) from 3.8.2 to 3.8.4.
- [Release notes](https://github.com/CarbonPHP/carbon/releases)
- [Commits](https://github.com/CarbonPHP/carbon/compare/3.8.2...3.8.4)

---
updated-dependencies:
- dependency-name: nesbot/carbon
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-11 20:09:13 +01:00
e976709522 add manual dispatch to docker workflows 2025-01-11 16:11:00 +01:00
5aa100519e Update version to 2.1.0 2025-01-11 15:02:18 +00:00
ab43dfb2a6 fix deploy error without script (#420) 2025-01-05 13:02:17 +01:00
a320e52dbf fix default project of admin (#419) 2025-01-05 12:40:17 +01:00
20c6b58866 fix missing composer (#418) 2025-01-05 12:12:49 +01:00
f5c9d6701b add directory state to console (#416) 2025-01-01 23:52:27 +01:00
ba069a2db0 set server_tokens off for every created server (#414) 2025-01-01 13:07:55 +01:00
8b86ff23c9 fix create queue with root user (#409)
* fix create queue with root user

* fix

* fix queues for root user
2024-12-30 11:33:00 +01:00
dfdd50beb7 Mysql 8.4 support and Stream log output (#407) 2024-12-24 23:30:52 +01:00
924920e6e8 Feature/nodejs (#397)
* Add node support using nvm

* Add icon

* Rename to NodeJS

* Rename to NodeJS

* update php and node logo

* only services which have units can be started,restarted,stopped,disabled and enabled

* add tests

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
2024-12-24 17:49:27 +01:00
da1043185a fix docker builds (#402) 2024-12-23 17:29:51 +01:00
ea3d64607a support S3 compatible storage providers (#401) 2024-12-22 23:06:36 +01:00
db81583884 update actions (#393) 2024-12-14 17:31:55 +01:00
1364 changed files with 66586 additions and 30311 deletions

View File

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

View File

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

44
.github/workflows/code-quality.yml vendored Normal file
View File

@ -0,0 +1,44 @@
name: code-quality
on:
push:
branches:
- 2.x
- 3.x
pull_request:
branches:
- 2.x
- 3.x
jobs:
tests:
runs-on: ubuntu-22.04
strategy:
fail-fast: true
matrix:
php: [ 8.4 ]
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install dependencies
if: steps.composer-cache.outputs.cache-hit != 'true'
run: composer install --prefer-dist --no-progress --no-suggest
- name: Run PHPStan
run: ./vendor/bin/phpstan analyse

View File

@ -6,6 +6,7 @@ on:
- main - main
- 1.x - 1.x
- 2.x - 2.x
- 3.x
pull_request: pull_request:
jobs: jobs:
@ -15,11 +16,11 @@ jobs:
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php: [ 8.2 ] php: [ 8.4 ]
node-version: [ "20.x" ] node-version: [ "20.x" ]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
@ -28,7 +29,7 @@ jobs:
- name: Cache Composer packages - name: Cache Composer packages
id: composer-cache id: composer-cache
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: vendor path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
@ -43,12 +44,12 @@ jobs:
run: ./vendor/bin/pint --test run: ./vendor/bin/pint --test
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v2 uses: actions/setup-node@v4
with: with:
node-version: "20.x" node-version: "20.x"
- name: Install NPM Dependencies - name: Install NPM Dependencies
run: npm install run: npm install --force
- name: Run lint - name: Run lint
run: npm run lint run: npm run lint

View File

@ -1,36 +1,34 @@
name: Build and push Docker image name: Docker Latest
on: on:
push: workflow_dispatch:
branches: # push:
- 1.x # branches:
- 2.x # - 2.x
jobs: jobs:
build-and-push: build-and-push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v4
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image - name: Build and push to the latest tag
run: | run: |
docker buildx build . \ docker buildx build . \
-f docker/Dockerfile \ -f docker/Dockerfile \
-t vitodeploy/vito:${{ github.head_ref || github.ref_name }} \ -t vitodeploy/vito:latest \
--build-arg="RELEASE=0" \
--platform linux/amd64,linux/arm64 \ --platform linux/amd64,linux/arm64 \
--no-cache \
--push --push

View File

@ -1,44 +1,52 @@
name: Build and push Docker image name: Docker Release
on: on:
release: workflow_dispatch:
types: [ created ] # release:
# types: [ created ]
jobs: jobs:
build-and-push: build-and-push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v4
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image - name: Build and push to the release tag
run: | run: |
docker buildx build . \ docker buildx build . \
-f docker/Dockerfile \ -f docker/Dockerfile \
-t vitodeploy/vito:${{ github.event.release.tag_name }} \ -t vitodeploy/vito:${{ github.event.release.tag_name }} \
--build-arg="RELEASE=0" \
--platform linux/amd64,linux/arm64 \ --platform linux/amd64,linux/arm64 \
--no-cache \ --no-cache \
--push --push
- name: Build and push latest tag - name: Build and push to the 1.x tag
if: startsWith(github.event.release.target_commitish, '1.x')
run: |
docker buildx build . \
-f docker/Dockerfile \
-t vitodeploy/vito:1.x \
--platform linux/amd64,linux/arm64 \
--push
- name: Build and push to the 2.x tag
if: startsWith(github.event.release.target_commitish, '2.x') if: startsWith(github.event.release.target_commitish, '2.x')
run: | run: |
docker buildx build . \ docker buildx build . \
-f docker/Dockerfile \ -f docker/Dockerfile \
-t vitodeploy/vito:latest \ -t vitodeploy/vito:2.x \
--build-arg="RELEASE=0" \
--platform linux/amd64,linux/arm64 \ --platform linux/amd64,linux/arm64 \
--push --push

View File

@ -6,6 +6,7 @@ on:
- main - main
- 1.x - 1.x
- 2.x - 2.x
- 3.x
pull_request: pull_request:
jobs: jobs:
@ -15,10 +16,11 @@ jobs:
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php: [ 8.2 ] php: [ 8.4 ]
node-version: [ "22.x" ]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
@ -27,12 +29,13 @@ jobs:
- name: Cache Composer packages - name: Cache Composer packages
id: composer-cache id: composer-cache
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: vendor path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: | restore-keys: |
${{ runner.os }}-php- ${{ runner.os }}-php-
- name: Install dependencies - name: Install dependencies
if: steps.composer-cache.outputs.cache-hit != 'true' if: steps.composer-cache.outputs.cache-hit != 'true'
run: composer install --prefer-dist --no-progress --no-suggest run: composer install --prefer-dist --no-progress --no-suggest
@ -40,5 +43,22 @@ jobs:
- name: Create sqlite database - name: Create sqlite database
run: touch storage/database-test.sqlite run: touch storage/database-test.sqlite
- name: Set up the .env file
run: touch .env
- name: Generate Application Key
run: php artisan key:generate
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
- name: Install NPM Dependencies
run: npm install --force
- name: Build assets
run: npm run build
- name: Run test suite - name: Run test suite
run: php artisan test run: php artisan test

1
.gitignore vendored
View File

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

View File

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

View File

@ -1,26 +1,46 @@
{ {
"plugins": [ "semi": true,
"prettier-plugin-blade", "singleQuote": true,
"prettier-plugin-tailwindcss", "singleAttributePerLine": false,
"prettier-plugin-sh" "htmlWhitespaceSensitivity": "css",
], "printWidth": 150,
"overrides": [ "tailwindFunctions": [
{ "clsx",
"files": ["*.blade.php"], "cn"
"options": { ],
"parser": "blade", "tabWidth": 2,
"printWidth": 120, "plugins": [
"htmlWhitespaceSensitivity": "ignore", "prettier-plugin-blade",
"tabWidth": 4, "prettier-plugin-tailwindcss",
"quoteProps": "consistent", "prettier-plugin-sh"
"trailingComma": "none" ],
} "overrides": [
}, {
{ "files": [
"files": ["*.sh"], "*.blade.php"
"options": { ],
"parser": "sh" "options": {
} "parser": "blade",
} "printWidth": 120,
] "htmlWhitespaceSensitivity": "ignore",
"tabWidth": 4,
"quoteProps": "consistent",
"trailingComma": "none"
}
},
{
"files": [
"*.sh"
],
"options": {
"parser": "sh"
}
},
{
"files": "**/*.yml",
"options": {
"tabWidth": 2
}
}
]
} }

View File

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

View File

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

View File

@ -1,219 +1,160 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: cron-jobs name: Endpoints
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6ed1gv5ak6hEPcaV8D3Z4bf'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs' uri: 'api/servers/{server_id}/agent/{id}'
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: ''
description: 'Create a new cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: server_id:
name: project_id name: server_id
description: 'The ID of the project.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: id:
name: server_id name: id
description: 'The ID of the server.' description: 'The ID of the agent.'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 server_id: 6
server_id: 3 id: architecto
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
command: load:
name: command name: load
description: '' description: ''
required: true required: true
example: qui example: 4326.41688
type: string type: number
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
user: memory_total:
name: user name: memory_total
description: '' description: ''
required: true required: true
example: root example: 4326.41688
type: string type: number
enumValues: enumValues: []
- root
- vito
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
frequency: memory_used:
name: frequency name: memory_used
description: 'Frequency of the cron job.' description: ''
required: true required: true
example: '* * * * *' example: 4326.41688
type: string type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
command: qui load: 4326.41688
user: root memory_total: 4326.41688
frequency: '* * * * *' memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
fileParameters: [] fileParameters: []
responses: responses: []
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer VEfc5h3gva68PkZ46Deabd1'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- GET 0: GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}' 2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: ''
description: 'Get a cron job by ID.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 5
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
cronJob_id: 5
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -221,89 +162,21 @@ endpoints:
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 404
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}' content: |-
headers: [] {
description: '' "message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 614DaP5vZ6edcaVEgfhk83b'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete cron job.'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 5
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
cronJob_id: 5
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer gDV6bZ1dEckvf45P86eaha3'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: databases name: cron-jobs
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all cron jobs.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"clockman","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"wvonrueden","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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer efEV4g86bd5PZac6vak3Dh1'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,89 +92,6 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: nesciunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: nesciunt
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"johanna76","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 3E6VD14dvaekbaZfh6Pg8c5'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata:
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database 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: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the database.'
required: true
example: 6 example: 6
type: integer type: integer
enumValues: [] enumValues: []
@ -188,8 +100,111 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
id: 6 queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: ''
required: true
example: vito
type: string
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: architecto
user: vito
frequency: '* * * * *'
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -198,15 +213,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"chloe.huel","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fb5hVc38e1aDP6ZvkgEda46'
controller: null controller: null
method: null method: null
route: null route: null
@ -214,18 +226,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -243,17 +254,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
database_id: cronJob_id:
name: database_id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 6 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -261,8 +272,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
database_id: 6 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -271,15 +282,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer cPVbhaZkfg5aEv46D183ed6'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: database-users name: databases
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all databases.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"nyasia68","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"madyson20","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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer egc5VaDdvabfP6843k61hZE'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,57 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
username: name:
name: username name: name
description: '' description: ''
required: true required: true
example: dignissimos example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
password: charset:
name: password name: charset
description: '' description: ''
required: true required: true
example: OK+XEG2) example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
host: collation:
name: host name: collation
description: 'Host, if it is a remote user.' description: ''
required: true required: true
example: '%' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: dignissimos name: architecto
password: OK+XEG2) charset: architecto
host: '%' collation: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"amya.nitzsche","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 31hgfcvEb6Pkaa48D6dZ5Ve'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -192,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: id:
name: databaseUser_id name: id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 4 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -210,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
databaseUser_id: 4 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -220,99 +211,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"bergstrom.ericka","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer aDv48631h5af6EdkcVbPZeg'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 4
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: accusantium
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: accusantium
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"fmurray","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer cf8ZPhV1k3d5DaEva46beg6'
controller: null controller: null
method: null method: null
route: null route: null
@ -320,18 +224,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -349,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: database_id:
name: databaseUser_id name: database_id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 4 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -367,8 +270,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
databaseUser_id: 4 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -377,15 +280,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer hdEvkbaPVf4cZ65a8631eDg'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: firewall-rules name: database-users
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all database users.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":18074,"source":"189.27.156.82","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":41088,"source":"86.177.121.87","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":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer vhkc4aPa6ZdeV8D3Ef156gb'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new database user.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,83 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
type: username:
name: type name: username
description: '' description: ''
required: true required: true
example: allow example: architecto
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: voluptates
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
source: password:
name: source name: password
description: '' description: ''
required: true required: true
example: saepe example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
mask: host:
name: mask name: host
description: 'Mask for source IP.' description: 'Host, if it is a remote user.'
required: true required: true
example: '0' example: '%'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: allow username: architecto
protocol: udp password: '|]|{+-'
port: voluptates host: '%'
source: saepe
mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":61992,"source":"47.222.76.48","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 1cEb5P66VeDkf8aahg3Zdv4'
controller: null controller: null
method: null method: null
route: null route: null
@ -189,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a database user by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -218,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 7 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -236,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
firewallRule_id: 7 databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -246,34 +211,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":43107,"source":"135.73.216.16","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6VaPhkD5vd1Z8e6E3cba4gf'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: link
description: 'Delete firewall rule.' description: 'Link to databases'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -291,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 7 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -309,8 +270,88 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
firewallRule_id: 7 databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -319,15 +360,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer v81d5Efch636aVgZebaPkD4'
controller: null controller: null
method: null method: null
route: null route: null

View File

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

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: projects name: general
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/projects uri: api/health
metadata: metadata:
groupName: projects groupName: general
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: health-check
description: 'Get all projects.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -30,230 +29,17 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":29,"name":"Zachary Lueilwitz","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":30,"name":"Mrs. Kiarra Heller IV","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.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: '{"success":true,"version":"2.5.0"}'
headers: [] headers:
description: '' cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer eb14DEPv6cdah65VfZgka38'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: quos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: quos
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Hershel Spinka","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V1E3566Pf4gkvh8dDZabeca'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Emery Kiehn","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer haD6e36VZbkf4P8aEcvd15g'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: ut
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Mable Prohaska","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V14kPa5deva8Ebgc36f6hDZ'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: 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: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k1D68d5ePavVZag6h4fb3cE'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,38 +1,26 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: servers name: projects
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers' uri: api/projects
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all servers in a project.' description: 'Get all projects.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -41,15 +29,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dorthy Toy","ssh_user":"vito","ip":"172.132.95.155","local_ip":"118.57.197.65","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":"Carrie Sporer","ssh_user":"vito","ip":"184.242.162.173","local_ip":"135.244.50.22","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":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 8VE41PdZcvb6kgafD635ahe'
controller: null controller: null
method: null method: null
route: null route: null
@ -57,211 +42,46 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers' uri: api/projects
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider:
name: provider
description: 'The server provider type'
required: true
example: et
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: inventore
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: atque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: quam
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: nemo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name: name:
name: name name: name
description: 'The name of the server.' description: 'The name of the project.'
required: true required: true
example: perspiciatis example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
os:
name: os
description: 'The os of the server'
required: true
example: similique
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: 'Server type'
required: true
example: regular
type: string
enumValues:
- regular
- database
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: none
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.1'
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: cleanBodyParameters:
provider: et name: architecto
server_provider: digitalocean
region: inventore
plan: atque
ip: quam
port: nemo
name: perspiciatis
os: similique
type: regular
webserver: none
database: none
php: '8.1'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Flo Beer PhD","ssh_user":"vito","ip":"168.238.14.230","local_ip":"40.232.73.41","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}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Z8g36aaV4E1bdcPfehDv65k'
controller: null controller: null
method: null method: null
route: null route: null
@ -269,23 +89,22 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{id}' uri: 'api/projects/{id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a server by ID.' description: 'Get a project by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -294,19 +113,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 id: 1
id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -315,39 +123,35 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Stephany Ankunding","ssh_user":"vito","ip":"145.28.94.46","local_ip":"69.133.44.100","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}' content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer adD3EfP5hZ4vgbkV861eca6'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- POST - PUT
uri: 'api/projects/{project_id}/servers/{server_id}/reboot' uri: 'api/projects/{id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: reboot title: update
description: 'Reboot a server.' description: 'Update project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -356,98 +160,33 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id id: 1
description: 'The ID of the server.' queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanBodyParameters:
project_id: 1 name: architecto
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 200
content: 'null' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer P3ec6aagD4hbdV5fEk168vZ'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer P34ZV6D1bEegdvac8f5kh6a'
controller: null controller: null
method: null method: null
route: null route: null
@ -455,18 +194,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}' uri: 'api/projects/{project_id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -480,19 +218,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -501,15 +228,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ha6v5V41afkdPgcZbDEe386'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,74 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: server-providers name: redirects
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: server-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":2,"project_id":null,"global":true,"name":"dolor","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":3,"project_id":null,"global":true,"name":"enim","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.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 1a6kb58vEP3fZdVhcea64gD'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata: metadata:
groupName: server-providers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: 'Create a new redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -82,228 +30,81 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
site_id: 14
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider: from:
name: provider name: from
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: autem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server provider.'
required: true
example: enim
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: culpa
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: sit
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: voluptates
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: autem
name: enim
token: culpa
key: sit
secret: voluptates
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"eligendi","provider":"aws","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: '' description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer PD3ZcaVdvgfa5k4be8E6h16'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: 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 required: true
example: 1 example: architecto
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: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer DP45bg1aEadh8Z6Vke63fcv'
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: minus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
global: to:
name: global name: to
description: 'Accessible in all projects' description: ''
required: true required: true
example: false example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string type: string
enumValues: enumValues:
- true - 301
- false - 302
- 307
- 308
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: minus from: architecto
global: false to: architecto
mode: 307
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"reiciendis","provider":"hetzner","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer bv1kdegh6fP8V56ZE4acaD3'
controller: null controller: null
method: null method: null
route: null route: null
@ -311,18 +112,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata: metadata:
groupName: server-providers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: 'Delete a redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -336,11 +136,31 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: server_id:
name: serverProvider_id name: server_id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -348,7 +168,9 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 server_id: 6
site_id: 14
redirect_id: 2
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -357,15 +179,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer k6hb43Vf5Z1dv8aaeEDcg6P'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: ssh-keys name: servers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: 'Get all servers in a project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -31,19 +30,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +40,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"user":null,"name":"Dr. Reanna Braun","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Norene Fritsch","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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer dV1gcvfZ46Eh8ebaP5Da63k'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +53,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: 'Create a new server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -93,27 +77,71 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id project_id: 1
description: 'The ID of the server.' queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: server_provider:
project_id: 1 name: server_provider
server_id: 3 description: 'If the provider is not custom, the ID of the server provider profile'
queryParameters: []
cleanQueryParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true required: true
example: vero example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -121,60 +149,175 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'The name of the server.'
required: true required: true
example: voluptates example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
public_key: os:
name: public_key name: os
description: 'Public Key, required if key_id is not provided.' description: 'The os of the server'
required: true required: true
example: dolor example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: none
type: string
enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mysql80
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.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: cleanBodyParameters:
key_id: vero provider: architecto
name: voluptates server_provider: linode
public_key: dolor region: architecto
plan: architecto
ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"user":null,"name":"Sophia D''Amore","created_at":null,"updated_at":null}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gkadV36a5f8E6vhb14ZceDP'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}' uri: 'api/projects/{project_id}/servers/{id}'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: show
description: 'Delete ssh key from server.' description: 'Get a server by ID.'
authenticated: true authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -192,17 +335,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 4
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -210,8 +343,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
sshKey_id: 4
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -220,15 +352,128 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer PfchD4Zge386abadE5kV61v' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: services name: server-providers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -31,19 +30,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +40,114 @@ endpoints:
responses: responses:
- -
status: 200 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":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer h6bDec51ak84ZVafgv3PE6d' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a service by ID.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -93,9 +179,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -103,20 +189,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 serverProvider_id: 3
id: 27
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -125,34 +200,30 @@ endpoints:
responses: responses:
- -
status: 200 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":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer da4V3kfgZ6a86PchevED5b1'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- POST - PUT
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: start title: update
description: 'Start service.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -166,9 +237,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -176,329 +247,47 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id: cleanUrlParameters:
name: service_id project_id: 1
description: 'The ID of the service.' serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true required: true
example: 27 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: global:
project_id: 1 name: global
server_id: 3 description: 'Accessible in all projects'
service_id: 27 required: true
queryParameters: [] example: false
cleanQueryParameters: [] type: string
bodyParameters: [] enumValues:
cleanBodyParameters: [] - true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 200
content: 'null' content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 86fdV5D6gv1E3ekaPZac4hb'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer kPZ563E1Vfgh4cbDad8vae6'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer fd14PaDb58gchv3ZVeaEk66'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Dv1aVe6hZfkagdE356b4cP8'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6bdDc4Eah3ZV18kf6Pveag5'
controller: null controller: null
method: null method: null
route: null route: null
@ -506,18 +295,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -531,9 +319,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -541,20 +329,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 serverProvider_id: 3
service_id: 27
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -563,15 +340,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 36kf84v6bVhE5gdPDeZ1caa'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: sites name: ssh-keys
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all sites.' description: 'Get all ssh keys.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 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,"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,"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":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gaeE86fd1aZP53Vvc6Dhbk4'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new site.' description: 'Deploy ssh key to server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,214 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
type: key_id:
name: type name: key_id
description: '' description: 'The ID of the key.'
required: true required: true
example: wordpress example: architecto
type: string
enumValues:
- php
- php-blank
- phpmyadmin
- laravel
- wordpress
exampleWasSpecified: false
nullable: false
custom: []
domain:
name: domain
description: ''
required: true
example: quo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
aliases: name:
name: aliases name: name
description: '' description: 'Key name, required if key_id is not provided.'
required: true required: true
example: example: architecto
- dolorum
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 type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
web_directory: public_key:
name: web_directory name: public_key
description: 'Required for PHP and Laravel sites' description: 'Public Key, required if key_id is not provided.'
required: true required: true
example: public example: architecto
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: explicabo
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 type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: wordpress key_id: architecto
domain: quo name: architecto
aliases: public_key: architecto
- dolorum
php_version: '7.4'
web_directory: public
source_control: explicabo
repository: organization/repository
branch: main
composer: true
version: 5.2.1
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 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,"progress":100,"created_at":null,"updated_at":null}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer efDd36cab6vZEaV4hkP851g'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{id}'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a site 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: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the site.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
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,"progress":100,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer bVkf841ava5gE6DPch36Zde'
controller: null controller: null
method: null method: null
route: null route: null
@ -320,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete site.' description: 'Delete ssh key from server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -349,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
site_id: sshKey_id:
name: site_id name: sshKey_id
description: 'The ID of the site.' description: 'The ID of the sshKey.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -367,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
site_id: 8 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -377,15 +211,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gfVZbEP5Ddah6k13ae6c8v4'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: source-controls name: services
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/source-controls' uri: 'api/projects/{project_id}/servers/{server_id}/services'
metadata: metadata:
groupName: source-controls groupName: services
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: 'Get all services.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -31,8 +30,19 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -41,15 +51,81 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Jaiden Kling","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Ms. Brianne Bosco","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer PfaEg1eZh66cd5V4v8bD3ak' route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a service by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null
@ -57,18 +133,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/source-controls' uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata: metadata:
groupName: source-controls groupName: services
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: start
description: '' description: 'Start service.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -82,131 +157,21 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: server_id:
project_id: 1 name: server_id
queryParameters: [] description: 'The ID of the server.'
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider'
required: true required: true
example: bitbucket example: 6
type: string
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: eos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: et
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://lueilwitz.com/nostrum-et-porro-atque-sint.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'PL.P?{06\ECi0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: bitbucket
name: eos
token: et
url: 'https://lueilwitz.com/nostrum-et-porro-atque-sint.html'
username: consectetur
password: 'PL.P?{06\ECi0'
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Toby Parker","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V5Zf3a1ve6d6kP4cbgha8DE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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 type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
sourceControl_id: service_id:
name: sourceControl_id name: service_id
description: 'The ID of the sourceControl.' description: 'The ID of the service.'
required: true required: true
example: 3 example: 22
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -214,199 +179,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
sourceControl_id: 3 server_id: 6
queryParameters: [] service_id: 22
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Prof. Bartholome Graham IV","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k1b5hac6veZ36P8gDV4fadE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: quaerat
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.hudson.biz/rerum-voluptatem-debitis-accusamus'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: voluptatem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '\p/el>)3#~E?kI'
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: quaerat
token: consectetur
url: 'http://www.hudson.biz/rerum-voluptatem-debitis-accusamus'
username: voluptatem
password: '\p/el>)3#~E?kI'
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Cicero Smitham","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6dkE6h8a5eg3f14acVvbPDZ'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -415,15 +189,357 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer fb6Zk4EP318eva5hDdcV6ga' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,410 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: source-controls
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider'
required: true
example: gitlab
type: string
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: gitlab
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

View File

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

View File

@ -1,217 +1,158 @@
name: cron-jobs name: Endpoints
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6ed1gv5ak6hEPcaV8D3Z4bf'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs' uri: 'api/servers/{server_id}/agent/{id}'
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: ''
description: 'Create a new cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: server_id:
name: project_id name: server_id
description: 'The ID of the project.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: id:
name: server_id name: id
description: 'The ID of the server.' description: 'The ID of the agent.'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 server_id: 6
server_id: 3 id: architecto
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
command: load:
name: command name: load
description: '' description: ''
required: true required: true
example: qui example: 4326.41688
type: string type: number
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
user: memory_total:
name: user name: memory_total
description: '' description: ''
required: true required: true
example: root example: 4326.41688
type: string type: number
enumValues: enumValues: []
- root
- vito
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
frequency: memory_used:
name: frequency name: memory_used
description: 'Frequency of the cron job.' description: ''
required: true required: true
example: '* * * * *' example: 4326.41688
type: string type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
command: qui load: 4326.41688
user: root memory_total: 4326.41688
frequency: '* * * * *' memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
fileParameters: [] fileParameters: []
responses: responses: []
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer VEfc5h3gva68PkZ46Deabd1'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- GET 0: GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}' 2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: ''
description: 'Get a cron job by ID.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 5
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
cronJob_id: 5
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -219,89 +160,21 @@ endpoints:
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 404
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}' content: |-
headers: [] {
description: '' "message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 614DaP5vZ6edcaVEgfhk83b'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete cron job.'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 5
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
cronJob_id: 5
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer gDV6bZ1dEckvf45P86eaha3'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: databases name: cron-jobs
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all cron jobs.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"clockman","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"wvonrueden","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":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer efEV4g86bd5PZac6vak3Dh1'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,89 +90,6 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: nesciunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: nesciunt
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"name":"johanna76","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 3E6VD14dvaekbaZfh6Pg8c5'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata:
groupName: databases
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a database 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: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the database.'
required: true
example: 6 example: 6
type: integer type: integer
enumValues: [] enumValues: []
@ -186,8 +98,111 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
id: 6 queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: ''
required: true
example: vito
type: string
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: architecto
user: vito
frequency: '* * * * *'
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -196,15 +211,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"chloe.huel","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fb5hVc38e1aDP6ZvkgEda46'
controller: null controller: null
method: null method: null
route: null route: null
@ -212,18 +224,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -241,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
database_id: cronJob_id:
name: database_id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 6 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -259,8 +270,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
database_id: 6 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -269,15 +280,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer cPVbhaZkfg5aEv46D183ed6'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: database-users name: databases
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all databases.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"nyasia68","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"madyson20","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":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer egc5VaDdvabfP6843k61hZE'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,57 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
username: name:
name: username name: name
description: '' description: ''
required: true required: true
example: dignissimos example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
password: charset:
name: password name: charset
description: '' description: ''
required: true required: true
example: OK+XEG2) example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
host: collation:
name: host name: collation
description: 'Host, if it is a remote user.' description: ''
required: true required: true
example: '%' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: dignissimos name: architecto
password: OK+XEG2) charset: architecto
host: '%' collation: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"amya.nitzsche","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 31hgfcvEb6Pkaa48D6dZ5Ve'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -190,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: id:
name: databaseUser_id name: id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 4 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -208,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
databaseUser_id: 4 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -218,99 +209,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"bergstrom.ericka","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer aDv48631h5af6EdkcVbPZeg'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: 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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 4
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: accusantium
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: accusantium
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"fmurray","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer cf8ZPhV1k3d5DaEva46beg6'
controller: null controller: null
method: null method: null
route: null route: null
@ -318,18 +222,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -347,17 +250,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: database_id:
name: databaseUser_id name: database_id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 4 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -365,8 +268,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
databaseUser_id: 4 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -375,15 +278,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer hdEvkbaPVf4cZ65a8631eDg'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: firewall-rules name: database-users
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all database users.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":18074,"source":"189.27.156.82","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":41088,"source":"86.177.121.87","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":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer vhkc4aPa6ZdeV8D3Ef156gb'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new database user.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,83 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
type: username:
name: type name: username
description: '' description: ''
required: true required: true
example: allow example: architecto
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: voluptates
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
source: password:
name: source name: password
description: '' description: ''
required: true required: true
example: saepe example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
mask: host:
name: mask name: host
description: 'Mask for source IP.' description: 'Host, if it is a remote user.'
required: true required: true
example: '0' example: '%'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: allow username: architecto
protocol: udp password: '|]|{+-'
port: voluptates host: '%'
source: saepe
mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":61992,"source":"47.222.76.48","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 1cEb5P66VeDkf8aahg3Zdv4'
controller: null controller: null
method: null method: null
route: null route: null
@ -187,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a database user by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -216,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 7 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -234,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
firewallRule_id: 7 databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -244,34 +209,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":"allow","protocol":"tcp","port":43107,"source":"135.73.216.16","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6VaPhkD5vd1Z8e6E3cba4gf'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: link
description: 'Delete firewall rule.' description: 'Link to databases'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -289,17 +250,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 7 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -307,8 +268,88 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
firewallRule_id: 7 databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -317,15 +358,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer v81d5Efch636aVgZebaPkD4'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,24 +1,46 @@
name: general name: firewall-rules
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/health uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata: metadata:
groupName: general groupName: firewall-rules
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: health-check title: list
description: '' description: 'Get all firewall rules.'
authenticated: false authenticated: false
custom: [] custom: []
headers: headers:
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters:
cleanUrlParameters: [] project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -27,14 +49,414 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"success":true,"version":"2.0.0"}' content: '{"data":[{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":23,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: headers: []
cache-control: 'no-cache, private' description: ''
content-type: application/json custom: []
x-ratelimit-limit: '60' responseFields: []
x-ratelimit-remaining: '59' auth: []
access-control-allow-origin: '*' controller: null
description: null method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: allow
protocol: tcp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: deny
protocol: udp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth: []

View File

@ -1,21 +1,20 @@
name: projects name: general
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/projects uri: api/health
metadata: metadata:
groupName: projects groupName: general
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: health-check
description: 'Get all projects.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -28,230 +27,17 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":29,"name":"Zachary Lueilwitz","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":30,"name":"Mrs. Kiarra Heller IV","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.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: '{"success":true,"version":"2.5.0"}'
headers: [] headers:
description: '' cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer eb14DEPv6cdah65VfZgka38'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: quos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: quos
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Hershel Spinka","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V1E3566Pf4gkvh8dDZabeca'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Emery Kiehn","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer haD6e36VZbkf4P8aEcvd15g'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: ut
fileParameters: []
responses:
-
status: 200
content: '{"id":29,"name":"Mable Prohaska","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V14kPa5deva8Ebgc36f6hDZ'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: 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: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k1D68d5ePavVZag6h4fb3cE'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,36 +1,24 @@
name: servers name: projects
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers' uri: api/projects
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all servers in a project.' description: 'Get all projects.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -39,15 +27,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dorthy Toy","ssh_user":"vito","ip":"172.132.95.155","local_ip":"118.57.197.65","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":"Carrie Sporer","ssh_user":"vito","ip":"184.242.162.173","local_ip":"135.244.50.22","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":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 8VE41PdZcvb6kgafD635ahe'
controller: null controller: null
method: null method: null
route: null route: null
@ -55,211 +40,46 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers' uri: api/projects
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
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: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider:
name: provider
description: 'The server provider type'
required: true
example: et
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: inventore
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: atque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: quam
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: nemo
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name: name:
name: name name: name
description: 'The name of the server.' description: 'The name of the project.'
required: true required: true
example: perspiciatis example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
os:
name: os
description: 'The os of the server'
required: true
example: similique
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: 'Server type'
required: true
example: regular
type: string
enumValues:
- regular
- database
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: none
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.1'
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: cleanBodyParameters:
provider: et name: architecto
server_provider: digitalocean
region: inventore
plan: atque
ip: quam
port: nemo
name: perspiciatis
os: similique
type: regular
webserver: none
database: none
php: '8.1'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Flo Beer PhD","ssh_user":"vito","ip":"168.238.14.230","local_ip":"40.232.73.41","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}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Z8g36aaV4E1bdcPfehDv65k'
controller: null controller: null
method: null method: null
route: null route: null
@ -267,23 +87,22 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{id}' uri: 'api/projects/{id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a server by ID.' description: 'Get a project by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -292,19 +111,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 id: 1
id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -313,39 +121,35 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Stephany Ankunding","ssh_user":"vito","ip":"145.28.94.46","local_ip":"69.133.44.100","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}' content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer adD3EfP5hZ4vgbkV861eca6'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- POST - PUT
uri: 'api/projects/{project_id}/servers/{server_id}/reboot' uri: 'api/projects/{id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: reboot title: update
description: 'Reboot a server.' description: 'Update project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -354,98 +158,33 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id id: 1
description: 'The ID of the server.' queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanBodyParameters:
project_id: 1 name: architecto
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 200
content: 'null' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer P3ec6aagD4hbdV5fEk168vZ'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer P34ZV6D1bEegdvac8f5kh6a'
controller: null controller: null
method: null method: null
route: null route: null
@ -453,18 +192,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}' uri: 'api/projects/{project_id}'
metadata: metadata:
groupName: servers groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -478,19 +216,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -499,15 +226,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ha6v5V41afkdPgcZbDEe386'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,72 +1,20 @@
name: server-providers name: redirects
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: server-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":2,"project_id":null,"global":true,"name":"dolor","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":3,"project_id":null,"global":true,"name":"enim","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.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 1a6kb58vEP3fZdVhcea64gD'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata: metadata:
groupName: server-providers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: 'Create a new redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -80,228 +28,81 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
site_id: 14
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider: from:
name: provider name: from
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: autem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server provider.'
required: true
example: enim
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: culpa
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: sit
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: voluptates
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: autem
name: enim
token: culpa
key: sit
secret: voluptates
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"eligendi","provider":"aws","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: '' description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer PD3ZcaVdvgfa5k4be8E6h16'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: 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 required: true
example: 1 example: architecto
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: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer DP45bg1aEadh8Z6Vke63fcv'
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: minus
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
global: to:
name: global name: to
description: 'Accessible in all projects' description: ''
required: true required: true
example: false example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string type: string
enumValues: enumValues:
- true - 301
- false - 302
- 307
- 308
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: minus from: architecto
global: false to: architecto
mode: 307
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"reiciendis","provider":"hetzner","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer bv1kdegh6fP8V56ZE4acaD3'
controller: null controller: null
method: null method: null
route: null route: null
@ -309,18 +110,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata: metadata:
groupName: server-providers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: 'Delete a redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -334,11 +134,31 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: server_id:
name: serverProvider_id name: server_id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -346,7 +166,9 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 server_id: 6
site_id: 14
redirect_id: 2
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -355,15 +177,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer k6hb43Vf5Z1dv8aaeEDcg6P'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: ssh-keys name: servers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: 'Get all servers in a project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -29,19 +28,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +38,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"user":null,"name":"Dr. Reanna Braun","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Norene Fritsch","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":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer dV1gcvfZ46Eh8ebaP5Da63k'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +51,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: 'Create a new server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -91,27 +75,71 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id project_id: 1
description: 'The ID of the server.' queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The server provider type'
required: true required: true
example: 3 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: server_provider:
project_id: 1 name: server_provider
server_id: 3 description: 'If the provider is not custom, the ID of the server provider profile'
queryParameters: []
cleanQueryParameters: []
bodyParameters:
key_id:
name: key_id
description: 'The ID of the key.'
required: true required: true
example: vero example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -119,60 +147,175 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'The name of the server.'
required: true required: true
example: voluptates example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
public_key: os:
name: public_key name: os
description: 'Public Key, required if key_id is not provided.' description: 'The os of the server'
required: true required: true
example: dolor example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: none
type: string
enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mysql80
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.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: cleanBodyParameters:
key_id: vero provider: architecto
name: voluptates server_provider: linode
public_key: dolor region: architecto
plan: architecto
ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"user":null,"name":"Sophia D''Amore","created_at":null,"updated_at":null}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gkadV36a5f8E6vhb14ZceDP'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}' uri: 'api/projects/{project_id}/servers/{id}'
metadata: metadata:
groupName: ssh-keys groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: show
description: 'Delete ssh key from server.' description: 'Get a server by ID.'
authenticated: true authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -190,17 +333,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 4
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -208,8 +341,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
sshKey_id: 4
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -218,15 +350,128 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer PfchD4Zge386abadE5kV61v' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: services name: server-providers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -29,19 +28,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +38,114 @@ endpoints:
responses: responses:
- -
status: 200 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":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer h6bDec51ak84ZVafgv3PE6d' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/server-providers'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a service by ID.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -91,9 +177,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -101,20 +187,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 serverProvider_id: 3
id: 27
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -123,34 +198,30 @@ endpoints:
responses: responses:
- -
status: 200 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":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer da4V3kfgZ6a86PchevED5b1'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- POST - PUT
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: start title: update
description: 'Start service.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -164,9 +235,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -174,329 +245,47 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id: cleanUrlParameters:
name: service_id project_id: 1
description: 'The ID of the service.' serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true required: true
example: 27 example: architecto
type: integer type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: global:
project_id: 1 name: global
server_id: 3 description: 'Accessible in all projects'
service_id: 27 required: true
queryParameters: [] example: false
cleanQueryParameters: [] type: string
bodyParameters: [] enumValues:
cleanBodyParameters: [] - true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 200
content: 'null' content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 86fdV5D6gv1E3ekaPZac4hb'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer kPZ563E1Vfgh4cbDad8vae6'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer fd14PaDb58gchv3ZVeaEk66'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Dv1aVe6hZfkagdE356b4cP8'
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: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
service_id: 27
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: 'null'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6bdDc4Eah3ZV18kf6Pveag5'
controller: null controller: null
method: null method: null
route: null route: null
@ -504,18 +293,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: services groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -529,9 +317,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 3 example: 3
type: integer type: integer
@ -539,20 +327,9 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 27
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 serverProvider_id: 3
service_id: 27
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -561,15 +338,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 36kf84v6bVhE5gdPDeZ1caa'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: sites name: ssh-keys
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all sites.' description: 'Get all ssh keys.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 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,"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,"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":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gaeE86fd1aZP53Vvc6Dhbk4'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new site.' description: 'Deploy ssh key to server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,214 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
type: key_id:
name: type name: key_id
description: '' description: 'The ID of the key.'
required: true required: true
example: wordpress example: architecto
type: string
enumValues:
- php
- php-blank
- phpmyadmin
- laravel
- wordpress
exampleWasSpecified: false
nullable: false
custom: []
domain:
name: domain
description: ''
required: true
example: quo
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
aliases: name:
name: aliases name: name
description: '' description: 'Key name, required if key_id is not provided.'
required: true required: true
example: example: architecto
- dolorum
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 type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
web_directory: public_key:
name: web_directory name: public_key
description: 'Required for PHP and Laravel sites' description: 'Public Key, required if key_id is not provided.'
required: true required: true
example: public example: architecto
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: explicabo
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 type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
type: wordpress key_id: architecto
domain: quo name: architecto
aliases: public_key: architecto
- dolorum
php_version: '7.4'
web_directory: public
source_control: explicabo
repository: organization/repository
branch: main
composer: true
version: 5.2.1
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 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,"progress":100,"created_at":null,"updated_at":null}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer efDd36cab6vZEaV4hkP851g'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{id}'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a site 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: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the site.'
required: true
example: 8
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 3
id: 8
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
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,"progress":100,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer bVkf841ava5gE6DPch36Zde'
controller: null controller: null
method: null method: null
route: null route: null
@ -318,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata: metadata:
groupName: sites groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete site.' description: 'Delete ssh key from server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -347,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 3 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
site_id: sshKey_id:
name: site_id name: sshKey_id
description: 'The ID of the site.' description: 'The ID of the sshKey.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -365,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 3 server_id: 6
site_id: 8 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -375,15 +209,12 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gfVZbEP5Ddah6k13ae6c8v4'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: source-controls name: services
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/source-controls' uri: 'api/projects/{project_id}/servers/{server_id}/services'
metadata: metadata:
groupName: source-controls groupName: services
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: 'Get all services.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -29,8 +28,19 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -39,15 +49,81 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"Jaiden Kling","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"},{"id":6,"project_id":null,"global":true,"name":"Ms. Brianne Bosco","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer PfaEg1eZh66cd5V4v8bD3ak' route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a service by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":1,"type":"webserver","type_data":null,"name":"nginx","version":null,"unit":null,"status":"ready","status_color":"success","icon":"","is_default":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null
@ -55,18 +131,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/source-controls' uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata: metadata:
groupName: source-controls groupName: services
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: start
description: '' description: 'Start service.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -80,131 +155,21 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: server_id:
project_id: 1 name: server_id
queryParameters: [] description: 'The ID of the server.'
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider'
required: true required: true
example: bitbucket example: 6
type: string
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: eos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: et
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://lueilwitz.com/nostrum-et-porro-atque-sint.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: 'PL.P?{06\ECi0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: bitbucket
name: eos
token: et
url: 'https://lueilwitz.com/nostrum-et-porro-atque-sint.html'
username: consectetur
password: 'PL.P?{06\ECi0'
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Toby Parker","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer V5Zf3a1ve6d6kP4cbgha8DE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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 type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
sourceControl_id: service_id:
name: sourceControl_id name: service_id
description: 'The ID of the sourceControl.' description: 'The ID of the service.'
required: true required: true
example: 3 example: 22
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -212,199 +177,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
sourceControl_id: 3 server_id: 6
queryParameters: [] service_id: 22
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Prof. Bartholome Graham IV","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k1b5hac6veZ36P8gDV4fadE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: quaerat
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: consectetur
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.hudson.biz/rerum-voluptatem-debitis-accusamus'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: voluptatem
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '\p/el>)3#~E?kI'
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: quaerat
token: consectetur
url: 'http://www.hudson.biz/rerum-voluptatem-debitis-accusamus'
username: voluptatem
password: '\p/el>)3#~E?kI'
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"Cicero Smitham","provider":"github","created_at":"2024-11-01T15:40:48.000000Z","updated_at":"2024-11-01T15:40:48.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6dkE6h8a5eg3f14acVvbPDZ'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
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: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -413,15 +187,357 @@ endpoints:
responses: responses:
- -
status: 204 status: 204
content: 'null' content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer fb6Zk4EP318eva5hDdcV6ga' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 22
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
service_id: 22
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

File diff suppressed because it is too large Load Diff

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

@ -0,0 +1,408 @@
name: source-controls
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&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: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/source-controls'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider'
required: true
example: gitlab
type: string
enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: gitlab
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata:
groupName: source-controls
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sourceControl_id:
name: sourceControl_id
description: 'The ID of the sourceControl.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
sourceControl_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

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

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

View File

@ -3,11 +3,11 @@ # Introduction
VitoDeploy's API documentation. VitoDeploy's API documentation.
<aside> <aside>
<strong>Base URL</strong>: <code>https://your-vito-url</code> <strong>Base URL</strong>: <code>https://vito.test</code>
</aside> </aside>
This documentation aims to provide all the information you need to work with our API. This documentation aims to provide all the information you need to work with our API.
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile). <aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside> You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

View File

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

View File

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

View File

@ -3,14 +3,24 @@
namespace App\Actions\CronJob; namespace App\Actions\CronJob;
use App\Enums\CronjobStatus; use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob; use App\Models\CronJob;
use App\Models\Server; use App\Models\Server;
use App\ValidationRules\CronRule; use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CreateCronJob class CreateCronJob
{ {
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function create(Server $server, array $input): CronJob public function create(Server $server, array $input): CronJob
{ {
Validator::make($input, self::rules($input, $server))->validate();
$cronJob = new CronJob([ $cronJob = new CronJob([
'server_id' => $server->id, 'server_id' => $server->id,
'user' => $input['user'], 'user' => $input['user'],
@ -27,7 +37,11 @@ public function create(Server $server, array $input): CronJob
return $cronJob; return $cronJob;
} }
public static function rules(array $input): array /**
* @param array<string, mixed> $input
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{ {
$rules = [ $rules = [
'command' => [ 'command' => [
@ -35,7 +49,7 @@ public static function rules(array $input): array
], ],
'user' => [ 'user' => [
'required', 'required',
'in:root,'.config('core.ssh_user'), Rule::in($server->getSshUsers()),
], ],
'frequency' => [ 'frequency' => [
'required', 'required',

View File

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

View File

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

View File

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

View File

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

View File

@ -5,20 +5,33 @@
use App\Enums\DatabaseStatus; use App\Enums\DatabaseStatus;
use App\Models\Database; use App\Models\Database;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class CreateDatabase class CreateDatabase
{ {
/**
* @param array<string, mixed> $input
*/
public function create(Server $server, array $input): Database public function create(Server $server, array $input): Database
{ {
Validator::make($input, self::rules($server, $input))->validate();
$database = new Database([ $database = new Database([
'server_id' => $server->id, 'server_id' => $server->id,
'charset' => $input['charset'],
'collation' => $input['collation'],
'name' => $input['name'], 'name' => $input['name'],
]); ]);
/** @var \App\SSH\Services\Database\Database $databaseHandler */
$databaseHandler = $server->database()->handler(); /** @var Service $service */
$databaseHandler->create($database->name); $service = $server->database();
/** @var \App\Services\Database\Database $databaseHandler */
$databaseHandler = $service->handler();
$databaseHandler->create($database->name, $database->charset, $database->collation);
$database->status = DatabaseStatus::READY; $database->status = DatabaseStatus::READY;
$database->save(); $database->save();
@ -32,6 +45,9 @@ public function create(Server $server, array $input): Database
} }
/** /**
* @param array<string, mixed> $input
* @return array<string, mixed>
*
* @throws ValidationException * @throws ValidationException
*/ */
public static function rules(Server $server, array $input): array public static function rules(Server $server, array $input): array
@ -40,7 +56,15 @@ public static function rules(Server $server, array $input): array
'name' => [ 'name' => [
'required', 'required',
'alpha_dash', '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',
'string',
],
'collation' => [
'required',
'string',
], ],
]; ];
if (isset($input['user']) && $input['user']) { if (isset($input['user']) && $input['user']) {

View File

@ -5,17 +5,24 @@
use App\Enums\DatabaseUserStatus; use App\Enums\DatabaseUserStatus;
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\SSH\Services\Database\Database; use App\Models\Service;
use App\Services\Database\Database;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class CreateDatabaseUser class CreateDatabaseUser
{ {
/** /**
* @param array<string, mixed> $input
* @param array<string> $links
*
* @throws ValidationException * @throws ValidationException
*/ */
public function create(Server $server, array $input, array $links = []): DatabaseUser public function create(Server $server, array $input, array $links = []): DatabaseUser
{ {
Validator::make($input, self::rules($server, $input))->validate();
$databaseUser = new DatabaseUser([ $databaseUser = new DatabaseUser([
'server_id' => $server->id, 'server_id' => $server->id,
'username' => $input['username'], 'username' => $input['username'],
@ -23,8 +30,12 @@ public function create(Server $server, array $input, array $links = []): Databas
'host' => (isset($input['remote']) && $input['remote']) || isset($input['host']) ? $input['host'] : 'localhost', 'host' => (isset($input['remote']) && $input['remote']) || isset($input['host']) ? $input['host'] : 'localhost',
'databases' => $links, 'databases' => $links,
]); ]);
/** @var Service $service */
$service = $server->database();
/** @var Database $databaseHandler */ /** @var Database $databaseHandler */
$databaseHandler = $server->database()->handler(); $databaseHandler = $service->handler();
$databaseHandler->createUser( $databaseHandler->createUser(
$databaseUser->username, $databaseUser->username,
$databaseUser->password, $databaseUser->password,
@ -41,6 +52,9 @@ public function create(Server $server, array $input, array $links = []): Databas
} }
/** /**
* @param array<string, mixed> $input
* @return array<string, mixed>
*
* @throws ValidationException * @throws ValidationException
*/ */
public static function rules(Server $server, array $input): array public static function rules(Server $server, array $input): array

View File

@ -2,14 +2,24 @@
namespace App\Actions\Database; namespace App\Actions\Database;
use App\Models\Backup;
use App\Models\Database; use App\Models\Database;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
class DeleteDatabase class DeleteDatabase
{ {
public function delete(Server $server, Database $database): void public function delete(Server $server, Database $database): void
{ {
$server->database()->handler()->delete($database->name); /** @var Service $service */
$service = $server->database();
/** @var \App\Services\Database\Database $handler */
$handler = $service->handler();
$handler->delete($database->name);
$database->delete(); $database->delete();
$database->backups()->each(function (Backup $backup): void {
app(ManageBackup::class)->stop($backup);
});
} }
} }

View File

@ -4,12 +4,18 @@
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
use App\Services\Database\Database;
class DeleteDatabaseUser class DeleteDatabaseUser
{ {
public function delete(Server $server, DatabaseUser $databaseUser): void public function delete(Server $server, DatabaseUser $databaseUser): void
{ {
$server->database()->handler()->deleteUser($databaseUser->username, $databaseUser->host); /** @var Service $service */
$service = $server->database();
/** @var Database $handler */
$handler = $service->handler();
$handler->deleteUser($databaseUser->username, $databaseUser->host);
$databaseUser->delete(); $databaseUser->delete();
} }
} }

View File

@ -5,16 +5,23 @@
use App\Models\Database; use App\Models\Database;
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class LinkUser class LinkUser
{ {
/** /**
* @param array<string, mixed> $input
* @return DatabaseUser $databaseUser
*
* @throws ValidationException * @throws ValidationException
*/ */
public function link(DatabaseUser $databaseUser, array $input): DatabaseUser public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
{ {
Validator::make($input, self::rules($databaseUser->server))->validate();
if (! isset($input['databases']) || ! is_array($input['databases'])) { if (! isset($input['databases']) || ! is_array($input['databases'])) {
$input['databases'] = []; $input['databases'] = [];
} }
@ -29,14 +36,20 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
$databaseUser->databases = $input['databases']; $databaseUser->databases = $input['databases'];
/** @var Service $service */
$service = $databaseUser->server->database();
/** @var \App\Services\Database\Database $handler */
$handler = $service->handler();
// Unlink the user from all databases // Unlink the user from all databases
$databaseUser->server->database()->handler()->unlink( $handler->unlink(
$databaseUser->username, $databaseUser->username,
$databaseUser->host $databaseUser->host
); );
// Link the user to the selected databases // Link the user to the selected databases
$databaseUser->server->database()->handler()->link( $handler->link(
$databaseUser->username, $databaseUser->username,
$databaseUser->host, $databaseUser->host,
$databaseUser->databases $databaseUser->databases
@ -49,7 +62,10 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
return $databaseUser; return $databaseUser;
} }
public static function rules(Server $server, array $input): array /**
* @return array<string, mixed>
*/
public static function rules(Server $server): array
{ {
return [ return [
'databases.*' => [ 'databases.*' => [

View File

@ -2,22 +2,28 @@
namespace App\Actions\Database; namespace App\Actions\Database;
use App\Enums\BackupFileStatus;
use App\Enums\BackupStatus; use App\Enums\BackupStatus;
use App\Enums\DatabaseStatus; use App\Enums\DatabaseStatus;
use App\Models\Backup; use App\Models\Backup;
use App\Models\Server; use App\Models\Server;
use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class CreateBackup class ManageBackup
{ {
/** /**
* @param array<string, mixed> $input
*
* @throws AuthorizationException * @throws AuthorizationException
* @throws ValidationException * @throws ValidationException
*/ */
public function create(Server $server, array $input): Backup public function create(Server $server, array $input): Backup
{ {
Validator::make($input, self::rules($server, $input))->validate();
$backup = new Backup([ $backup = new Backup([
'type' => 'database', 'type' => 'database',
'server_id' => $server->id, 'server_id' => $server->id,
@ -34,6 +40,38 @@ public function create(Server $server, array $input): Backup
return $backup; return $backup;
} }
/**
* @param array<string, mixed> $input
*/
public function update(Backup $backup, array $input): void
{
$backup->interval = $input['interval'] == 'custom' ? $input['custom_interval'] : $input['interval'];
$backup->keep_backups = $input['keep'];
$backup->save();
}
public function delete(Backup $backup): void
{
$backup->status = BackupStatus::DELETING;
$backup->save();
dispatch(function () use ($backup): void {
$files = $backup->files;
foreach ($files as $file) {
$file->status = BackupFileStatus::DELETING;
$file->save();
$file->deleteFile();
}
$backup->delete();
})->onQueue('ssh');
}
/**
* @param array<string, mixed> $input
* @return array<string, mixed>
*/
public static function rules(Server $server, array $input): array public static function rules(Server $server, array $input): array
{ {
$rules = [ $rules = [
@ -57,7 +95,7 @@ public static function rules(Server $server, array $input): array
->where('status', DatabaseStatus::READY), ->where('status', DatabaseStatus::READY),
], ],
]; ];
if ($input['interval'] == 'custom') { if (isset($input['interval']) && $input['interval'] == 'custom') {
$rules['custom_interval'] = [ $rules['custom_interval'] = [
'required', 'required',
]; ];
@ -65,4 +103,10 @@ public static function rules(Server $server, array $input): array
return $rules; return $rules;
} }
public function stop(Backup $backup): void
{
$backup->status = BackupStatus::STOPPED;
$backup->save();
}
} }

View File

@ -0,0 +1,35 @@
<?php
namespace App\Actions\Database;
use App\Enums\BackupFileStatus;
use App\Models\BackupFile;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Throwable;
class ManageBackupFile
{
/**
* @throws Throwable
*/
public function download(BackupFile $file): StreamedResponse
{
$file->backup->server->ssh()->download(
Storage::disk('tmp')->path(basename($file->path())),
$file->path()
);
return Storage::disk('tmp')->download(basename($file->path()));
}
public function delete(BackupFile $file): void
{
$file->status = BackupFileStatus::DELETING;
$file->save();
dispatch(function () use ($file): void {
$file->deleteFile();
})->onQueue('ssh');
}
}

View File

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

View File

@ -6,7 +6,8 @@
use App\Enums\BackupStatus; use App\Enums\BackupStatus;
use App\Models\Backup; use App\Models\Backup;
use App\Models\BackupFile; use App\Models\BackupFile;
use App\SSH\Services\Database\Database; use App\Models\Service;
use App\Services\Database\Database;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class RunBackup class RunBackup
@ -20,9 +21,11 @@ public function run(Backup $backup): BackupFile
]); ]);
$file->save(); $file->save();
dispatch(function () use ($file, $backup) { dispatch(function () use ($file, $backup): void {
/** @var Service $service */
$service = $backup->server->database();
/** @var Database $databaseHandler */ /** @var Database $databaseHandler */
$databaseHandler = $file->backup->server->database()->handler(); $databaseHandler = $service->handler();
$databaseHandler->runBackup($file); $databaseHandler->runBackup($file);
$file->status = BackupFileStatus::CREATED; $file->status = BackupFileStatus::CREATED;
$file->save(); $file->save();
@ -31,12 +34,12 @@ public function run(Backup $backup): BackupFile
$backup->status = BackupStatus::RUNNING; $backup->status = BackupStatus::RUNNING;
$backup->save(); $backup->save();
} }
})->catch(function () use ($file, $backup) { })->catch(function () use ($file, $backup): void {
$backup->status = BackupStatus::FAILED; $backup->status = BackupStatus::FAILED;
$backup->save(); $backup->save();
$file->status = BackupFileStatus::FAILED; $file->status = BackupFileStatus::FAILED;
$file->save(); $file->save();
})->onConnection('ssh'); })->onQueue('ssh');
return $file; return $file;
} }

View File

@ -0,0 +1,51 @@
<?php
namespace App\Actions\Database;
use App\Enums\DatabaseUserStatus;
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Models\Service;
use App\Services\Database\Database;
class SyncDatabaseUsers
{
public function sync(Server $server): void
{
$service = $server->database();
if (! $service instanceof Service) {
return;
}
/** @var Database $handler */
$handler = $service->handler();
$this->updateUsers($server, $handler);
}
private function updateUsers(Server $server, Database $handler): void
{
$users = $handler->getUsers();
foreach ($users as $user) {
$databases = $user[2] != 'NULL' ? explode(',', $user[2]) : [];
/** @var ?DatabaseUser $databaseUser */
$databaseUser = $server->databaseUsers()
->where('username', $user[0])
->first();
if ($databaseUser === null) {
$server->databaseUsers()->create([
'username' => $user[0],
'host' => $user[1],
'databases' => $databases,
'status' => DatabaseUserStatus::READY,
]);
continue;
}
$databaseUser->databases = $databases;
$databaseUser->save();
}
}
}

View File

@ -0,0 +1,63 @@
<?php
namespace App\Actions\Database;
use App\Enums\DatabaseStatus;
use App\Models\Server;
use App\Models\Service;
use App\Services\Database\Database;
class SyncDatabases
{
public function sync(Server $server): void
{
$service = $server->database();
if (! $service instanceof Service) {
return;
}
/** @var Database $handler */
$handler = $service->handler();
$this->updateCharsets($service, $handler);
$this->updateDatabases($server, $handler);
}
private function updateCharsets(Service $service, Database $handler): void
{
$data = $service->type_data ?? [];
$charsets = $handler->getCharsets();
$data['charsets'] = $charsets['charsets'] ?? [];
$data['defaultCharset'] = $charsets['defaultCharset'] ?? '';
$service->type_data = $data;
$service->save();
}
private function updateDatabases(Server $server, Database $handler): void
{
$databases = $handler->getDatabases();
foreach ($databases as $database) {
/** @var ?\App\Models\Database $db */
$db = $server->databases()
->where('name', $database[0])
->first();
if ($db === null) {
$server->databases()->create([
'name' => $database[0],
'collation' => $database[2],
'charset' => $database[1],
'status' => DatabaseStatus::READY,
]);
continue;
}
if ($db->collation !== $database[2] || $db->charset !== $database[1]) {
$db->update([
'collation' => $database[2],
'charset' => $database[1],
]);
}
}
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace App\Actions\FileManager;
use App\Exceptions\SSHError;
use App\Models\File;
use App\Models\Server;
use App\Models\User;
use Illuminate\Validation\Rule;
class FetchFiles
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function fetch(User $user, Server $server, array $input): void
{
File::parse(
$user,
$server,
$input['path'],
$input['user'],
$server->os()->ls($input['path'], $input['user'])
);
}
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array
{
return [
'path' => [
'required',
],
'user' => [
'required',
Rule::in($server->getSshUsers()),
],
];
}
}

View File

@ -1,67 +0,0 @@
<?php
namespace App\Actions\FirewallRule;
use App\Enums\FirewallRuleStatus;
use App\Models\FirewallRule;
use App\Models\Server;
use App\SSH\Services\Firewall\Firewall;
use Illuminate\Validation\Rule;
class CreateRule
{
public function create(Server $server, array $input): FirewallRule
{
$rule = new FirewallRule([
'server_id' => $server->id,
'type' => $input['type'],
'protocol' => $input['protocol'],
'port' => $input['port'],
'source' => $input['source'],
'mask' => $input['mask'] ?? null,
]);
/** @var Firewall $firewallHandler */
$firewallHandler = $server->firewall()->handler();
$firewallHandler->addRule(
$rule->type,
$rule->getRealProtocol(),
$rule->port,
$rule->source,
$rule->mask
);
$rule->status = FirewallRuleStatus::READY;
$rule->save();
return $rule;
}
public static function rules(): array
{
return [
'type' => [
'required',
'in:allow,deny',
],
'protocol' => [
'required',
Rule::in(array_keys(config('core.firewall_protocols_port'))),
],
'port' => [
'required',
'numeric',
'min:1',
'max:65535',
],
'source' => [
'required',
'ip',
],
'mask' => [
'required',
'numeric',
],
];
}
}

View File

@ -1,28 +0,0 @@
<?php
namespace App\Actions\FirewallRule;
use App\Enums\FirewallRuleStatus;
use App\Models\FirewallRule;
use App\Models\Server;
class DeleteRule
{
public function delete(Server $server, FirewallRule $rule): void
{
$rule->status = FirewallRuleStatus::DELETING;
$rule->save();
$server->firewall()
->handler()
->removeRule(
$rule->type,
$rule->getRealProtocol(),
$rule->port,
$rule->source,
$rule->mask
);
$rule->delete();
}
}

View File

@ -0,0 +1,145 @@
<?php
namespace App\Actions\FirewallRule;
use App\Enums\FirewallRuleStatus;
use App\Models\FirewallRule;
use App\Models\Server;
use App\Models\Service;
use App\Services\Firewall\Firewall;
use Exception;
use Illuminate\Support\Facades\Validator;
class ManageRule
{
/**
* @param array<string, mixed> $input
* @return FirewallRule $rule
*/
public function create(Server $server, array $input): FirewallRule
{
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule = new FirewallRule([
'name' => $input['name'],
'server_id' => $server->id,
'type' => $input['type'],
'protocol' => $input['protocol'],
'port' => $input['port'],
'source' => $sourceAny ? null : $input['source'],
'mask' => $sourceAny ? null : ($input['mask'] ?? null),
'status' => FirewallRuleStatus::CREATING,
]);
$rule->save();
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
return $rule;
}
/**
* @param array<string, mixed> $input
* @return FirewallRule $rule
*/
public function update(FirewallRule $rule, array $input): FirewallRule
{
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule->update([
'name' => $input['name'],
'type' => $input['type'],
'protocol' => $input['protocol'],
'port' => $input['port'],
'source' => $sourceAny ? null : $input['source'],
'mask' => $sourceAny ? null : ($input['mask'] ?? null),
'status' => FirewallRuleStatus::UPDATING,
]);
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
return $rule;
}
public function delete(FirewallRule $rule): void
{
$rule->status = FirewallRuleStatus::DELETING;
$rule->save();
dispatch(fn () => $this->applyRule($rule))->onQueue('ssh');
}
protected function applyRule(FirewallRule $rule): void
{
try {
/** @var Service $service */
$service = $rule->server->firewall();
/** @var Firewall $handler */
$handler = $service->handler();
$handler->applyRules();
} catch (Exception) {
$rule->server->firewallRules()
->where('status', '!=', FirewallRuleStatus::READY)
->update(['status' => FirewallRuleStatus::FAILED]);
return;
}
if ($rule->status === FirewallRuleStatus::DELETING) {
$rule->delete();
return;
}
$rule->status = FirewallRuleStatus::READY;
$rule->save();
}
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
public static function rules(array $input): array
{
$rules = [
'name' => [
'required',
'string',
'max:18',
],
'type' => [
'required',
'in:allow,deny',
],
'protocol' => [
'required',
'in:tcp,udp',
],
'port' => [
'required',
'numeric',
'min:1',
'max:65535',
],
'source' => [
'nullable',
'ip',
],
'mask' => [
'nullable',
'numeric',
'min:1',
'max:32',
],
];
if (isset($input['source_any']) && $input['source_any'] === false) {
$rules['source'] = ['required', 'ip'];
$rules['mask'] = ['required', 'numeric', 'min:1', 'max:32'];
}
return $rules;
}
}

View File

@ -7,14 +7,25 @@
use Illuminate\Contracts\Database\Query\Expression; use Illuminate\Contracts\Database\Query\Expression;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use stdClass;
class GetMetrics class GetMetrics
{ {
/**
* @param array<string, mixed> $input
* @return Collection<int, mixed>
*/
public function filter(Server $server, array $input): Collection public function filter(Server $server, array $input): Collection
{ {
if (isset($input['from']) && isset($input['to']) && $input['from'] === $input['to']) { Validator::make($input, self::rules($input))->validate();
if (isset($input['from'])) {
$input['from'] = Carbon::parse($input['from'])->format('Y-m-d').' 00:00:00'; $input['from'] = Carbon::parse($input['from'])->format('Y-m-d').' 00:00:00';
}
if (isset($input['to'])) {
$input['to'] = Carbon::parse($input['to'])->format('Y-m-d').' 23:59:59'; $input['to'] = Carbon::parse($input['to'])->format('Y-m-d').' 23:59:59';
} }
@ -32,6 +43,9 @@ public function filter(Server $server, array $input): Collection
); );
} }
/**
* @return Collection<int, mixed>
*/
private function metrics( private function metrics(
Server $server, Server $server,
Carbon $fromDate, Carbon $fromDate,
@ -57,13 +71,16 @@ private function metrics(
->groupByRaw('date_interval') ->groupByRaw('date_interval')
->orderBy('date_interval') ->orderBy('date_interval')
->get() ->get()
->map(function ($item) { ->map(function ($item): stdClass {
$item->date = Carbon::parse($item->date)->format('Y-m-d H:i'); $item->date = Carbon::parse($item->date)->format('Y-m-d H:i');
return $item; return $item;
}); });
} }
/**
* @param array<string, mixed> $input
*/
private function getFromDate(array $input): Carbon private function getFromDate(array $input): Carbon
{ {
if ($input['period'] === 'custom') { if ($input['period'] === 'custom') {
@ -73,6 +90,9 @@ private function getFromDate(array $input): Carbon
return Carbon::parse('-'.convert_time_format($input['period'])); return Carbon::parse('-'.convert_time_format($input['period']));
} }
/**
* @param array<string, mixed> $input
*/
private function getToDate(array $input): Carbon private function getToDate(array $input): Carbon
{ {
if ($input['period'] === 'custom') { if ($input['period'] === 'custom') {
@ -82,6 +102,9 @@ private function getToDate(array $input): Carbon
return Carbon::now(); return Carbon::now();
} }
/**
* @param array<string, mixed> $input
*/
private function getInterval(array $input): Expression private function getInterval(array $input): Expression
{ {
if ($input['period'] === 'custom') { if ($input['period'] === 'custom') {
@ -107,6 +130,10 @@ private function getInterval(array $input): Expression
return DB::raw("strftime('%Y-%m-%d 00:00:00', created_at) as date_interval"); return DB::raw("strftime('%Y-%m-%d 00:00:00', created_at) as date_interval");
} }
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
public static function rules(array $input): array public static function rules(array $input): array
{ {
$rules = [ $rules = [
@ -125,8 +152,8 @@ public static function rules(array $input): array
]; ];
if (isset($input['period']) && $input['period'] === 'custom') { if (isset($input['period']) && $input['period'] === 'custom') {
$rules['from'] = ['required', 'date', 'before:to']; $rules['from'] = ['required', 'date', 'before_or_equal:to'];
$rules['to'] = ['required', 'date', 'after:from']; $rules['to'] = ['required', 'date', 'after_or_equal:from'];
} }
return $rules; return $rules;

View File

@ -3,19 +3,32 @@
namespace App\Actions\Monitoring; namespace App\Actions\Monitoring;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
use App\Services\ServiceInterface;
use Illuminate\Support\Facades\Validator;
class UpdateMetricSettings class UpdateMetricSettings
{ {
/**
* @param array<string, mixed> $input
*/
public function update(Server $server, array $input): void public function update(Server $server, array $input): void
{ {
$service = $server->monitoring(); Validator::make($input, self::rules())->validate();
$data = $service->handler()->data(); /** @var Service $service */
$service = $server->monitoring();
/** @var ServiceInterface $handler */
$handler = $service->handler();
$data = $handler->data();
$data['data_retention'] = $input['data_retention']; $data['data_retention'] = $input['data_retention'];
$service->type_data = $data; $service->type_data = $data;
$service->save(); $service->save();
} }
/**
* @return array<string, array<string>>
*/
public static function rules(): array public static function rules(): array
{ {
return [ return [

View File

@ -0,0 +1,46 @@
<?php
namespace App\Actions\NodeJS;
use App\Enums\ServiceStatus;
use App\Exceptions\SSHError;
use App\Models\Server;
use App\Models\Service;
use App\Services\NodeJS\NodeJS;
use Illuminate\Validation\ValidationException;
class ChangeDefaultCli
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
* @throws SSHError
*/
public function change(Server $server, array $input): void
{
$this->validate($server, $input);
/** @var Service $service */
$service = $server->nodejs($input['version']);
/** @var NodeJS $handler */
$handler = $service->handler();
$handler->setDefaultCli();
$server->defaultService('nodejs')?->update(['is_default' => 0]);
$service->update(['is_default' => 1]);
$service->update(['status' => ServiceStatus::READY]);
}
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function validate(Server $server, array $input): void
{
if (! isset($input['version']) || ! in_array($input['version'], $server->installedNodejsVersions())) {
throw ValidationException::withMessages(
['version' => __('This version is not installed')]
);
}
}
}

View File

@ -4,22 +4,27 @@
use App\Models\NotificationChannel; use App\Models\NotificationChannel;
use App\Models\User; use App\Models\User;
use App\NotificationChannels\Email;
use Exception; use Exception;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class AddChannel class AddChannel
{ {
/** /**
* @param array<string, mixed> $input
*
* @throws ValidationException * @throws ValidationException
* @throws Exception
*/ */
public function add(User $user, array $input): void public function add(User $user, array $input): void
{ {
Validator::make($input, self::rules($input))->validate();
$channel = new NotificationChannel([ $channel = new NotificationChannel([
'user_id' => $user->id, 'user_id' => $user->id,
'provider' => $input['provider'], 'provider' => $input['provider'],
'label' => $input['label'], 'label' => $input['name'],
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id, 'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]); ]);
$channel->data = $channel->provider()->createData($input); $channel->data = $channel->provider()->createData($input);
@ -29,7 +34,7 @@ public function add(User $user, array $input): void
if (! $channel->provider()->connect()) { if (! $channel->provider()->connect()) {
$channel->delete(); $channel->delete();
if ($channel->provider === \App\Enums\NotificationChannel::EMAIL) { if ($channel->provider === Email::id()) {
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'email' => __('Could not connect! Make sure you configured `.env` file correctly.'), 'email' => __('Could not connect! Make sure you configured `.env` file correctly.'),
]); ]);
@ -42,26 +47,36 @@ public function add(User $user, array $input): void
} catch (Exception $e) { } catch (Exception $e) {
$channel->delete(); $channel->delete();
throw $e; throw ValidationException::withMessages([
'provider' => $e->getMessage(),
]);
} }
$channel->connected = true; $channel->connected = true;
$channel->save(); $channel->save();
} }
/**
* @param array<string, mixed> $input
* @return array<string, mixed>
*/
public static function rules(array $input): array public static function rules(array $input): array
{ {
$rules = [ $rules = [
'provider' => [ 'provider' => [
'required', 'required',
Rule::in(config('core.notification_channels_providers')), Rule::in(array_keys(config('notification-channel.providers'))),
], ],
'label' => 'required', 'name' => 'required',
]; ];
return array_merge($rules, static::providerRules($input)); return array_merge($rules, self::providerRules($input));
} }
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
private static function providerRules(array $input): array private static function providerRules(array $input): array
{ {
if (! isset($input['provider'])) { if (! isset($input['provider'])) {

View File

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

View File

@ -3,24 +3,44 @@
namespace App\Actions\PHP; namespace App\Actions\PHP;
use App\Enums\ServiceStatus; use App\Enums\ServiceStatus;
use App\Exceptions\SSHError;
use App\Models\Server; use App\Models\Server;
use App\SSH\Services\PHP\PHP; use App\Models\Service;
use App\Services\PHP\PHP;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class ChangeDefaultCli class ChangeDefaultCli
{ {
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function change(Server $server, array $input): void public function change(Server $server, array $input): void
{ {
$this->validate($server, $input); $this->validate($server, $input);
/** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);
if ($service->is_default) {
throw ValidationException::withMessages(
['version' => __('This version is already the default CLI')]
);
}
/** @var PHP $handler */ /** @var PHP $handler */
$handler = $service->handler(); $handler = $service->handler();
$handler->setDefaultCli(); $handler->setDefaultCli();
$server->defaultService('php')->update(['is_default' => 0]); $server->defaultService('php')?->update(['is_default' => 0]);
$service->update(['is_default' => 1]); $service->update(['is_default' => 1]);
$service->update(['status' => ServiceStatus::READY]); $service->update(['status' => ServiceStatus::READY]);
} }
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function validate(Server $server, array $input): void public function validate(Server $server, array $input): void
{ {
if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) { if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) {

View File

@ -4,17 +4,25 @@
use App\Enums\PHPIniType; use App\Enums\PHPIniType;
use App\Models\Server; use App\Models\Server;
use App\SSH\Services\PHP\PHP; use App\Models\Service;
use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Throwable;
class GetPHPIni class GetPHPIni
{ {
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function getIni(Server $server, array $input): string public function getIni(Server $server, array $input): string
{ {
$this->validate($server, $input); $this->validate($server, $input);
/** @var Service $php */
$php = $server->php($input['version']); $php = $server->php($input['version']);
try { try {
@ -22,13 +30,18 @@ public function getIni(Server $server, array $input): string
$handler = $php->handler(); $handler = $php->handler();
return $handler->getPHPIni($input['type']); return $handler->getPHPIni($input['type']);
} catch (\Throwable $e) { } catch (Throwable $e) {
throw ValidationException::withMessages( throw ValidationException::withMessages(
['ini' => $e->getMessage()] ['ini' => $e->getMessage()]
); );
} }
} }
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function validate(Server $server, array $input): void public function validate(Server $server, array $input): void
{ {
Validator::make($input, [ Validator::make($input, [

View File

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

View File

@ -2,17 +2,22 @@
namespace App\Actions\PHP; namespace App\Actions\PHP;
use App\Exceptions\SSHCommandError;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\PHP\PHP; use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class InstallPHPExtension class InstallPHPExtension
{ {
/**
* @param array<string, mixed> $input
*/
public function install(Server $server, array $input): Service public function install(Server $server, array $input): Service
{ {
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */ /** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);
@ -23,36 +28,36 @@ public function install(Server $server, array $input): Service
} }
$typeData = $service->type_data; $typeData = $service->type_data;
$typeData['extensions'] = $typeData['extensions'] ?? []; $typeData['extensions'] ??= [];
$typeData['extensions'][] = $input['extension']; $typeData['extensions'][] = $input['extension'];
$service->type_data = $typeData; $service->type_data = $typeData;
$service->save(); $service->save();
dispatch( dispatch(
/** function () use ($service, $input): void {
* @throws SSHCommandError
*/
function () use ($service, $input) {
/** @var PHP $handler */ /** @var PHP $handler */
$handler = $service->handler(); $handler = $service->handler();
$handler->installExtension($input['extension']); $handler->installExtension($input['extension']);
})->catch(function () use ($service, $input) { })->catch(function () use ($service, $input): void {
$service->refresh(); $service->refresh();
$typeData = $service->type_data; $typeData = $service->type_data;
$typeData['extensions'] = array_values(array_diff($typeData['extensions'], [$input['extension']])); $typeData['extensions'] = array_values(array_diff($typeData['extensions'], [$input['extension']]));
$service->type_data = $typeData; $service->type_data = $typeData;
$service->save(); $service->save();
})->onConnection('ssh'); })->onQueue('ssh-unique');
return $service; return $service;
} }
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array public static function rules(Server $server): array
{ {
return [ return [
'extension' => [ 'extension' => [
'required', 'required',
Rule::in(config('core.php_extensions')), Rule::in(config('service.services.php.data.extensions', []) ?? []),
], ],
'version' => [ 'version' => [
'required', 'required',

View File

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

View File

@ -4,8 +4,10 @@
use App\Enums\PHPIniType; use App\Enums\PHPIniType;
use App\Models\Server; use App\Models\Server;
use App\Models\Service;
use Illuminate\Filesystem\FilesystemAdapter; use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -14,10 +16,15 @@
class UpdatePHPIni class UpdatePHPIni
{ {
/** /**
* @param array<string, mixed> $input
*
* @throws ValidationException * @throws ValidationException
*/ */
public function update(Server $server, array $input): void public function update(Server $server, array $input): void
{ {
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);
$tmpName = Str::random(10).strtotime('now'); $tmpName = Str::random(10).strtotime('now');
@ -48,6 +55,9 @@ private function deleteTempFile(string $name): void
} }
} }
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array public static function rules(Server $server): array
{ {
return [ return [

View File

@ -5,12 +5,18 @@
use App\Models\Project; use App\Models\Project;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class AddUser class AddUser
{ {
/**
* @param array<string, mixed> $input
*/
public function add(Project $project, array $input): void public function add(Project $project, array $input): void
{ {
Validator::make($input, self::rules($project))->validate();
/** @var User $user */ /** @var User $user */
$user = User::query()->findOrFail($input['user']); $user = User::query()->findOrFail($input['user']);
@ -18,13 +24,16 @@ public function add(Project $project, array $input): void
$project->users()->attach($user); $project->users()->attach($user);
} }
/**
* @return array<string, array<string>>
*/
public static function rules(Project $project): array public static function rules(Project $project): array
{ {
return [ return [
'user' => [ 'user' => [
'required', 'required',
Rule::exists('users', 'id'), Rule::exists('users', 'id'),
Rule::unique('user_project', 'user_id')->where(function (Builder $query) use ($project) { Rule::unique('user_project', 'user_id')->where(function (Builder $query) use ($project): void {
$query->where('project_id', $project->id); $query->where('project_id', $project->id);
}), }),
], ],

View File

@ -8,10 +8,15 @@
class CreateProject class CreateProject
{ {
/**
* @param array<string, mixed> $input
*/
public function create(User $user, array $input): Project public function create(User $user, array $input): Project
{ {
Validator::make($input, self::rules())->validate();
if (isset($input['name'])) { if (isset($input['name'])) {
$input['name'] = strtolower($input['name']); $input['name'] = strtolower((string) $input['name']);
} }
$this->validate($input); $this->validate($input);
@ -27,6 +32,9 @@ public function create(User $user, array $input): Project
return $project; return $project;
} }
/**
* @return array<string, array<string>>
*/
public static function rules(): array public static function rules(): array
{ {
return [ return [
@ -40,6 +48,9 @@ public static function rules(): array
]; ];
} }
/**
* @param array<string, mixed> $input
*/
private function validate(array $input): void private function validate(array $input): void
{ {
Validator::make($input, self::rules())->validate(); Validator::make($input, self::rules())->validate();

View File

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

View File

@ -8,10 +8,13 @@
class UpdateProject class UpdateProject
{ {
/**
* @param array<string, mixed> $input
*/
public function update(Project $project, array $input): Project public function update(Project $project, array $input): Project
{ {
if (isset($input['name'])) { if (isset($input['name'])) {
$input['name'] = strtolower($input['name']); $input['name'] = strtolower((string) $input['name']);
} }
$this->validate($project, $input); $this->validate($project, $input);
@ -23,6 +26,9 @@ public function update(Project $project, array $input): Project
return $project; return $project;
} }
/**
* @return array<string, array<string>>
*/
public static function rules(Project $project): array public static function rules(Project $project): array
{ {
return [ return [
@ -36,6 +42,9 @@ public static function rules(Project $project): array
]; ];
} }
/**
* @param array<string, mixed> $input
*/
private function validate(Project $project, array $input): void private function validate(Project $project, array $input): void
{ {
Validator::make($input, self::rules($project))->validate(); Validator::make($input, self::rules($project))->validate();

View File

@ -1,69 +0,0 @@
<?php
namespace App\Actions\Queue;
use App\Enums\QueueStatus;
use App\Models\Queue;
use App\Models\Server;
use App\Models\Site;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class CreateQueue
{
/**
* @throws ValidationException
*/
public function create(mixed $queueable, array $input): void
{
$queue = new Queue([
'server_id' => $queueable instanceof Server ? $queueable->id : $queueable->server_id,
'site_id' => $queueable instanceof Site ? $queueable->id : null,
'command' => $input['command'],
'user' => $input['user'],
'auto_start' => $input['auto_start'] ? 1 : 0,
'auto_restart' => $input['auto_restart'] ? 1 : 0,
'numprocs' => $input['numprocs'],
'status' => QueueStatus::CREATING,
]);
$queue->save();
dispatch(function () use ($queue) {
$queue->server->processManager()->handler()->create(
$queue->id,
$queue->command,
$queue->user,
$queue->auto_start,
$queue->auto_restart,
$queue->numprocs,
$queue->getLogFile(),
$queue->site_id
);
$queue->status = QueueStatus::RUNNING;
$queue->save();
})->catch(function () use ($queue) {
$queue->delete();
})->onConnection('ssh');
}
public static function rules(Server $server): array
{
return [
'command' => [
'required',
],
'user' => [
'required',
Rule::in([
'root',
$server->ssh_user,
]),
],
'numprocs' => [
'required',
'numeric',
'min:1',
],
];
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace App\Actions\Queue;
use App\Models\Queue;
use App\SSH\Services\ProcessManager\ProcessManager;
class DeleteQueue
{
public function delete(Queue $queue): void
{
/** @var ProcessManager $processManager */
$processManager = $queue->server->processManager()->handler();
$processManager->delete($queue->id, $queue->site_id);
$queue->delete();
}
}

View File

@ -1,72 +0,0 @@
<?php
namespace App\Actions\Queue;
use App\Enums\QueueStatus;
use App\Models\Queue;
use App\Models\Server;
use App\SSH\Services\ProcessManager\ProcessManager;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class EditQueue
{
/**
* @throws ValidationException
*/
public function edit(Queue $queue, array $input): void
{
$queue->fill([
'command' => $input['command'],
'user' => $input['user'],
'auto_start' => $input['auto_start'] ? 1 : 0,
'auto_restart' => $input['auto_restart'] ? 1 : 0,
'numprocs' => $input['numprocs'],
'status' => QueueStatus::RESTARTING,
]);
$queue->save();
dispatch(function () use ($queue) {
/** @var ProcessManager $processManager */
$processManager = $queue->server->processManager()->handler();
$processManager->delete($queue->id, $queue->site_id);
$processManager->create(
$queue->id,
$queue->command,
$queue->user,
$queue->auto_start,
$queue->auto_restart,
$queue->numprocs,
$queue->getLogFile(),
$queue->site_id
);
$queue->status = QueueStatus::RUNNING;
$queue->save();
})->catch(function () use ($queue) {
$queue->status = QueueStatus::FAILED;
$queue->save();
})->onConnection('ssh');
}
public static function rules(Server $server): array
{
return [
'command' => [
'required',
],
'user' => [
'required',
Rule::in([
'root',
$server->ssh_user,
]),
],
'numprocs' => [
'required',
'numeric',
'min:1',
],
];
}
}

View File

@ -1,13 +0,0 @@
<?php
namespace App\Actions\Queue;
use App\Models\Queue;
class GetQueueLogs
{
public function getLogs(Queue $queue): string
{
return $queue->server->processManager()->handler()->getLogs($queue->getLogFile());
}
}

View File

@ -1,42 +0,0 @@
<?php
namespace App\Actions\Queue;
use App\Enums\QueueStatus;
use App\Models\Queue;
class ManageQueue
{
public function start(Queue $queue): void
{
$queue->status = QueueStatus::STARTING;
$queue->save();
dispatch(function () use ($queue) {
$queue->server->processManager()->handler()->start($queue->id, $queue->site_id);
$queue->status = QueueStatus::RUNNING;
$queue->save();
})->onConnection('ssh');
}
public function stop(Queue $queue): void
{
$queue->status = QueueStatus::STOPPING;
$queue->save();
dispatch(function () use ($queue) {
$queue->server->processManager()->handler()->stop($queue->id, $queue->site_id);
$queue->status = QueueStatus::STOPPED;
$queue->save();
})->onConnection('ssh');
}
public function restart(Queue $queue): void
{
$queue->status = QueueStatus::RESTARTING;
$queue->save();
dispatch(function () use ($queue) {
$queue->server->processManager()->handler()->restart($queue->id, $queue->site_id);
$queue->status = QueueStatus::RUNNING;
$queue->save();
})->onConnection('ssh');
}
}

View File

@ -0,0 +1,80 @@
<?php
namespace App\Actions\Redirect;
use App\Enums\RedirectStatus;
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CreateRedirect
{
/**
* @param array<string, mixed> $input
*/
public function create(Site $site, array $input): Redirect
{
Validator::make($input, self::rules($site))->validate();
$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, regenerate: [
'redirects',
]);
$redirect->status = RedirectStatus::READY;
$redirect->save();
})
->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})
->onQueue('ssh-unique');
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,32 @@
<?php
namespace App\Actions\Redirect;
use App\Enums\RedirectStatus;
use App\Models\Redirect;
use App\Models\Service;
use App\Models\Site;
use App\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, regenerate: [
'redirects',
]);
$redirect->delete();
})->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED;
$redirect->save();
})->onQueue('ssh-unique');
}
}

View File

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

View File

@ -5,19 +5,25 @@
use App\Enums\SslStatus; use App\Enums\SslStatus;
use App\Enums\SslType; use App\Enums\SslType;
use App\Models\ServerLog; use App\Models\ServerLog;
use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\Models\Ssl; use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class CreateSSL class CreateSSL
{ {
/** /**
* @param array<string, mixed> $input
*
* @throws ValidationException * @throws ValidationException
*/ */
public function create(Site $site, array $input): void public function create(Site $site, array $input): void
{ {
Validator::make($input, self::rules($input))->validate();
$site->ssls() $site->ssls()
->where('type', $input['type']) ->where('type', $input['type'])
->where('status', SslStatus::FAILED) ->where('status', SslStatus::FAILED)
@ -30,6 +36,8 @@ public function create(Site $site, array $input): void
'pk' => $input['private'] ?? null, 'pk' => $input['private'] ?? null,
'expires_at' => $input['type'] === SslType::LETSENCRYPT ? now()->addMonths(3) : $input['expires_at'], 'expires_at' => $input['type'] === SslType::LETSENCRYPT ? now()->addMonths(3) : $input['expires_at'],
'status' => SslStatus::CREATING, 'status' => SslStatus::CREATING,
'email' => $input['email'] ?? null,
'is_active' => ! $site->activeSsl,
]); ]);
$ssl->domains = [$site->domain]; $ssl->domains = [$site->domain];
if (isset($input['aliases']) && $input['aliases']) { if (isset($input['aliases']) && $input['aliases']) {
@ -38,19 +46,27 @@ public function create(Site $site, array $input): void
$ssl->log_id = ServerLog::log($site->server, 'create-ssl', '', $site)->id; $ssl->log_id = ServerLog::log($site->server, 'create-ssl', '', $site)->id;
$ssl->save(); $ssl->save();
dispatch(function () use ($site, $ssl) { dispatch(function () use ($site, $ssl): void {
/** @var Service $service */
$service = $site->server->webserver();
/** @var Webserver $webserver */ /** @var Webserver $webserver */
$webserver = $site->server->webserver()->handler(); $webserver = $service->handler();
$webserver->setupSSL($ssl); $webserver->setupSSL($ssl);
$ssl->status = SslStatus::CREATED; $ssl->status = SslStatus::CREATED;
$ssl->save(); $ssl->save();
$site->type()->edit(); $webserver->updateVHost($site, regenerate: [
})->catch(function () use ($ssl) { 'port',
]);
})->catch(function () use ($ssl): void {
$ssl->status = SslStatus::FAILED; $ssl->status = SslStatus::FAILED;
$ssl->save(); $ssl->save();
})->onConnection('ssh'); })->onQueue('ssh-unique');
} }
/**
* @param array<string, mixed> $input
* @return array<string, mixed>
*/
public static function rules(array $input): array public static function rules(array $input): array
{ {
$rules = [ $rules = [
@ -68,6 +84,12 @@ public static function rules(array $input): array
'after_or_equal:'.now(), 'after_or_equal:'.now(),
]; ];
} }
if (isset($input['type']) && $input['type'] == SslType::LETSENCRYPT) {
$rules['email'] = [
'required',
'email',
];
}
return $rules; return $rules;
} }

View File

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

View File

@ -2,15 +2,21 @@
namespace App\Actions\SSL; namespace App\Actions\SSL;
use App\Enums\SslStatus;
use App\Models\Service;
use App\Models\Ssl; use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
class DeleteSSL class DeleteSSL
{ {
public function delete(Ssl $ssl): void public function delete(Ssl $ssl): void
{ {
$ssl->status = SslStatus::DELETING;
$ssl->save();
/** @var Service $service */
$service = $ssl->site->server->webserver();
/** @var Webserver $webserver */ /** @var Webserver $webserver */
$webserver = $ssl->site->server->webserver()->handler(); $webserver = $service->handler();
$webserver->removeSSL($ssl); $webserver->removeSSL($ssl);
$ssl->delete(); $ssl->delete();
} }

View File

@ -4,11 +4,17 @@
use App\Models\Script; use App\Models\Script;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Validator;
class CreateScript class CreateScript
{ {
/**
* @param array<string, mixed> $input
*/
public function create(User $user, array $input): Script public function create(User $user, array $input): Script
{ {
Validator::make($input, self::rules())->validate();
$script = new Script([ $script = new Script([
'user_id' => $user->id, 'user_id' => $user->id,
'name' => $input['name'], 'name' => $input['name'],
@ -20,6 +26,9 @@ public function create(User $user, array $input): Script
return $script; return $script;
} }
/**
* @return array<string, array<string>>
*/
public static function rules(): array public static function rules(): array
{ {
return [ return [

View File

@ -7,6 +7,9 @@
class EditScript class EditScript
{ {
/**
* @param array<string, mixed> $input
*/
public function edit(Script $script, User $user, array $input): Script public function edit(Script $script, User $user, array $input): Script
{ {
$script->name = $input['name']; $script->name = $input['name'];
@ -18,6 +21,9 @@ public function edit(Script $script, User $user, array $input): Script
return $script; return $script;
} }
/**
* @return array<string, array<string>>
*/
public static function rules(): array public static function rules(): array
{ {
return [ return [

View File

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

View File

@ -3,20 +3,18 @@
namespace App\Actions\Server; namespace App\Actions\Server;
use App\Enums\FirewallRuleStatus; use App\Enums\FirewallRuleStatus;
use App\Enums\ServerProvider;
use App\Enums\ServerStatus; use App\Enums\ServerStatus;
use App\Enums\ServerType;
use App\Facades\Notifier; use App\Facades\Notifier;
use App\Models\Project; use App\Models\Project;
use App\Models\Server; use App\Models\Server;
use App\Models\User; use App\Models\User;
use App\Notifications\ServerInstallationFailed; use App\Notifications\ServerInstallationFailed;
use App\Notifications\ServerInstallationSucceed; use App\ServerProviders\Custom;
use App\ValidationRules\RestrictedIPAddressesRule; use App\ValidationRules\RestrictedIPAddressesRule;
use Exception; use Exception;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -24,17 +22,23 @@
class CreateServer class CreateServer
{ {
protected Server $server;
/**
* @param array<string, mixed> $input
*/
public function create(User $creator, Project $project, array $input): Server public function create(User $creator, Project $project, array $input): Server
{ {
$server = new Server([ Validator::make($input, self::rules($project, $input))->validate();
$this->server = new Server([
'project_id' => $project->id, 'project_id' => $project->id,
'user_id' => $creator->id, 'user_id' => $creator->id,
'name' => $input['name'], 'name' => $input['name'],
'ssh_user' => config('core.server_providers_default_user')[$input['provider']][$input['os']], 'ssh_user' => data_get(config('server-provider.providers'), $input['provider'].'.default_user') ?? 'root',
'ip' => $input['ip'] ?? '', 'ip' => $input['ip'] ?? '',
'port' => $input['port'] ?? 22, 'port' => $input['port'] ?? 22,
'os' => $input['os'], 'os' => $input['os'],
'type' => ServerType::REGULAR,
'provider' => $input['provider'], 'provider' => $input['provider'],
'authentication' => [ 'authentication' => [
'user' => config('core.ssh_user'), 'user' => config('core.ssh_user'),
@ -46,32 +50,42 @@ public function create(User $creator, Project $project, array $input): Server
]); ]);
try { try {
if ($server->provider != 'custom') { if ($this->server->provider != 'custom') {
$server->provider_id = $input['server_provider']; $this->server->provider_id = $input['server_provider'];
} }
$server->type_data = $server->type()->data($input); $this->server->provider_data = $this->server->provider()->data($input);
$server->provider_data = $server->provider()->data($input);
// save // save
$server->save(); $this->server->save();
// create firewall rules // create firewall rules
$this->createFirewallRules($server); $this->createFirewallRules($this->server);
// create instance // create instance
$server->provider()->create(); $this->server->provider()->create();
// add services // create services
$server->type()->createServices($input); $this->createServices();
// install server // install server
$this->install($server); dispatch(function (): void {
app(InstallServer::class)->run($this->server);
})
->catch(function (Throwable $e): void {
$this->server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($this->server, new ServerInstallationFailed($this->server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
})
->onQueue('ssh');
return $server; return $this->server;
} catch (Exception $e) { } catch (Exception $e) {
$server->delete(); $this->server->delete();
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'provider' => $e->getMessage(), 'provider' => $e->getMessage(),
@ -79,44 +93,16 @@ public function create(User $creator, Project $project, array $input): Server
} }
} }
private function install(Server $server): void /**
{ * @param array<string, mixed> $input
$bus = Bus::chain([ * @return array<string, mixed>
function () use ($server) { */
if (! $server->provider()->isRunning()) {
sleep(2);
}
$server->type()->install();
$server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($server, new ServerInstallationSucceed($server));
},
])->catch(function (Throwable $e) use ($server) {
$server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($server, new ServerInstallationFailed($server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
});
if ($server->provider != ServerProvider::CUSTOM) {
$server->progress_step = 'waiting-for-provider';
$server->save();
$bus->delay(now()->addMinutes(3));
}
$bus->onConnection('ssh')->dispatch();
}
public static function rules(Project $project, array $input): array public static function rules(Project $project, array $input): array
{ {
$rules = [ $rules = [
'provider' => [ 'provider' => [
'required', 'required',
Rule::in(config('core.server_providers')), Rule::in(array_keys(config('server-provider.providers'))),
], ],
'name' => [ 'name' => [
'required', 'required',
@ -126,28 +112,22 @@ public static function rules(Project $project, array $input): array
Rule::in(config('core.operating_systems')), Rule::in(config('core.operating_systems')),
], ],
'server_provider' => [ 'server_provider' => [
Rule::when(function () use ($input) { Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] != Custom::id(), [
return isset($input['provider']) && $input['provider'] != ServerProvider::CUSTOM;
}, [
'required', 'required',
Rule::exists('server_providers', 'id')->where(function (Builder $query) use ($project) { Rule::exists('server_providers', 'id')->where(function (Builder $query) use ($project): void {
$query->where('project_id', $project->id) $query->where('project_id', $project->id)
->orWhereNull('project_id'); ->orWhereNull('project_id');
}), }),
]), ]),
], ],
'ip' => [ 'ip' => [
Rule::when(function () use ($input) { Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
return isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM;
}, [
'required', 'required',
new RestrictedIPAddressesRule, new RestrictedIPAddressesRule,
]), ]),
], ],
'port' => [ 'port' => [
Rule::when(function () use ($input) { Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
return isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM;
}, [
'required', 'required',
'numeric', 'numeric',
'min:1', 'min:1',
@ -156,27 +136,20 @@ public static function rules(Project $project, array $input): array
], ],
]; ];
return array_merge($rules, self::typeRules($input), self::providerRules($input)); return array_merge($rules, self::providerRules($input));
}
private static function typeRules(array $input): array
{
if (! isset($input['type']) || ! in_array($input['type'], config('core.server_types'))) {
return [];
}
$server = new Server(['type' => $input['type']]);
return $server->type()->createRules($input);
} }
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
private static function providerRules(array $input): array private static function providerRules(array $input): array
{ {
if ( if (
! isset($input['provider']) || ! isset($input['provider']) ||
! isset($input['server_provider']) || ! isset($input['server_provider']) ||
! in_array($input['provider'], config('core.server_providers')) || ! config('server-provider.providers.'.$input['provider']) ||
$input['provider'] == ServerProvider::CUSTOM $input['provider'] == Custom::id()
) { ) {
return []; return [];
} }
@ -194,28 +167,56 @@ public function createFirewallRules(Server $server): void
$server->firewallRules()->createMany([ $server->firewallRules()->createMany([
[ [
'type' => 'allow', 'type' => 'allow',
'protocol' => 'ssh', 'name' => 'SSH',
'protocol' => 'tcp',
'port' => 22, 'port' => 22,
'source' => '0.0.0.0', 'source' => null,
'mask' => 0, 'mask' => null,
'status' => FirewallRuleStatus::READY, 'status' => FirewallRuleStatus::READY,
], ],
[ [
'type' => 'allow', 'type' => 'allow',
'protocol' => 'http', 'name' => 'HTTP',
'protocol' => 'tcp',
'port' => 80, 'port' => 80,
'source' => '0.0.0.0', 'source' => null,
'mask' => 0, 'mask' => null,
'status' => FirewallRuleStatus::READY, 'status' => FirewallRuleStatus::READY,
], ],
[ [
'type' => 'allow', 'type' => 'allow',
'protocol' => 'https', 'name' => 'HTTPS',
'protocol' => 'tcp',
'port' => 443, 'port' => 443,
'source' => '0.0.0.0', 'source' => null,
'mask' => 0, 'mask' => null,
'status' => FirewallRuleStatus::READY, 'status' => FirewallRuleStatus::READY,
], ],
]); ]);
} }
private function createServices(): void
{
$this->server->services()->forceDelete();
$this->addUfw();
$this->addMonitoring();
}
private function addUfw(): void
{
$this->server->services()->create([
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
]);
}
private function addMonitoring(): void
{
$this->server->services()->create([
'type' => 'monitoring',
'name' => 'remote-monitor',
'version' => 'latest',
]);
}
} }

View File

@ -4,16 +4,22 @@
use App\Models\Server; use App\Models\Server;
use App\ValidationRules\RestrictedIPAddressesRule; use App\ValidationRules\RestrictedIPAddressesRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class EditServer class EditServer
{ {
/** /**
* @param array<string, mixed> $input
* @return Server $server
*
* @throws ValidationException * @throws ValidationException
*/ */
public function edit(Server $server, array $input): Server public function edit(Server $server, array $input): Server
{ {
Validator::make($input, self::rules($server))->validate();
$checkConnection = false; $checkConnection = false;
if (isset($input['name'])) { if (isset($input['name'])) {
$server->name = $input['name']; $server->name = $input['name'];
@ -24,6 +30,9 @@ public function edit(Server $server, array $input): Server
} }
$server->ip = $input['ip']; $server->ip = $input['ip'];
} }
if (isset($input['local_ip'])) {
$server->local_ip = $input['local_ip'];
}
if (isset($input['port'])) { if (isset($input['port'])) {
if ($server->port !== $input['port']) { if ($server->port !== $input['port']) {
$checkConnection = true; $checkConnection = true;
@ -39,6 +48,9 @@ public function edit(Server $server, array $input): Server
return $server; return $server;
} }
/**
* @return array<string, array<int, mixed>>
*/
public static function rules(Server $server): array public static function rules(Server $server): array
{ {
return [ return [
@ -52,6 +64,11 @@ public static function rules(Server $server): array
new RestrictedIPAddressesRule, new RestrictedIPAddressesRule,
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id), Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
], ],
'local_ip' => [
'nullable',
'string',
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
],
'port' => [ 'port' => [
'integer', 'integer',
'min:1', 'min:1',

View File

@ -0,0 +1,97 @@
<?php
namespace App\Actions\Server;
use App\Enums\ServerStatus;
use App\Enums\ServiceStatus;
use App\Exceptions\SSHConnectionError;
use App\Exceptions\SSHError;
use App\Facades\Notifier;
use App\Models\Server;
use App\Notifications\ServerInstallationSucceed;
use App\Services\PHP\PHP;
class InstallServer
{
protected Server $server;
/**
* @throws SSHError
*/
public function run(Server $server): void
{
$this->server = $server;
$maxWait = 180;
while ($maxWait > 0) {
if (! $this->server->provider()->isRunning()) {
continue;
}
try {
$this->server->ssh()->connect();
break;
} catch (SSHConnectionError) {
// ignore
}
sleep(10);
$maxWait -= 10;
}
$this->install();
$this->server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($this->server, new ServerInstallationSucceed($this->server));
}
/**
* @throws SSHError
*/
public function install(): void
{
$this->createUser();
$this->progress(15, 'installing-updates');
$this->server->os()->upgrade();
$this->progress(25, 'installing-dependencies');
$this->server->os()->installDependencies();
$services = $this->server->services;
$currentProgress = 45;
$progressPerService = (100 - $currentProgress) / count($services);
foreach ($services as $service) {
$currentProgress += $progressPerService;
$this->progress($currentProgress, 'installing- '.$service->name);
$service->handler()->install();
$service->update(['status' => ServiceStatus::READY]);
if ($service->type == 'php') {
$this->progress($currentProgress, 'installing-composer');
/** @var PHP $handler */
$handler = $service->handler();
$handler->installComposer();
}
}
$this->progress(100, 'finishing');
}
/**
* @throws SSHError
*/
protected function createUser(): void
{
$this->server->os()->createUser(
$this->server->authentication['user'],
$this->server->authentication['pass'],
$this->server->sshKey()['public_key']
);
$this->server->ssh_user = config('core.ssh_user');
$this->server->save();
$this->server->refresh();
$this->server->public_key = $this->server->os()->getPublicKey($this->server->getSshUser());
$this->server->save();
}
protected function progress(int|float $percentage, ?string $step = null): void
{
$this->server->progress = $percentage;
$this->server->progress_step = $step;
$this->server->save();
}
}

View File

@ -13,13 +13,13 @@ public function update(Server $server): void
{ {
$server->status = ServerStatus::UPDATING; $server->status = ServerStatus::UPDATING;
$server->save(); $server->save();
dispatch(function () use ($server) { dispatch(function () use ($server): void {
$server->os()->upgrade(); $server->os()->upgrade();
$server->checkConnection(); $server->checkConnection();
$server->checkForUpdates(); $server->checkForUpdates();
})->catch(function () use ($server) { })->catch(function () use ($server): void {
Notifier::send($server, new ServerUpdateFailed($server)); Notifier::send($server, new ServerUpdateFailed($server));
$server->checkConnection(); $server->checkConnection();
})->onConnection('ssh'); })->onQueue('ssh-unique');
} }
} }

View File

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

View File

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

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