Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace frontend\controllers;
- use common\models\Cmd5Parser;
- //use Faker\Provider\Payment;
- use common\models\RobokassaForm;
- use frontend\models\CreateResponse;
- use yii;
- use yii\base\Exception;
- use yii\web\Controller;
- use yii\web\Response;
- use yii\web\UploadedFile;
- use yii\helpers\Url;
- use yii\helpers\Json;
- use frontend\models\ParseHashes;
- use frontend\models\HashInputForm;
- use common\models\User;
- use common\models\Queue;
- use common\models\Guest;
- use frontend\models\OneHashInputForm;
- use common\models\Cmd5Hash;
- use common\models\Cmd5HashRequest;
- use common\models\UnhashRequest;
- use common\models\NotGuestIp;
- use common\models\GuestIp;
- use common\models\RobokassaTransaction;
- use common\models\Payment;
- class AjaxController extends BaseController
- {
- public function actionResult()
- {
- $dirToFiles = Yii::$app->params['dirFiles'];
- if (Yii::$app->request->isPost && UnhashRequest::findOne(['user_id' => Yii::$app->user->id, 'status' => UnhashRequest::STATUS_PROCESS]) == null) {
- $params = Yii::$app->request->post();
- $hashInputForm = new HashInputForm();
- $hashInputForm->load($params);
- /** @var User $user */
- $user = Yii::$app->user->identity;
- $hashInputForm->delimiter = str_replace('\t', "\t", $hashInputForm->delimiter);
- Yii::$app->response->format = Response::FORMAT_JSON;
- if ($hashInputForm->requestType == HashInputForm::REQUEST_TEXT) {
- if (isset($params['hashes']) && array_key_exists('hashes', $params) && !empty($params['hashes'])) {
- $enterText = $hashInputForm->rawInput;
- $hashes = Json::decode($params['hashes']);
- foreach ($hashes as $i => $hash) {
- $hashes[$i] = trim($hash);
- }
- $count = count($hashes);
- $paramsToQueue = Json::encode($hashes);
- if ($count > $user->hashCountLeft()) {
- return [
- 'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
- ];
- }
- NotGuestIp::addHashIpModels($hashes);
- } else {
- return ["error" => Yii::t("app", "Your text hasn't any hash")];
- }
- } elseif ($hashInputForm->requestType == HashInputForm::REQUEST_FILE) {
- if ($file = UploadedFile::getInstance($hashInputForm, 'fileInput')) {
- $fileName = Yii::$app->security->generateRandomString();
- while (file_exists($dirToFiles . $fileName . '.' . $file->extension)) {
- $fileName = Yii::$app->security->generateRandomString();
- }
- $file->saveAs($dirToFiles . $fileName . '.' . $file->extension);
- $fileContent = file_get_contents($dirToFiles . $fileName . '.' . $file->extension);
- $enterText = $fileContent;
- unlink($dirToFiles . $fileName . '.' . $file->extension);
- $hashes = new ParseHashes();
- $hashes->runHashes($fileContent);
- $count = count($hashes->hashes);
- $paramsToQueue = Json::encode($hashes->hashes);
- if ($count > $user->hashCountLeft()) {
- return [
- 'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
- ];
- }
- NotGuestIp::addHashIpModels($hashes->hashes);
- } else {
- return ["error" => Yii::t('app', "Wrong file!")];
- }
- } else {
- return ["error" => Yii::t('app', "Error")];
- }
- $totalCountRequestHashes = count(Json::decode($paramsToQueue));
- if (!empty($paramsToQueue) && $totalCountRequestHashes > 0) {
- $requestId = Queue::addNewQueue($paramsToQueue, $count);
- $currentTime = time();
- while ((time() - $currentTime) < Queue::MAX_EXECUTION_TIME) {
- $request = Queue::findOne($requestId);
- if ($request->status == Queue::STATUS_DONE) {
- $response = Json::decode($request->response);
- $responseText = '';
- if (count($response) > $user->hashCountLeft()) {
- return [
- 'error' => Yii::t('app', 'Sorry, you hasn\'t hash count'),
- ];
- }
- switch ($hashInputForm->format) {
- case HashInputForm::FORMAT_PASS:
- return CreateResponse::createResponsePassword($hashInputForm, $request, $totalCountRequestHashes, $enterText);
- case HashInputForm::FORMAT_PASS_HASH:
- return CreateResponse::createResponsePasswordHash($hashInputForm, $request, $totalCountRequestHashes, $enterText);
- case HashInputForm::FORMAT_HASH_PASS:
- return CreateResponse::createResponseHashPassword($hashInputForm, $request, $totalCountRequestHashes, $enterText);
- case HashInputForm::FORMAT_TABLE:
- return CreateResponse::createResponseTable($hashInputForm, $request, $totalCountRequestHashes, $enterText);
- case HashInputForm::FORMAT_REPLACE_IN_TEXT:
- return CreateResponse::createResponseReplaceInText($hashInputForm, $request, $totalCountRequestHashes, $enterText);
- }
- }
- usleep(200000);
- }
- return ["info" => Yii::t("app", "We are working for you query!")];
- }
- return ["error" => Yii::t("app", "Your text hasn't any hash")];
- }
- }
- public function actionGetFileResult()
- {
- if (Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- $file = $params['file'];
- header("Cache-Control: public");
- header("Content-Description: File Transfer");
- header("Content-Disposition: attachment; filename=" . str_replace(Yii::$app->params['dirFiles'], '', $file));
- header("Content-Type: application/zip");
- header("Content-Transfer-Encoding: binary");
- readfile($file);
- //unlink($file);
- }
- }
- public function actionSingleHashSearch()
- {
- if (Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $checkHash = new OneHashInputForm();
- $checkHash->load($params);
- if (!empty($checkHash)) {
- GuestIp::addHashIpModel($checkHash->hash);
- $toQueue = [0 => $checkHash->hash];
- $count = 1;
- $hashes = new ParseHashes();
- $hashes->runHashes($checkHash->hash);
- $toQueue = $hashes->hashes;
- if (count($toQueue) > 0) {
- $requestId = Queue::addNewQueue(Json::encode($toQueue), $count);
- $currentTime = time();
- while ((time() - $currentTime) < Queue::MAX_EXECUTION_TIME) {
- $request = Queue::findOne($requestId);
- if ($request->status == Queue::STATUS_DONE) {
- $response = Json::decode($request->response);
- $responseText = '';
- if (count($response) > 0) {
- $ip = Yii::$app->getRequest()->getUserIP();
- $guest = Guest::getByIp($ip);
- if (empty($guest)) {
- $newGuest = new Guest();
- $newGuest->ip = $ip;
- $newGuest->request_count = 1;
- $newGuest->save();
- } else {
- if ($guest->request_count > 4) {
- return Yii::t('app', "Your limit exceeded for today.");
- } else {
- $guest->request_count++;
- $guest->save();
- }
- }
- return Yii::t('app', "Congratulations! This hash is in our database. The type is ") . $response[0]['type'] . ".";
- } else {
- if (Cmd5Parser::isHashExists($checkHash->hash)) {
- return Yii::t('app', "Congratulations! This hash is in our database.");
- }
- return Yii::t('app', "Unfortunately, this hash is not in our database.");
- }
- }
- usleep(200000);
- }
- return Yii::t('app', "We are working for you query!");
- }
- return Yii::t('app', "Your hash has wrong format");
- } else {
- return Yii::t('app', "Your hash has wrong format");
- }
- }
- }
- public function actionGetUserHashCountLeft()
- {
- if (Yii::$app->request->isGet && !Yii::$app->user->isGuest) {
- if ($user = User::findOne(['id' => Yii::$app->user->id])) {
- return $user->hashCountLeft();
- }
- }
- return 0;
- }
- public function actionCreateRobokassa($service)
- {
- if (Yii::$app->request->isGet && !Yii::$app->user->isGuest) {
- Yii::$app->response->format = Response::FORMAT_JSON;
- /** @var RobokassaTransaction $transaction */
- $transaction = RobokassaTransaction::createNewTransaction($service);
- $mrhPass1 = RobokassaTransaction::PASSWORD1;
- if ($transaction->id != RobokassaTransaction::CREATE_RESULT_FAIL) {
- $type = md5($transaction->salt);
- $type[0] = $service[0];
- $type[strlen($type) - 1] = $service[1];
- $price = number_format(Payment::amountByService()[$service] * Yii::$app->params['usdToRub'], 2);
- return [
- 'id' => $transaction->id,
- 'description' => Payment::serviceDescription()[$service],
- 'price' => $price,
- 'type' => $type,
- 'crc' => RobokassaTransaction::getCrc(RobokassaTransaction::LOGIN, $price, $transaction->id, $mrhPass1, $type),
- 'culture' => !empty(Yii::$app->request->cookies->getValue('lang')) ? Yii::$app->request->cookies->getValue('lang') : 'en',
- ];
- }
- }
- return RobokassaTransaction::CREATE_RESULT_FAIL;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement