refs #198 adds new ogbootbundle with controller functions and service to connect so stunnel4
parent
66e4e2d3cb
commit
ddc8a5faa3
|
@ -0,0 +1,107 @@
|
||||||
|
{
|
||||||
|
"type": "project",
|
||||||
|
"license": "proprietary",
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"prefer-stable": true,
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2.0",
|
||||||
|
"ext-ctype": "*",
|
||||||
|
"ext-iconv": "*",
|
||||||
|
"doctrine/annotations": "^1.6",
|
||||||
|
"doctrine/doctrine-bundle": "^2.0",
|
||||||
|
"doctrine/doctrine-migrations-bundle": "^3.0",
|
||||||
|
"doctrine/orm": "^2.7",
|
||||||
|
"phpdocumentor/reflection-docblock": "^5.0",
|
||||||
|
"phpstan/phpdoc-parser": "^0.4",
|
||||||
|
"zircote/swagger-php": "3.*",
|
||||||
|
"symfony/runtime": "5.*",
|
||||||
|
"symfony/asset": "5.*",
|
||||||
|
"symfony/console": "5.*",
|
||||||
|
"symfony/doctrine-messenger": "5.*",
|
||||||
|
"symfony/dotenv": "5.*",
|
||||||
|
"symfony/expression-language": "5.*",
|
||||||
|
"symfony/flex": "^1.17",
|
||||||
|
"symfony/form": "5.*",
|
||||||
|
"symfony/framework-bundle": "5.*",
|
||||||
|
"symfony/http-client": "5.*",
|
||||||
|
"symfony/intl": "5.*",
|
||||||
|
"symfony/mailer": "5.*",
|
||||||
|
"symfony/mime": "5.*",
|
||||||
|
"symfony/monolog-bundle": "^3.0",
|
||||||
|
"symfony/notifier": "5.*",
|
||||||
|
"symfony/process": "5.*",
|
||||||
|
"symfony/property-access": "5.*",
|
||||||
|
"symfony/property-info": "5.*",
|
||||||
|
"symfony/security-bundle": "5.*",
|
||||||
|
"symfony/serializer": "5.*",
|
||||||
|
"symfony/string": "5.*",
|
||||||
|
"symfony/translation": "5.*",
|
||||||
|
"symfony/twig-bundle": "5.*",
|
||||||
|
"symfony/validator": "5.*",
|
||||||
|
"symfony/web-link": "5.*",
|
||||||
|
"symfony/yaml": "5.*",
|
||||||
|
"twig/extra-bundle": "^2.12|^3.0",
|
||||||
|
"twig/twig": "^2.12|^3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.5",
|
||||||
|
"symfony/browser-kit": "5.*",
|
||||||
|
"symfony/css-selector": "5.*",
|
||||||
|
"symfony/debug-bundle": "5.*",
|
||||||
|
"symfony/maker-bundle": "^1.0",
|
||||||
|
"symfony/phpunit-bridge": "^5.0",
|
||||||
|
"symfony/stopwatch": "5.*",
|
||||||
|
"symfony/web-profiler-bundle": "5.*"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"platform": {
|
||||||
|
"php": "8.3"
|
||||||
|
},
|
||||||
|
"allow-plugins": {
|
||||||
|
"composer/package-versions-deprecated": true,
|
||||||
|
"symfony/flex": true,
|
||||||
|
"symfony/runtime": true
|
||||||
|
},
|
||||||
|
"optimize-autoloader": true,
|
||||||
|
"preferred-install": {
|
||||||
|
"*": "dist"
|
||||||
|
},
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\Tests\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"symfony/polyfill-ctype": "*",
|
||||||
|
"symfony/polyfill-iconv": "*",
|
||||||
|
"symfony/polyfill-php72": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"auto-scripts": {
|
||||||
|
"cache:clear": "symfony-cmd",
|
||||||
|
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||||
|
},
|
||||||
|
"post-install-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/symfony": "*"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"symfony": {
|
||||||
|
"allow-contrib": false,
|
||||||
|
"require": "5.*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 665 B |
Binary file not shown.
After Width: | Height: | Size: 628 B |
|
@ -0,0 +1,16 @@
|
||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: -moz-scrollbars-vertical;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: #fafafa;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!-- HTML for static distribution bundle build -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Swagger UI</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="index.css" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="swagger-ui"></div>
|
||||||
|
<script src="./swagger-ui-bundle.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-initializer.js" charset="UTF-8"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Kernel;
|
||||||
|
|
||||||
|
require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
|
||||||
|
|
||||||
|
return function (array $context) {
|
||||||
|
return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
|
||||||
|
};
|
|
@ -0,0 +1,79 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<title>Swagger UI: OAuth2 Redirect</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
function run () {
|
||||||
|
var oauth2 = window.opener.swaggerUIRedirectOauth2;
|
||||||
|
var sentState = oauth2.state;
|
||||||
|
var redirectUrl = oauth2.redirectUrl;
|
||||||
|
var isValid, qp, arr;
|
||||||
|
|
||||||
|
if (/code|token|error/.test(window.location.hash)) {
|
||||||
|
qp = window.location.hash.substring(1).replace('?', '&');
|
||||||
|
} else {
|
||||||
|
qp = location.search.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = qp.split("&");
|
||||||
|
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
|
||||||
|
qp = qp ? JSON.parse('{' + arr.join() + '}',
|
||||||
|
function (key, value) {
|
||||||
|
return key === "" ? value : decodeURIComponent(value);
|
||||||
|
}
|
||||||
|
) : {};
|
||||||
|
|
||||||
|
isValid = qp.state === sentState;
|
||||||
|
|
||||||
|
if ((
|
||||||
|
oauth2.auth.schema.get("flow") === "accessCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorizationCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorization_code"
|
||||||
|
) && !oauth2.auth.code) {
|
||||||
|
if (!isValid) {
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "warning",
|
||||||
|
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qp.code) {
|
||||||
|
delete oauth2.state;
|
||||||
|
oauth2.auth.code = qp.code;
|
||||||
|
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
|
||||||
|
} else {
|
||||||
|
let oauthErrorMsg;
|
||||||
|
if (qp.error) {
|
||||||
|
oauthErrorMsg = "["+qp.error+"]: " +
|
||||||
|
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
|
||||||
|
(qp.error_uri ? "More info: "+qp.error_uri : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "error",
|
||||||
|
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
|
||||||
|
}
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState !== 'loading') {
|
||||||
|
run();
|
||||||
|
} else {
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
window.onload = function() {
|
||||||
|
//<editor-fold desc="Changeable Configuration Block">
|
||||||
|
|
||||||
|
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
|
||||||
|
window.ui = SwaggerUIBundle({
|
||||||
|
url: "http://192.168.0.27:8080/swagger.json",
|
||||||
|
dom_id: '#swagger-ui',
|
||||||
|
deepLinking: true,
|
||||||
|
presets: [
|
||||||
|
SwaggerUIBundle.presets.apis,
|
||||||
|
SwaggerUIStandalonePreset
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
SwaggerUIBundle.plugins.DownloadUrl
|
||||||
|
],
|
||||||
|
layout: "StandaloneLayout"
|
||||||
|
});
|
||||||
|
|
||||||
|
//</editor-fold>
|
||||||
|
};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,549 @@
|
||||||
|
{
|
||||||
|
"openapi": "3.0.0",
|
||||||
|
"info": {
|
||||||
|
"title": "My API",
|
||||||
|
"version": "1.0"
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"/opengnsys3/rest/dhcp/subnet": {
|
||||||
|
"get": {
|
||||||
|
"operationId": "ece42bc4084486aedf42734bdb0b84cb",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Devuelve todas las subredes",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/Subnet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error al obtener las subredes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"summary": "Add a new DHCP subnet",
|
||||||
|
"operationId": "36e86a6932056e774180d074d3d63ad0",
|
||||||
|
"requestBody": {
|
||||||
|
"description": "JSON payload",
|
||||||
|
"required": true,
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"subnetId": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 2
|
||||||
|
},
|
||||||
|
"mask": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "255.255.255.0"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "192.168.1.0"
|
||||||
|
},
|
||||||
|
"nextServer": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "192.168.1.1"
|
||||||
|
},
|
||||||
|
"bootFileName": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "pxelinux.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Subnet added successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/opengnsys3/rest/dhcp/subnet/{subnetId}": {
|
||||||
|
"put": {
|
||||||
|
"summary": "Modify a DHCP subnet",
|
||||||
|
"operationId": "c002afa59d07660be24fda34e1498c13",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "ID of the subnet to modify",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestBody": {
|
||||||
|
"description": "Data to modify the subnet",
|
||||||
|
"required": true,
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"mask": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nextServer": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"bootFileName": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Subnet modified successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"summary": "Delete a DHCP subnet",
|
||||||
|
"operationId": "299c4287d729ca98c47ef613720051f4",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "ID of the subnet to delete",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Subnet deleted successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/opengnsys3/rest/dhcp/subnet/{subnetId}/host": {
|
||||||
|
"get": {
|
||||||
|
"summary": "Get all hosts in a subnet",
|
||||||
|
"operationId": "2511366de74accc3d7356814ced1cf50",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "The ID of the subnet",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "List of hosts in the subnet",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/Host"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Server error",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"put": {
|
||||||
|
"summary": "Update a DHCP host",
|
||||||
|
"operationId": "6106fe2802e2f913ddb35df61b5fde35",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "The ID of the subnet",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestBody": {
|
||||||
|
"description": "Data for the host to update",
|
||||||
|
"required": true,
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "pc11"
|
||||||
|
},
|
||||||
|
"oldMacAddress": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "56:6f:c7:4f:00:4f"
|
||||||
|
},
|
||||||
|
"oldAddress": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "192.168.1.11"
|
||||||
|
},
|
||||||
|
"macAddress": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "56:6f:c7:4f:01:01"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "192.168.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Host updated successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"summary": "Add a DHCP host to a subnet",
|
||||||
|
"operationId": "f5d3e1de64faa4e5b14cdc7d3bd0c427",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "ID of the subnet to add the host to",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestBody": {
|
||||||
|
"description": "Data for the new host",
|
||||||
|
"required": true,
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "pc11"
|
||||||
|
},
|
||||||
|
"macAddress": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "56:6f:c7:4f:00:4f"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "172.30.4.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Host added successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"summary": "Delete a DHCP host from a specific subnet",
|
||||||
|
"operationId": "542cc5fc093ff121c154504e9cad270f",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "subnetId",
|
||||||
|
"in": "path",
|
||||||
|
"description": "The ID of the subnet",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestBody": {
|
||||||
|
"description": "Data for the host to delete",
|
||||||
|
"required": true,
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "pc11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Host deleted successfully",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Error occurred",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"schemas": {
|
||||||
|
"Subnet": {
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "The ID of the subnet",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"subnet": {
|
||||||
|
"description": "The name of the subnet",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"next-server": {
|
||||||
|
"description": "The next server in the subnet",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"boot-file-name": {
|
||||||
|
"description": "The boot file name for the subnet",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"reservations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"description": "The reservations in the subnet",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"Host": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "pc11"
|
||||||
|
},
|
||||||
|
"macAddress": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "56:6f:c7:4f:00:4f"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "172.30.4.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,341 @@
|
||||||
|
openapi: 3.0.0
|
||||||
|
info:
|
||||||
|
title: 'Ogdhcp API'
|
||||||
|
version: '1.0'
|
||||||
|
paths:
|
||||||
|
/opengnsys3/rest/dhcp/subnets:
|
||||||
|
get:
|
||||||
|
operationId: 8f92a1cbcb8cd176bdc4ae272b3ad303
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Devuelve todas las subredes'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/Subnet'
|
||||||
|
'400':
|
||||||
|
description: 'Error al obtener las subredes'
|
||||||
|
post:
|
||||||
|
summary: 'Add a new DHCP subnet'
|
||||||
|
operationId: 88949bae5e7784ce2721ffafe7c88c0a
|
||||||
|
requestBody:
|
||||||
|
description: 'JSON payload'
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
subnetId:
|
||||||
|
type: integer
|
||||||
|
example: 2
|
||||||
|
mask:
|
||||||
|
type: string
|
||||||
|
example: 255.255.255.0
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
example: 192.168.1.0
|
||||||
|
nextServer:
|
||||||
|
type: string
|
||||||
|
example: 192.168.1.1
|
||||||
|
bootFileName:
|
||||||
|
type: string
|
||||||
|
example: pxelinux.0
|
||||||
|
type: object
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Subnet added successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
'/opengnsys3/rest/dhcp/subnets/{subnetId}':
|
||||||
|
put:
|
||||||
|
summary: 'Modify a DHCP subnet'
|
||||||
|
operationId: 548b55fc0e1ad59ea5b5c909dfd07c71
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'ID of the subnet to modify'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
requestBody:
|
||||||
|
description: 'Data to modify the subnet'
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
mask:
|
||||||
|
type: string
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
nextServer:
|
||||||
|
type: string
|
||||||
|
bootFileName:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Subnet modified successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
delete:
|
||||||
|
summary: 'Delete a DHCP subnet'
|
||||||
|
operationId: c1c1c34729bdd85857b22e6e2bdc41de
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'ID of the subnet to delete'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Subnet deleted successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
'/opengnsys3/rest/dhcp/subnets/{subnetId}/hosts':
|
||||||
|
get:
|
||||||
|
summary: 'Get all hosts in a subnet'
|
||||||
|
operationId: 0989ca622a6a7e23f5af8e3bdd6f6b05
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'The ID of the subnet'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'List of hosts in the subnet'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/Host'
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
'500':
|
||||||
|
description: 'Server error'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
put:
|
||||||
|
summary: 'Update a DHCP host'
|
||||||
|
operationId: 1541441cd53685aaf6df45ab48befaa8
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'The ID of the subnet'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
requestBody:
|
||||||
|
description: 'Data for the host to update'
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
example: pc11
|
||||||
|
oldMacAddress:
|
||||||
|
type: string
|
||||||
|
example: '56:6f:c7:4f:00:4f'
|
||||||
|
oldAddress:
|
||||||
|
type: string
|
||||||
|
example: 192.168.1.11
|
||||||
|
macAddress:
|
||||||
|
type: string
|
||||||
|
example: '56:6f:c7:4f:01:01'
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
example: 192.168.1.11
|
||||||
|
type: object
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Host updated successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
post:
|
||||||
|
summary: 'Add a DHCP host to a subnet'
|
||||||
|
operationId: 3f897dcd7c04787ac9c42ddbb57cb800
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'ID of the subnet to add the host to'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
requestBody:
|
||||||
|
description: 'Data for the new host'
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
example: pc11
|
||||||
|
macAddress:
|
||||||
|
type: string
|
||||||
|
example: '56:6f:c7:4f:00:4f'
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
example: 172.30.4.11
|
||||||
|
type: object
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Host added successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
delete:
|
||||||
|
summary: 'Delete a DHCP host from a specific subnet'
|
||||||
|
operationId: f652c52b39d57d283401df66a7930b5f
|
||||||
|
parameters:
|
||||||
|
-
|
||||||
|
name: subnetId
|
||||||
|
in: path
|
||||||
|
description: 'The ID of the subnet'
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
requestBody:
|
||||||
|
description: 'Data for the host to delete'
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
example: pc11
|
||||||
|
type: object
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 'Host deleted successfully'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
success: { type: string }
|
||||||
|
type: object
|
||||||
|
'400':
|
||||||
|
description: 'Error occurred'
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
error: { type: string }
|
||||||
|
type: object
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
Subnet:
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
description: 'The ID of the subnet'
|
||||||
|
type: integer
|
||||||
|
subnet:
|
||||||
|
description: 'The name of the subnet'
|
||||||
|
type: string
|
||||||
|
next-server:
|
||||||
|
description: 'The next server in the subnet'
|
||||||
|
type: string
|
||||||
|
boot-file-name:
|
||||||
|
description: 'The boot file name for the subnet'
|
||||||
|
type: string
|
||||||
|
reservations:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
description: 'The reservations in the subnet'
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
Host:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
example: pc11
|
||||||
|
macAddress:
|
||||||
|
type: string
|
||||||
|
example: '56:6f:c7:4f:00:4f'
|
||||||
|
address:
|
||||||
|
type: string
|
||||||
|
example: 172.30.4.11
|
||||||
|
type: object
|
|
@ -0,0 +1 @@
|
||||||
|
[]
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||||
|
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
||||||
|
|
||||||
|
class Kernel extends BaseKernel
|
||||||
|
{
|
||||||
|
use MicroKernelTrait;
|
||||||
|
}
|
|
@ -0,0 +1,338 @@
|
||||||
|
<?php
|
||||||
|
// src/OgBootBundle/Controller/OgBootController.php
|
||||||
|
|
||||||
|
namespace App\OgBootBundle\Controller;
|
||||||
|
require_once __DIR__ . '/../constants.php';
|
||||||
|
use OpenApi\Annotations as OA;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use App\OgBootBundle\Service\CurlRequestService;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
|
||||||
|
class OgBootController
|
||||||
|
{
|
||||||
|
private $logger;
|
||||||
|
/**
|
||||||
|
* @OA\Info(title="Ogboot API", version="1.0")
|
||||||
|
*/
|
||||||
|
|
||||||
|
private $curlRequestService;
|
||||||
|
|
||||||
|
public function __construct(CurlRequestService $curlRequestService, LoggerInterface $logger)
|
||||||
|
{
|
||||||
|
$this->curlRequestService = $curlRequestService;
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/poweroff",
|
||||||
|
* summary="Power off a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1"))
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Clients powered off successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/poweroff", name="poweroff", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function poweroff(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_POWEROFF, POST, [OG_REST_PARAM_CLIENTS => $ips]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/reboot",
|
||||||
|
* summary="Reboot a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1"))
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Clients rebooted successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/reboot", name="reboot", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function reboot(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_REBOOT, POST, [OG_REST_PARAM_CLIENTS => $ips]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/stop",
|
||||||
|
* summary="Stop a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1"))
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Clients stopped successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/stop", name="stop", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function stop(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_REBOOT, POST, [OG_REST_PARAM_CLIENTS => $ips]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/refresh",
|
||||||
|
* summary="Refresh a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1"))
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Clients refreshed successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/refresh", name="refresh", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function refresh(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_REFRESH, POST, [OG_REST_PARAM_CLIENTS => $ips]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/hardware",
|
||||||
|
* summary="Get hardware info of a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1"))
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Hardware info retrieved successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/hardware", name="hardware", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function hardware(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_HARDWARE, POST, [OG_REST_PARAM_CLIENTS => $ips]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/clients/software",
|
||||||
|
* summary="Get software info of a client",
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* description="JSON payload",
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="clients", type="array", @OA\Items(type="string", example="192.168.1.1")),
|
||||||
|
* @OA\Property(property="disk", type="string", example="disk1"),
|
||||||
|
* @OA\Property(property="part", type="string", example="part1")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Software info retrieved successfully",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="success", type="string")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=400,
|
||||||
|
* description="Error occurred",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string")
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* @Route("/clients/software", name="software", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function software(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['clients']) || !isset($data['disk']) || !isset($data['part'])) {
|
||||||
|
return new Response('Invalid data', Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ips = $data['clients'];
|
||||||
|
$disk = $data['disk'];
|
||||||
|
$part = $data['part'];
|
||||||
|
|
||||||
|
$result = $this->curlRequestService->common_request(OG_REST_CMD_SOFTWARE, POST, [OG_REST_PARAM_CLIENTS => $ips, OG_REST_PARAM_DISK => $disk, OG_REST_PARAM_PART => $part]);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
return new Response('Success', Response::HTTP_OK);
|
||||||
|
} else {
|
||||||
|
return new Response('Failed', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
// src/OgBootBundle/OgBootBundle.php
|
||||||
|
|
||||||
|
namespace App\OgBootBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class OgBootBundle extends Bundle
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
// src/OgBootBundle/Service/CurlRequestService.php
|
||||||
|
|
||||||
|
namespace App\OgBootBundle\Service;
|
||||||
|
require_once __DIR__ . '/../constants.php';
|
||||||
|
use Exception;
|
||||||
|
include_once (__DIR__ . '/../../../etc/php-vars.php');
|
||||||
|
$conf_file = parse_ini_file(__DIR__ . '/../../../etc/ogAdmServer.cfg');
|
||||||
|
define('OG_REST_API_TOKEN', 'Authorization: ' . $conf_file['APITOKEN']);
|
||||||
|
|
||||||
|
class CurlRequestService
|
||||||
|
{
|
||||||
|
function common_request($command, $type, $data = null) {
|
||||||
|
|
||||||
|
$json = json_encode($data);
|
||||||
|
|
||||||
|
$service_url = OG_REST_URL.$command;
|
||||||
|
|
||||||
|
$curl = curl_init($service_url);
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||||
|
OG_REST_API_TOKEN,
|
||||||
|
));
|
||||||
|
curl_setopt ($curl, CURLOPT_SSLCERT, __DIR__ . '/../../../etc/ssl/WebConsole.crt.pem');
|
||||||
|
curl_setopt ($curl, CURLOPT_SSLKEY, __DIR__ . '/../../../etc/ssl/WebConsole.key.pem');
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
default:
|
||||||
|
case GET:
|
||||||
|
break;
|
||||||
|
case POST:
|
||||||
|
curl_setopt($curl, CURLOPT_POST, true);
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
|
||||||
|
}
|
||||||
|
|
||||||
|
$curl_response = curl_exec($curl);
|
||||||
|
$info = curl_getinfo($curl);
|
||||||
|
|
||||||
|
if ($curl_response === false || $info['http_code'] != 200) {
|
||||||
|
syslog(LOG_ERR, 'error occured during curl exec. Additioanl info: ' . print_r($info, TRUE));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_close($curl);
|
||||||
|
|
||||||
|
syslog(LOG_INFO, 'response '.$command.' ok!');
|
||||||
|
|
||||||
|
return json_decode($curl_response, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function convertMaskToCIDR($mask)
|
||||||
|
{
|
||||||
|
$bits = 0;
|
||||||
|
$mask = explode(".", $mask);
|
||||||
|
|
||||||
|
foreach ($mask as $octect)
|
||||||
|
$bits += strlen(str_replace("0", "", decbin($octect)));
|
||||||
|
|
||||||
|
return $bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
define('GET', 1);
|
||||||
|
define('POST', 2);
|
||||||
|
define('CUSTOM', 3);
|
||||||
|
|
||||||
|
define('OG_REST_CMD_CLIENTS', 'clients');
|
||||||
|
define('OG_REST_CMD_WOL', 'wol');
|
||||||
|
define('OG_REST_CMD_SESSION', 'session');
|
||||||
|
define('OG_REST_CMD_RUN', 'shell/run');
|
||||||
|
define('OG_REST_CMD_OUTPUT', 'shell/output');
|
||||||
|
define('OG_REST_CMD_POWEROFF', 'poweroff');
|
||||||
|
define('OG_REST_CMD_REBOOT', 'reboot');
|
||||||
|
define('OG_REST_CMD_STOP', 'stop');
|
||||||
|
define('OG_REST_CMD_REFRESH', 'refresh');
|
||||||
|
define('OG_REST_CMD_HARDWARE', 'hardware');
|
||||||
|
define('OG_REST_CMD_SOFTWARE', 'software');
|
||||||
|
define('OG_REST_CMD_CREATE_IMAGE', 'image/create');
|
||||||
|
define('OG_REST_CMD_RESTORE_IMAGE', 'image/restore');
|
||||||
|
define('OG_REST_CMD_SETUP', 'setup');
|
||||||
|
define('OG_REST_CMD_CREATE_BASIC_IMAGE', 'image/create/basic');
|
||||||
|
define('OG_REST_CMD_CREATE_INCREMENTAL_IMAGE', 'image/create/incremental');
|
||||||
|
define('OG_REST_CMD_RESTORE_BASIC_IMAGE', 'image/restore/basic');
|
||||||
|
define('OG_REST_CMD_RESTORE_INCREMENTAL_IMAGE', 'image/restore/incremental');
|
||||||
|
define('OG_REST_CMD_RUN_SCHEDULE', 'run/schedule');
|
||||||
|
|
||||||
|
define('OG_REST_PARAM_CLIENTS', 'clients');
|
||||||
|
define('OG_REST_PARAM_ADDR', 'addr');
|
||||||
|
define('OG_REST_PARAM_MAC', 'mac');
|
||||||
|
define('OG_REST_PARAM_DISK', 'disk');
|
||||||
|
define('OG_REST_PARAM_PART', 'partition');
|
||||||
|
define('OG_REST_PARAM_RUN', 'run');
|
||||||
|
define('OG_REST_PARAM_TYPE', 'type');
|
||||||
|
define('OG_REST_PARAM_STATE', 'state');
|
||||||
|
define('OG_REST_PARAM_NAME', 'name');
|
||||||
|
define('OG_REST_PARAM_REPOS', 'repository');
|
||||||
|
define('OG_REST_PARAM_ID', 'id');
|
||||||
|
define('OG_REST_PARAM_CODE', 'code');
|
||||||
|
define('OG_REST_PARAM_PROFILE', 'profile');
|
||||||
|
define('OG_REST_PARAM_CACHE', 'cache');
|
||||||
|
define('OG_REST_PARAM_CACHE_SIZE', 'cache_size');
|
||||||
|
define('OG_REST_PARAM_FILE_SYSTEM', 'filesystem');
|
||||||
|
define('OG_REST_PARAM_SIZE', 'size');
|
||||||
|
define('OG_REST_PARAM_FORMAT', 'format');
|
||||||
|
define('OG_REST_PARAM_PARTITION_SETUP', 'partition_setup');
|
||||||
|
define('OG_REST_PARAM_SYNC_PARAMS', 'sync_params');
|
||||||
|
define('OG_REST_PARAM_SYNC', 'sync');
|
||||||
|
define('OG_REST_PARAM_DIFF', 'diff');
|
||||||
|
define('OG_REST_PARAM_REMOVE', 'remove');
|
||||||
|
define('OG_REST_PARAM_COMPRESS', 'compress');
|
||||||
|
define('OG_REST_PARAM_CLEANUP', 'cleanup');
|
||||||
|
define('OG_REST_PARAM_CLEANUP_CACHE', 'cleanup_cache');
|
||||||
|
define('OG_REST_PARAM_REMOVE_DST', 'remove_dst');
|
||||||
|
define('OG_REST_PARAM_PATH', 'path');
|
||||||
|
define('OG_REST_PARAM_DIFF_ID', 'diff_id');
|
||||||
|
define('OG_REST_PARAM_DIFF_NAME', 'diff_name');
|
||||||
|
define('OG_REST_PARAM_METHOD', 'method');
|
||||||
|
define('OG_REST_PARAM_ECHO', 'echo');
|
||||||
|
?>
|
Loading…
Reference in New Issue