diff --git a/inc/image.php b/inc/image.php index 34283b80..20fcfdcb 100644 --- a/inc/image.php +++ b/inc/image.php @@ -312,7 +312,7 @@ class ImageConvert extends ImageBase { $this->destroy(); } - $this->temp = tempnam($config['tmp'], 'convert'); + $this->temp = tempnam($config['tmp'], 'convert') . ($config['thumb_ext'] == '' ? '' : '.' . $config['thumb_ext']); $config['thumb_keep_animation_frames'] = (int)$config['thumb_keep_animation_frames']; diff --git a/inc/instance-config.php b/inc/instance-config.php index 9098ce57..588f9ecd 100644 --- a/inc/instance-config.php +++ b/inc/instance-config.php @@ -158,7 +158,15 @@ $config['max_images'] = 5; $config['image_reject_repost'] = false; $config['thumb_method'] = 'gm+gifsicle'; +$config['thumb_ext'] = 'webp'; $config['gnu_md5'] = '1'; + + +// Strip EXIF metadata from JPEG files. +$config['strip_exif'] = true; +// Use the command-line `exiftool` tool to strip EXIF metadata without decompressing/recompressing JPEGs. +$config['use_exiftool'] = true; + // $config['update_on_posts'] = true; $config['referer_match'] = false; @@ -386,7 +394,6 @@ $config['additional_javascript'][] = 'js/file-selector.js'; $config['additional_javascript'][] = 'js/save-user_flag.js'; $config['additional_javascript'][] = 'js/webm-settings.js'; $config['additional_javascript'][] = 'js/expand-video.js'; -$config['additional_javascript'][] = 'js/download-original.js'; $config['flag_preview'] = true; @@ -449,16 +456,16 @@ $config['markup'][] = array("/~~(.+?)~~/", "\$1 array( - 'subject' => '/anorectal/i', // Typical thread subject used - ), - 'action' => 'reject', - 'message' => "$fakereason_ano" + 'condition' => array( + 'subject' => '/anorectal/i', // Typical thread subject used + ), + 'action' => 'reject', + 'message' => "$fakereason_ano" ); $config['filters'][] = array( - 'condition' => array( - 'filename' => '/(TAKE ACTION v|trends.*associations|anusporn|anal insanity|anorectal risks|TAv[0-9]+|arisks)/', // Typical opening filename format. Their usual evasion strategy is to post only the image. - ), - 'action' => 'reject', - 'message' => "$fakereason_ano" + 'condition' => array( + 'filename' => '/(TAKE ACTION v|trends.*associations|anusporn|anal insanity|anorectal risks|TAv[0-9]+|arisks)/', // Typical opening filename format. Their usual evasion strategy is to post only the image. + ), + 'action' => 'reject', + 'message' => "$fakereason_ano" ); // Favorite names and buzzterms $config['filters'][] = array( - 'condition' => array( - 'body' => '/(Rocco Siff|Evil Angel|Xavier Becerra|AdultDVDTalk|painal|Roughanal|anoreceptive|ltimately this is not about me|Logically-fallacious diversionary tactics)/', - ), - 'action' => 'reject', - 'message' => "$fakereason_ano" + 'condition' => array( + 'body' => '/(Rocco Siff|Evil Angel|Xavier Becerra|AdultDVDTalk|painal|Roughanal|anoreceptive|ltimately this is not about me|Logically-fallacious diversionary tactics)/', + ), + 'action' => 'reject', + 'message' => "$fakereason_ano" ); /* - * Filters for diverting TheThingN0ticer ban evader + * Filter TheThingN0ticer ban evader */ -$fakereason_thing = 'Due to automated child pornography and gore spam by /pol/, all posting now requires a pass.
To receive a one-week pass, email a short explanation of the Labor Theory of Value to space@national.shitposting.agency .'; -event_handler('post', function($post) { - $fakereason_thing = 'Due to automated child pornography and gore spam by /pol/, all posting now requires a pass.
To receive a one-week pass, email a short explanation of the Labor Theory of Value to space@national.shitposting.agency .'; - - // Detects posts in the /ITG/ with the filename "Untitled.png" and a Nazi flag - if (!$post->op && $post->board == 'leftypol' && $post->thread == 110463 && $post->has_file && - $post->files[0]->filename == 'Untitled.png' && - strpos($post->body_nomarkup, "Nazi") !== false) { /* has Nazi flag, hack */ - return $fakereason_thing; - // Detects posts with the Nazi flag and their favorite Twitter links - } else if (strpos($post->body_nomarkup, "Nazi") !== false && /* has Nazi flag, hack */ - preg_match('/\/(WokeCapital|NickJFuentes|af_clips)/', $post->body)) { - return $fakereason_thing; - } +event_handler('post', function($post, $tor) { + if($post->board == 'leftypol'){ + // note: just posting nazi flag with name doesn't trigger, on purpose + $n = 0; + // body is just a twitter account (or has ?lang=en or something) + if(preg_match('/^(https:\/\/)?(www.|m(obile)?.)?twitter\.com\/[a-zA-Z0-9_-]+\/?[#?&a-zA-Z0-9=_-]*(]*>[^<]*<\/tinyboard>|<[^>]*>|\s)*$/', + $post->body_nomarkup)){$n+=2;} + if($post->has_file && preg_match('/^Untitled[0-9]*.png/', $post->files[0]->filename)){$n+=2;} + if($post->name != 'Anonymous'){$n++; if($post->name == 'NasheedsSeedAndFeed'){$n+=2;}} + if(strpos($post->body_nomarkup,'nazi')){$n++;} + + if($n > 2){ + if($tor){return 'Flood detected; Post discarded.';} + return 'Your IP address is listed in multirbl or rbl.efnetrbl.org.'; + } + } }); -$config['filters'][] = array( - 'condition' => array( - 'name' => '/Chauvinist/', // Current name as of April. - ), - 'action' => 'reject', - 'message' => $fakereason_thing -); // Changes made via web editor by "zul_admin" @ Fri, 19 Feb 2021 15:06:33 -0800: diff --git a/js/style-select.js b/js/style-select.js index e47600a5..b5352964 100644 --- a/js/style-select.js +++ b/js/style-select.js @@ -14,8 +14,46 @@ * */ -$(document).ready(function(){ +$(document).ready(function() { var stylesDiv = $('div.styles'); + var pages = $('div.pages'); + var stylesSelect = $('').css({float:"none"}); + var options = []; + + var i = 1; + stylesDiv.children().each(function() { + var name = this.innerHTML.replace(/(^\[|\]$)/g, ''); + var opt = $('') + .html(name) + .val(i); + if ($(this).hasClass('selected')) + opt.attr('selected', true); + options.push ([name.toUpperCase (), opt]); + $(this).attr('id', 'style-select-' + i); + i++; + }); + + options.sort ((a, b) => { + const keya = a [0]; + const keyb = b [0]; + if (keya < keyb) { return -1; } + if (keya > keyb) { return 1; } + return 0; + }).forEach (([key, opt]) => { + stylesSelect.append(opt); + }); + + stylesSelect.change(function() { + $('#style-select-' + $(this).val()).click(); + }); + + stylesDiv.hide() + pages.after( + $('
') + .append(_('Select theme: '), stylesSelect) + ); +}); +stylesDiv = $('div.styles'); var pages = $('div.pages'); var stylesSelect = $(''); @@ -43,3 +81,4 @@ $(document).ready(function(){ ); }); + diff --git a/post.php b/post.php index 02eeb866..2f1d5798 100644 --- a/post.php +++ b/post.php @@ -1295,10 +1295,13 @@ function handle_post(){ } } + // Custom /leftypol/ var to check if Tor + $tor = ($_SERVER['REMOTE_ADDR'] == '127.0.0.1'); + $post = (object)$post; $post->files = array_map(function($a) { return (object)$a; }, $post->files); - $error = event('post', $post); + $error = event('post', $post, $tor); $post->files = array_map(function($a) { return (array)$a; }, $post->files); if ($error) { diff --git a/static/deleted.png b/static/deleted.png index 5b90b4fb..28e876c8 100644 Binary files a/static/deleted.png and b/static/deleted.png differ diff --git a/status.php b/status.php index a42530a8..dcda0af3 100644 --- a/status.php +++ b/status.php @@ -2,8 +2,55 @@ require_once 'inc/functions.php'; +function endsWith( $haystack, $needle ) { + $length = strlen( $needle ); + if( !$length ) { + return true; + } + return substr( $haystack, -$length ) === $needle; +} + +// Boards that are nsfw +$nsfw_boards = ['b', 'overboard']; +// Boards that use spoiler_alunya.png as their spoiler +$alunya_spoiler = ['leftypol', 'anime']; +// Boards where posts are not allowed to be created +$readonly_boards = ['overboard', 'sfw', 'alt']; + +$board_list = listBoards(); + +// Add objects that are not boards but are treated as such +$board_list[] = ['uri' => 'overboard', 'title' => 'Overboard']; +$board_list[] = ['uri' => 'sfw', 'title' => 'SFW Overboard']; +$board_list[] = ['uri' => 'alt', 'title' => 'Alternate Overboard']; + +/** + * Allowed fields for the board object: + * - code: The board code ('b', 'tech', ...) + * - name: The board user-readable name ('Siberia', ...) + * - description: The board description ('Leftist Politically Incorrect', ...) + * - sfw: Is this board sfw? + * - alternate_spoilers: Does this board use the alunya spoiler? + */ +$boards = []; +foreach ($board_list as $board) { + // Skip archives + if (endsWith($board['uri'], '_archive')) { + continue; + } + + $boards[] = [ + 'code' => $board['uri'], + 'name' => $board['title'], + 'sfw' => !in_array($board['uri'], $nsfw_boards), + 'alternate_spoilers' => in_array($board['uri'], $alunya_spoiler), + 'posting_enabled' => !in_array($board['uri'], $readonly_boards), + ]; +} + header('Content-Type: application/json'); echo json_encode([ 'captcha' => $config['securimage'], - 'flags' => $config['user_flags'] + 'flags' => $config['user_flags'], + 'boards' => $boards, ]); \ No newline at end of file diff --git a/templates/post/fileinfo.html b/templates/post/fileinfo.html index a551e8bb..6c5d06ae 100644 --- a/templates/post/fileinfo.html +++ b/templates/post/fileinfo.html @@ -22,9 +22,9 @@ {% if config.show_filename and file.filename %} , {% if file.filename|length > config.max_filename_display %} - {{ file.filename|truncate_filename(config.max_filename_display)|e|bidi_cleanup }} + {{ file.filename|truncate_filename(config.max_filename_display)|e|bidi_cleanup }} {% else %} - {{ file.filename|e|bidi_cleanup }} + {{ file.filename|e|bidi_cleanup }} {% endif %} {% endif %} ) @@ -36,3 +36,4 @@ {% endfor %} {% endif %} +