/** * Validate the class instance. * This overrides the default invocation to provide additional rules after the controller is setup. * * @return void */ public function validate() { $board = $this->board; $user = $this->user; if (is_null($board) || is_null($user)) { return parent::validate(); } $validator = $this->getValidatorInstance(); $messages = $validator->errors(); // Ban check. $ban = Ban::getBan($this->ip(), $board->board_uri); if ($ban) { $messages = $validator->errors(); $messages->add("body", trans("validation.custom.banned")); $this->ban = $ban; $this->failedValidation($validator); return; } // Board-level setting validaiton. $validator->sometimes('captcha', "required|captcha", function ($input) use($board) { return !$board->canPostWithoutCaptcha($this->user); }); if (!$validator->passes()) { $this->failedValidation($validator); } else { if (!$this->user->canAdminConfig() && $board->canPostWithoutCaptcha($this->user)) { // Check last post time for flood. $floodTime = site_setting('postFloodTime'); if ($floodTime > 0) { $lastPost = Post::getLastPostForIP(); if ($lastPost) { $floodTimer = clone $lastPost->created_at; $floodTimer->addSeconds($floodTime); if ($floodTimer->isFuture()) { $messages->add("body", trans("validation.custom.post_flood", ['time_left' => $floodTimer->diffInSeconds()])); } } } } // Validate individual files. $input = $this->all(); // Process uploads. if (isset($input['files'])) { $uploads = $input['files']; if (count($uploads) > 0) { foreach ($uploads as $uploadIndex => $upload) { // If a file is uploaded that has a specific filename, it breaks the process. if (method_exists($upload, "getPathname") && !file_exists($upload->getPathname())) { $messages->add("files.{$uploadIndex}", trans("validation.custom.file_corrupt", ["filename" => $upload->getClientOriginalName()])); } } } } } if (count($validator->errors())) { $this->failedValidation($validator); } }
/** * Validate the class instance. * This overrides the default invocation to provide additional rules after the controller is setup. * * @return void */ public function validate() { $board = $this->board; $user = $this->user; $validator = $this->getValidatorInstance(); $messages = $validator->errors(); $isReply = $this->thread instanceof Post; if ($isReply) { // Check global flood. $lastPost = Post::select('created_at')->where('author_ip', inet_pton($this->ip()))->where('created_at', '>=', \Carbon\Carbon::now()->subSeconds(5))->first(); if ($lastPost instanceof Post) { $timeDiff = 5 - $lastPost->created_at->diffInSeconds() + 1; $messages = $validator->errors(); $messages->add("flood", trans_choice("validation.custom.post_flood", $timeDiff, ['time_left' => $timeDiff])); $this->failedValidation($validator); return; } } else { // Check global flood. $lastThread = Post::select('created_at')->where('author_ip', inet_pton($this->ip()))->where('created_at', '>=', \Carbon\Carbon::now()->subSeconds(20))->op()->first(); if ($lastThread instanceof Post) { $timeDiff = 20 - $lastThread->created_at->diffInSeconds() + 1; $messages = $validator->errors(); $messages->add("flood", trans_choice("validation.custom.thread_flood", $timeDiff, ['time_left' => $timeDiff])); $this->failedValidation($validator); return; } } // Board-level setting validaiton. $validator->sometimes('captcha', "required|captcha", function ($input) use($board) { return !$board->canPostWithoutCaptcha($this->user); }); if (!$validator->passes()) { $this->failedValidation($validator); } else { if (!$this->user->canAdminConfig() && $board->canPostWithoutCaptcha($this->user)) { // Check last post time for flood. $floodTime = site_setting('postFloodTime'); if ($floodTime > 0) { $lastPost = Post::getLastPostForIP(); if ($lastPost) { $floodTimer = clone $lastPost->created_at; $floodTimer->addSeconds($floodTime); if ($floodTimer->isFuture()) { $messages->add("body", trans("validation.custom.post_flood", ['time_left' => $floodTimer->diffInSeconds()])); } } } } // Validate individual files. $input = $this->all(); // Process uploads. if (isset($input['files'])) { $uploads = $input['files']; if (count($uploads) > 0) { foreach ($uploads as $uploadIndex => $upload) { // If a file is uploaded that has a specific filename, it breaks the process. if (method_exists($upload, "getPathname") && !file_exists($upload->getPathname())) { $messages->add("files.{$uploadIndex}", trans("validation.custom.file_corrupt", ["filename" => $upload->getClientOriginalName()])); } } } } } if (count($validator->errors())) { $this->failedValidation($validator); } else { if (!$this->passesAuthorization()) { $this->failedAuthorization(); } } }
/** * Validate the class instance. * This overrides the default invocation to provide additional rules after the controller is setup. * * @return void */ public function validate() { $board = $this->board; $thread = $this->thread; $user = $this->user; $validator = $this->getValidatorInstance(); $messages = $validator->errors(); $isReply = $this->thread instanceof Post; if ($isReply) { $floodTime = site_setting('postFloodTime'); // Check global flood. $lastPost = Post::select('created_at')->whereAuthorIP($this->ip())->where('created_at', '>=', \Carbon\Carbon::now()->subSeconds($floodTime))->first(); if ($lastPost instanceof Post) { $timeDiff = $floodTime - $lastPost->created_at->diffInSeconds() + 1; $messages->add("flood", trans_choice("validation.custom.post_flood", $timeDiff, ['time_left' => $timeDiff])); $this->failedValidation($validator); return; } } else { $floodTime = site_setting('threadFloodTime'); // Check global flood. $lastThread = Post::select('created_at')->whereAuthorIP($this->ip())->where('created_at', '>=', \Carbon\Carbon::now()->subSeconds($floodTime))->op()->first(); if ($lastThread instanceof Post) { $timeDiff = $floodTime - $lastThread->created_at->diffInSeconds() + 1; $messages->add("flood", trans_choice("validation.custom.thread_flood", $timeDiff, ['time_left' => $timeDiff])); $this->failedValidation($validator); return; } } // Board-level setting validaiton. $validator->sometimes('captcha', "required|captcha", function ($input) use($board) { return !$board->canPostWithoutCaptcha($this->user); }); if (!$validator->passes()) { $this->failedValidation($validator); } else { if (!$this->user->canAdminConfig() && $board->canPostWithoutCaptcha($this->user)) { // Check last post time for flood. $floodTime = site_setting('postFloodTime'); if ($floodTime > 0) { $lastPost = Post::getLastPostForIP(); if ($lastPost) { $floodTimer = clone $lastPost->created_at; $floodTimer->addSeconds($floodTime); if ($floodTimer->isFuture()) { $messages->add("body", trans("validation.custom.post_flood", ['time_left' => $floodTimer->diffInSeconds()])); } } } } // Validate individual files being uploaded right now. $this->validateOriginality(); } if (count($validator->errors())) { $this->failedValidation($validator); } else { if (!$this->passesAuthorization()) { $this->failedAuthorization(); } } }
/** * Determines if the client has access to this form. * * @return boolean */ public function authorize() { return $this->user->canEditConfig($this->board); }