Advertisement
Guest User

Untitled

a guest
Nov 10th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.29 KB | None | 0 0
  1. <?php
  2. namespace frontend\controllers;
  3.  
  4. use common\models\Cmd5Parser;
  5. //use Faker\Provider\Payment;
  6. use common\models\RobokassaForm;
  7. use frontend\models\CreateResponse;
  8. use yii;
  9. use yii\base\Exception;
  10. use yii\web\Controller;
  11. use yii\web\Response;
  12. use yii\web\UploadedFile;
  13. use yii\helpers\Url;
  14. use yii\helpers\Json;
  15. use frontend\models\ParseHashes;
  16. use frontend\models\HashInputForm;
  17. use common\models\User;
  18. use common\models\Queue;
  19. use common\models\Guest;
  20. use frontend\models\OneHashInputForm;
  21. use common\models\Cmd5Hash;
  22. use common\models\Cmd5HashRequest;
  23. use common\models\UnhashRequest;
  24. use common\models\NotGuestIp;
  25. use common\models\GuestIp;
  26. use common\models\RobokassaTransaction;
  27. use common\models\Payment;
  28.  
  29. class AjaxController extends BaseController
  30. {
  31.     public function actionResult()
  32.     {
  33.         $dirToFiles = Yii::$app->params['dirFiles'];
  34.  
  35.         if (Yii::$app->request->isPost && UnhashRequest::findOne(['user_id' => Yii::$app->user->id, 'status' => UnhashRequest::STATUS_PROCESS]) == null) {
  36.  
  37.             $params = Yii::$app->request->post();
  38.  
  39.             $hashInputForm = new HashInputForm();
  40.             $hashInputForm->load($params);
  41.  
  42.             /** @var User $user */
  43.             $user = Yii::$app->user->identity;
  44.  
  45.             $hashInputForm->delimiter = str_replace('\t', "\t", $hashInputForm->delimiter);
  46.  
  47.             Yii::$app->response->format = Response::FORMAT_JSON;
  48.  
  49.             if ($hashInputForm->requestType == HashInputForm::REQUEST_TEXT) {
  50.                 if (isset($params['hashes']) && array_key_exists('hashes', $params) && !empty($params['hashes'])) {
  51.  
  52.                     $enterText = $hashInputForm->rawInput;
  53.  
  54.                     $hashes = Json::decode($params['hashes']);
  55.  
  56.                     foreach ($hashes as $i => $hash) {
  57.                         $hashes[$i] = trim($hash);
  58.                     }
  59.  
  60.                     $count = count($hashes);
  61.                     $paramsToQueue = Json::encode($hashes);
  62.  
  63.                     if ($count > $user->hashCountLeft()) {
  64.                         return [
  65.                             'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
  66.                         ];
  67.                     }
  68.  
  69.                     NotGuestIp::addHashIpModels($hashes);
  70.                 } else {
  71.                     return ["error" => Yii::t("app", "Your text hasn't any hash")];
  72.                 }
  73.             } elseif ($hashInputForm->requestType == HashInputForm::REQUEST_FILE) {
  74.                
  75.                 if ($file = UploadedFile::getInstance($hashInputForm, 'fileInput')) {
  76.                     $fileName = Yii::$app->security->generateRandomString();
  77.                     while (file_exists($dirToFiles . $fileName . '.' . $file->extension)) {
  78.                         $fileName = Yii::$app->security->generateRandomString();
  79.                     }
  80.                     $file->saveAs($dirToFiles . $fileName . '.' . $file->extension);
  81.                     $fileContent = file_get_contents($dirToFiles . $fileName . '.' . $file->extension);
  82.                     $enterText = $fileContent;
  83.                     unlink($dirToFiles . $fileName . '.' . $file->extension);
  84.                     $hashes = new ParseHashes();
  85.                     $hashes->runHashes($fileContent);
  86.  
  87.                     $count = count($hashes->hashes);
  88.                     $paramsToQueue = Json::encode($hashes->hashes);
  89.  
  90.                     if ($count > $user->hashCountLeft()) {
  91.                         return [
  92.                             'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
  93.                         ];
  94.                     }
  95.  
  96.                     NotGuestIp::addHashIpModels($hashes->hashes);
  97.                 } else {
  98.                     return ["error" => Yii::t('app', "Wrong file!")];
  99.                 }
  100.             } else {
  101.                 return ["error" => Yii::t('app', "Error")];
  102.             }
  103.  
  104.             $totalCountRequestHashes = count(Json::decode($paramsToQueue));
  105.  
  106.             if (!empty($paramsToQueue) && $totalCountRequestHashes > 0) {
  107.  
  108.                 $requestId = Queue::addNewQueue($paramsToQueue, $count);
  109.  
  110.                 $currentTime = time();
  111.                 while ((time() - $currentTime) < Queue::MAX_EXECUTION_TIME) {
  112.                     $request = Queue::findOne($requestId);
  113.  
  114.                     if ($request->status == Queue::STATUS_DONE) {
  115.  
  116.                         $response = Json::decode($request->response);
  117.                         $responseText = '';
  118.  
  119.                         if (count($response) > $user->hashCountLeft()) {
  120.                             return [
  121.                                 'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
  122.                             ];
  123.                         }
  124.  
  125.                         switch ($hashInputForm->format) {
  126.                             case HashInputForm::FORMAT_PASS:
  127.                                 return CreateResponse::createResponsePassword($hashInputForm, $request, $totalCountRequestHashes, $enterText);
  128.                             case HashInputForm::FORMAT_PASS_HASH:
  129.                                 return CreateResponse::createResponsePasswordHash($hashInputForm, $request, $totalCountRequestHashes, $enterText);
  130.                             case HashInputForm::FORMAT_HASH_PASS:
  131.                                 return CreateResponse::createResponseHashPassword($hashInputForm, $request, $totalCountRequestHashes, $enterText);
  132.                             case HashInputForm::FORMAT_TABLE:
  133.                                 return CreateResponse::createResponseTable($hashInputForm, $request, $totalCountRequestHashes, $enterText);
  134.                             case HashInputForm::FORMAT_REPLACE_IN_TEXT:
  135.                                 return CreateResponse::createResponseReplaceInText($hashInputForm, $request, $totalCountRequestHashes, $enterText);
  136.                         }
  137.                     }
  138.                     usleep(200000);
  139.                 }
  140.                 return ["info" => Yii::t("app", "We are working for you query!")];
  141.             }
  142.             return ["error" => Yii::t("app", "Your text hasn't any hash")];
  143.         }
  144.     }
  145.  
  146.     public function actionGetFileResult()
  147.     {
  148.         if (Yii::$app->request->isGet) {
  149.             $params = Yii::$app->request->get();
  150.             $file = $params['file'];
  151.             header("Cache-Control: public");
  152.             header("Content-Description: File Transfer");
  153.             header("Content-Disposition: attachment; filename=" . str_replace(Yii::$app->params['dirFiles'], '', $file));
  154.             header("Content-Type: application/zip");
  155.             header("Content-Transfer-Encoding: binary");
  156.            
  157.             readfile($file);
  158.             //unlink($file);
  159.         }
  160.     }
  161.    
  162.     public function actionSingleHashSearch()
  163.     {
  164.         if (Yii::$app->request->isPost) {
  165.             $params = Yii::$app->request->post();
  166.  
  167.             $checkHash = new OneHashInputForm();
  168.             $checkHash->load($params);
  169.             if (!empty($checkHash)) {
  170.  
  171.                 GuestIp::addHashIpModel($checkHash->hash);
  172.                 $toQueue = [0 => $checkHash->hash];
  173.                 $count = 1;
  174.                 $hashes = new ParseHashes();
  175.                 $hashes->runHashes($checkHash->hash);
  176.                 $toQueue = $hashes->hashes;
  177.                 if (count($toQueue) > 0) {
  178.                     $requestId = Queue::addNewQueue(Json::encode($toQueue), $count);
  179.                     $currentTime = time();
  180.                     while ((time() - $currentTime) < Queue::MAX_EXECUTION_TIME) {
  181.                         $request = Queue::findOne($requestId);
  182.  
  183.                         if ($request->status == Queue::STATUS_DONE) {
  184.                             $response = Json::decode($request->response);
  185.                             $responseText = '';
  186.                             if (count($response) > 0) {
  187.                                 $ip = Yii::$app->getRequest()->getUserIP();
  188.                                 $guest = Guest::getByIp($ip);
  189.                                 if (empty($guest)) {
  190.                                     $newGuest = new Guest();
  191.                                     $newGuest->ip = $ip;
  192.                                     $newGuest->request_count = 1;
  193.                                     $newGuest->save();
  194.                                 } else {
  195.                                     if ($guest->request_count > 4) {
  196.                                         return Yii::t('app', "Your limit exceeded for today.");
  197.                                     } else {
  198.                                         $guest->request_count++;
  199.                                         $guest->save();
  200.                                     }
  201.                                 }
  202.                                 return Yii::t('app', "Congratulations! This hash is in our database. The type is ") . $response[0]['type'] . ".";
  203.                             } else {
  204.                                 if (Cmd5Parser::isHashExists($checkHash->hash)) {
  205.                                     return Yii::t('app', "Congratulations! This hash is in our database.");
  206.                                 }
  207.  
  208.  
  209.                                 return Yii::t('app', "Unfortunately, this hash is not in our database.");
  210.                             }
  211.                         }
  212.  
  213.                         usleep(200000);
  214.                     }
  215.                     return Yii::t('app', "We are working for you query!");
  216.                 }
  217.                 return Yii::t('app', "Your hash has wrong format");
  218.             } else {
  219.                 return Yii::t('app', "Your hash has wrong format");
  220.             }
  221.         }
  222.     }
  223.  
  224.     public function actionGetUserHashCountLeft()
  225.     {
  226.         if (Yii::$app->request->isGet && !Yii::$app->user->isGuest) {
  227.             if ($user = User::findOne(['id' => Yii::$app->user->id])) {
  228.                 return $user->hashCountLeft();
  229.             }
  230.         }
  231.         return 0;
  232.     }
  233.  
  234.     public function actionCreateRobokassa($service)
  235.     {
  236.         if (Yii::$app->request->isGet && !Yii::$app->user->isGuest) {
  237.  
  238.             Yii::$app->response->format = Response::FORMAT_JSON;
  239.  
  240.             /** @var RobokassaTransaction $transaction */
  241.             $transaction = RobokassaTransaction::createNewTransaction($service);
  242.             $mrhPass1 = RobokassaTransaction::PASSWORD1;
  243.  
  244.             if ($transaction->id != RobokassaTransaction::CREATE_RESULT_FAIL) {
  245.                
  246.                 $type = md5($transaction->salt);
  247.                 $type[0] = $service[0];
  248.                 $type[strlen($type) - 1] = $service[1];
  249.  
  250.                 $price = number_format(Payment::amountByService()[$service] * Yii::$app->params['usdToRub'], 2);
  251.                
  252.                 return [
  253.                     'id' => $transaction->id,
  254.                     'description' => Payment::serviceDescription()[$service],
  255.                     'price' => $price,
  256.                     'type' => $type,
  257.                     'crc' => RobokassaTransaction::getCrc(RobokassaTransaction::LOGIN, $price, $transaction->id, $mrhPass1, $type),
  258.                     'culture' => !empty(Yii::$app->request->cookies->getValue('lang')) ? Yii::$app->request->cookies->getValue('lang') : 'en',
  259.                 ];
  260.             }
  261.         }
  262.         return RobokassaTransaction::CREATE_RESULT_FAIL;
  263.     }
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement