You've already forked Traefik-Redis-Api
FONDLED THE CODE
This commit is contained in:
@@ -4,12 +4,28 @@ declare(strict_types=1);
|
||||
|
||||
namespace Siteworxpro\App\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use League\Route\Http\Exception\NotFoundException;
|
||||
use Nyholm\Psr7\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Siteworxpro\App\Traefik\ProtocolEnum;
|
||||
|
||||
abstract class Controller implements ControllerInterface
|
||||
{
|
||||
|
||||
protected function protocolEnumFromRequest(ServerRequest $request): ProtocolEnum
|
||||
{
|
||||
$protocol = $request->getAttribute('protocol');
|
||||
|
||||
try {
|
||||
return ProtocolEnum::fromString($protocol);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
Log::error($e->getMessage());
|
||||
|
||||
return ProtocolEnum::HTTP;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequest $request
|
||||
* @return ResponseInterface
|
||||
|
||||
@@ -20,10 +20,14 @@ class MiddlewaresController extends Controller
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getMiddleware($name));
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getMiddleware($name, $this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllMiddlewares());
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getAllMiddlewares($this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,7 +43,7 @@ class MiddlewaresController extends Controller
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE);
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE, $this->protocolEnumFromRequest($request));
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware added successfully']);
|
||||
}
|
||||
@@ -55,7 +59,7 @@ class MiddlewaresController extends Controller
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
|
||||
}
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE);
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE , $this->protocolEnumFromRequest($request));
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware deleted successfully']);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,14 @@ class RoutesController extends Controller
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getRouter($name));
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getRouter($name, $this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllRouters());
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getAllRouters($this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,7 +47,12 @@ class RoutesController extends Controller
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Rule is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::ROUTER);
|
||||
RedisClient::createOrReplace(
|
||||
$name,
|
||||
$data,
|
||||
EntityEnum::ROUTER,
|
||||
$this->protocolEnumFromRequest($request)
|
||||
);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Router created successfully']);
|
||||
}
|
||||
@@ -55,7 +64,11 @@ class RoutesController extends Controller
|
||||
{
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::ROUTER);
|
||||
RedisClient::deleteAllKeys(
|
||||
$name,
|
||||
EntityEnum::ROUTER,
|
||||
$this->protocolEnumFromRequest($request)
|
||||
);
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Router deleted successfully']);
|
||||
}
|
||||
@@ -70,7 +83,7 @@ class RoutesController extends Controller
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
try {
|
||||
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER);
|
||||
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER, $this->protocolEnumFromRequest($request));
|
||||
} catch (\InvalidArgumentException) {
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Router not found'], 404);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,14 @@ class ServicesController extends Controller
|
||||
if ($request->getAttribute('id') !== null) {
|
||||
$name = $request->getAttribute('id');
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getService($name));
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getService($name, $this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(RedisClient::getAllServices());
|
||||
return JsonResponseFactory::createJsonResponse(
|
||||
RedisClient::getAllServices($this->protocolEnumFromRequest($request))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,7 +43,7 @@ class ServicesController extends Controller
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'loadbalancer is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE);
|
||||
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE, $this->protocolEnumFromRequest($request));
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Service updated successfully']);
|
||||
}
|
||||
@@ -55,7 +59,7 @@ class ServicesController extends Controller
|
||||
return JsonResponseFactory::createJsonResponse(['error' => 'Service name is required'], 400);
|
||||
}
|
||||
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE);
|
||||
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE, $this->protocolEnumFromRequest($request));
|
||||
|
||||
return JsonResponseFactory::createJsonResponse(['message' => 'Service deleted successfully']);
|
||||
}
|
||||
|
||||
@@ -120,7 +120,10 @@ class Server
|
||||
*/
|
||||
protected function registerRoutes(): void
|
||||
{
|
||||
$this->router->group('/http/routes', function (RouteGroup $router) {
|
||||
$this->router->addPatternMatcher('protocolEnums', 'http|tcp|udp');
|
||||
$this->router->addPatternMatcher('protocolEnumsMiddleware', 'http|tcp');
|
||||
|
||||
$this->router->group('/{protocol:protocolEnums}/routes', function (RouteGroup $router) {
|
||||
$router->get('/', RoutesController::class . '::get');
|
||||
$router->get('/{id}', RoutesController::class . '::get');
|
||||
$router->post('/{id}', RoutesController::class . '::post');
|
||||
@@ -128,14 +131,14 @@ class Server
|
||||
$router->delete('/{id}', RoutesController::class . '::delete');
|
||||
});
|
||||
|
||||
$this->router->group('/http/services', function (RouteGroup $router) {
|
||||
$this->router->group('/{protocol:protocolEnums}/services', function (RouteGroup $router) {
|
||||
$router->get('/', ServicesController::class . '::get');
|
||||
$router->get('/{id}', ServicesController::class . '::get');
|
||||
$router->post('/{id}', ServicesController::class . '::post');
|
||||
$router->delete('/{id}', ServicesController::class . '::delete');
|
||||
});
|
||||
|
||||
$this->router->group('/http/middlewares', function (RouteGroup $router) {
|
||||
$this->router->group('/{protocol:protocolEnumsMiddleware}/middlewares', function (RouteGroup $router) {
|
||||
$router->get('/', MiddlewaresController::class . '::get');
|
||||
$router->get('/{id}', MiddlewaresController::class . '::get');
|
||||
$router->post('/{id}', MiddlewaresController::class . '::post');
|
||||
|
||||
@@ -18,4 +18,14 @@ enum ProtocolEnum
|
||||
self::UDP => 'udp',
|
||||
};
|
||||
}
|
||||
|
||||
public static function fromString(string $value): self
|
||||
{
|
||||
return match ($value) {
|
||||
'http' => self::HTTP,
|
||||
'tcp' => self::TCP,
|
||||
'udp' => self::UDP,
|
||||
default => throw new \InvalidArgumentException("Invalid protocol: $value"),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user