added annotations
Signed-off-by: tracer <tracer@24unix.net>
This commit is contained in:
parent
93142c9744
commit
e0e6c27c00
|
@ -8,12 +8,17 @@ use App\Repository\ApikeyRepository;
|
|||
use App\Repository\DomainRepository;
|
||||
use DI\Container;
|
||||
use DI\ContainerBuilder;
|
||||
use OpenApi\Annotations\ServerVariable;
|
||||
use OpenApi\Annotations\Tag;
|
||||
use OpenApi\Generator;
|
||||
use UnhandledMatchError;
|
||||
use function DI\autowire;
|
||||
use OpenApi\Attributes as OAT;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
#[OAT\Info(version: '0.0.1', title: 'bindAPI' )]
|
||||
class RequestController
|
||||
{
|
||||
//private DatabaseConnection $databaseConnection;
|
||||
|
@ -46,54 +51,164 @@ class RequestController
|
|||
$this->apikeyRepository = $this->container->get(name: ApikeyRepository::class);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @OA\Server(
|
||||
* url = "https://ns2.24unix.net/api"
|
||||
* )
|
||||
* @OA\Tag(name = "Server")
|
||||
* @OA\Get(
|
||||
* path = "/ping",
|
||||
* summary = "Returning pong.",
|
||||
* description = "Can be used to check API or server availability.",
|
||||
* tags={"Server"},
|
||||
* @OA\Response(response = "200", description = "OK"),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* security={
|
||||
* {"Authorization":{"read"}}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @OA\SecurityScheme (name="bindAPISecurity",
|
||||
* type="apiKey",
|
||||
* description="description",
|
||||
* name="X-API-Key",
|
||||
* in="header",
|
||||
* securityScheme="Authorization"
|
||||
*
|
||||
* )
|
||||
* @SwaggerDefinition(
|
||||
* securityDefinition = @SecurityDefinition(
|
||||
* apiKeyAuthDefinitions = {
|
||||
* @ApiKeyAuthDefinition(
|
||||
* key = "X-API-Key", in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, name = "X-API-KEY"
|
||||
* )
|
||||
* }
|
||||
* )
|
||||
* )
|
||||
* @OA\Tag(name = "Domains")
|
||||
* @OA\Get(
|
||||
* path="/domains",
|
||||
* summary="Listing all domains.",
|
||||
* description="desc",
|
||||
* tags={"Domains"},
|
||||
* @OA\Response(response="200", description="OK"),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* @OA\Response(response="404", description="Domain not found."),
|
||||
* security={
|
||||
* {"Authorization":{"read":"write"}}
|
||||
* }
|
||||
* )
|
||||
* @OA\Post(
|
||||
* path="/domains",
|
||||
* summary="Create a domain.",
|
||||
* description="Creates a new domain.",
|
||||
* tags={"Domains"},
|
||||
* @OA\Response(response="201", description="Created"),
|
||||
* @OA\Response(response = "400", description = "Invalid request body."),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* @OA\Response(response="404", description="Domain not found."),
|
||||
* security={
|
||||
* {"Authorization":{"read":"write"}}
|
||||
* }
|
||||
* )
|
||||
* @OA\Get(
|
||||
* path="/domains/{name}",
|
||||
* summary="Returns a single domain.",
|
||||
* description="Returns information of a single domain specified by its domain name.",
|
||||
* tags={"Domains"},
|
||||
* @OA\Response(response="200", description="OK"),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* @OA\Response(response="404", description="Domain not found."),
|
||||
* security={
|
||||
* {"Authorization":{"read":"write"}}
|
||||
* }
|
||||
* )
|
||||
* @OA\Put(
|
||||
* path="/domains/{name}",
|
||||
* summary="Updates a domain.",
|
||||
* description="Updates a domain. Only supplied fields will be updated, existing won't be affected.",
|
||||
* tags={"Domains"},
|
||||
* @OA\Response(response="200", description="OK"),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* @OA\Response(response="404", description="Domain not found."),
|
||||
* security={
|
||||
* {"Authorization":{"read":"write"}}
|
||||
* }
|
||||
* )
|
||||
* @OA\Delete (
|
||||
* path="/domains/{name}",
|
||||
* summary="Deletes a domain.",
|
||||
* description="Deletes a domain.",
|
||||
* tags={"Domains"},
|
||||
* @OA\Response(response="200", description="OK"),
|
||||
* @OA\Response(response = "401", description = "API key is missing or invalid."),
|
||||
* @OA\Response(response="404", description="Domain not found."),
|
||||
* security={
|
||||
* {"Authorization":{"read":"write"}}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function processRequest()
|
||||
{
|
||||
if (empty($this->uri[2]) || !(($this->uri[2] == 'domains') || $this->uri[2] == 'ping')) {
|
||||
$command = $this->uri[2];
|
||||
|
||||
if (empty($command) || !(($command == 'domains') || ($command == 'ping') || ($command == 'apidoc'))) {
|
||||
$this->header = '404 Not Found';
|
||||
$this->status = "404 Not Found";
|
||||
$this->message = "Endpoint not found.";
|
||||
} else {
|
||||
if ($this->checkPassword()) {
|
||||
if ($this->uri[2] == "ping") {
|
||||
$this->header = '200 OK';
|
||||
$this->status = 'pong';
|
||||
} else {
|
||||
try {
|
||||
match ($this->requestMethod) {
|
||||
'GET' => $this->handleDomainGetRequest(),
|
||||
'POST' => $this->handleDomainPostRequest(),
|
||||
'PUT' => $this->handleDomainPutRequest(),
|
||||
'DELETE' => $this->handleDomainDeleteRequest()
|
||||
};
|
||||
} catch (UnhandledMatchError) {
|
||||
$this->header = '400 Bad Request';
|
||||
$this->status = '400 Bad Request';
|
||||
$this->message = "unknown request method: $this->requestMethod";
|
||||
if ($command == 'apidoc') {
|
||||
$openapi = Generator::scan(sources: [__DIR__ . 'RequestController.php']);
|
||||
$this->status = 'openapi';
|
||||
$this->result[] = $openapi->toJson();
|
||||
} else {
|
||||
if ($this->checkPassword()) {
|
||||
|
||||
if ($this->uri[2] == "ping") {
|
||||
$this->header = '200 OK';
|
||||
$this->status = 'pong';
|
||||
} else {
|
||||
try {
|
||||
match ($this->requestMethod) {
|
||||
'GET' => $this->handleDomainGetRequest(),
|
||||
'POST' => $this->handleDomainPostRequest(),
|
||||
'PUT' => $this->handleDomainPutRequest(),
|
||||
'DELETE' => $this->handleDomainDeleteRequest()
|
||||
};
|
||||
} catch (UnhandledMatchError) {
|
||||
$this->header = '400 Bad Request';
|
||||
$this->status = '400 Bad Request';
|
||||
$this->message = "unknown request method: $this->requestMethod";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($this->header)) {
|
||||
header(header: $_SERVER['SERVER_PROTOCOL'] . ' ' . $this->header);
|
||||
}
|
||||
if (!empty($this->result)) {
|
||||
echo json_encode(value: $this->result);
|
||||
} else {
|
||||
if (!empty($this->status) && $this->status == 'pong') {
|
||||
echo json_encode(value: [
|
||||
'response' => $this->status
|
||||
]);
|
||||
|
||||
if (!empty($this->header)) {
|
||||
header(header: $_SERVER['SERVER_PROTOCOL'] . ' ' . $this->header);
|
||||
}
|
||||
if (!empty($this->result)) {
|
||||
if (!empty($this->status) && $this->status == 'openapi') {
|
||||
header(header: 'Content-Type: application/json');
|
||||
echo $this->result[0];
|
||||
} else {
|
||||
echo json_encode(value: $this->result);
|
||||
}
|
||||
} else {
|
||||
echo json_encode(value: [
|
||||
'status' => $this->status ?? "Error: No status",
|
||||
'message' => $this->message ?? "Error: No message."
|
||||
]);
|
||||
if (!empty($this->status) && $this->status == 'pong') {
|
||||
echo json_encode(value: [
|
||||
'response' => $this->status
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(value: [
|
||||
'status' => $this->status ?? "Error: No status",
|
||||
'message' => $this->message ?? "Error: No message."
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -173,7 +288,8 @@ class RequestController
|
|||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function handleDomainPostRequest(): void
|
||||
public
|
||||
function handleDomainPostRequest(): void
|
||||
{
|
||||
$name = $_POST['name'] ?? '';
|
||||
$panelID = intval(value: $_POST['panel_id'] ?? 0);
|
||||
|
@ -206,7 +322,8 @@ class RequestController
|
|||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function handleDomainPutRequest(): void
|
||||
public
|
||||
function handleDomainPutRequest(): void
|
||||
{
|
||||
$putData = fopen(filename: 'php://input', mode: 'r');
|
||||
$data = fread(stream: $putData, length: 512);
|
||||
|
@ -249,10 +366,12 @@ class RequestController
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function handleDomainDeleteRequest(): void
|
||||
public
|
||||
function handleDomainDeleteRequest(): void
|
||||
{
|
||||
$deleteData = fopen(filename: 'php://input', mode: 'r');
|
||||
$data = fread(stream: $deleteData, length: 512);
|
||||
|
|
Loading…
Reference in New Issue