public function requestAPI($API = null, $username = null) { $data = array('API' => $API, 'IP' => $_SERVER['REMOTE_ADDR'], 'username' => $username, 'nounce' => gmdate(time()), 'DateTime' => new \MongoDate()); $requests = Requests::find('first', array('conditions' => array('IP' => $_SERVER['REMOTE_ADDR'], 'API' => $API), 'order' => array('DateTime' => -1))); Requests::create()->save($data); if ($_SERVER['REMOTE_ADDR'] == '198.50.222.223') { return true; } if ($_SERVER['REMOTE_ADDR'] == '107.20.80.120') { return true; } if ($_SERVER['REMOTE_ADDR'] == '178.62.83.36') { return true; } //bittybot.co.uk if ($_SERVER['REMOTE_ADDR'] == '107.6.11.150') { return true; } //GreenCoinX.com if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { return true; } //GreenCoinX.com if ($_SERVER['REMOTE_ADDR'] == '107.6.11.211') { return true; } //SiiCrypto.com if (in_array($username, array("SiiUserA", "SiiUserB"))) { return true; } if (gmdate(time()) - $requests['nounce'] <= 1000) { return false; } return true; }
/** * Get the matching request for the given request id. * * @param int $id * @return Response */ public function show($id) { //Unique namespace for request PMRequest. $request = PMRequest::find($id); //Not a valid request if (empty($request)) { return parent::InvalidRequestResponseHandler(); exit; } $request_pickup_times = $request->requestPickupTimes->toArray(); $request_pickup_times_array = array(); foreach ($request_pickup_times as $index => $vArray) { $request_pickup_times_array[] = $vArray['pickup_timestamp']; } $request_pickup_times_hash = array_flip($request_pickup_times_array); $time_filtered_requests = RequestPickupTimes::getRequestWithMatchingPickup($request_pickup_times_array, $id, $request->requester_id); //No requests matched, you want to suggest somthing to the user here if (empty($time_filtered_requests)) { return parent::NoRequestMatchResponseHandler(); exit; } $result = array(); foreach ($time_filtered_requests as $index => $request_info) { if (!isset($result[$request_info->request_id])) { $result[$request_info->request_id] = array(); } $result[$request_info->request_id]['pickup_time'][] = $request_info->pickup_timestamp; } $time_filtered_requests_ids = array_keys($result); //get source address for my request $source_address = $request->sourceAddress; //get destination address for my request. $destination_address = $request->destinationAddress; //Get spatial distance from MySQL for source address $requests_by_source_distance = EntityAddress::getDistanceAmongRequestsByTimeFilteredIds($time_filtered_requests_ids, $source_address->lat, $source_address->lng, "source_address_id", $request_pickup_times_hash); $requests_by_destination_distance = EntityAddress::getDistanceAmongRequestsByTimeFilteredIds($time_filtered_requests_ids, $destination_address->lat, $destination_address->lng, "destination_address_id", $request_pickup_times_hash); $gdm_request_source = EntityAddress::getCSVForLatLong($source_address); $gdm_request_destination = EntityAddress::getCSVForLatLong($destination_address); $gdm_request_potential_source_matches = EntityAddress::getCSVForLatLong($requests_by_source_distance); $gdm_request_potential_destination_matches = EntityAddress::getCSVForLatLong($requests_by_destination_distance); $gdm_request_potential_source_matches = GoogleDistanceMatrixManager::get_distance_matrix($gdm_request_source, $gdm_request_potential_source_matches, Config::get('pm_constants.formats.array')); $gdm_request_potential_destination_matches = GoogleDistanceMatrixManager::get_distance_matrix($gdm_request_destination, $gdm_request_potential_destination_matches, Config::get('pm_constants.formats.array')); $api_response = PMRequest::formatAPIResponse($request, $source_address, $destination_address, $requests_by_source_distance, $requests_by_destination_distance, $gdm_request_potential_source_matches, $gdm_request_potential_destination_matches); return parent::ValidResponseHandler($api_response); }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Requests::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $dataProvider->setSort(['attributes' => ['id', 'userlogin' => ['asc' => ['users.login' => SORT_ASC], 'desc' => ['users.login' => SORT_DESC], 'label' => 'user', 'default' => SORT_ASC], 'tasktitle' => ['asc' => ['tasks.title' => SORT_ASC], 'desc' => ['tasks.title' => SORT_DESC], 'label' => 'task', 'default' => SORT_ASC], 'answer', 'created', 'result']]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'created' => $this->created, 'result' => $this->result]); $query->andFilterWhere(['like', 'answer', $this->answer]); $query->joinWith(["user" => function ($q) { $q->where("users.login LIKE '%" . $this->userlogin . "%'"); }]); $query->joinWith(["task" => function ($q) { $q->where("tasks.title LIKE '%" . $this->tasktitle . "%'"); }]); return $dataProvider; }
public static function checkIfBruteforce($team, $task) { $model = Requests::find()->where(["user_id" => $team, "task_id" => $task])->andWhere('created > date_sub(now(), interval 5 second)')->one(); if ($model) { return true; } else { return false; } }