src/Controller/Admin/VPN/V2ray/Protocol/ProtocolController.php line 116

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin\VPN\V2ray\Protocol;
  3. use App\Entity\VPN\V2ray\Protocol;
  4. use App\Entity\VPN\V2ray\Server;
  5. use App\Form\VPN\V2ray\Protocol\NormalProtocolType;
  6. use App\Form\VPN\V2ray\Protocol\RealityProtocolType;
  7. use App\Form\VPN\V2ray\Protocol\TLSProtocolType;
  8. use App\Service\VPN\V2ray\ProtocolService;
  9. use App\Service\VPN\V2ray\ServerService;
  10. use App\ViewModel\VPN\V2ray\ProtocolViewModel;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. #[Route('/panel/admin/vpn/v2ray/server-protocols/{server}')]
  18. class ProtocolController extends AbstractController
  19. {
  20.     public ProtocolService $service;
  21.     public Server $server;
  22.     public ServerService $serverService;
  23.     public ?Request $request;
  24.     public function __construct(ServerService $serverServiceProtocolService $service RequestStack $requestStack ManagerRegistry $managerRegistry)
  25.     {
  26.         $this->service $service;
  27.         $this->serverService $serverService;
  28.         $this->request $requestStack->getCurrentRequest();
  29.         $this->server $managerRegistry->getRepository(Server::class)->find($this->request->attributes->get('server'));
  30.     }
  31.     public function getFilters(): array
  32.     {
  33.         return [
  34.             [
  35.                 'name' => 'email',
  36.                 'type' => 'text',
  37.                 'label' => 'ایمیل',
  38.                 'class' => '',
  39.                 'value' => $this->request->get('email')
  40.             ],
  41.             [
  42.                 'name' => 'active',
  43.                 'type' => 'radio',
  44.                 'label' => 'وضعیت',
  45.                 'class' => '',
  46.                 'radio' => [
  47.                     ['name' => 'همه''value' => 'all'],
  48.                     ['name' => 'فعال''value' => 'true'],
  49.                     ['name' => 'غیرفعال''value' => 'false'],
  50.                 ],
  51.                 'value' => $this->request->get('active')
  52.             ]
  53.         ];
  54.     }
  55.     public function getLists(): array
  56.     {
  57.         $array = [
  58.             [
  59.                 'name' => 'id',
  60.                 'label' => 'id',
  61.                 'class' => '',
  62.             ],
  63.             [
  64.                 'name' => 'tag',
  65.                 'label' => 'tag',
  66.                 'class' => '',
  67.             ],
  68.             [
  69.                 'name' => 'type',
  70.                 'label' => 'type',
  71.                 'class' => '',
  72.             ],
  73.             [
  74.                 'name' => 'protocol',
  75.                 'label' => 'protocol',
  76.                 'class' => '',
  77.             ],
  78.             [
  79.                 'name' => 'network',
  80.                 'label' => 'network',
  81.                 'class' => '',
  82.             ],
  83.             [
  84.                 'name' => 'port',
  85.                 'label' => 'port',
  86.                 'class' => '',
  87.             ],
  88.             [
  89.                 'name' => 'certificateFile',
  90.                 'label' => 'certificateFile',
  91.                 'class' => '',
  92.             ],
  93.             [
  94.                 'name' => 'keyFile',
  95.                 'label' => 'keyFile',
  96.                 'class' => '',
  97.             ],
  98.             [
  99.                 'name' => 'createdAt',
  100.                 'label' => 'تاریخ ثبت',
  101.                 'class' => '',
  102.                 'type' => 'date'
  103.             ],
  104.         ];
  105.         return $array;
  106.     }
  107.     #[Route('/'name'app_panel_admin_vpn_v2ray_protocol_index')]
  108.     public function index(Request $request)
  109.     {
  110.         $info = new ProtocolViewModel($request);
  111.         $data $this->service->getList($info $this->server);
  112.         return $this->render('panel/pages/admin/vpn/v2ray/protocols/list.html.twig', [
  113.             'paginator' => $data,
  114.             'server' => $this->server,
  115.             'currentPage' => 'app_panel_admin_vpn_v2ray_protocol_index',
  116.             'parameters' => $info,
  117.             'filters' => $this->getFilters(),
  118.             'lists' => $this->getLists(),
  119.         ]);
  120.     }
  121.     #[Route('/new/{type}'name'app_panel_admin_vpn_v2ray_protocol_new')]
  122.     public function app_panel_admin_v2ray_protocols_new(Request $request $type)
  123.     {
  124.         $object = new Protocol();
  125.         $object->setTag(uniqid('tag-',false));
  126.         $object->setServer($this->server);
  127.         switch ($type) {
  128.             case 'tls':
  129.                 $object->setSecurity('tls');
  130.                 $object->setType('tls');
  131.                 $form $this->createForm(TLSProtocolType::class, $object);
  132.                 break;
  133.             case 'reality':
  134.                 $object->setSecurity('reality');
  135.                 $object->setType('reality');
  136.                 $form $this->createForm(RealityProtocolType::class, $object);
  137.                 break;
  138.             case 'normal':
  139.                 $object->setSecurity('normal');
  140.                 $object->setType('normal');
  141.                 $form $this->createForm(NormalProtocolType::class, $object);
  142.                 break;
  143.         }
  144.         $form->handleRequest($request);
  145.         if ($form->isSubmitted() && $form->isSubmitted()) {
  146.             $this->service->save($object);
  147.             $this->addFlash('success''با موفقیت ثبت شد');
  148.             return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index' ,['server' => $this->server->getId()]);
  149.         }
  150.         return $this->render('panel/pages/admin/vpn/v2ray/protocols/enter.html.twig', [
  151.             'form' => $form->createView()
  152.         ]);
  153.     }
  154.     #[Route('/edit/{id}'name'app_panel_admin_vpn_v2ray_protocol_edit')]
  155.     public function app_panel_admin_v2ray_protocols_edit(Request $request ,ManagerRegistry $managerRegistry $id)
  156.     {
  157.         $object $managerRegistry->getManager()->getRepository(Protocol::class)->find($id);
  158.         if (!$object->getTag()){
  159.             $object->setTag(uniqid('tag-',false));
  160.         }
  161.         $object->setServer($this->server);
  162.         switch ($object->getType()) {
  163.             case 'tls':
  164.                 $object->setSecurity('tls');
  165.                 $object->setType('tls');
  166.                 $form $this->createForm(TLSProtocolType::class, $object);
  167.                 break;
  168.             case 'reality':
  169.                 $object->setSecurity('reality');
  170.                 $object->setType('reality');
  171.                 $form $this->createForm(RealityProtocolType::class, $object);
  172.                 break;
  173.             case 'normal':
  174.                 $object->setSecurity('normal');
  175.                 $object->setType('normal');
  176.                 $form $this->createForm(NormalProtocolType::class, $object);
  177.                 break;
  178.         }
  179.         $form->handleRequest($request);
  180.         if ($form->isSubmitted() && $form->isSubmitted()) {
  181.             $this->service->save($object);
  182.             $this->addFlash('success''با موفقیت ثبت شد');
  183.             return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index' ,['server' => $this->server->getId()]);
  184.         }
  185.         return $this->render('panel/pages/admin/vpn/v2ray/protocols/enter.html.twig', [
  186.             'form' => $form->createView()
  187.         ]);
  188.     }
  189.     #[Route('/archive/{id}/archive'name'app_panel_admin_vpn_v2ray_protocol_archive'methods: ['GET''POST'])]
  190.     public function archive(Protocol $object): Response
  191.     {
  192.         $this->service->archive($object);
  193.         return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index', ['server' => $object->getServer()->getId()], Response::HTTP_SEE_OTHER);
  194.     }
  195.     #[Route('/delete/{id}'name'app_panel_admin_vpn_v2ray_protocol_delete')]
  196.     public function delete(Protocol $object): Response
  197.     {
  198.         $this->service->remove($object);
  199.         return $this->redirectToRoute('app_panel_admin_vpn_v2ray_protocol_index', ['server' => $object->getServer()->getId()], Response::HTTP_SEE_OTHER);
  200.     }
  201. }