src/Controller/Client/OcServController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Client;
  3. use App\Entity\VPN\Service\Service;
  4. use App\Entity\VPN\Service\ServiceUsage;
  5. use App\Repository\VPN\OcServ\ServerRepository;
  6. use App\Repository\VPN\Service\ServiceRepository;
  7. use App\Repository\VPN\Service\ServiceUsageRepository;
  8. use App\Service\Util\NotificationService;
  9. use App\Service\Util\OcServSSHApi;
  10. use App\Service\Util\ServersAnalyticsUsageService;
  11. use App\Service\Util\Telegram;
  12. use DateTime;
  13. use DateTimeImmutable;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class OcServController extends AbstractController
  20. {
  21.     public ServerRepository $serversRepository;
  22.     public ServiceRepository $servicesRepository;
  23.     public EntityManagerInterface $entityManager;
  24.     public Telegram $telegram;
  25.     public function __construct(Telegram $telegramEntityManagerInterface $entityManagerServerRepository $serversRepositoryServiceRepository $servicesRepository)
  26.     {
  27.         $this->serversRepository $serversRepository;
  28.         $this->servicesRepository $servicesRepository;
  29.         $this->entityManager $entityManager;
  30.         $this->telegram $telegram;
  31.     }
  32.     #[Route('/client/oc-serv/dc-script/{username}'name'app_client_oc_serv_script')]
  33.     public function index($username,NotificationService $notificationServiceTelegram $telegram,ServiceUsageRepository $serviceUsageRepository Request $requestEntityManagerInterface $entityManager): JsonResponse
  34.     {
  35.         try {
  36. //                Request Get
  37. //            {"STATS_BYTES_IN":"12065","STATS_BYTES_OUT":"41501","STATS_DURATION":"59","REASON":"disconnect","I$":""}
  38. //            _SERVER
  39. //            {"USER":"www-data","HOME":"\/var\/www","HTTP_CONTENT_LENGTH":"80","HTTP_CONNECTION":"Keep-Alive","HTTP_CDN_LOOP":"cloudflare; loops=1","HTTP_USER_AGENT":"curl\/7.61.1","HTTP_CF_IPCOUNTRY":"FR","HTTP_CF_VISITOR":"{\"scheme\":\"https\"}","HTTP_ACCEPT":"*\/*","HTTP_CONTENT_TYPE":"application\/x-www-form-urlencoded","HTTP_X_FORWARDED_PROTO":"https","HTTP_ACCEPT_ENCODING":"gzip, br","HTTP_CF_CONNECTING_IP":"188.165.2.99","HTTP_HOST":"beta.tehrannet.org","HTTP_X_FORWARDED_FOR":"188.165.2.99","HTTP_CF_RAY":"92a921d59afb1cb0-AMS","SCRIPT_FILENAME":"\/var\/www\/html\/beta\/public\/index.php","REDIRECT_STATUS":"200","SERVER_NAME":"beta.tehrannet.org","SERVER_PORT":"80","SERVER_ADDR":"188.165.164.83","REMOTE_PORT":"40544","REMOTE_ADDR":"172.70.47.175","SERVER_SOFTWARE":"nginx\/1.18.0","GATEWAY_INTERFACE":"CGI\/1.1","REQUEST_SCHEME":"http","SERVER_PROTOCOL":"HTTP\/1.1","DOCUMENT_ROOT":"\/var\/www\/html\/beta\/public","DOCUMENT_URI":"\/index.php","REQUEST_URI":"\/client\/oc-serv\/dc-script\/hesam","SCRIPT_NAME":"\/index.php","CONTENT_LENGTH":"80","CONTENT_TYPE":"application\/x-www-form-urlencoded","REQUEST_METHOD":"POST","QUERY_STRING":"","FCGI_ROLE":"RESPONDER","PHP_SELF":"\/index.php","REQUEST_TIME_FLOAT":1743689245.082486,"REQUEST_TIME":1743689245,"APP_NAME":"TehranNetVPN","APP_ENV":"prod","APP_SECRET":"e852e3832856bcc5113b10163e6591df","APP_DOMAIN":"https:\/\/www.cheshmak.fun","MAILER_DSN":"gmail+smtp:\/\/tehrannetvpn:iuzaikwvqghktsqo@default","DATABASE_URL":"mysql:\/\/db:mast1391@localhost:3306\/appdev?serverVersion=mariadb-10.4.11","MAILER_ADDRESS":"","DATABASE_USERNAME":"db","DATABASE_PASSWORD":"mast1391","DATABASE_NAME":"app","APP_DOMAIN_V2":"https:\/\/tehrannet.org\/service\/login","APP_DOMAIN_V2UN":"https:\/\/tehrannet.org\/service\/login","APP_DOMAIN_OPEN":"https:\/\/tehrannet.org\/service\/login","APP_DOMAIN_OC":"https:\/\/tehrannet.org\/service\/login","APP_DOMAIN_STATIC":"https:\/\/tehrannet.org\/service\/login","APP_DOMAIN_ROUTER":"https:\/\/tehrannet.org\/service\/login","BOT_USERNAME":"http:\/\/t.me\/tehrannetbot","MAX_CHARGE":"50","APP_DEBUG":"1","SHELL_VERBOSITY":"3","SYMFONY_DOTENV_VARS":"APP_NAME,APP_ENV,APP_SECRET,APP_DOMAIN,MAILER_DSN,DATABASE_URL,MAILER_ADDRESS,DATABASE_USERNAME,DATABASE_PASSWORD,DATABASE_NAME,APP_DOMAIN_V2,APP_DOMAIN_V2UN,APP_DOMAIN_OPEN,APP_DOMAIN_OC,APP_DOMAIN_STATIC,APP_DOMAIN_ROUTER,BOT_USERNAME,MAX_CHARGE,APP_DEBUG,SHELL_VERBOSITY,APP_URL,V2RAY_RANGE,V2RAY_STATIC_RANGE,OC_RANGE,OC_VIP_RANGE,OPEN_RANGE,VIP_RANGE,CLIENTIDRANGE","APP_URL":"https:\/\/tehrannet.org","V2RAY_RANGE":"100000,200000","V2RAY_STATIC_RANGE":"300000000,400000000","OC_RANGE":"500000,600000","OC_VIP_RANGE":"700000,800000","OPEN_RANGE":"900000,1000000","VIP_RANGE":"2000000,3000000","CLIENTIDRANGE":"100000,1000000"}
  40.             $ciscoServerIp $_SERVER['REMOTE_ADDR'] ?: null;
  41.             $calculationVolume 1.5;
  42.             $analytics = new ServersAnalyticsUsageService($ciscoServerIp$entityManager);
  43.             $in $request->request->get('STATS_BYTES_IN');
  44.             $out $request->request->get('STATS_BYTES_OUT');
  45.             $totalServerUsage $in $out;
  46.             $analytics->addServerUsage($ciscoServerIp$totalServerUsage);
  47.             $server $this->serversRepository->findOneBy(['ip' => $ciscoServerIp]);
  48.             /**
  49.              * @var OcServService $ocService
  50.              */
  51.             $clientId substr($username1, -1);
  52.             $service $this->entityManager->getRepository(Service::class)->findOneBy(['clientId' => $clientId]);
  53.             if ($service) {
  54.                 $in $request->request->get('STATS_BYTES_IN');
  55.                 $out $request->request->get('STATS_BYTES_OUT');
  56.                 $newSizeUsed $out $in;
  57.                 if (!$service->getExpireAt())
  58.                 {
  59.                     $now = new \DateTimeImmutable();
  60.                     $expiredAt =  $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  61.                     $service->setExpireAt($expiredAt);
  62.                     $entityManager->flush();
  63.                 }
  64.                 $service->setOcServUsage(
  65.                     (int)$service->getOcServUsage()
  66.                     +
  67.                     (int)((float)$calculationVolume * (int)$newSizeUsed));
  68.                 if ($service->getPlan()->getServiceType() === 'unlimited' && $service->getCountry() !== $server->getCountry()->getCode()){
  69. //                    TODO Remove Service
  70.                 }
  71.                 $now = new \DateTime();
  72.                 $todayUsageObject $serviceUsageRepository->findOneBy(['service' => $service 'date' => $now]);
  73.                 if (!$todayUsageObject) {
  74.                     $todayUsageObject = new ServiceUsage();
  75.                     $todayUsageObject->setService($service);
  76.                     $todayUsageObject->setDate(new \DateTime());
  77.                     $entityManager->persist($todayUsageObject);
  78.                 }
  79.                 $todayUsageObject->setOcUsage(
  80.                     $todayUsageObject->getOcUsage() +
  81.                     (int)((float)$calculationVolume * (int)$newSizeUsed)
  82.                 );
  83.                 $this->entityManager->flush();
  84.             }
  85.             $this->entityManager->flush();
  86.             $this->entityManager->clear();
  87.             return $this->json(['res' => true], 200);
  88.         } catch (\Exception $exception) {
  89.             $notificationService->exception($exception);
  90. //            $telegram->exception($exception, 'Error On OcServ Disconnect Usage', $ciscoServerIp ?: null);
  91.         }
  92.         return $this->json(['res' => true]);
  93.     }
  94. }