<?php
namespace App\Controller\Admin\VPN\V2ray\Protocol;
use App\Entity\VPN\V2ray\Protocol;
use App\Entity\VPN\V2ray\Server;
use App\Form\VPN\V2ray\Protocol\NormalProtocolType;
use App\Form\VPN\V2ray\Protocol\RealityProtocolType;
use App\Form\VPN\V2ray\Protocol\TLSProtocolType;
use App\Service\VPN\V2ray\ProtocolService;
use App\Service\VPN\V2ray\ServerService;
use App\ViewModel\VPN\V2ray\ProtocolViewModel;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/panel/admin/vpn/v2ray/server-protocols/{server}')]
class ProtocolController extends AbstractController
{
public ProtocolService $service;
public Server $server;
public ServerService $serverService;
public ?Request $request;
public function __construct(ServerService $serverService, ProtocolService $service , RequestStack $requestStack , ManagerRegistry $managerRegistry)
{
$this->service = $service;
$this->serverService = $serverService;
$this->request = $requestStack->getCurrentRequest();
$this->server = $managerRegistry->getRepository(Server::class)->find($this->request->attributes->get('server'));
}
public function getFilters(): array
{
return [
[
'name' => 'email',
'type' => 'text',
'label' => 'ایمیل',
'class' => '',
'value' => $this->request->get('email')
],
[
'name' => 'active',
'type' => 'radio',
'label' => 'وضعیت',
'class' => '',
'radio' => [
['name' => 'همه', 'value' => 'all'],
['name' => 'فعال', 'value' => 'true'],
['name' => 'غیرفعال', 'value' => 'false'],
],
'value' => $this->request->get('active')
]
];
}
public function getLists(): array
{
$array = [
[
'name' => 'id',
'label' => 'id',
'class' => '',
],
[
'name' => 'tag',
'label' => 'tag',
'class' => '',
],
[
'name' => 'type',
'label' => 'type',
'class' => '',
],
[
'name' => 'protocol',
'label' => 'protocol',
'class' => '',
],
[
'name' => 'network',
'label' => 'network',
'class' => '',
],
[
'name' => 'port',
'label' => 'port',
'class' => '',
],
[
'name' => 'certificateFile',
'label' => 'certificateFile',
'class' => '',
],
[
'name' => 'keyFile',
'label' => 'keyFile',
'class' => '',
],
[
'name' => 'createdAt',
'label' => 'تاریخ ثبت',
'class' => '',
'type' => 'date'
],
];
return $array;
}
#[Route('/', name: 'app_panel_admin_vpn_v2ray_protocol_index')]
public function index(Request $request)
{
$info = new ProtocolViewModel($request);
$data = $this->service->getList($info , $this->server);
return $this->render('panel/pages/admin/vpn/v2ray/protocols/list.html.twig', [
'paginator' => $data,
'server' => $this->server,
'currentPage' => 'app_panel_admin_vpn_v2ray_protocol_index',
'parameters' => $info,
'filters' => $this->getFilters(),
'lists' => $this->getLists(),
]);
}
#[Route('/new/{type}', name: 'app_panel_admin_vpn_v2ray_protocol_new')]
public function app_panel_admin_v2ray_protocols_new(Request $request , $type)
{
$object = new Protocol();
$object->setTag(uniqid('tag-',false));
$object->setServer($this->server);
switch ($type) {
case 'tls':
$object->setSecurity('tls');
$object->setType('tls');
$form = $this->createForm(TLSProtocolType::class, $object);
break;
case 'reality':
$object->setSecurity('reality');
$object->setType('reality');
$form = $this->createForm(RealityProtocolType::class, $object);
break;
case 'normal':
$object->setSecurity('normal');
$object->setType('normal');
$form = $this->createForm(NormalProtocolType::class, $object);
break;
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isSubmitted()) {
$this->service->save($object);
$this->addFlash('success', 'با موفقیت ثبت شد');
return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index' ,['server' => $this->server->getId()]);
}
return $this->render('panel/pages/admin/vpn/v2ray/protocols/enter.html.twig', [
'form' => $form->createView()
]);
}
#[Route('/edit/{id}', name: 'app_panel_admin_vpn_v2ray_protocol_edit')]
public function app_panel_admin_v2ray_protocols_edit(Request $request ,ManagerRegistry $managerRegistry , $id)
{
$object = $managerRegistry->getManager()->getRepository(Protocol::class)->find($id);
if (!$object->getTag()){
$object->setTag(uniqid('tag-',false));
}
$object->setServer($this->server);
switch ($object->getType()) {
case 'tls':
$object->setSecurity('tls');
$object->setType('tls');
$form = $this->createForm(TLSProtocolType::class, $object);
break;
case 'reality':
$object->setSecurity('reality');
$object->setType('reality');
$form = $this->createForm(RealityProtocolType::class, $object);
break;
case 'normal':
$object->setSecurity('normal');
$object->setType('normal');
$form = $this->createForm(NormalProtocolType::class, $object);
break;
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isSubmitted()) {
$this->service->save($object);
$this->addFlash('success', 'با موفقیت ثبت شد');
return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index' ,['server' => $this->server->getId()]);
}
return $this->render('panel/pages/admin/vpn/v2ray/protocols/enter.html.twig', [
'form' => $form->createView()
]);
}
#[Route('/archive/{id}/archive', name: 'app_panel_admin_vpn_v2ray_protocol_archive', methods: ['GET', 'POST'])]
public function archive(Protocol $object): Response
{
$this->service->archive($object);
return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index', ['server' => $object->getServer()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/delete/{id}', name: 'app_panel_admin_vpn_v2ray_protocol_delete')]
public function delete(Protocol $object): Response
{
$this->service->remove($object);
return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index', ['server' => $object->getServer()->getId()], Response::HTTP_SEE_OTHER);
}
}