src/Controller/VPN/ServicePanel/ServicePanelController.php line 155

Open in your IDE?
  1. <?php
  2. namespace App\Controller\VPN\ServicePanel;
  3. use App\DependencyInjection\JDF;
  4. use App\Entity\VPN\OcServ\Server;
  5. use App\Entity\VPN\Service\Service;
  6. use App\Entity\VPN\Service\ServiceUsage;
  7. use App\Repository\VPN\Service\ServiceRepository;
  8. use App\Repository\VPN\Service\ServiceUsageRepository;
  9. use App\Repository\VPN\V2ray\ServerRepository;
  10. use App\Service\Util\V2rayConnectionMaker;
  11. use App\Service\VPN\Service\ServiceService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. final class ServicePanelController extends AbstractController
  18. {
  19.     public EntityManagerInterface $entityManager;
  20.     public ServiceService $serviceService;
  21.     public function __construct(EntityManagerInterface $entityManagerServiceService $serviceService)
  22.     {
  23.         $this->entityManager $entityManager;
  24.         $this->serviceService $serviceService;
  25.     }
  26.     #[Route('/vpn/servcie-panel/no-password/{id}'name'app_vpn_service_panel_no_password')]
  27.     public function index(Service $serviceServiceUsageRepository $serviceUsageRepositoryRequest $requestServerRepository $serverRepository\App\Repository\VPN\OcServ\ServerRepository $ocServServerRepository\App\Repository\VPN\OpenVPN\ServerRepository $openServerRepository)
  28.     {
  29.         $session $request->getSession();
  30. //        if ($this->getUser() || ($service->getCreatorBot()->getTitle() && $request->get('bot') == $service->getCreatorBot()->getTitle()) ) {
  31. //            $session->set('clientId', $service->getClientId());
  32. //        }
  33. //
  34. //        if ($session->get('clientId') == null) {
  35. //            return $this->redirectToRoute('app_site_panel_login');
  36. //        }
  37.         $now = new \DateTimeImmutable();
  38.         $jdf = new JDF();
  39.         $monthNumber $request->query->get('month') ?: $jdf->trNum($jdf->date('m'));
  40.         $startJalali '1404/' $monthNumber '/1';
  41.         $endJalali '1404/' $monthNumber '/' $jdf->trNum($jdf->date('t''''fa'$monthNumber));
  42.         $startDateTime $jdf->jalaliToGregorian(explode('/'$startJalali)[0], explode('/'$startJalali)[1], explode('/'$startJalali)[2])[0] . '-' $jdf->jalaliToGregorian(explode('/'$startJalali)[0], explode('/'$startJalali)[1], explode('/'$startJalali)[2])[1] . '-' $jdf->jalaliToGregorian(explode('/'$startJalali)[0], explode('/'$startJalali)[1], explode('/'$startJalali)[2])[2] . ' 00:00:00';
  43.         $startDateTime = new \DateTime($startDateTime);
  44.         $endDateTime $jdf->jalaliToGregorian(explode('/'$endJalali)[0], explode('/'$endJalali)[1], explode('/'$endJalali)[2])[0] . '-' $jdf->jalaliToGregorian(explode('/'$endJalali)[0], explode('/'$endJalali)[1], explode('/'$endJalali)[2])[1] . '-' $jdf->jalaliToGregorian(explode('/'$endJalali)[0], explode('/'$endJalali)[1], explode('/'$endJalali)[2])[2] . ' 00:00:00';
  45.         $endDateTime = new \DateTime($endDateTime);
  46.         $usages $serviceUsageRepository->getBetweenDays($startDateTime$endDateTime$service);
  47.         $data = [];
  48.         foreach ($usages as $usage) {
  49.             /**
  50.              * @var ServiceUsage $usage
  51.              */
  52.             $data[] = [
  53.                 'date' => $usage->getDate(),
  54.                 'v2ray' => $usage->getV2rayUsage(),
  55.                 'cisco' => $usage->getOcUsage(),
  56.                 'open' => $usage->getOpenUsage()
  57.             ];
  58.         }
  59.         if ($service->getPlan()->getServiceType() === 'unlimited' && ($service->getCountry() === 'all' || $service->getCountry() === '' || $service->getCountry() === null)) {
  60.             if ($service->getPlan()->getProtocol() === 'v2ray') {
  61.                 $service->setCountry($serverRepository->findOneBy(['active' => 1])->getCountry()->getCode());
  62.                 $this->entityManager->flush();
  63.             }
  64.             if ($service->getPlan()->getProtocol() === 'ocserv') {
  65.                 $service->setCountry($ocServServerRepository->findOneBy(['active' => 1])->getCountry()->getCode());
  66.                 $this->entityManager->flush();
  67.             }
  68.             if ($service->getPlan()->getProtocol() === 'open') {
  69.                 $service->setCountry($openServerRepository->findOneBy(['active' => 1])->getCountry()->getCode());
  70.                 $this->entityManager->flush();
  71.             }
  72.         }
  73.         if (!$service->getExpireAt()) {
  74.             $now = new \DateTimeImmutable();
  75.             $expiredAt $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  76.             $service->setExpireAt($expiredAt);
  77.             $this->entityManager->flush();
  78.         }
  79.         $this->serviceService->pushServiceToServers($service);
  80.         return $this->render('vpn/service-panel/dashboard.html.twig', [
  81.             'service' => $service,
  82.             'ocServers' => $this->entityManager->getRepository(Server::class)->findBy(['active' => 1]),
  83.             'openServers' => $this->entityManager->getRepository(\App\Entity\VPN\OpenVPN\Server::class)->findBy(['active' => 1]),
  84.             'usageReport' => $data,
  85.             'month' => $monthNumber,
  86.         ]);
  87.     }
  88.     #[Route('/vpn/servcie-panel/no-password/smart-check/{id}'name'app_vpn_service_panel_no_password_smart_check')]
  89.     public function check(Service $service)
  90.     {
  91.         $this->serviceService->pushRemoveToServers($service);
  92.         $this->serviceService->pushServiceToServers($service);
  93.         $this->addFlash('success''سرویس شما بر روی تمامی سرور های ما وجود دارد و اتصال بررسی شد لطفا مجددا اقدام به اتصال نمایید');
  94.         return $this->redirectToRoute('app_vpn_service_panel_no_password', ['id' => $service->getId()]);
  95.     }
  96.     #[Route('/service/{id}/subscription-url'name'app_vpn_service_panel_subscription_url')]
  97.     public function subscriptionUrl($idServerRepository $serverRepository)
  98.     {
  99.         $generator = new V2rayConnectionMaker($serverRepository);
  100.         $service $this->getDoctrine()->getRepository(Service::class)->find($id);
  101.         if (!$service) {
  102.             $connections $generator->notFound();
  103.             $string '';
  104.             foreach ($connections as $connection) {
  105.                 if (count($connection['configs']) > 0) {
  106.                     foreach ($connection['configs'] as $singleConfigLine) {
  107.                         $string $string $singleConfigLine['text'] . PHP_EOL;
  108.                     }
  109.                 }
  110.             }
  111.             return $this->render('vpn/service-panel/subscription-url.html.twig', [
  112.                 'data' => $string
  113.             ]);
  114.         }
  115.         $this->serviceService->pushServiceToServers($service);
  116.         if (!$service->getExpireAt()) {
  117.             $now = new \DateTimeImmutable();
  118.             $expiredAt $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  119.             $service->setExpireAt($expiredAt);
  120.             $this->entityManager->flush();
  121.         }
  122.         if ($service->isEnabled()) {
  123.             $connections $generator->generate($service);
  124.         } else {
  125.             $connections $generator->expired($service);
  126.         }
  127.         $string '';
  128.         foreach ($connections as $connection) {
  129.             if (count($connection['configs']) > 0) {
  130.                 foreach ($connection['configs'] as $singleConfigLine) {
  131.                     $string $string $singleConfigLine['text'] . PHP_EOL;
  132.                 }
  133.             }
  134.         }
  135.         return $this->render('vpn/service-panel/subscription-url.html.twig', [
  136.             'data' => $string
  137.         ]);
  138.     }
  139.     #[Route('/v2/{clientId}/subscription/{username}/{subType}'name'app_site_verify_service_subscription_operator')]
  140.     public function subscriptionUrlOldV2($clientIdServerRepository $serverRepositoryServiceRepository $serviceRepository)
  141.     {
  142.         $service $serviceRepository->findOneBy(['clientId' => $clientId]);
  143.         $generator = new V2rayConnectionMaker($serverRepository);
  144.         if (!$service) {
  145.             $connections $generator->notFound();
  146.             $string '';
  147.             foreach ($connections as $connection) {
  148.                 if (count($connection['configs']) > 0) {
  149.                     foreach ($connection['configs'] as $singleConfigLine) {
  150.                         $string $string $singleConfigLine['text'] . PHP_EOL;
  151.                     }
  152.                 }
  153.             }
  154.             return $this->render('vpn/service-panel/subscription-url.html.twig', [
  155.                 'data' => $string
  156.             ]);
  157.         }
  158.         if (!$service->getExpireAt()) {
  159.             $now = new \DateTimeImmutable();
  160.             $expiredAt $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  161.             $service->setExpireAt($expiredAt);
  162.             $this->entityManager->flush();
  163.         }
  164.         $generator = new V2rayConnectionMaker($serverRepository);
  165.         if ($service->isEnabled()) {
  166.             $connections $generator->generate($service);
  167.         } else {
  168.             $connections $generator->expired($service);
  169.         }
  170.         $string '';
  171.         foreach ($connections as $connection) {
  172.             if (count($connection['configs']) > 0) {
  173.                 foreach ($connection['configs'] as $singleConfigLine) {
  174.                     $string $string $singleConfigLine['text'] . PHP_EOL;
  175.                 }
  176.             }
  177.         }
  178.         return $this->render('vpn/service-panel/subscription-url.html.twig', [
  179.             'data' => $string
  180.         ]);
  181.     }
  182.     #[Route('/v2ip/{clientId}/subscription/{username}/{subType}'name'app_site_panel_vip_v2ray_subscription')]
  183.     public function subscriptionUrlOldV2Vip($clientIdServerRepository $serverRepositoryServiceRepository $serviceRepository)
  184.     {
  185.         $service $serviceRepository->findOneBy(['clientId' => $clientId]);
  186.         $generator = new V2rayConnectionMaker($serverRepository);
  187.         if (!$service) {
  188.             $connections $generator->notFound();
  189.             $string '';
  190.             foreach ($connections as $connection) {
  191.                 if (count($connection['configs']) > 0) {
  192.                     foreach ($connection['configs'] as $singleConfigLine) {
  193.                         $string $string $singleConfigLine['text'] . PHP_EOL;
  194.                     }
  195.                 }
  196.             }
  197.             return $this->render('vpn/service-panel/subscription-url.html.twig', [
  198.                 'data' => $string
  199.             ]);
  200.         }
  201.         if (!$service->getExpireAt()) {
  202.             $now = new \DateTimeImmutable();
  203.             $expiredAt $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  204.             $service->setExpireAt($expiredAt);
  205.             $this->entityManager->flush();
  206.         }
  207.         $generator = new V2rayConnectionMaker($serverRepository);
  208.         if ($service->isEnabled()) {
  209.             $connections $generator->generate($service);
  210.         } else {
  211.             $connections $generator->expired($service);
  212.         }
  213.         $string '';
  214.         foreach ($connections as $connection) {
  215.             if (count($connection['configs']) > 0) {
  216.                 foreach ($connection['configs'] as $singleConfigLine) {
  217.                     $string $string $singleConfigLine['text'] . PHP_EOL;
  218.                 }
  219.             }
  220.         }
  221.         return $this->render('vpn/service-panel/subscription-url.html.twig', [
  222.             'data' => $string
  223.         ]);
  224.     }
  225.     #[Route('/v2/no-pass/{id}'name'app_site_panel_v2_no_password')]
  226.     public function app_site_panel_v2_no_password(Service $service): Response
  227.     {
  228.         return $this->redirectToRoute('app_vpn_service_panel_no_password', ['id' => $service->getId()]);
  229.     }
  230. }