You've already forked Traefik-Redis-Api
done. going to bed now.
This commit is contained in:
47
src/Controllers/Controller.php
Normal file
47
src/Controllers/Controller.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use League\Route\Http\Exception\NotFoundException;
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
abstract class Controller implements ControllerInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @return ResponseInterface
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function get(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
throw new NotFoundException("not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function post(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
throw new NotFoundException("not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function delete(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
throw new NotFoundException("not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function patch(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
throw new NotFoundException("not found");
|
||||
}
|
||||
}
|
||||
43
src/Controllers/ControllerInterface.php
Normal file
43
src/Controllers/ControllerInterface.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
interface ControllerInterface
|
||||
{
|
||||
/**
|
||||
* Handle the request and return a response.
|
||||
*
|
||||
* @param ServerRequest $request The request data.
|
||||
* @return mixed The response data.
|
||||
*/
|
||||
public function get(ServerRequest $request): ResponseInterface;
|
||||
|
||||
/**
|
||||
* Handle the request and return a response.
|
||||
*
|
||||
* @param ServerRequest $request The request data.
|
||||
* @return mixed The response data.
|
||||
*/
|
||||
public function post(ServerRequest $request): ResponseInterface;
|
||||
|
||||
/**
|
||||
* Handle the request and return a response.
|
||||
*
|
||||
* @param ServerRequest $request The request data.
|
||||
* @return mixed The response data.
|
||||
*/
|
||||
public function delete(ServerRequest $request): ResponseInterface;
|
||||
|
||||
/**
|
||||
* Handle the request and return a response.
|
||||
*
|
||||
* @param ServerRequest $request The request data.
|
||||
* @return mixed The response data.
|
||||
*/
|
||||
public function patch(ServerRequest $request): ResponseInterface;
|
||||
}
|
||||
63
src/Controllers/MiddlewaresController.php
Normal file
63
src/Controllers/MiddlewaresController.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Siteworxpro\App\Http\JsonResponseFactory;
|
||||
use Siteworxpro\App\Traefik\EntityEnum;
|
||||
use Siteworxpro\App\Traefik\RedisClient;
|
||||
|
||||
class MiddlewaresController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function get(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getMiddleware($name));
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllMiddlewares());
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function post(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
if (empty($data)) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware added successfully']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function delete(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
if (empty($name)) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
|
||||
}
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware deleted successfully']);
|
||||
}
|
||||
}
|
||||
81
src/Controllers/RoutesController.php
Normal file
81
src/Controllers/RoutesController.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Siteworxpro\App\Http\JsonResponseFactory;
|
||||
use Siteworxpro\App\Traefik\EntityEnum;
|
||||
use Siteworxpro\App\Traefik\RedisClient;
|
||||
|
||||
class RoutesController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function get(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getRouter($name));
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllRouters());
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function post(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
if (empty($data['service'])) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Service is required'], 400);
|
||||
}
|
||||
|
||||
if (empty($data['rule'])) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Rule is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::ROUTER);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Router created successfully']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function delete(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::ROUTER);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Router deleted successfully']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function patch(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
try {
|
||||
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER);
|
||||
} catch (\InvalidArgumentException) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Router not found'], 404);
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Router updated successfully']);
|
||||
}
|
||||
}
|
||||
63
src/Controllers/ServicesController.php
Normal file
63
src/Controllers/ServicesController.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Siteworxpro\App\Http\JsonResponseFactory;
|
||||
use Siteworxpro\App\Traefik\EntityEnum;
|
||||
use Siteworxpro\App\Traefik\RedisClient;
|
||||
|
||||
class ServicesController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function get(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getService($name));
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllServices());
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function post(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
if (empty($data['loadbalancer'])) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'loadbalancer is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Service updated successfully']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \JsonException
|
||||
*/
|
||||
public function delete(ServerRequest $request): ResponseInterface
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
if (empty($name)) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Service name is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Service deleted successfully']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user