Browse Source

Handle reporting non-existing posts. Fix #96

pull/114/head
Zankaria 1 month ago
parent
commit
e496fb10a5
  1. 16
      inc/config.php
  2. 28
      post.php

16
inc/config.php

@ -112,7 +112,7 @@
/* /*
* On top of the static file caching system, you can enable the additional caching system which is * On top of the static file caching system, you can enable the additional caching system which is
* designed to minimize SQL queries and can significantly increase speed when posting or using the * designed to minimize SQL queries and can significantly increase speed when posting or using the
* moderator interface. APC is the recommended method of caching. * moderator interface. APC is the recommended method of caching.
* *
* http://tinyboard.org/docs/index.php?p=Config/Cache * http://tinyboard.org/docs/index.php?p=Config/Cache
@ -209,22 +209,22 @@
// http://www.projecthoneypot.org/httpbl.php // http://www.projecthoneypot.org/httpbl.php
// $config['dnsbl'][] = array('<your access key>.%.dnsbl.httpbl.org', function($ip) { // $config['dnsbl'][] = array('<your access key>.%.dnsbl.httpbl.org', function($ip) {
// $octets = explode('.', $ip); // $octets = explode('.', $ip);
// //
// // days since last activity // // days since last activity
// if ($octets[1] > 14) // if ($octets[1] > 14)
// return false; // return false;
// //
// // "threat score" (http://www.projecthoneypot.org/threat_info.php) // // "threat score" (http://www.projecthoneypot.org/threat_info.php)
// if ($octets[2] < 5) // if ($octets[2] < 5)
// return false; // return false;
// //
// return true; // return true;
// }, 'dnsbl.httpbl.org'); // hide our access key // }, 'dnsbl.httpbl.org'); // hide our access key
// Skip checking certain IP addresses against blacklists (for troubleshooting or whatever) // Skip checking certain IP addresses against blacklists (for troubleshooting or whatever)
$config['dnsbl_exceptions'][] = '127.0.0.1'; $config['dnsbl_exceptions'][] = '127.0.0.1';
// To prevent bump atacks; returns the thread to last position after the last post is deleted. // To prevent bump atacks; returns the thread to last position after the last post is deleted.
$config['anti_bump_flood'] = false; $config['anti_bump_flood'] = false;
/* /*
@ -768,7 +768,7 @@
* 'gd' PHP GD (default). Only handles the most basic image formats (GIF, JPEG, PNG). * 'gd' PHP GD (default). Only handles the most basic image formats (GIF, JPEG, PNG).
* GD is a prerequisite for Tinyboard no matter what method you choose. * GD is a prerequisite for Tinyboard no matter what method you choose.
* *
* 'imagick' PHP's ImageMagick bindings. Fast and efficient, supporting many image formats. * 'imagick' PHP's ImageMagick bindings. Fast and efficient, supporting many image formats.
* A few minor bugs. http://pecl.php.net/package/imagick * A few minor bugs. http://pecl.php.net/package/imagick
* *
* 'convert' The command line version of ImageMagick (`convert`). Fixes most of the bugs in * 'convert' The command line version of ImageMagick (`convert`). Fixes most of the bugs in
@ -1170,6 +1170,7 @@
$config['error']['fileext'] = _('Unsupported image format.'); $config['error']['fileext'] = _('Unsupported image format.');
$config['error']['noboard'] = _('Invalid board!'); $config['error']['noboard'] = _('Invalid board!');
$config['error']['nonexistant'] = _('Thread specified does not exist.'); $config['error']['nonexistant'] = _('Thread specified does not exist.');
$config['error']['nopost'] = _('Post specified does not exist.');
$config['error']['locked'] = _('Thread locked. You may not reply at this time.'); $config['error']['locked'] = _('Thread locked. You may not reply at this time.');
$config['error']['reply_hard_limit'] = _('Thread has reached its maximum reply limit.'); $config['error']['reply_hard_limit'] = _('Thread has reached its maximum reply limit.');
$config['error']['image_hard_limit'] = _('Thread has reached its maximum image limit.'); $config['error']['image_hard_limit'] = _('Thread has reached its maximum image limit.');
@ -1776,7 +1777,7 @@
// event_handler('post', function($post) { // event_handler('post', function($post) {
// // do something else // // do something else
// //
// // return an error (reject post) // // return an error (reject post)
// return 'Sorry, you cannot post that!'; // return 'Sorry, you cannot post that!';
// }); // });
@ -1991,4 +1992,3 @@
//Logo location for themes //Logo location for themes
$config['logo'] = 'static/logo.png'; $config['logo'] = 'static/logo.png';

28
post.php

@ -123,24 +123,24 @@ function db_select_thread_with_attributes($board, $thread_id)
} }
/** /**
* Get the threads with the given id in the given board. * Get the post with the given id in the given board.
* *
* @param string $board Board to search in. MUST ALREADY BE SANITIZED. * @param string $board Board to search in. MUST ALREADY BE SANITIZED.
* @param int $thread_id Id of the thread. * @param int $id Id of the post.
* @return false|array Returns false if no thread exists. Otherwise, an array of arrays with the threads 'id', 'thread' * @return false|array Returns false if no post exists. Otherwise, an array with the post's 'id', 'thread' and
* and 'body_nomarkup' properties. * 'body_nomarkup' keys.
*/ */
function db_select_threads_minimal($board, $thread_id) function db_select_post_minimal($board, $id)
{ {
$query = prepare(sprintf("SELECT `id`, `thread`, `body_nomarkup` FROM ``posts_%s`` WHERE `id` = :id", $board)); $query = prepare(sprintf("SELECT `id`, `thread`, `body_nomarkup` FROM ``posts_%s`` WHERE `id` = :id", $board));
$query->bindValue(':id', $thread_id, PDO::PARAM_INT); $query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute() or error(db_error($query)); $query->execute() or error(db_error($query));
$threads = $query->fetch(PDO::FETCH_ASSOC); $post = $query->fetch(PDO::FETCH_ASSOC);
if (!$threads) { if (!$post) {
return false; return false;
} }
return $threads; return $post;
} }
/** /**
@ -536,7 +536,13 @@ function handle_report()
markup($reason); markup($reason);
foreach ($report as $id) { foreach ($report as $id) {
$thread = db_select_threads_minimal($board['uri'], $id); $post = db_select_post_minimal($board['uri'], $id);
if ($post === false) {
if ($config['syslog']) {
_syslog(LOG_INFO, "Failed to report non-existing post #{$id} in {$board['dir']}");
}
error($config['error']['nopost']);
}
$error = event('report', array('ip' => $_SERVER['REMOTE_ADDR'], 'board' => $board['uri'], 'post' => $post, 'reason' => $reason, 'link' => link_for($thread))); $error = event('report', array('ip' => $_SERVER['REMOTE_ADDR'], 'board' => $board['uri'], 'post' => $post, 'reason' => $reason, 'link' => link_for($thread)));
if ($error) { if ($error) {
@ -547,7 +553,7 @@ function handle_report()
_syslog( _syslog(
LOG_INFO, LOG_INFO,
'Reported post: ' . 'Reported post: ' .
'/' . $board['dir'] . $config['dir']['res'] . link_for($thread) . ($thread['thread'] ? '#' . $id : '') . '/' . $board['dir'] . $config['dir']['res'] . link_for($post) . ($post['thread'] ? '#' . $id : '') .
' for "' . $reason . '"' ' for "' . $reason . '"'
); );

Loading…
Cancel
Save