Advertisement
shapoval

edit_with_signature

Jul 25th, 2019
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.06 KB | None | 0 0
  1.     public function edit_with_signature($id) {
  2.         $post_data = array_map(function($val) { return htmlspecialchars($val, ENT_QUOTES); }, $_POST);
  3.         $signature = array_key_exists('signature', $post_data) ? $post_data['signature'] : null;
  4.  
  5.         if (empty($signature)) {
  6.             return $this->send_error_message('Не перадана подпись (signature)');
  7.         }
  8.  
  9.         $signature_fields = $post_data;
  10.         unset($signature_fields['signature']);
  11.  
  12.         uksort($signature_fields, function($a, $b) {
  13.             $a_lower = strtolower($a);
  14.             $b_lower = strtolower($b);
  15.  
  16.             if ($a_lower == 'token') return 1;
  17.             if ($b_lower == 'token') return -1;
  18.  
  19.             if ($a_lower == $b_lower) return 0;
  20.             return ($a_lower > $b_lower) ? 1 : -1;
  21.         });
  22.         $calculated_signature = md5(http_build_query($signature_fields, '', '&', PHP_QUERY_RFC3986));
  23.         if ($calculated_signature !== $signature) {
  24.             return $this->send_error_message('Неверная подпись - ожидается ' . $calculated_signature);
  25.         }
  26.  
  27.         if ($post_data['token'] !== \Bingo\Config::get('config', 'token')) {
  28.             return $this->send_error_message('Неверный токен');
  29.         }
  30.  
  31.         if (empty($id)) {
  32.             return $this->send_error_message(['id' => 'Поле является обязательным']);
  33.         }
  34.  
  35.         $task = \App\Models\Task::findOneBy(['id' => $id, 'developer' => $this->developer]);
  36.         if (!$task) {
  37.             return $this->send_error_message(['id' => 'Задача #' . $id . ' не найдена']);
  38.         }
  39.  
  40.         if (array_key_exists('text', $post_data) && !empty($post_data['text'])) {
  41.             $task->text = $post_data['text'];
  42.         }
  43.  
  44.         if (array_key_exists('status', $post_data)) {
  45.             $task->status = !empty($post_data['status']) ? \App\Models\Task::STATUS_DONE : \App\Models\Task::STATUS_EMPTY;
  46.         }
  47.        
  48.         $task->save();
  49.         return $this->send_success_message();
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement