init 4chan

This commit is contained in:
skidoodle 2025-04-17 09:20:34 +02:00
commit c850337f1e
No known key found for this signature in database
390 changed files with 195936 additions and 0 deletions

109
Rakefile Normal file
View file

@ -0,0 +1,109 @@
require 'rake/testtask'
require 'uglifier'
require 'openssl'
require 'json'
require 'open3'
require 'fileutils'
Encoding.default_external = 'UTF-8'
include Rake
def minify_js(basename)
root = 'js'
u = Uglifier.new(
:harmony => true
#screw_ie8: true,
#source_map: {
# source_filename: "#{basename}#{version}.js",
# output_filename: "#{basename}.min#{version}.js"
#}
)
js, sm = u.compile_with_map(File.read("#{root}/#{basename}.js"))
#hash = OpenSSL::Digest::MD5.hexdigest(sm)[0,8]
#js << "\n//# sourceMappingURL=#{basename}.min.map?#{hash}"
out = if (basename =~ /-unminified$/)
"#{root}/#{basename.sub(/-.+$/, '')}.js"
else
"#{root}/#{basename}.min.js"
end
File.open(out, 'w') { |f| f.write js }
#File.open("#{root}/#{basename}.min.map", 'w') { |f| f.write sm }
end
desc 'Minify JavaScript and generate source maps'
task :minify, [:js] do |t, args|
puts "Compiling #{args[:js]}.js"
minify_js(args[:js])
end
task :jshint, [:js] do |t, args|
root = 'js'
basename = args[:js]
if !basename
abort 'File not found.'
end
file = "#{root}/#{basename}.js"
if !File.exist?(file)
abort 'File not found.'
end
opts = {
laxbreak: true,
esversion: 6,
boss: true,
expr: true,
sub: true,
browser: true,
devel: true,
strict: 'implied',
multistr: true,
scripturl: true,
unused: 'vars',
evil: true,
'-W079' => true # no-native-reassign
}
opts[:globals] = Hash[[
'$', '$L', 'Chart', 'Feedback', 'Tip', 'APP', 'Tegaki', 'MathJax', 'Main', 'UA',
'Draggable', 'Config', 'Parser', 'ThreadUpdater', 'SettingsMenu', 'QR', 'FC',
'grecaptcha', 'Recaptcha', 'ados_refresh', 'style_group', 'StickyNav',
'PostMenu', 'StorageSync', 'OGVPlayer', 'TCaptcha'
].collect { |v| [v, false] }]
cfg_path = 'tmp_jshint.json'
File.write(cfg_path, opts.to_json)
puts "--> #{file}"
output, outerr, status = Open3.capture3('jshint', file, '--config', cfg_path)
puts output
FileUtils.rm(cfg_path)
end
namespace :concat do
desc 'Concatenate painter.js files'
task :painter do
puts 'Building painter.js'
root = 'js'
out_file = "#{root}/painter.js"
js = []
['tegaki.js', 'painter-strings.js'].each do |file|
js << File.binread("#{root}/#{file}")
end
File.binwrite(out_file, js.join("\n"))
end
end

4447
admin-test.php Normal file

File diff suppressed because it is too large Load diff

4388
admin.php Normal file

File diff suppressed because it is too large Load diff

422
auth-test.php Normal file
View file

@ -0,0 +1,422 @@
<?php
die();
define('IS_4CHANNEL', preg_match('/(^|\.)4channel.org$/', $_SERVER['HTTP_HOST']));
if (IS_4CHANNEL) {
define('THIS_DOMAIN', '4channel.org');
define('OTHER_DOMAIN', '4chan.org');
}
else {
define('THIS_DOMAIN', '4chan.org');
define('OTHER_DOMAIN', '4channel.org');
}
define('PASS_TIMEOUT', 900); // 15 minutes
define('LOGIN_FAIL_HOURLY', 5);
require_once 'lib/db.php';
require_once 'lib/geoip2.php';
class App {
protected
// Routes
$actions = array(
'index'
),
$is_xhr = false
;
const VIEW_TPL = 'views/pass_auth.tpl.php';
const PASS_TABLE = 'pass_users';
const
AUTH_NO = 0,
AUTH_SUCCESS = 1,
AUTH_YES = 2,
AUTH_ERROR = -1,
AUTH_OUT = 4
;
const
ERR_BAD_REQUEST = 'Bad Request.',
ERR_GENERIC = 'Internal Server Error (%s)',
ERR_FLOOD = 'You have to wait a while before attempting this again.',
ERR_EMPTY_FIELD = 'You have left one or more fields blank.',
ERR_TOKEN_LEN = 'Your Token must be exactly 10 characters.',
ERR_DB = 'We are currently having database issues. Please try again later.',
ERR_BAD_AUTH = 'Incorrect Token or PIN.',
ERR_IN_USE = 'This Pass is already in use by another IP. Please wait %s and re-authorize by visiting this page again to change IPs.',
ERR_EXPIRED = 'This Pass has expired. Please visit <a href="https://www.4chan.org/pass.php?renew=%s">this page</a> to renew it.', // status 1
ERR_REFUNDED = 'This Pass has been refunded and disabled. You cannot use it anymore.', // status 2
ERR_DISPUTED = 'This Pass has a disputed payment. You cannot use it until the dispute is resolved.', // status 3
ERR_REVOKED_SPAM = 'This Pass has been revoked due to spamming, which is a violation of the <a href="https://www.4chan.org/pass#termsofuse">Terms of Use</a>.', // status 4
ERR_REVOKED_ILLEGAL = 'This Pass has been revoked due to illegal content being posted, which is a violaton of the <a href="https://www.4chan.org/pass#termsofuse">Terms of Use</a>.' // status 5
;
private function error($msg) {
$this->renderResponse(self::AUTH_ERROR, $msg);
}
private function renderResponse($status, $msg = null) {
if ($this->is_xhr) {
header('Content-type: application/json');
echo json_encode(array('status' => $status, 'message' => $msg));
}
else {
$this->auth_status = $status;
$this->message = $msg;
require_once(self::VIEW_TPL);
}
die();
}
private function pretty_duration($sec) {
$duration = '';
$hours = (int)($sec / 3600);
$minutes = (int)($sec / 60);
if ($hours) {
$duration .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ' hour';
if ($hours != 1) {
$duration .= 's';
}
$duration .= ' ';
}
if ($minutes) {
$minutes = (int)(($sec / 60) % 60);
$duration .= str_pad($minutes, 2, '0', STR_PAD_LEFT). ' minute';
if ($minutes != 1) {
$duration .= 's';
}
}
$seconds = intval($sec % 60);
return $duration;
}
private function get_csrf_token() {
return bin2hex(openssl_random_pseudo_bytes(16));
}
private function validate_referer() {
if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] === '') {
return;
}
if (!preg_match('/^https:\/\/sys\.(4chan|4channel)\.org(\/|$)/', $_SERVER['HTTP_REFERER'])) {
$this->error(self::ERR_BAD_REQUEST);
}
}
private function validate_csrf() {
if (!isset($_COOKIE['csrf']) || !isset($_POST['csrf'])
|| $_COOKIE['csrf'] === '' || $_POST['csrf'] === '') {
$this->error(self::ERR_BAD_REQUEST);
}
if ($_COOKIE['csrf'] !== $_POST['csrf']) {
$this->error(self::ERR_BAD_REQUEST);
}
}
private function validate_auth_flood($long_ip) {
if (!$long_ip) {
return;
}
$query = "SELECT COUNT(ip) FROM user_actions WHERE ip = $long_ip AND action = 'fail_pass_auth' AND time >= DATE_SUB(NOW(), INTERVAL 1 HOUR)";
$res = mysql_global_call($query);
if (!$res) {
return;
}
$count = (int)mysql_fetch_row($res)[0];
if ($count >= LOGIN_FAIL_HOURLY) {
$this->error(self::ERR_FLOOD);
}
}
private function register_auth_failure($long_ip) {
if (!$long_ip) {
return;
}
$query = "INSERT INTO user_actions (ip, board, action, time) VALUES(%d, '', 'fail_pass_auth', NOW())";
$res = mysql_global_call($query, $long_ip);
}
private function convert_new_pass_status($user_hash, $hashed_pin) {
$table = self::PASS_TABLE;
$query = "UPDATE $table SET pin = '%s', status = 0 WHERE user_hash = '%s' AND status = 6 LIMIT 1";
mysql_global_call($query, $hashed_pin, $user_hash);
$this->set_cookie('pass_email', '', -1);
}
private function convert_delayed_pass_status($user_hash, $hashed_pin) {
$table = self::PASS_TABLE;
$query = "UPDATE $table SET pin = '%s', status = 0, expiration_date = NOW() + INTERVAL 1 YEAR WHERE user_hash = '%s' AND status = 7 LIMIT 1";
mysql_global_call($query, $hashed_pin, $user_hash);
}
private function set_cookie($name, $value, $expire, $secure = false, $http_only = false) {
setcookie($name, $value, $expire, '/', '.' . THIS_DOMAIN, $secure, $http_only);
}
private function clear_cookies() {
$cookie_time = $_SERVER['REQUEST_TIME'] - 3600;
$this->set_cookie('pass_id', null, $cookie_time, true, true);
$this->set_cookie('pass_enabled', null, $cookie_time);
}
private function get_random_base64bytes($length = 64) {
$data = openssl_random_pseudo_bytes($length);
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
private function get_salt() {
$salt = file_get_contents('/www/keys/2014_admin.salt');
if (!$salt) {
$this->error(sprintf(self::ERR_GENERIC, 'gs'));
}
return $salt;
}
/**
* Login
*/
private function authenticate() {
$this->validate_referer();
$table = self::PASS_TABLE;
$time_now = time();
// Token
if (!isset($_POST['id']) || $_POST['id'] === '') {
$this->error(self::ERR_EMPTY_FIELD);
}
if (strlen($_POST['id']) != 10) {
$this->error(self::ERR_TOKEN_LEN);
}
$id = $_POST['id'];
// Pin
if (!isset($_POST['pin']) || $_POST['pin'] === '') {
$this->error(self::ERR_EMPTY_FIELD);
}
$pin = $_POST['pin'];
// ---
$ip = $_SERVER['REMOTE_ADDR'];
$long_ip = ip2long($ip);
$this->validate_auth_flood($long_ip);
// ---
$plain_pin = $pin;
$pin = crypt($pin, substr($id, 4, 9));
$query = "SELECT * FROM $table WHERE user_hash = '%s' AND (pin = '%s' OR pin = '%s') LIMIT 1";
$res = mysql_global_call($query, $id, $pin, $plain_pin);
if (!$res) {
$this->error(self::ERR_DB);
}
if (mysql_num_rows($res) !== 1) {
$this->register_auth_failure($long_ip);
$this->error(self::ERR_BAD_AUTH);
}
$pass = mysql_fetch_assoc($res);
if (!$pass) {
$this->error(sprintf(self::ERR_GENERIC, 'mfa1'));
}
$last_used = strtotime($pass['last_used']);
$last_ip_mask = ip2long($pass['last_ip']) & (~65535);
$ip_mask = $long_ip & (~65535);
if ($last_ip_mask !== 0 && ($time_now - $last_used) < PASS_TIMEOUT && $last_ip_mask != $ip_mask) {
$remaining = $this->pretty_duration(PASS_TIMEOUT - ($time_now - $last_used));
$this->error(sprintf(self::ERR_IN_USE, $remaining));
}
switch ($pass['status']){
case 0:
break;
case 1:
$this->clear_cookies();
$this->error(sprintf(self::ERR_EXPIRED, $pass['pending_id']));
break;
case 2:
$this->clear_cookies();
$this->error(self::ERR_REFUNDED);
break;
case 3:
$this->clear_cookies();
$this->error(self::ERR_DISPUTED);
break;
case 4:
$this->clear_cookies();
$this->error(self::ERR_REVOKED_SPAM);
break;
case 5:
$this->clear_cookies();
$this->error(self::ERR_REVOKED_ILLEGAL);
break;
case 6:
$this->convert_new_pass_status($pass['user_hash'], $pin);
break;
case 7:
$this->convert_delayed_pass_status($pass['user_hash'], $pin);
break;
}
// Update country
$geo_data = GeoIP2::get_country($ip);
if ($geo_data && isset($geo_data['country_code'])) {
$country_code = mysql_real_escape_string($geo_data['country_code']);
}
else {
$country_code = 'XX';
}
$update_country = ", last_country = '$country_code'";
$query = "UPDATE $table SET last_ip = '%s', last_used = NOW() $update_country WHERE user_hash = '%s' AND last_ip != '%s' AND status = 0 LIMIT 1";
mysql_global_call($query, $ip, $id, $ip);
// Update session id
if (!$pass['session_id']) {
$pass_session = $this->get_random_base64bytes(32);
if (!$pass_session) {
$this->error(sprintf(self::ERR_GENERIC, 'grb'));
}
$query = "UPDATE $table SET session_id = '$pass_session' WHERE user_hash = '%s' AND status = 0 LIMIT 1";
mysql_global_call($query, $id);
}
else {
$pass_session = $pass['session_id'];
}
$admin_salt = $this->get_salt();
$hashed_pass_session = substr(hash('sha256', $pass_session . $admin_salt), 0, 32);
if (!$hashed_pass_session) {
$this->error(sprintf(self::ERR_GENERIC, 'hps'));
}
if (isset($_POST['long_login'])) {
$cookie_time = $time_now + 31556900;
}
else {
$cookie_time = $time_now + 86400;
}
$this->set_cookie('pass_id', "$id.$hashed_pass_session", $cookie_time, true, true);
$this->set_cookie('pass_enabled', '1', $cookie_time);
$this->renderResponse(self::AUTH_SUCCESS);
}
/**
* Index
*/
public function index() {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['logout'])) {
$this->validate_referer();
$this->clear_cookies();
$this->renderResponse(self::AUTH_OUT);
}
else {
return $this->authenticate();
}
}
if (isset($_COOKIE['pass_enabled'])) {
$this->renderResponse(self::AUTH_YES);
}
else {
$this->renderResponse(self::AUTH_NO);
}
}
/**
* Main
*/
public function run() {
$method = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;
if (isset($method['action'])) {
$action = $method['action'];
}
else {
$action = 'index';
}
if (in_array($action, $this->actions)) {
if (isset($method['xhr'])) {
/*
if (isset($_SERVER['HTTP_ORIGIN']) && preg_match('/^https:\/\/sys\.(4chan|4channel)\.org$/', $_SERVER['HTTP_ORIGIN'])) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: OPTIONS, POST');
header('Access-Control-Allow-Credentials: true');
}
*/
$this->is_xhr = true;
}
$this->$action();
}
else {
$this->error('Bad request');
}
}
}
$ctrl = new App();
$ctrl->run();

451
auth.php Normal file
View file

@ -0,0 +1,451 @@
<?php
define('IS_4CHANNEL', preg_match('/(^|\.)4channel.org$/', $_SERVER['HTTP_HOST']));
if (IS_4CHANNEL) {
define('THIS_DOMAIN', '4channel.org');
define('OTHER_DOMAIN', '4chan.org');
}
else {
define('THIS_DOMAIN', '4chan.org');
define('OTHER_DOMAIN', '4channel.org');
}
define('PASS_TIMEOUT', 900); // 15 minutes
define('LOGIN_FAIL_HOURLY', 5);
require_once 'lib/db.php';
require_once 'lib/geoip2.php';
class App {
protected
// Routes
$actions = array(
'index'
),
$is_xhr = false
;
const VIEW_TPL = 'views/pass_auth.tpl.php';
const PASS_TABLE = 'pass_users';
const
AUTH_NO = 0,
AUTH_SUCCESS = 1,
AUTH_YES = 2,
AUTH_ERROR = -1,
AUTH_OUT = 4
;
const
ERR_BAD_REQUEST = 'Bad Request.',
ERR_GENERIC = 'Internal Server Error (%s)',
ERR_FLOOD = 'You have to wait a while before attempting this again.',
ERR_EMPTY_FIELD = 'You have left one or more fields blank.',
ERR_TOKEN_LEN = 'Your Token must be exactly 10 characters.',
ERR_DB = 'We are currently having database issues. Please try again later.',
ERR_BAD_AUTH = 'Incorrect Token or PIN.',
ERR_IN_USE = 'This Pass is already in use by another IP. Please wait %s and re-authorize by visiting this page again to change IPs.',
ERR_EXPIRED = 'This Pass has expired. Please visit <a href="https://www.4chan.org/pass.php?renew=%s">this page</a> to renew it.', // status 1
ERR_REFUNDED = 'This Pass has been refunded and disabled. You cannot use it anymore.', // status 2
ERR_DISPUTED = 'This Pass has a disputed payment. You cannot use it until the dispute is resolved.', // status 3
ERR_REVOKED_SPAM = 'This Pass has been revoked due to spamming, which is a violation of the <a href="https://www.4chan.org/pass#termsofuse">Terms of Use</a>.', // status 4
ERR_REVOKED_ILLEGAL = 'This Pass has been revoked due to illegal content being posted, which is a violaton of the <a href="https://www.4chan.org/pass#termsofuse">Terms of Use</a>.' // status 5
;
private function error($msg) {
$this->renderResponse(self::AUTH_ERROR, $msg);
}
private function renderResponse($status, $msg = null) {
if ($this->is_xhr) {
header('Content-type: application/json');
echo json_encode(array('status' => $status, 'message' => $msg));
}
else {
$this->auth_status = $status;
$this->message = $msg;
require_once(self::VIEW_TPL);
}
die();
}
private function pretty_duration($sec) {
$duration = '';
$hours = (int)($sec / 3600);
$minutes = (int)($sec / 60);
if ($hours) {
$duration .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ' hour';
if ($hours != 1) {
$duration .= 's';
}
$duration .= ' ';
}
if ($minutes) {
$minutes = (int)(($sec / 60) % 60);
$duration .= str_pad($minutes, 2, '0', STR_PAD_LEFT). ' minute';
if ($minutes != 1) {
$duration .= 's';
}
}
$seconds = intval($sec % 60);
return $duration;
}
private function get_csrf_token() {
return bin2hex(openssl_random_pseudo_bytes(16));
}
private function validate_referer() {
if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] === '') {
return;
}
if (!preg_match('/^https:\/\/sys\.(4chan|4channel)\.org(\/|$)/', $_SERVER['HTTP_REFERER'])) {
$this->error(self::ERR_BAD_REQUEST);
}
}
private function validate_csrf() {
if (!isset($_COOKIE['csrf']) || !isset($_POST['csrf'])
|| $_COOKIE['csrf'] === '' || $_POST['csrf'] === '') {
$this->error(self::ERR_BAD_REQUEST);
}
if ($_COOKIE['csrf'] !== $_POST['csrf']) {
$this->error(self::ERR_BAD_REQUEST);
}
}
private function validate_auth_flood($long_ip) {
if (!$long_ip) {
return;
}
$query = "SELECT COUNT(ip) FROM user_actions WHERE ip = $long_ip AND action = 'fail_pass_auth' AND time >= DATE_SUB(NOW(), INTERVAL 1 HOUR)";
$res = mysql_global_call($query);
if (!$res) {
return;
}
$count = (int)mysql_fetch_row($res)[0];
if ($count >= LOGIN_FAIL_HOURLY) {
$this->error(self::ERR_FLOOD);
}
}
private function register_auth_failure($long_ip) {
if (!$long_ip) {
return;
}
$query = "INSERT INTO user_actions (ip, board, action, time) VALUES(%d, '', 'fail_pass_auth', NOW())";
$res = mysql_global_call($query, $long_ip);
}
private function convert_new_pass_status($user_hash, $hashed_pin) {
$table = self::PASS_TABLE;
$query = "UPDATE $table SET pin = '%s', status = 0 WHERE user_hash = '%s' AND status = 6 LIMIT 1";
mysql_global_call($query, $hashed_pin, $user_hash);
$this->set_cookie('pass_email', '', -1);
}
private function convert_delayed_pass_status($user_hash, $hashed_pin) {
$table = self::PASS_TABLE;
$query = "UPDATE $table SET pin = '%s', status = 0, expiration_date = NOW() + INTERVAL 1 YEAR WHERE user_hash = '%s' AND status = 7 LIMIT 1";
mysql_global_call($query, $hashed_pin, $user_hash);
}
private function set_cookie($name, $value, $ttl, $secure = false, $http_only = false) {
$name = rawurlencode($name);
$value = rawurlencode($value);
$domain = '.' . THIS_DOMAIN;
$flags = array();
if ($secure) {
$flags[] = 'Secure';
}
if ($http_only) {
$flags[] = 'HttpOnly';
}
if (!empty($flags)) {
$flags = '; ' . implode('; ', $flags);
}
else {
$flags = '';
}
if ($ttl !== 0) {
$max_age = " Max-Age=$ttl;";
}
else {
$max_age = '';
}
header("Set-Cookie: $name=$value; Path=/;$max_age Domain=$domain; SameSite=None$flags", false);
}
private function clear_cookies() {
$cookie_time = -3600;
$this->set_cookie('pass_id', '', $cookie_time, true, true);
$this->set_cookie('pass_enabled', '', $cookie_time, true);
}
private function get_random_base64bytes($length = 64) {
$data = openssl_random_pseudo_bytes($length);
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
private function get_salt() {
$salt = file_get_contents('/www/keys/2014_admin.salt');
if (!$salt) {
$this->error(sprintf(self::ERR_GENERIC, 'gs'));
}
return $salt;
}
/**
* Login
*/
private function authenticate() {
$this->validate_referer();
$table = self::PASS_TABLE;
$time_now = time();
// Token
if (!isset($_POST['id']) || $_POST['id'] === '') {
$this->error(self::ERR_EMPTY_FIELD);
}
if (strlen($_POST['id']) != 10) {
$this->error(self::ERR_TOKEN_LEN);
}
$id = $_POST['id'];
// Pin
if (!isset($_POST['pin']) || $_POST['pin'] === '') {
$this->error(self::ERR_EMPTY_FIELD);
}
$pin = $_POST['pin'];
// ---
$ip = $_SERVER['REMOTE_ADDR'];
$long_ip = ip2long($ip);
$this->validate_auth_flood($long_ip);
// ---
$plain_pin = $pin;
$pin = crypt($pin, substr($id, 4, 9));
$query = "SELECT * FROM $table WHERE user_hash = '%s' AND (pin = '%s' OR pin = '%s') LIMIT 1";
$res = mysql_global_call($query, $id, $pin, $plain_pin);
if (!$res) {
$this->error(self::ERR_DB);
}
if (mysql_num_rows($res) !== 1) {
$this->register_auth_failure($long_ip);
$this->error(self::ERR_BAD_AUTH);
}
$pass = mysql_fetch_assoc($res);
if (!$pass) {
$this->error(sprintf(self::ERR_GENERIC, 'mfa1'));
}
$last_used = strtotime($pass['last_used']);
$last_ip_mask = ip2long($pass['last_ip']) & (~65535);
$ip_mask = $long_ip & (~65535);
if ($last_ip_mask !== 0 && ($time_now - $last_used) < PASS_TIMEOUT && $last_ip_mask != $ip_mask) {
$remaining = $this->pretty_duration(PASS_TIMEOUT - ($time_now - $last_used));
$this->error(sprintf(self::ERR_IN_USE, $remaining));
}
switch ($pass['status']){
case 0:
break;
case 1:
$this->clear_cookies();
$this->error(sprintf(self::ERR_EXPIRED, $pass['pending_id']));
break;
case 2:
$this->clear_cookies();
$this->error(self::ERR_REFUNDED);
break;
case 3:
$this->clear_cookies();
$this->error(self::ERR_DISPUTED);
break;
case 4:
$this->clear_cookies();
$this->error(self::ERR_REVOKED_SPAM);
break;
case 5:
$this->clear_cookies();
$this->error(self::ERR_REVOKED_ILLEGAL);
break;
case 6:
$this->convert_new_pass_status($pass['user_hash'], $pin);
break;
case 7:
$this->convert_delayed_pass_status($pass['user_hash'], $pin);
break;
}
// Update country
$geo_data = GeoIP2::get_country($ip);
if ($geo_data && isset($geo_data['country_code'])) {
$country_code = mysql_real_escape_string($geo_data['country_code']);
}
else {
$country_code = 'XX';
}
$update_country = ", last_country = '$country_code'";
$query = "UPDATE $table SET last_ip = '%s', last_used = NOW() $update_country WHERE user_hash = '%s' AND last_ip != '%s' AND status = 0 LIMIT 1";
mysql_global_call($query, $ip, $id, $ip);
// Update session id
if (!$pass['session_id']) {
$pass_session = $this->get_random_base64bytes(32);
if (!$pass_session) {
$this->error(sprintf(self::ERR_GENERIC, 'grb'));
}
$query = "UPDATE $table SET session_id = '$pass_session' WHERE user_hash = '%s' AND status = 0 LIMIT 1";
mysql_global_call($query, $id);
}
else {
$pass_session = $pass['session_id'];
}
$admin_salt = $this->get_salt();
$hashed_pass_session = substr(hash('sha256', $pass_session . $admin_salt), 0, 32);
if (!$hashed_pass_session) {
$this->error(sprintf(self::ERR_GENERIC, 'hps'));
}
if (isset($_POST['long_login'])) {
$cookie_time = 31556900;
}
else {
$cookie_time = 86400;
}
$this->set_cookie('pass_id', "$id.$hashed_pass_session", $cookie_time, true, true);
$this->set_cookie('pass_enabled', '1', $cookie_time, true);
$this->renderResponse(self::AUTH_SUCCESS);
}
/**
* Index
*/
public function index() {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['logout'])) {
$this->validate_referer();
$this->clear_cookies();
$this->renderResponse(self::AUTH_OUT);
}
else {
return $this->authenticate();
}
}
if (isset($_COOKIE['pass_enabled'])) {
$this->renderResponse(self::AUTH_YES);
}
else {
$this->renderResponse(self::AUTH_NO);
}
}
/**
* Main
*/
public function run() {
$method = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;
if (isset($method['action'])) {
$action = $method['action'];
}
else {
$action = 'index';
}
if (in_array($action, $this->actions)) {
if (isset($method['xhr'])) {
/*
if (isset($_SERVER['HTTP_ORIGIN']) && preg_match('/^https:\/\/sys\.(4chan|4channel)\.org$/', $_SERVER['HTTP_ORIGIN'])) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: OPTIONS, POST');
header('Access-Control-Allow-Credentials: true');
}
*/
$this->is_xhr = true;
}
$this->$action();
}
else {
$this->error('Bad request');
}
}
}
$ctrl = new App();
$ctrl->run();

0
block_resync_removed Normal file
View file

1
boardlist.txt Normal file
View file

@ -0,0 +1 @@
a aco c d e f g gif h his hr k m n o p r s t u v w wg i ic cm y an cgl ck co fa fit jp mlp mu po sp tg toy trv tv x b soc r9k test adv lit int sci 3 vp diy pol hc vg hm j wsg out lgbt vr gd s4s biz qa trash news wsr qst bant vip vrpg vmg vst vt vm pw xs

1127
captcha-test.php Normal file

File diff suppressed because it is too large Load diff

1075
captcha.php Normal file

File diff suppressed because it is too large Load diff

553
catalog-test.php Normal file
View file

@ -0,0 +1,553 @@
<?php
// haha i named this file catalog.php now everyone but me will find it
// awkward to type
// nvm moot is a nerd
function generate_catalog()
{
global $log;
if( !STATIC_REBUILD ) log_cache();
$catalogjson = array();
$i = 0;
foreach( $log['THREADS'] as $thread ) {
catalog_thread($log[$thread], $catalogjson, $i);
++$i;
}
$catalogjson = array(
'threads' => $catalogjson,
'count' => count( $log['THREADS'] ),
'slug' => BOARD_DIR,
'anon' => S_ANONAME,
'mtime' => time(),
'pagesize' => DEF_PAGES
);
if (!REPLIES_SHOWN && IS_REBUILDD) {
$catalogjson['no_lr'] = true;
}
if (SHOW_COUNTRY_FLAGS) {
$catalogjson['flags'] = true;
}
if( SPOILERS ) $catalogjson['custom_spoiler'] = (int)SPOILER_NUM;
$catalogjson = json_encode( $catalogjson );
$catalog = catalog( $catalogjson );
print_page( INDEX_DIR . 'catalog.html', $catalog );
return true;
}
function catalog_thread($res, &$json, $pos)
{
global $log;
$reps = $res['replycount'];
$sub = $res['sub'];
$imgs = $res['imgreplycount'];
$last_reply_id = null;
$capcodelist = array();
if (TEXT_ONLY) {
$time_prop = 'now';
}
else {
$time_prop = 'time';
}
foreach( $res['children'] as $reply => $unused ) {
$last_reply_id = $reply;
if( META_BOARD && $log[$reply]['capcode'] != 'none' ) {
$tCapcode = $log[$reply]['capcode'];
if( $tCapcode == 'admin_highlight' ) $tCapcode = 'admin';
if( $tCapcode != 'none' ) {
$capcodelist[$tCapcode] = 1;
}
}
}
if ($last_reply_id === null) {
$last_reply = array( 'id' => $res['no'] );
}
else {
$lr_data = $log[$last_reply_id];
$last_reply = array(
'id' => $last_reply_id,
'date' => $lr_data['time']
);
if( $lr_data['capcode'] != 'none' ) $last_reply['capcode'] = $lr_data['capcode'];
$force_anon = ( ( FORCED_ANON || META_BOARD ) && $lr_data['capcode'] != 'admin' && $lr_data['capcode'] != 'admin_highlight' );
if( !$force_anon ) {
if( strpos( $lr_data['name'], '</span> <span class="postertrip">' ) !== false ) {
list( $last_reply['author'], $last_reply['trip'] ) = explode( '</span> <span class="postertrip">', $lr_data['name'] );
} else {
$last_reply['author'] = $lr_data['name'];
}
} else {
$last_reply['author'] = S_ANONAME;
}
}
$json[$res['no']] = array(
'date' => $res[$time_prop],
'file' => mb_convert_encoding($res['filename'], 'UTF-8', 'UTF-8') . $res['ext'],
'r' => $reps,
'i' => $imgs,
'lr' => $last_reply,
'b' => $pos
);
/*
if( META_BOARD && $capcodelist ) {
$json[$res['no']]['capcodereps'] = implode(',', array_keys($capcodelist));
}
*/
if ($res['capcode'] == 'none') {
if (SHOW_COUNTRY_FLAGS && (!ENABLE_BOARD_FLAGS || $res['board_flag'] == '')) {
$json[$res['no']]['country'] = $res['country'];
}
}
$com = $res['com'];
if( strpos( $com, 'class="abbr"' ) !== false ) {
$com = preg_replace( '#(<br>)+<span class="abbr">(.+)$#s', '', $com );
}
if (!TEXT_ONLY) {
$com = preg_replace( '#(<br>)+#', ' ', $com );
}
else {
$com = preg_replace( '#(<br>)+#', "\n", $com );
}
if (BOARD_DIR === 'b') { // fixme, hardcoded for now
$com = truncate_comment($com, 300, true);
}
else {
if (SJIS_TAGS) {
$com = preg_replace('/<span class="sjis".+?<\/span>/', '[SJIS]', $com);
}
$com = strip_tags($com, '<s>');
}
$has_spoilers = (bool)SPOILERS;
if (!$res['permaage'] && !$res['sticky']) {
if( $reps >= MAX_RES ) $json[$res['no']]['bumplimit'] = 1;
if( $imgs >= MAX_IMGRES ) $json[$res['no']]['imagelimit'] = 1;
}
if( $res['sticky'] ) $json[$res['no']]['sticky'] = 1;
if( $res['closed'] ) $json[$res['no']]['closed'] = 1;
if( $res['capcode'] != 'none' ) $json[$res['no']]['capcode'] = $res['capcode'];
$force_anon = ( ( FORCED_ANON || META_BOARD ) && $res['capcode'] != 'admin' && $res['capcode'] != 'admin_highlight' );
if( !$force_anon ) {
if( strpos( $res['name'], '</span> <span class="postertrip">' ) !== false ) {
list( $json[$res['no']]['author'], $json[$res['no']]['trip'] ) = explode( '</span> <span class="postertrip">', $res['name'] );
} else {
$json[$res['no']]['author'] = $res['name'];
}
} else {
$json[$res['no']]['author'] = S_ANONAME;
}
if( $res['fsize'] != 0 && $res['filedeleted'] != 1 ) {
$json[$res['no']]['imgurl'] = $res['tim'];
$json[$res['no']]['tn_w'] = $res['tn_w'];
$json[$res['no']]['tn_h'] = $res['tn_h'];
}
if( $res['filedeleted'] == 1 ) $json[$res['no']]['imgdel'] = true;
if( strpos( $res['sub'], 'SPOILER<>' ) !== false ) {
$json[$res['no']]['imgspoiler'] = true;
$sub = substr( $res['sub'], 9 );
}
$json[$res['no']]['sub'] = $sub;
$json[$res['no']]['teaser'] = $com;
}
function catalog($catjson) {
$nav = file_get_contents_cached( NAV_TXT );
$foot = file_get_contents_cached( NAV2_TXT );
$nav = preg_replace( '/href="(\/\/boards.(?:4chan|4channel).org)?\/([a-z0-9]+)\/"/', 'href="$1/$2/catalog"', $nav );
$nav = preg_replace( '/href="(\/\/boards.(?:4chan|4channel).org)?\/f\/catalog"/', 'href="$1/f/"', $nav );
$title = strip_tags( TITLE );
$js = '';
// danbo ads start
if (defined('ADS_DANBO') && ADS_DANBO) {
$js .= '<script>';
if (DEFAULT_BURICHAN) {
$js .= "var danbo_rating = '__SFW__';";
}
else {
$js .= "var danbo_rating = '__NSFW__';";
}
$_danbo_fallbacks = [];
if (defined('AD_BIDGEAR_TOP') && AD_BIDGEAR_TOP) {
$_danbo_fallbacks['t_bg'] = AD_BIDGEAR_TOP;
}
else {
if (defined('AD_ABC_TOP_DESKTOP') && AD_ABC_TOP_DESKTOP) {
$_danbo_fallbacks['t_abc_d'] = AD_ABC_TOP_DESKTOP;
}
if (defined('AD_ABC_TOP_MOBILE') && AD_ABC_TOP_MOBILE) {
$_danbo_fallbacks['t_abc_m'] = AD_ABC_TOP_MOBILE;
}
}
if (defined('AD_BIDGEAR_BOTTOM') && AD_BIDGEAR_BOTTOM) {
$_danbo_fallbacks['b_bg'] = AD_BIDGEAR_BOTTOM;
}
else if (defined('AD_ABC_BOTTOM_MOBILE') && AD_ABC_BOTTOM_MOBILE) {
$_danbo_fallbacks['b_abc_m'] = AD_ABC_BOTTOM_MOBILE;
}
if (!$_danbo_fallbacks) {
$_danbo_fallbacks = 'null';
}
else {
$_danbo_fallbacks = json_encode($_danbo_fallbacks);
}
$js .= 'var danbo_fb = ' . $_danbo_fallbacks . ';';
$js .= '</script>';
$js .= '<script src="https://static.danbo.org/publisher/q2g345hq2g534-4chan/js/preload.4chan.js" defer></script>';
}
// danbo ads end
// PubFuture
if (DEFAULT_BURICHAN) {
$js .= '<script async data-cfasync="false" src="https://cdn.pubfuture-ad.com/v2/unit/pt.js"></script>';
}
if (TEST_BOARD) {
// Main catalog JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/catalog-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>';
// Painter JS + CSS
if (ENABLE_PAINTERJS) {
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/tegaki-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>'
. '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/tegaki-8psvqAqszI.' . CSS_VERSION_TEST . '.css">';
}
// Core JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/core-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>';
}
else {
// Main catalog JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/catalog.min.' . JS_VERSION_CATALOG . '.js"></script>';
// Painter JS + CSS
if (ENABLE_PAINTERJS) {
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/tegaki.min.' . JS_VERSION_PAINTER . '.js"></script>'
. '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/tegaki.' . CSS_VERSION_PAINTER . '.css">';
}
// Core JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/core.min.' . JS_VERSION_CORE . '.js"></script>';
}
$css = STATIC_SERVER . 'css';
$cssv = TEST_BOARD ? CSS_VERSION_TEST : CSS_VERSION_CATALOG;
$style_group = style_group();
$flags = SHOW_COUNTRY_FLAGS ? '<link rel="stylesheet" type="text/css" href="' . $css . '/flags.' . CSS_VERSION_FLAGS . '.css">' : '';
$titlepart = $subtitle = '';
if( TITLE_IMAGE_TYPE == 1 ) {
$titleimg = rand_from_flatfile( YOTSUBA_DIR, 'title_banners.txt' );
$titlepart .= '<div id="bannerCnt" class="title desktop" data-src="' . $titleimg . '"></div>';
} elseif( TITLE_IMAGE_TYPE == 2 ) {
$titlepart .= '<img class="title" src="' . TITLEIMG . '" onclick="this.src = this.src;">';
}
if( defined( 'SUBTITLE' ) ) {
$subtitle = '<div class="boardSubtitle">' . SUBTITLE . '</div>';
}
/**
* ADS
*/
$topad = '';
$bottomad = '';
if (defined('AD_CUSTOM_BOTTOM') && AD_CUSTOM_BOTTOM) {
$bottomad .= '<div>' . AD_CUSTOM_BOTTOM . '<hr></div>';
}/*
else if (defined('AD_ABC_BOTTOM_MOBILE') && AD_ABC_BOTTOM_MOBILE) {
$bottomad .= '<div class="adg-rects mobile"><div class="adg-m adp-250" data-abc="' . AD_ABC_BOTTOM_MOBILE . '"></div><hr></div>';
}
else if (defined('AD_BIDGEAR_BOTTOM') && AD_BIDGEAR_BOTTOM) {
$bottomad .= '<div class="adc-resp-bg" data-ad-bg="' . AD_BIDGEAR_BOTTOM . '"></div>';
}*/
else if (defined('ADS_DANBO') && ADS_DANBO) {
$bottomad .= '<div id="danbo-s-b" class="danbo-slot"></div><div class="adl">[<a target="_blank" href="https://www.4channel.org/advertise">Advertise on 4chan</a>]</div><hr>';
}
$favicon = FAVICON;
$meta_robots = META_ROBOTS;
$meta_description = META_DESCRIPTION;
$meta_keywords = META_KEYWORDS;
$body_class = explode('_', $style_group);
$body_class = $body_class[0];
$body_class .= ' is_catalog board_' . BOARD_DIR;
$canonical = '<link rel="canonical" href="https://boards.4chan.org/'.BOARD_DIR.'/catalog">';
$embedearly = EMBEDEARLY;
$embedlate = EMBEDLATE;
$adembedearly = AD_EMBEDEARLY;
$start_thread = S_FORM_THREAD;
$jsVersion = TEST_BOARD ? JS_VERSION_TEST : JS_VERSION;
$comlen = MAX_COM_CHARS;
$maxfs = MAX_KB * 1024;
$jsCooldowns = json_encode(array(
'thread' => RENZOKU3,
'reply' => RENZOKU,
'image' => RENZOKU2
));
if (defined('CSS_EVENT_NAME') && CSS_EVENT_NAME) {
$event_css_html = '<option value="_special">Special</option>';
// Christmas 2021
if (CSS_EVENT_NAME === 'tomorrow') {
$js .= <<<JJS
<script src='//s.4cdn.org/js/snow.js'></script>
<script>
function fc_tomorrow_init() {
if (window.matchMedia && window.matchMedia('(min-width: 481px)').matches) {
fc_spawn_snow(Math.floor(Math.random() * 50) + 50);
}
}
function fc_tomorrow_cleanup() {
fc_remove_snow();
}
</script>
<style>
.boardBanner, #delform, .navLinksBot.desktop {
border-image-slice: 50 0 50 0;
border-image-width: 40px 0px 0px 0px;
border-image-outset: 0px 0px 0px 0px;
border-image-repeat: repeat repeat;
border-image-source: url('https://s.4cdn.org/image/temp/garland.png');
border-style: solid;
padding-top: 50px;
}
</style>
JJS;
}
$js .= '<script>var css_event = "' . CSS_EVENT_NAME . '";';
if (defined('CSS_EVENT_VERSION')) {
$_css_event_version = (int)CSS_EVENT_VERSION;
}
else {
$_css_event_version = 1;
}
$js .= 'var css_event_v = ' . $_css_event_version . ';';
$js .= '</script>';
}
else {
$event_css_html = '';
}
if (PARTY) {
$partyHats = 'var partyHats = "' . PARTY_IMAGE . '";';
}
else {
$partyHats = '';
}
if (ENABLE_ARCHIVE) {
$archive_link = ' <span class="btn-wrap"><a href="./archive" class="button">' . S_ARCHIVE . '</a></span>';
}
else {
$archive_link = '';
}
if (TEXT_ONLY) {
$text_only = 'var text_only = true;';
$body_text_css = ' text_only';
$ctrl_css = ' hidden';
}
else {
$text_only = $body_text_css = '';
$ctrl_css = '';
}
$adg_js = 'var _adg = 1;';
$postform = '';
form( $postform, 0, '', false, true );
$cat = <<<HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>$title - Catalog - 4chan</title>
<meta name="robots" content="$meta_robots">
<meta name="description" content="$meta_description">
<meta name="keywords" content="$meta_keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
$canonical
<link id="mobile-css" rel="stylesheet" href="$css/catalog_mobile.$cssv.css" />
$js
$flags
<script type="text/javascript">$partyHats
$text_only
$adg_js
var jsVersion = $jsVersion;
var comlen = $comlen;
var maxFilesize = $maxfs;
var cooldowns = $jsCooldowns;
var catalog = $catjson;
var style_group = "$style_group";
var check_for_block = true;
var fourcat = new FC();
fourcat.applyCSS(null, "$style_group", $cssv);
</script>
<link rel="shortcut icon" href="$favicon" type="image/x-icon">
$embedearly
$adembedearly
</head>
<body class="$body_class$body_text_css">
<div id="topnav" class="boardnav">$nav</div>
<div class="boardBanner">
$titlepart
<div class="boardTitle">$title</div>
$subtitle
</div>
<hr class="abovePostForm">
$topad
<div id="togglePostForm" class="mobilebtn mobile"><span class="btn-wrap"><span id="togglePostFormLinkMobile" class="button">$start_thread</span></span></div>
$postform
<hr>
<div id="content">
<div id="ctrl">
<div id="info">
<span class="navLinks mobilebtn"><span class="btn-wrap"><a href="./" class="button">Return</a></span>$archive_link <span id="tobottom" class="btn-wrap"><span class="button">Bottom</span></span> <span class="btn-wrap"><a id="refresh-btn" href="./catalog" class="button">Refresh</a></span></span><span id="filtered-label"> &mdash; Filtered threads: <span id="filtered-count"></span></span><span id="hidden-label"> &mdash; Hidden threads: <span id="hidden-count"></span> <span class="btn-wrap"><a id="filters-clear-hidden" href="">Show</a></span></span><span id="search-label"> &mdash; Search results for: <span id="search-term"></span></span>
</div>
<hr class="mobile">
<div id="settings" class="mobilebtn">
<span class="ctrl-wrap">Sort By:
<select id="order-ctrl" size="1">
<option value="alt">Bump order</option>
<option value="absdate">Last reply</option>
<option value="date">Creation date</option>
<option value="r">Reply count</option>
</select></span>
<span class="ctrl-wrap$ctrl_css">Image Size:
<select id="size-ctrl" size="1">
<option value="small">Small</option>
<option value="large">Large</option>
</select></span>
<span class="ctrl-wrap$ctrl_css">Show OP Comment:
<select id="teaser-ctrl" size="1">
<option value="off">Off</option>
<option value="on">On</option>
</select></span>
<span class="btn-wrap"><span id="filters-ctrl" class="button">Filters</span></span>
<span class="btn-wrap"><span id="qf-ctrl" class="button">Search</span></span>
<span style="display:none" id="qf-cnt">
<input type="text" id="qf-box" name="qf-box"><span id="qf-clear" class="button">&#x2716;</span>
</span>
</div>
<div class="clear"></div>
</div><hr>
<div id="threads"></div>
<hr>
<span class="navLinks navLinksBottom mobilebtn"><span class="btn-wrap"><a href="./" class="button">Return</a></span>$archive_link <span id="totop" class="btn-wrap"><span class="button">Top</span></span> <span class="btn-wrap"><a href="./catalog" class="button">Refresh</a></span></span><span id="filtered-label-bottom"> &mdash; Filtered threads: <span id="filtered-count-bottom"></span></span><span id="hidden-label-bottom"> &mdash; Hidden threads: <span id="hidden-count-bottom"></span> <span class="btn-wrap"><a id="filters-clear-hidden-bottom" href="">Show</a></span></span><span id="search-label-bottom"> &mdash; Search results for: <span id="search-term-bottom"></span></span>
<hr>
$bottomad
<div id="styleSwitcher">Style: <select id="styleSelector" size="1">
<option value="Yotsuba New">Yotsuba</option>
<option value="Yotsuba B New">Yotsuba B</option>
<option value="Futaba New">Futaba</option>
<option value="Burichan New">Burichan</option>
<option value="Tomorrow">Tomorrow</option>
<option value="Photon">Photon</option>$event_css_html
</select></div>
</div>
$foot
<div id="backdrop" class="hidden"></div>
<noscript>
<style scoped type="text/css">
#nojs {
background-color: #000;
text-align: center;
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
#nojs > span {
color: #000;
background-color: #8C92AC;
padding: 5px;
position: relative;
top: 35%;
font-size: 22px;
}
</style>
<div id="nojs">
<span>Your web browser must have JavaScript enabled in order for this site to display correctly.</span>
</div>
</noscript>
<menu type="context" id="ctxmenu-main"></menu>
<menu type="context" id="ctxmenu-thread"></menu>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
initAnalytics();
fourcat.init();
fourcat.loadCatalog(catalog);
$.on($.id('tobottom'), 'click', function() { window.scrollTo(0, document.documentElement.scrollHeight); });
$.on($.id('totop'), 'click', function() { window.scrollTo(0, 0); });
}, false);
</script>
$embedlate</body>
</html>
HTML;
return $cat;
}

553
catalog.php Normal file
View file

@ -0,0 +1,553 @@
<?php
// haha i named this file catalog.php now everyone but me will find it
// awkward to type
// nvm moot is a nerd
function generate_catalog()
{
global $log;
if( !STATIC_REBUILD ) log_cache();
$catalogjson = array();
$i = 0;
foreach( $log['THREADS'] as $thread ) {
catalog_thread($log[$thread], $catalogjson, $i);
++$i;
}
$catalogjson = array(
'threads' => $catalogjson,
'count' => count( $log['THREADS'] ),
'slug' => BOARD_DIR,
'anon' => S_ANONAME,
'mtime' => time(),
'pagesize' => DEF_PAGES
);
if (!REPLIES_SHOWN && IS_REBUILDD) {
$catalogjson['no_lr'] = true;
}
if (SHOW_COUNTRY_FLAGS) {
$catalogjson['flags'] = true;
}
if( SPOILERS ) $catalogjson['custom_spoiler'] = (int)SPOILER_NUM;
$catalogjson = json_encode( $catalogjson );
$catalog = catalog( $catalogjson );
print_page( INDEX_DIR . 'catalog.html', $catalog );
return true;
}
function catalog_thread($res, &$json, $pos)
{
global $log;
$reps = $res['replycount'];
$sub = $res['sub'];
$imgs = $res['imgreplycount'];
$last_reply_id = null;
$capcodelist = array();
if (TEXT_ONLY) {
$time_prop = 'now';
}
else {
$time_prop = 'time';
}
foreach( $res['children'] as $reply => $unused ) {
$last_reply_id = $reply;
if( META_BOARD && $log[$reply]['capcode'] != 'none' ) {
$tCapcode = $log[$reply]['capcode'];
if( $tCapcode == 'admin_highlight' ) $tCapcode = 'admin';
if( $tCapcode != 'none' ) {
$capcodelist[$tCapcode] = 1;
}
}
}
if ($last_reply_id === null) {
$last_reply = array( 'id' => $res['no'] );
}
else {
$lr_data = $log[$last_reply_id];
$last_reply = array(
'id' => $last_reply_id,
'date' => $lr_data['time']
);
if( $lr_data['capcode'] != 'none' ) $last_reply['capcode'] = $lr_data['capcode'];
$force_anon = ( ( FORCED_ANON || META_BOARD ) && $lr_data['capcode'] != 'admin' && $lr_data['capcode'] != 'admin_highlight' );
if( !$force_anon ) {
if( strpos( $lr_data['name'], '</span> <span class="postertrip">' ) !== false ) {
list( $last_reply['author'], $last_reply['trip'] ) = explode( '</span> <span class="postertrip">', $lr_data['name'] );
} else {
$last_reply['author'] = $lr_data['name'];
}
} else {
$last_reply['author'] = S_ANONAME;
}
}
$json[$res['no']] = array(
'date' => $res[$time_prop],
'file' => mb_convert_encoding($res['filename'], 'UTF-8', 'UTF-8') . $res['ext'],
'r' => $reps,
'i' => $imgs,
'lr' => $last_reply,
'b' => $pos
);
/*
if( META_BOARD && $capcodelist ) {
$json[$res['no']]['capcodereps'] = implode(',', array_keys($capcodelist));
}
*/
if ($res['capcode'] == 'none') {
if (SHOW_COUNTRY_FLAGS && (!ENABLE_BOARD_FLAGS || $res['board_flag'] == '')) {
$json[$res['no']]['country'] = $res['country'];
}
}
$com = $res['com'];
if( strpos( $com, 'class="abbr"' ) !== false ) {
$com = preg_replace( '#(<br>)+<span class="abbr">(.+)$#s', '', $com );
}
if (!TEXT_ONLY) {
$com = preg_replace( '#(<br>)+#', ' ', $com );
}
else {
$com = preg_replace( '#(<br>)+#', "\n", $com );
}
if (BOARD_DIR === 'b') { // fixme, hardcoded for now
$com = truncate_comment($com, 300, true);
}
else {
if (SJIS_TAGS) {
$com = preg_replace('/<span class="sjis".+?<\/span>/', '[SJIS]', $com);
}
$com = strip_tags($com, '<s>');
}
$has_spoilers = (bool)SPOILERS;
if (!$res['permaage'] && !$res['sticky']) {
if( $reps >= MAX_RES ) $json[$res['no']]['bumplimit'] = 1;
if( $imgs >= MAX_IMGRES ) $json[$res['no']]['imagelimit'] = 1;
}
if( $res['sticky'] ) $json[$res['no']]['sticky'] = 1;
if( $res['closed'] ) $json[$res['no']]['closed'] = 1;
if( $res['capcode'] != 'none' ) $json[$res['no']]['capcode'] = $res['capcode'];
$force_anon = ( ( FORCED_ANON || META_BOARD ) && $res['capcode'] != 'admin' && $res['capcode'] != 'admin_highlight' );
if( !$force_anon ) {
if( strpos( $res['name'], '</span> <span class="postertrip">' ) !== false ) {
list( $json[$res['no']]['author'], $json[$res['no']]['trip'] ) = explode( '</span> <span class="postertrip">', $res['name'] );
} else {
$json[$res['no']]['author'] = $res['name'];
}
} else {
$json[$res['no']]['author'] = S_ANONAME;
}
if( $res['fsize'] != 0 && $res['filedeleted'] != 1 ) {
$json[$res['no']]['imgurl'] = $res['tim'];
$json[$res['no']]['tn_w'] = $res['tn_w'];
$json[$res['no']]['tn_h'] = $res['tn_h'];
}
if( $res['filedeleted'] == 1 ) $json[$res['no']]['imgdel'] = true;
if( strpos( $res['sub'], 'SPOILER<>' ) !== false ) {
$json[$res['no']]['imgspoiler'] = true;
$sub = substr( $res['sub'], 9 );
}
$json[$res['no']]['sub'] = $sub;
$json[$res['no']]['teaser'] = $com;
}
function catalog($catjson) {
$nav = file_get_contents_cached( NAV_TXT );
$foot = file_get_contents_cached( NAV2_TXT );
$nav = preg_replace( '/href="(\/\/boards.(?:4chan|4channel).org)?\/([a-z0-9]+)\/"/', 'href="$1/$2/catalog"', $nav );
$nav = preg_replace( '/href="(\/\/boards.(?:4chan|4channel).org)?\/f\/catalog"/', 'href="$1/f/"', $nav );
$title = strip_tags( TITLE );
$js = '';
// danbo ads start
if (defined('ADS_DANBO') && ADS_DANBO) {
$js .= '<script>';
if (DEFAULT_BURICHAN) {
$js .= "var danbo_rating = '__SFW__';";
}
else {
$js .= "var danbo_rating = '__NSFW__';";
}
$_danbo_fallbacks = [];
if (defined('AD_BIDGEAR_TOP') && AD_BIDGEAR_TOP) {
$_danbo_fallbacks['t_bg'] = AD_BIDGEAR_TOP;
}
else {
if (defined('AD_ABC_TOP_DESKTOP') && AD_ABC_TOP_DESKTOP) {
$_danbo_fallbacks['t_abc_d'] = AD_ABC_TOP_DESKTOP;
}
if (defined('AD_ABC_TOP_MOBILE') && AD_ABC_TOP_MOBILE) {
$_danbo_fallbacks['t_abc_m'] = AD_ABC_TOP_MOBILE;
}
}
if (defined('AD_BIDGEAR_BOTTOM') && AD_BIDGEAR_BOTTOM) {
$_danbo_fallbacks['b_bg'] = AD_BIDGEAR_BOTTOM;
}
else if (defined('AD_ABC_BOTTOM_MOBILE') && AD_ABC_BOTTOM_MOBILE) {
$_danbo_fallbacks['b_abc_m'] = AD_ABC_BOTTOM_MOBILE;
}
if (!$_danbo_fallbacks) {
$_danbo_fallbacks = 'null';
}
else {
$_danbo_fallbacks = json_encode($_danbo_fallbacks);
}
$js .= 'var danbo_fb = ' . $_danbo_fallbacks . ';';
$js .= '</script>';
$js .= '<script src="https://static.danbo.org/publisher/q2g345hq2g534-4chan/js/preload.4chan.js" defer></script>';
}
// danbo ads end
// PubFuture
if (DEFAULT_BURICHAN) {
$js .= '<script async data-cfasync="false" src="https://cdn.pubfuture-ad.com/v2/unit/pt.js"></script>';
}
if (TEST_BOARD) {
// Main catalog JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/catalog-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>';
// Painter JS + CSS
if (ENABLE_PAINTERJS) {
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/tegaki-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>'
. '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/tegaki-8psvqAqszI.' . CSS_VERSION_TEST . '.css">';
}
// Core JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/test/core-8psvqAqszI.' . JS_VERSION_TEST . '.js"></script>';
}
else {
// Main catalog JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/catalog.min.' . JS_VERSION_CATALOG . '.js"></script>';
// Painter JS + CSS
if (ENABLE_PAINTERJS) {
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/tegaki.min.' . JS_VERSION_PAINTER . '.js"></script>'
. '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/tegaki.' . CSS_VERSION_PAINTER . '.css">';
}
// Core JS
$js .= '<script type="text/javascript" src="' . STATIC_SERVER . 'js/core.min.' . JS_VERSION_CORE . '.js"></script>';
}
$css = STATIC_SERVER . 'css';
$cssv = TEST_BOARD ? CSS_VERSION_TEST : CSS_VERSION_CATALOG;
$style_group = style_group();
$flags = SHOW_COUNTRY_FLAGS ? '<link rel="stylesheet" type="text/css" href="' . $css . '/flags.' . CSS_VERSION_FLAGS . '.css">' : '';
$titlepart = $subtitle = '';
if( TITLE_IMAGE_TYPE == 1 ) {
$titleimg = rand_from_flatfile( YOTSUBA_DIR, 'title_banners.txt' );
$titlepart .= '<div id="bannerCnt" class="title desktop" data-src="' . $titleimg . '"></div>';
} elseif( TITLE_IMAGE_TYPE == 2 ) {
$titlepart .= '<img class="title" src="' . TITLEIMG . '" onclick="this.src = this.src;">';
}
if( defined( 'SUBTITLE' ) ) {
$subtitle = '<div class="boardSubtitle">' . SUBTITLE . '</div>';
}
/**
* ADS
*/
$topad = '';
$bottomad = '';
if (defined('AD_CUSTOM_BOTTOM') && AD_CUSTOM_BOTTOM) {
$bottomad .= '<div>' . AD_CUSTOM_BOTTOM . '<hr></div>';
}/*
else if (defined('AD_ABC_BOTTOM_MOBILE') && AD_ABC_BOTTOM_MOBILE) {
$bottomad .= '<div class="adg-rects mobile"><div class="adg-m adp-250" data-abc="' . AD_ABC_BOTTOM_MOBILE . '"></div><hr></div>';
}
else if (defined('AD_BIDGEAR_BOTTOM') && AD_BIDGEAR_BOTTOM) {
$bottomad .= '<div class="adc-resp-bg" data-ad-bg="' . AD_BIDGEAR_BOTTOM . '"></div>';
}*/
else if (defined('ADS_DANBO') && ADS_DANBO) {
$bottomad .= '<div id="danbo-s-b" class="danbo-slot"></div><div class="adl">[<a target="_blank" href="https://www.4channel.org/advertise">Advertise on 4chan</a>]</div><hr>';
}
$favicon = FAVICON;
$meta_robots = META_ROBOTS;
$meta_description = META_DESCRIPTION;
$meta_keywords = META_KEYWORDS;
$body_class = explode('_', $style_group);
$body_class = $body_class[0];
$body_class .= ' is_catalog board_' . BOARD_DIR;
$canonical = '<link rel="canonical" href="https://boards.4chan.org/'.BOARD_DIR.'/catalog">';
$embedearly = EMBEDEARLY;
$embedlate = EMBEDLATE;
$adembedearly = AD_EMBEDEARLY;
$start_thread = S_FORM_THREAD;
$jsVersion = TEST_BOARD ? JS_VERSION_TEST : JS_VERSION;
$comlen = MAX_COM_CHARS;
$maxfs = MAX_KB * 1024;
$jsCooldowns = json_encode(array(
'thread' => RENZOKU3,
'reply' => RENZOKU,
'image' => RENZOKU2
));
if (defined('CSS_EVENT_NAME') && CSS_EVENT_NAME) {
$event_css_html = '<option value="_special">Special</option>';
// Christmas 2021
if (CSS_EVENT_NAME === 'tomorrow') {
$js .= <<<JJS
<script src='//s.4cdn.org/js/snow.js'></script>
<script>
function fc_tomorrow_init() {
if (window.matchMedia && window.matchMedia('(min-width: 481px)').matches) {
fc_spawn_snow(Math.floor(Math.random() * 50) + 50);
}
}
function fc_tomorrow_cleanup() {
fc_remove_snow();
}
</script>
<style>
.boardBanner, #delform, .navLinksBot.desktop {
border-image-slice: 50 0 50 0;
border-image-width: 40px 0px 0px 0px;
border-image-outset: 0px 0px 0px 0px;
border-image-repeat: repeat repeat;
border-image-source: url('https://s.4cdn.org/image/temp/garland.png');
border-style: solid;
padding-top: 50px;
}
</style>
JJS;
}
$js .= '<script>var css_event = "' . CSS_EVENT_NAME . '";';
if (defined('CSS_EVENT_VERSION')) {
$_css_event_version = (int)CSS_EVENT_VERSION;
}
else {
$_css_event_version = 1;
}
$js .= 'var css_event_v = ' . $_css_event_version . ';';
$js .= '</script>';
}
else {
$event_css_html = '';
}
if (PARTY) {
$partyHats = 'var partyHats = "' . PARTY_IMAGE . '";';
}
else {
$partyHats = '';
}
if (ENABLE_ARCHIVE) {
$archive_link = ' <span class="btn-wrap"><a href="./archive" class="button">' . S_ARCHIVE . '</a></span>';
}
else {
$archive_link = '';
}
if (TEXT_ONLY) {
$text_only = 'var text_only = true;';
$body_text_css = ' text_only';
$ctrl_css = ' hidden';
}
else {
$text_only = $body_text_css = '';
$ctrl_css = '';
}
$adg_js = 'var _adg = 1;';
$postform = '';
form( $postform, 0, '', false, true );
$cat = <<<HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>$title - Catalog - 4chan</title>
<meta name="robots" content="$meta_robots">
<meta name="description" content="$meta_description">
<meta name="keywords" content="$meta_keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
$canonical
<link id="mobile-css" rel="stylesheet" href="$css/catalog_mobile.$cssv.css" />
$js
$flags
<script type="text/javascript">$partyHats
$text_only
$adg_js
var jsVersion = $jsVersion;
var comlen = $comlen;
var maxFilesize = $maxfs;
var cooldowns = $jsCooldowns;
var catalog = $catjson;
var style_group = "$style_group";
var check_for_block = true;
var fourcat = new FC();
fourcat.applyCSS(null, "$style_group", $cssv);
</script>
<link rel="shortcut icon" href="$favicon" type="image/x-icon">
$embedearly
$adembedearly
</head>
<body class="$body_class$body_text_css">
<div id="topnav" class="boardnav">$nav</div>
<div class="boardBanner">
$titlepart
<div class="boardTitle">$title</div>
$subtitle
</div>
<hr class="abovePostForm">
$topad
<div id="togglePostForm" class="mobilebtn mobile"><span class="btn-wrap"><span id="togglePostFormLinkMobile" class="button">$start_thread</span></span></div>
$postform
<hr>
<div id="content">
<div id="ctrl">
<div id="info">
<span class="navLinks mobilebtn"><span class="btn-wrap"><a href="./" class="button">Return</a></span>$archive_link <span id="tobottom" class="btn-wrap"><span class="button">Bottom</span></span> <span class="btn-wrap"><a id="refresh-btn" href="./catalog" class="button">Refresh</a></span></span><span id="filtered-label"> &mdash; Filtered threads: <span id="filtered-count"></span></span><span id="hidden-label"> &mdash; Hidden threads: <span id="hidden-count"></span> <span class="btn-wrap"><a id="filters-clear-hidden" href="">Show</a></span></span><span id="search-label"> &mdash; Search results for: <span id="search-term"></span></span>
</div>
<hr class="mobile">
<div id="settings" class="mobilebtn">
<span class="ctrl-wrap">Sort By:
<select id="order-ctrl" size="1">
<option value="alt">Bump order</option>
<option value="absdate">Last reply</option>
<option value="date">Creation date</option>
<option value="r">Reply count</option>
</select></span>
<span class="ctrl-wrap$ctrl_css">Image Size:
<select id="size-ctrl" size="1">
<option value="small">Small</option>
<option value="large">Large</option>
</select></span>
<span class="ctrl-wrap$ctrl_css">Show OP Comment:
<select id="teaser-ctrl" size="1">
<option value="off">Off</option>
<option value="on">On</option>
</select></span>
<span class="btn-wrap"><span id="filters-ctrl" class="button">Filters</span></span>
<span class="btn-wrap"><span id="qf-ctrl" class="button">Search</span></span>
<span style="display:none" id="qf-cnt">
<input type="text" id="qf-box" name="qf-box"><span id="qf-clear" class="button">&#x2716;</span>
</span>
</div>
<div class="clear"></div>
</div><hr>
<div id="threads"></div>
<hr>
<span class="navLinks navLinksBottom mobilebtn"><span class="btn-wrap"><a href="./" class="button">Return</a></span>$archive_link <span id="totop" class="btn-wrap"><span class="button">Top</span></span> <span class="btn-wrap"><a href="./catalog" class="button">Refresh</a></span></span><span id="filtered-label-bottom"> &mdash; Filtered threads: <span id="filtered-count-bottom"></span></span><span id="hidden-label-bottom"> &mdash; Hidden threads: <span id="hidden-count-bottom"></span> <span class="btn-wrap"><a id="filters-clear-hidden-bottom" href="">Show</a></span></span><span id="search-label-bottom"> &mdash; Search results for: <span id="search-term-bottom"></span></span>
<hr>
$bottomad
<div id="styleSwitcher">Style: <select id="styleSelector" size="1">
<option value="Yotsuba New">Yotsuba</option>
<option value="Yotsuba B New">Yotsuba B</option>
<option value="Futaba New">Futaba</option>
<option value="Burichan New">Burichan</option>
<option value="Tomorrow">Tomorrow</option>
<option value="Photon">Photon</option>$event_css_html
</select></div>
</div>
$foot
<div id="backdrop" class="hidden"></div>
<noscript>
<style scoped type="text/css">
#nojs {
background-color: #000;
text-align: center;
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
#nojs > span {
color: #000;
background-color: #8C92AC;
padding: 5px;
position: relative;
top: 35%;
font-size: 22px;
}
</style>
<div id="nojs">
<span>Your web browser must have JavaScript enabled in order for this site to display correctly.</span>
</div>
</noscript>
<menu type="context" id="ctxmenu-main"></menu>
<menu type="context" id="ctxmenu-thread"></menu>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
initAnalytics();
fourcat.init();
fourcat.loadCatalog(catalog);
$.on($.id('tobottom'), 'click', function() { window.scrollTo(0, document.documentElement.scrollHeight); });
$.on($.id('totop'), 'click', function() { window.scrollTo(0, 0); });
}, false);
</script>
$embedlate</body>
</html>
HTML;
return $cat;
}

77
clippy.html Normal file
View file

@ -0,0 +1,77 @@
<style type="text/css">
.clippy {text-align:left; z-index:300;position:absolute;font-family: tahoma, verdana; font-size: 11px;}
.balloon {background: url(//s.4cdn.org/image/bubble.gif); width: 280px; height: 300px;}
.balloon-text {padding: 40px; text-align: left;}
.clippy-img {margin-left: 155px;}
</style>
<div class="clippy" id="clippybox" style="display:none">
<div class="balloon"><div class="balloon-text"><div id="clippy-insert-into"> </div><input type="checkbox">Don't show me this tip again</input></div></div>
<img class="clippy-img" src="//s.4cdn.org/image/Sticky2.gif" />
</div>
<script type="text/javascript">
var clippy, clippy_text, com, email, filename;
var introtext = "Hello, I'm Sticky, the 4chan assistant.<br/>";
function idle() {
}
function helpful() {
var text = com.value, etxt = email.value, filetxt = filename.value;
if (filetxt.search(/[0-9]{12,13}/) >= 0)
clippy_text.innerHTML = "It looks like you're reposting an old image.<br>Would you like help?<br><br><ul><li>Get help posting original content</li><li>Continue killing 4chan by myself</li></ul>";
else if (filetxt.search(/C:\\WINDOWS\\/i) >= 0)
clippy_text.innerHTML = "It looks like you're posting from your \"hidden\" porn folder.<br>Would you like help?<br><br><ul><li>Get help moving into my own house</li><li>Just live in the basement without help</li></ul>";
else if (text.search(/MODS=/) >= 0)
clippy_text.innerHTML = "It looks like you're posting \"MODS=FAGS\".<br>Would you like help?<br><br><ul><li>Get help with my anger issues</li><li><a href=\"http://wakaba.c3.cx\">Get help starting my own /b/ ripoff</a></li></ul>";
else if (text.search(/[a-z]/) == -1 && text.length >= 4)
clippy_text.innerHTML = "It looks like your capslock key is broken.<br>Would you like help?<br><br><ul><li>Get help <a href=\"http://www.ebay.com/\">finding a new keyboard</a></li><li>Just type the post without help</li></ul>";
else if (text.search(/moar/i) >= 0 || text.search(/lulz/i) >= 0 || text.search(/rule 34/i) >= 0)
clippy_text.innerHTML = "It looks like you're a moron.<br>Would you like help?<br><br><ul><li>Get help <a href=\"http://ninjawords.com/more\">learning to spell</a></li><li>Just type the post without help</li></ul>";
else if (etxt.search(/sage/) >= 0)
clippy_text.innerHTML = "It looks like you don't like this thread!<br>Maybe you shouldn't read it?";
else if (text.search(/fag/i) >= 0)
clippy_text.innerHTML = "It looks like you're calling someone a fag.<br>Would you like help?<br><br><ul><li>Get help <a href=\"http://orz.4chan.org/y/imgboard.html\">finding myself</a></li><li>Just type the post without help</li></ul>";
else clippy_text.innerHTML = "Would you like help with:<br><ul><li><a href=\"javascript:void(com.value='DICK BUTT')\">Trolling</a></li><li>Finding copypasta</li><li>Being arrested</li><li><a href=\"http://www.4chan.org/rules.php\">Complaining about rules</a></li><li>Being wapanese</li></ul>";
setTimeout(idle, 15000);
}
function remove_listeners(fn) {
com.removeEventListener("keyup", fn, false);
email.removeEventListener("keyup", fn, false);
filename.removeEventListener("keyup", fn, false);
}
function add_listeners(fn) {
/*com.addEventListener("keyup", fn, false);
email.addEventListener("keyup", fn, false);
filename.addEventListener("keyup", fn, false);*/
com.onkeyup = email.onkeyup = filename.onchange = fn;
}
function intro() {
clippy_text.innerHTML = introtext;
clippy.style.display = "";
//remove_listeners(intro);
setTimeout('add_listeners(helpful);helpful();', 3500);
}
clippy = document.getElementById("clippybox");
clippy_text = document.getElementById("clippy-insert-into");
clippy.style.top = 100+'px';
clippy.style.right = 20+'px';
com = document.getElementsByName("com")[0];
email = document.getElementsByName("email")[0];
filename = document.getElementsByName("upfile")[0];
add_listeners(intro);
</script>

1
config/ads/adblock.txt Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
<div id="azk53379"></div>

View file

@ -0,0 +1 @@
<div id="azk98887"></div>

1
config/ads/nws.top.txt Normal file
View file

@ -0,0 +1 @@
<div id="azk91603"></div>

1
config/ads/ws.bottom.txt Normal file
View file

@ -0,0 +1 @@
<div id="azk53379"></div>

1
config/ads/ws.middle.txt Normal file
View file

@ -0,0 +1 @@
<div id="azk98887"></div>

1
config/ads/ws.top.txt Normal file
View file

@ -0,0 +1 @@
<div id="azk91603"></div>

View file

@ -0,0 +1,14 @@
[3's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/3/ - 3DCG&quot; is 4chan's board for 3D modeling and imagery.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,3d,3dcg,modeling,rendering,maya,adobe
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,45 @@
[a's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; J-List ads for index pages
AD_INTERTHREAD_ENABLED = no
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 180
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-a1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/a/ - Anime &amp; Manga&quot; is 4chan's imageboard dedicated to the discussion of Japanese animation and manga.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,anime,manga,japanese,animation
; The board's category
CATEGORY = ws
;EMBED_INDEX = <iframe style="display:none" width="0" height="0" src="https://www.youtube.com/embed/YQYPmtK03c0?start=1&autoplay=1&loop=1&playlist=YQYPmtK03c0" frameborder="0"></iframe>
; Use rebuildd
STATIC_REBUILD = 1
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,27 @@
[aco's config]
[Advertisements]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
; Secondary anti flood interval and threshold for threads (only the IP's posting history used here)
ANTI_FLOOD_INTERVAL_RAW = 5
ANTI_FLOOD_THRES_RAW = 4
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/aco/ - Adult Cartoons&quot; is 4chan's imageboard for posting western-styled adult cartoon artwork.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,western,adult,cartoon,r34,rule34
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,22 @@
[adv's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/adv/ - Advice&quot; is 4chan's board for giving and receiving advice.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,advice,help,dating,relationships
; The board's category
CATEGORY = ws
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>AdBlock users: The default ruleset blocks images on /adv/. You must disable AdBlock to browse /adv/ properly.</li>\
<li style="color: red;">Are you in crisis? Call the <a href="http://www.suicidepreventionlifeline.org/" target="_blank">National Suicide Prevention Lifeline</a> at +1 (800) 273-8255.</li>

View file

@ -0,0 +1,14 @@
[an's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/an/ - Animals &amp; Nature&quot; is 4chan's imageboard for posting pictures of animals, pets, and nature.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,animals,nature,flora,fauna,pets,cats,dogs
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,17 @@
[asp's config]
LOCKDOWN = yes
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/asp/ - Alternative Sports &amp; Wrestling&quot; is 4chan's imageboard for the discussion of alternative and extreme sports such as wrestling and paintball.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,sports,alternative,wrestling,skateboarding,airsoft,paintball,boxing
; The board's category
CATEGORY = ws

101
config/boards/b.config.ini Normal file
View file

@ -0,0 +1,101 @@
[b's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
HTML_IFRAME_WHITELIST = %^(https?:)?//(www\.youtube(-nocookie)?\.com/embed/|interactives\.ap\.org/)%
MOBILE_IMG_RESIZE = yes
[Limits]
JSON_TAIL_SIZE = 50
; Seconds between posts
RENZOKU = 30
; Seconds between image posts
RENZOKU2 = 30
; Seconds between intra thread posts
RENZOKU_INTRA = 30
; Seconds between intra thread image posts
RENZOKU2_INTRA = 30
; Seconds between new threads
RENZOKU3 = 90
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 15
; Maximum upload size in KB
MAX_KB = 2048
MAX_WEBM_FILESIZE = 2048
; Maximum number of replies shown to a thread on index pages
REPLIES_SHOWN = 3
; Maximum number of lines shown on index pages
MAX_LINES_SHOWN = 10
; Maximum number of lines allowed in a post
MAX_LINES = 50
; Threads per page
;DEF_PAGES = 15
; Number of bumps before thread will no longer bump
MAX_RES = 300
; Maximum amount of image replies in a thread
MAX_IMGRES = 150
; Seconds between new threads
;RENZOKU3 = 600
; Sage OPs replies if the length since their last post is too short
RENZOKU_OP = yes
; Time since last post when OPs replies will sage
RENZOKU_OP_TIME = 600
; Remove the threads least recently replied to
EXPIRE_NEGLECTED = yes
[Features and related config]
; Enable archiving of expired posts?
ENABLE_ARCHIVE = no
; Use rebuildd
STATIC_REBUILD = 1
; Enable wordfilters
WORD_FILT = no
; Show number of unique IPs in the post log
SHOW_UNIQUES = no
; Enable fortune-teller (use #fortune as tripcode)
FORTUNE_TRIP = yes
; Sticky these posts
AUTOSTICKY =
; Hide name and subject field
FORCED_ANON = no
; Allow rolling of dice
DICE_ROLL = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = no
; Strip tripcodes from names
STRIP_TRIPCODE = yes
; Put party hats on images :)
;PARTY = yes
;PARTY_IMAGE = xmashat.gif
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/b/ - Random&quot; is the birthplace of Anonymous, and where people go to discuss random topics and create memes on 4chan.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,anonymous,random,memes
; The board's category
CATEGORY = nws
; skip doubles enabled at /b/ postcount ~381720221, disabled at ~584248512
SKIP_DOUBLES = no
[Misc]
SUBTITLE = The stories and information posted here are artistic works of fiction and falsehood.<br>Only a fool would take anything posted here as fact.

View file

@ -0,0 +1,78 @@
[bant's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Features and related config]
HTML_IFRAME_WHITELIST = %^(https?:)?//(www\.youtube(-nocookie)?\.com/embed/|interactives\.ap\.org/)%
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/bant/ - International/Random&quot; is 4chan's international hanging out board, where you can have fun with Anonymous all over the world.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,international,foreign,culture,language
; The board's category
CATEGORY = nws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = yes
; If DISP_ID is enabled, make IDs per-thread instead of per-board?
DISP_ID_PER_THREAD = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
DISP_ID_NO_HEAVEN = yes
; Show country flags next to names
SHOW_COUNTRY_FLAGS = yes
; Enable archiving of expired posts?
ENABLE_ARCHIVE = no
; Allow credit allocation for captcha bypassing.
CAPTCHA_ALLOW_BYPASS = no
[Limits]
; Based on /b/
; Seconds between posts
RENZOKU = 15
; Seconds between image posts
RENZOKU2 = 15
; Seconds between intra thread posts
RENZOKU_INTRA = 15
; Seconds between intra thread image posts
RENZOKU2_INTRA = 15
; Seconds between new threads
RENZOKU3 = 60
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 15
; Maximum upload size in KB
MAX_KB = 2048
MAX_WEBM_FILESIZE = 2048
; Maximum number of replies shown to a thread on index pages
REPLIES_SHOWN = 3
; Maximum number of lines shown on index pages
MAX_LINES_SHOWN = 10
; Maximum number of lines allowed in a post
MAX_LINES = 50
; Threads per page
;DEF_PAGES = 15
; Number of bumps before thread will no longer bump
MAX_RES = 300
; Maximum amount of image replies in a thread
MAX_IMGRES = 150
; Seconds between new threads
;RENZOKU3 = 600
; Sage OPs replies if the length since their last post is too short
RENZOKU_OP = yes
; Time since last post when OPs replies will sage
RENZOKU_OP_TIME = 600
MAX_USER_THREADS = 3
; Remove the threads least recently replied to
EXPIRE_NEGLECTED = yes

View file

@ -0,0 +1,26 @@
[biz's config]
; slotid (desktop,mobile)
;ADS_LOCKERDOME_TOP = 12600775138545254,13389524239594598
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/biz/ - Business &amp; Finance&quot; is 4chan's imageboard for the discussion of business and finance, and cryptocurrencies such as Bitcoin and Dogecoin.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,business,finance,cryptocurrency,bitcoin,dogecoin
; The board's category
CATEGORY = ws
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
DISP_ID_NO_HEAVEN = yes
; Threads per page
DEF_PAGES = 20

View file

@ -0,0 +1,17 @@
[c's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/c/ - Anime/Cute&quot; is 4chan's imageboard for cute and moe anime images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,anime,cute,moe,waifu
; The board's category
CATEGORY = ws
RENZOKU2_INTRA = 30

View file

@ -0,0 +1,14 @@
[cgl's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/cgl/ - Cosplay &amp; EGL&quot; is 4chan's imageboard for the discussion of cosplay, elegant gothic lolita (EGL), and anime conventions.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,anime con,cosplay,egl,elegant gothic lolita,anime convention,otakon,anime expo
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,18 @@
[ck's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/ck/ - Food &amp; Cooking&quot; is 4chan's imageboard for food pictures and cooking recipes.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,cooking,recipes,food
; The board's category
CATEGORY = ws
;DONATE = <center><iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/zb4vhJaX1hw?autoplay=1&amp;loop=1" frameborder="0" allowfullscreen></iframe></center>

View file

@ -0,0 +1,20 @@
[cm's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; Secondary anti flood interval and threshold for threads (only the IP's posting history used here)
ANTI_FLOOD_INTERVAL_RAW = 15
ANTI_FLOOD_THRES_RAW = 3
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/cm/ - Cute/Male&quot; is 4chan's imageboard for posting pictures of cute anime males.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,anime,hentai,yaoi,men,cute
; The board's category
CATEGORY = ws
RENZOKU2_INTRA = 30

View file

@ -0,0 +1,34 @@
[co's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; Secondary anti flood interval and threshold for threads (only the IP's posting history used here)
ANTI_FLOOD_INTERVAL_RAW = 5
ANTI_FLOOD_THRES_RAW = 4
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-co1.png,spoiler-co2.png,spoiler-co3.png,spoiler-co4.png,spoiler-co5.png}}
; How many custom spoilers?
SPOILER_NUM = 5
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/co/ - Comics &amp; Cartoons&quot; is 4chan's imageboard dedicated to the discussion of Western cartoons and comics.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,western,american,cartoons,comics
; The board's category
CATEGORY = ws
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,23 @@
[d's config]
[Advertisements]
AD_ABC_TOP_MOBILE =
AD_ABC_TOP_DESKTOP =
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/d/ - Hentai/Alternative&quot; is 4chan's imageboard for alternative hentai images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,japan,hentai,bondage,tentacle,futanari
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,14 @@
[diy's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/diy/ - Do It Yourself&quot; is 4chan's imageboard for DIY/do it yourself projects, home improvement, and makers.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,diy,do it yourself,home improvement,makers,crafts,instructables
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,23 @@
[e's config]
[Advertisements]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/e/ - Ecchi&quot; is 4chan's imageboard for suggestive (ecchi) hentai images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,japan,anime,hentai,ecchi,suggestive
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,50 @@
[f's config]
;ADS_BIDGLASS_TOP_DESKTOP_FB = <iframe width="728" height="90" scrolling="no" frameborder="0" src="https://a.adtng.com/get/10011953?time=1602949803326" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10011953"></iframe>
;ADS_BIDGLASS_TOP_MOBILE_FB = <iframe width="300" height="250" scrolling="no" frameborder="0" src="https://a.adtng.com/get/10001654?time=1602949803326" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10001654"></iframe>
NO_TEXTONLY = yes
; Archiving and catalog aren't supported for /f/...
ENABLE_ARCHIVE = no
ENABLE_CATALOG = no
JSON_TAIL_SIZE = 0
CAPTCHA_TWISTER = no
[Limits]
; Maximum number of entries before oldest thread is pruned
LOG_MAX = 500
; Threads per page (f only has 1 page)
DEF_PAGES = 30
PAGE_MAX = 1
EXPIRE_NEGLECTED = no
; Maximum upload size in KB
MAX_KB = 10240
[General Locations]
IMG_SERVER = //i.4cdn.org/
UPLOAD_BOARD = yes
SQLLOGMD5 = f_md5
CLEANUP_UPLOADS = no
USE_RSS = no
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/f/ - Flash&quot; is 4chan's upload board for sharing Adobe Flash files (SWFs).
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,upload,adobe,macromedia,flash,swf
CATEGORY = nws
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Supported file types are: SWF</li>\
<li>Maximum file size allowed is {{MAX_KB}} KB.</li>\
<li>Check out the 4chan <a href="//www.4chan.org/flash" target="_blank">Flash archive</a>!</li>

View file

@ -0,0 +1,18 @@
[fa's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/fa/ - Fashion&quot; is 4chan's imageboard for images and discussion relating to fashion and apparel.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,fashion,clothing,apparel
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,18 @@
[fit's config]
; slotid (desktop,mobile)
ADS_LOCKERDOME_TOP = 12600781614550630,13389525380445286
; domainid,sizeid,zoneid,k (desktop then mobile)
;AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/fit/ - Fitness&quot; is 4chan's imageboard for weightlifting, health, and fitness.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,health,fitness,diet,exercise,weightlighting,lifting,bodybuilding
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,29 @@
[g's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/g/ - Technology&quot; is 4chan's imageboard for discussing computer hardware and software, programming, and general technology.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,computer,technology,hardware,software,microsoft,apple,pc,mobile,programming
; The board's category
CATEGORY = ws
; Enable [code] tags
CODE_TAGS = yes
[Misc]
; Rules below form (tip: use backslash to continue to next line)
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>You may highlight syntax and preserve whitespace by using [code] tags.</li>

View file

@ -0,0 +1,30 @@
[gd's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/gd/ - Graphic Design&quot; is 4chan's imageboard for graphic design.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,photoshop,graphic,design,illustrator,adobe
; The board's category
CATEGORY = ws
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 10000
; Allow PDF upload and thumbnailing (needs /usr/local/bin/gs)
ENABLE_PDF = yes
[Misc]
; Rules below form (tip: use backslash to continue to next line)
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Additional supported file types are: PDF</li>

View file

@ -0,0 +1,47 @@
[gif's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Limits]
JSON_TAIL_SIZE = 50
; Maximum upload size in KB
MAX_KB = 4096
; Maximum filesize for webm files. Must be <= MAX_KB
MAX_WEBM_FILESIZE = 4096
; Maximum duration of a video stream in seconds
MAX_WEBM_DURATION = 300
; Allow audio streams in webm
ENABLE_WEBM_AUDIO = yes
; Only allow gifs
GIF_ONLY = yes
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/gif/ - Adult GIF&quot; is 4chan's imageboard dedicated to animated adult GIFs and WEBMs.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,animated,gif,adult,gifs,webm,webms
; The board's category
CATEGORY = nws
SUBTITLE = Worksafe Board: /<a href="//boards.4chan.org/wsg/" title="Worksafe GIF">wsg</a>/
; Detect and handle embedded data in file uploads:
; - Rejects PNGs and JPGs.
; - Removes embedded data from GIFs, modifying the original file.
CLEANUP_UPLOADS = no
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 24
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
PAGE_MAX = 5
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Supported file types are: GIF, WEBM</li>

View file

@ -0,0 +1,23 @@
[h's config]
[Advertisements]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/h/ - Hentai&quot; is 4chan's imageboard for adult Japanese anime hentai images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,japan,anime,hentai,pornography,adult,ecchi
; The boards's category
CATEGORY = nws
MOBILE_IMG_RESIZE = yes

View file

@ -0,0 +1,32 @@
[hc's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/hc/ - Hardcore&quot; is 4chan's imageboard for the posting of adult hardcore pornography.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,hardcore,pornography,sex,porn
; The board's category
CATEGORY = nws
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 8000
; Minimum dimensions of an image
MIN_W = 500
MIN_H = 500
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Images smaller than {{MIN_W}}x{{MIN_H}} pixels are not allowed.</li>
MOBILE_IMG_RESIZE = yes

View file

@ -0,0 +1,31 @@
[his's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; Permasage threads after X hours. 0 to disable.
PERMASAGE_HOURS = 168
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/his/ - History &amp; Humanities&quot; is 4chan's board for discussing and debating history.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,history,humanities,debate
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Show poster's unique ID based on IP and date, if email field is blank
;DISP_ID = no
; If DISP_ID is enabled, make IDs per-thread instead of per-board?
;DISP_ID_PER_THREAD = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
;DISP_ID_NO_HEAVEN = yes
; Show country flags next to names
;SHOW_COUNTRY_FLAGS = yes

View file

@ -0,0 +1,28 @@
[hm's config]
[Advertisements]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011954" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10002309" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Limits]
; Maximum amount of image replies in a thread
MAX_IMGRES = 150
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 8000
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/hm/ - Handsome Men&quot; is 4chan's imageboard dedicated to sharing adult images of handsome men.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,handsome,men,nudes,softcore,porn,sex
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,34 @@
[hr's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Minimum dimensions of an image
MIN_W = 1000
MIN_H = 1000
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 10000
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/hr/ - High Resolution&quot; is 4chan's imageboard for the sharing of high resolution images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,hq,hi res,high resolution,hi rez
; The board's category
CATEGORY = nws
; Enable pre-upload CAPTCHA?
PREUPLOAD_CAPTCHA = yes
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Maximum file size allowed is {{MAX_KB}} KB.</li>\
<li>Images smaller than {{MIN_W}}x{{MIN_H}} pixels are not allowed.</li>\
<li>Images greater than {{MAX_DIMENSION}}x{{MAX_DIMENSION}} pixels are not allowed.</li>

View file

@ -0,0 +1,33 @@
[i's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
; Enable Oekaki board features
ENABLE_PAINTERJS = yes
ENABLE_OEKAKI_REPLAYS = yes
; Oekaki min/max widths
OEKAKI_MIN_W = 100
OEKAKI_MIN_H = 100
OEKAKI_MAX_W = 800
OEKAKI_MAX_H = 800
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
; period for user thread limit, in hours
MAX_USER_THREADS_PERIOD = 168
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/i/ - Oekaki&quot; is 4chan's oekaki board for drawing and sharing art.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,oekaki,drawing,art
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,17 @@
[ic's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/ic/ - Artwork/Critique&quot; is 4chan's imageboard for the discussion and critique of art.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,art,critique
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,29 @@
[int's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/int/ - International&quot; is 4chan's international board, for the exchange of foreign language and culture.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,international,foreign,culture,language
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Show country flags next to names
SHOW_COUNTRY_FLAGS = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 235
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2

156
config/boards/j.config.ini Normal file
View file

@ -0,0 +1,156 @@
[j's config]
; Disabling stuff to prevent data leakage to non-janitors
; !!! DO NOT CHANGE THESE !!!
USE_RSS = no
ENABLE_JSON = no
ENABLE_JSON_INDEXES = no
ENABLE_JSON_CATALOG = no
ENABLE_JSON_THREADS = no
ENABLE_CATALOG = no
ENABLE_ARCHIVE = no
SHOW_UNIQUES = no
SHOW_THREAD_UNIQUES = no
DISP_ID = no
CAN_REPORT_POSTS = no
JSON_TAIL_SIZE = 0
; Enable/disable lockdown mode for /j/ (disallows posting)
; Lockdown
;LOCKDOWN = yes
[Limits]
; Maximum number of entries before oldest thread is pruned
LOG_MAX = 1000000000
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
PAGE_MAX = 0
; Number of bumps
MAX_RES = 1000
[General Locations]
; The title of the image board
TITLE = /j/ - Janitor & Moderator Discussion
; Name of the first index page
SELF_PATH2_FILE = {{DATA_ROOT}}imgboard.html.php
; URL to index.html
SELF_PATH2_ABS = //sys.4chan.org/j/
; the extension of saved HTML files
PHP_EXT = .html.php
PHP_EXT2 =
DATA_ROOT = /www/4chan.org/web/sys/{{BOARD_DIR}}/
CATEGORY = nws
; Different roots to obscure image locations
BOARD_DIR = j
THUMB_ROOT = /www/4chan.org/web/thumbs/{{BOARD_DIR}}/h8x8FnR5iwB4J8q8/
IMG_ROOT = /www/4chan.org/web/images/{{BOARD_DIR}}/v7Wtc0EJILEQFuTo/
IMG_DIR2 = {{IMG_SERVER}}{{BOARD_DIR}}/v7Wtc0EJILEQFuTo/
; image URLs, note RES_DIR2 is not an absolute URL atm
THUMB_DIR2_PART = i.4cdn.org/{{BOARD_DIR}}/h8x8FnR5iwB4J8q8/
RES_DIR2 = thread/
; Text to be shown at the top of each board (disabled)
GLOBAL_MSG_FILE =
[Features and related config]
; Enable janitor board features
JANITOR_BOARD = yes
; Refuse text only posts (yes = refuse them, no = allow them!)
NO_TEXTONLY = no
; Specify custom favicon
FAVICON = //s.4cdn.org/image/favicon-j.ico
; Specify CSS to force
CSS_FORCE = //s.4cdn.org/css/janichan.css
; Gzip won't work on /j/
USE_GZIP = no
; Disable reCAPTCHA
CAPTCHA = no
; Disable blotter
SHOW_BLOTTER = no
; For that HPH thread
CODE_TAGS = yes
MAX_COM_CHARS_AUTHED = 50000
[Advertisements]
; Remove ads
AD_PLEA = no
AD_EMBEDEARLY =
AD_TOP_ENABLE = no
AD_MIDDLE_ENABLE = no
AD_BOTTOM_ENABLE = no
AD_TOP_PLEA =
AD_MIDDLE_PLEA =
AD_BOTTOM_PLEA =
; desktop top
AD_ADGLARE_TOP =
; desktop bottom
AD_ADGLARE_BOTTOM =
; mobile top
AD_ADGLARE_TOP_MOBILE =
; mobile bottom
AD_ADGLARE_BOTTOM_MOBILE =
; desktop catalog top
AD_ADGLARE_TOP_CATALOG =
; desktop catalog bottom
AD_ADGLARE_BOTTOM_CATALOG =
; desktop revcontent top
AD_RC_TOP =
; desktop revcontent bottom
AD_RC_BOTTOM =
; desktop revcontent top catalog
AD_RC_TOP_CATALOG =
; desktop revcontent bottom catalog
AD_RC_BOTTOM_CATALOG =
; mobile revcontent top
AD_RC_TOP_MOBILE =
; mobile revcontent bottom
AD_RC_BOTTOM_MOBILE =
; adnium mobile top
AD_ADNIUM_TOP_MOBILE =
; adnium mobile bottom
AD_ADNIUM_BOTTOM_MOBILE =
; content abc desktop top: left,right
AD_ABC_TOP_DESKTOP =
; content abc mobile top
AD_ABC_TOP_MOBILE =
; content abc bottom top
AD_ABC_BOTTOM_MOBILE =
; juicyads catalog top
AD_JUICY_TOP_CATALOG =
; juicyads catalog bottom
AD_JUICY_BOTTOM_CATALOG =
; juicyads index bottom
AD_JUICY_BOTTOM_DESKTOP =
ADS_DANBO = no
ADS_BIDGLASS = no
ADS_BIDGLASS_TOP_DESKTOP =
ADS_BIDGLASS_BOTTOM_DESKTOP =
ADS_BIDGLASS_TOP_MOBILE =
ADS_BIDGLASS_BOTTOM_MOBILE =
[Misc]
SQL_DEBUG = 0

View file

@ -0,0 +1,49 @@
[jp's config]
;AD_CUSTOM_TOP = <div style="max-height:100px;margin:auto;width:720px;max-width: 100%;"><a target="_blank" href="https://www.fakku.net/read-hentai" title="Hentai Manga"><img style="max-width:100%" src="https://t.fakku.net/images/upload/1dxB446v1y107uR5.gif"></a></div>
;AD_CUSTOM_BOTTOM = <div style="max-height:100px;margin:auto;width:720px;max-width: 100%;"><a target="_blank" href="https://www.fakku.net/read-hentai" title="Hentai Manga"><img style="max-width:100%" src="https://t.fakku.net/images/upload/1dxB446v1y107uR5.gif"></a></div>
;AD_TERRA_TOP_DESKTOP =
;AD_TERRA_BOTTOM_DESKTOP =
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
AUTOARCHIVE_CAP = 1500
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/jp/ - Otaku Culture&quot; is 4chan's board for discussing Japanese otaku culture.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,general,otaku,waifu,japanese
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Seconds between new threads
RENZOKU3 = 3600
; Maximum amount of image replies in a thread
MAX_IMGRES = 300
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-jp1.png
; How many custom spoilers?
SPOILER_NUM = 1
SJIS_TAGS = yes
MAX_COM_CHARS = 5000
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>[sjis] tags are available. Install the <a href="http://monafont.sourceforge.net/index-e.html" target="_blank">Mona font</a> to view SJIS art properly.</li>
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 250

View file

@ -0,0 +1,21 @@
[k's config]
;AD_TERRA_TOP_DESKTOP = tumultrecast.com,eaed4d55144c813097d5aa84a204a7c2
;AD_TERRA_BOTTOM_DESKTOP = tumultrecast.com,c0b83c42f274bdfa2042504993ae51a2
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/k/ - Weapons&quot; is 4chan's imageboard for discussing all types of weaponry, from military tanks to guns and knives.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,weapons,tanks,guns,knives,military
; The board's category
CATEGORY = ws
MOBILE_IMG_RESIZE = yes

View file

@ -0,0 +1,25 @@
[lgbt's config]
;AD_TERRA_TOP_DESKTOP = tumultrecast.com,eaed4d55144c813097d5aa84a204a7c2
;AD_TERRA_BOTTOM_DESKTOP = tumultrecast.com,c0b83c42f274bdfa2042504993ae51a2
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/lgbt/ - LGBT&quot; is 4chan's imageboard for Lesbian-Gay-Bisexual-Transgender-Queer and sexuality discussion.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,lgbt,lesbian,gay,bisexual,transgender,lgbtq,queer,sexuality
; The board's category
CATEGORY = ws
; The title of the image board
TITLE = /lgbt/ - Lesbian, Gay, Bisexual, & Transgender
; User selectable flags. Will break boards without the board_flag table column.
ENABLE_BOARD_FLAGS = no

View file

@ -0,0 +1,26 @@
[lit's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/lit/ - Literature&quot; is 4chan's board for the discussion of books, authors, and literature.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,literature,reading,books,authors
; The board's category
CATEGORY = ws
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-lit1.png
; How many custom spoilers?
SPOILER_NUM = 1
[Limits]
; Maximum comment length
MAX_COM_CHARS = 3000

View file

@ -0,0 +1,19 @@
[m's config]
[Features and related config]
MOBILE_IMG_RESIZE = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-m1.png,spoiler-m2.png,spoiler-m3.png,spoiler-m4.png}}
; How many custom spoilers?
SPOILER_NUM = 4
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/m/ - Mecha&quot; is 4chan's imageboard for discussing Japanese mecha robots and anime, like Gundam and Macross.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,anime,mecha,gundam,macross,robot
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,40 @@
[mlp's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
CSS_VERSION_BOARD_FLAGS = 3
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/mlp/ - Pony&quot; is 4chan's imageboard dedicated to the discussion of My Little Pony: Friendship is Magic.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,pony,ponies,brony,bronies,my little pony,mlp,lauren faust,friendship is magic
; The board's category
CATEGORY = ws
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-mlp1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Allow rolling of dice
DICE_ROLL = yes
; Maximum comment length
MAX_COM_CHARS = 3000
; User selectable flags. Will break boards without the board_flag table column.
ENABLE_BOARD_FLAGS = yes
[Limits]
; Number of bumps
MAX_RES = 500
; Maximum amount of image replies in a thread
MAX_IMGRES = 300

View file

@ -0,0 +1,16 @@
[mu's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/mu/ - Music&quot; is 4chan's imageboard for discussing all types of music.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,music,mp3,cd,radio,band,ipod,music industry
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,14 @@
[n's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/n/ - Transportation&quot; is 4chan's imageboard for discussing modes of transportation like trains and bicycles.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,transportation,trains,planes,boats,bicycle,bike,cycling
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,43 @@
[news' config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
WORD_FILT = no
[Features and related config]
; Text-only mode
TEXT_ONLY = yes
; Permasage threads after X hours. 0 to disable.
PERMASAGE_HOURS = 48
; Regex for comment validation.
COM_REGEX = @https?://@
; When the OP doesn't pass the regex validation
S_INVALID_COM = Your post must contain at least one valid URL
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-a1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/news/ - Current News; is 4chan's board for current news.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,news,finance,international,celebrity
; The board's category
CATEGORY = ws
MAX_USER_THREADS = 5
MAX_USER_THREADS_PERIOD = 120
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,14 @@
[o's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/o/ - Auto&quot; is 4chan's imageboard for discussing cars and motorcycles.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,automobiles,cars,motorcycles,auto,automotive
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,25 @@
[out's config]
; slotid (desktop,mobile)
ADS_LOCKERDOME_TOP = 12528905840213094,13389526319969382
; domainid,sizeid,zoneid,k (desktop then mobile)
;AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
;ADS_LOCKERDOME_TOP = <div id="ld-1996-5165"></div><script>(function(w,d,s,i){w.ldAdInit=w.ldAdInit||[];w.ldAdInit.push({slot:12528905840213094,size:[0, 0],id:"ld-1996-5165"});if(!d.getElementById(i)){var j=d.createElement(s),p=d.getElementsByTagName(s)[0];j.async=true;j.src="//cdn2.lockerdomecdn.com/_js/ajs.js";j.id=i;p.parentNode.insertBefore(j,p);}})(window,document,"script","ld-ajs");</script>
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/out/ - Outdoors&quot; is 4chan's imageboard for discussing survivalist skills and outdoor activities such as hiking.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,outdoors,survivalist,hiking,outdoor activities
; The board's category
CATEGORY = ws
[Limits]
; Maximum upload size in KB
MAX_KB = 5120
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 8000

View file

@ -0,0 +1,26 @@
[p's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Limits]
; Maximum upload size in KB
MAX_KB = 5120
[Features and related config]
; Strip EXIF tags from images
; for privacy, but changes MD5s!
STRIP_EXIF = no
; Enable EXIF parsing during post (needs /www/global/bin/exiftags)
ENABLE_EXIF = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/p/ - Photography&quot; is 4chan's imageboard for sharing and critiquing photos.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,photography,camera,critique,photos
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,26 @@
[po's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Allow PDF upload and thumbnailing (needs /usr/local/bin/gs)
ENABLE_PDF = yes
META_DESCRIPTION = &quot;/po/ - Papercraft &amp; Origami&quot; is 4chan's imageboard for posting papercraft and origami templates and instructions.
; Text to go inside of the meta-description tag
META_KEYWORDS = imageboard,worksafe,papercraft,origami,japan,paper,crafting
; Text to go inside of the meta-keywords tag
; The board's category
CATEGORY = ws
[Misc]
; Rules below form (tip: use backslash to continue to next line)
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Additional supported file types are: PDF</li>

View file

@ -0,0 +1,121 @@
[pol's config]
CSS_VERSION_BOARD_FLAGS = 2
; desktop top
AD_ADGLARE_TOP =
; desktop bottom
AD_ADGLARE_BOTTOM =
; mobile top
AD_ADGLARE_TOP_MOBILE =
; mobile bottom
AD_ADGLARE_BOTTOM_MOBILE =
; desktop catalog top
AD_ADGLARE_TOP_CATALOG =
; desktop catalog bottom
AD_ADGLARE_BOTTOM_CATALOG =
; desktop revcontent top
AD_RC_TOP =
; desktop revcontent bottom
AD_RC_BOTTOM =
; desktop revcontent top catalog
AD_RC_TOP_CATALOG =
; desktop revcontent bottom catalog
AD_RC_BOTTOM_CATALOG =
; mobile revcontent top
AD_RC_TOP_MOBILE =
; mobile revcontent bottom
AD_RC_BOTTOM_MOBILE =
; adnium mobile top
AD_ADNIUM_TOP_MOBILE =
; adnium mobile bottom
AD_ADNIUM_BOTTOM_MOBILE =
; content abc desktop top: left,right
AD_ABC_TOP_DESKTOP =
; content abc mobile top
AD_ABC_TOP_MOBILE =
; content abc mobile top
AD_ABC_BOTTOM_MOBILE =
; content abc mobile inter-replies
AD_ABC_REPLIES_MOBILE =
; juicyads catalog top
AD_JUICY_TOP_CATALOG =
; juicyads catalog bottom
AD_JUICY_BOTTOM_CATALOG =
; juicyads index bottom
AD_JUICY_BOTTOM_DESKTOP =
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,0,2,5188,5f5ef93fac7ed
ADS_BIDGLASS = no
ADS_BIDGLASS_TOP_DESKTOP =
ADS_BIDGLASS_BOTTOM_DESKTOP =
ADS_BIDGLASS_TOP_MOBILE =
ADS_BIDGLASS_BOTTOM_MOBILE =
HTML_IFRAME_WHITELIST = %^(https?:)?//(www\.youtube(-nocookie)?\.com/embed/|interactives\.ap\.org/)%
[Features and related config]
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
; period for user thread limit, in hours
MAX_USER_THREADS_PERIOD = 6
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 72
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/pol/ - Politically Incorrect&quot; is 4chan's board for discussing and debating politics and current events.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,politics,current events,debate,politically incorrect
; The board's category
CATEGORY = nws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = yes
; If DISP_ID is enabled, make IDs per-thread instead of per-board?
DISP_ID_PER_THREAD = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
DISP_ID_NO_HEAVEN = yes
; Show country flags next to names
SHOW_COUNTRY_FLAGS = yes
; Only works on /pol/, will break other boards. Requires SHOW_COUNTRY_FLAGS.
USE_TROLL_FLAGS = no
; User selectable flags. Will break boards without the board_flag table column.
ENABLE_BOARD_FLAGS = yes
; Use rebuildd
STATIC_REBUILD = 1
; Allow credit allocation for captcha bypassing.
CAPTCHA_ALLOW_BYPASS = no
[Limits]
; Seconds between posts
RENZOKU = 30
; Seconds between image posts
RENZOKU2 = 30
; Seconds between intra thread posts
RENZOKU_INTRA = 30
; Seconds between intra thread image posts
RENZOKU2_INTRA = 30
; Seconds between new threads
RENZOKU3 = 90
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 15
; Threads per page
DEF_PAGES = 20

View file

@ -0,0 +1,17 @@
[pw's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/pw/ - Professional Wrestling&quot; is 4chan's imageboard for the discussion of professional wrestling.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,sports,alternative,wrestling
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes

View file

@ -0,0 +1,28 @@
[qa's config]
;AD_TERRA_TOP_DESKTOP = tumultrecast.com,eaed4d55144c813097d5aa84a204a7c2
;AD_TERRA_BOTTOM_DESKTOP = tumultrecast.com,c0b83c42f274bdfa2042504993ae51a2
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
LOCKDOWN = yes
JSON_TAIL_SIZE = 50
META_DESCRIPTION = &quot;/qa/ - Question &amp; Answer&quot; is 4chan's imageboard for question and answer threads.
; Text to go inside of the meta-description tag
META_KEYWORDS = imageboard,worksafe,question,answer,q&amp;a,ama,ask me anything,question and answer
; Text to go inside of the meta-keywords tag
; The board's category
CATEGORY = ws
;NO_DELETE_REPLY = yes
NO_DELETE_OP = yes
MAX_USER_THREADS_PERIOD = 48
MAX_USER_THREADS = 3
; Permasage threads after X hours. 0 to disable.
PERMASAGE_HOURS = 168

View file

@ -0,0 +1,16 @@
[qb's config]
LOCKDOWN = yes
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,0,2,5188,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/qb/ - Quebec&quot;
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard
; The board's category
CATEGORY = nws

View file

@ -0,0 +1,79 @@
[qst's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/qst/ - Quests&quot; is 4chan's imageboard for grinding XP.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,quests,choose your own adventure
; The board's category
CATEGORY = ws
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
;SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-tg1.png,spoiler-tg2.png}}
; How many custom spoilers?
;SPOILER_NUM = 2
; Allow PDF upload and thumbnailing (needs /usr/local/bin/gs)
ENABLE_PDF = yes
; Allow rolling of dice
DICE_ROLL = yes
; Require a subject
REQUIRE_SUBJECT = yes
OP_MARKUP = yes
; maximum number of threads per user, per board
MAX_USER_THREADS = 5
; period for user thread limit, in hours
MAX_USER_THREADS_PERIOD = 72
ENABLE_PAINTERJS = yes
MAX_COM_CHARS = 3000
NO_DELETE_OP = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = yes
; If DISP_ID is enabled, make IDs per-thread instead of per-board?
DISP_ID_PER_THREAD = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
DISP_ID_NO_HEAVEN = yes
; Permasage threads after X hours. 0 to disable.
PERMASAGE_HOURS = 120
; Number of bumps
MAX_RES = 750
; Maximum amount of image replies in a thread
MAX_IMGRES = 375
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 5
; Threads per page
;DEF_PAGES = 30
; Maximum number of lines allowed in a post
MAX_LINES = 100
; Maximum number of replies shown to a thread on index pages
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
[Misc]
; Rules below form (tip: use backslash to continue to next line)
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Additional supported file types are: PDF</li>\
<li>Roll dice with "dice+<strong>number</strong>d<strong>faces</strong>" in the options field (without quotes).</li>

View file

@ -0,0 +1,26 @@
[r's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/r/ - Request&quot; is 4chan's imageboard dedicated to fulfilling all types of user requests.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,request
; The board's category
CATEGORY = nws
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 10000
ENABLE_WEBM_AUDIO = yes

View file

@ -0,0 +1,42 @@
[r9k's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Limits]
JSON_TAIL_SIZE = 50
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 16
; Threads per page
;DEF_PAGES = 15
; Number of bumps before thread will no longer bump
MAX_RES = 500
; Maximum amount of image replies in a thread
MAX_IMGRES = 150
; Seconds between new threads
RENZOKU3 = 600
; Remove the threads least recently replied to
EXPIRE_NEGLECTED = yes
[Features and related config]
; Enable spoilers
SPOILERS = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/r9k/ - ROBOT9001&quot; is a board for hanging out and posting greentext stories.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,ROBOT9000,ROBOT9001,r9k,xkcd,robots,green text,feels
; The board's category
CATEGORY = nws
; The title of the image board
TITLE = /r9k/ - ROBOT9001
ROBOT9000 = yes
ROBOT9000_POSTS = r9k_posts
ROBOT9000_MUTES = r9k_mutes

View file

@ -0,0 +1,34 @@
[s's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/s/ - Sexy Beautiful Women&quot; is 4chan's imageboard dedicated to sharing images of softcore pornography.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,sexy,beautiful,women,nudes,softcore,pornography
; The board's category
CATEGORY = nws
[Limits]
MAX_IMGRES = 150
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 8000
; Minimum dimensions of an image
MIN_W = 500
MIN_H = 500
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Images smaller than {{MIN_W}}x{{MIN_H}} pixels are not allowed.</li>

View file

@ -0,0 +1,79 @@
[s4s's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Limits]
;CSS_FORCE = //s.4cdn.org/css/yotsubluenew.662.css
;CSS_SPOOKY = yes
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 16
; Maximum upload size in KB
MAX_KB = 2048
; Maximum number of replies shown to a thread on index pages
;REPLIES_SHOWN = 3
; Maximum number of lines shown on index pages
;MAX_LINES_SHOWN = 10
; Maximum number of lines allowed in a post
;MAX_LINES = 50
; Threads per page
;DEF_PAGES = 15
; Number of bumps before thread will no longer bump
;MAX_RES = 500
; Maximum amount of image replies in a thread
;MAX_IMGRES = 250
; Seconds between new threads
RENZOKU3 = 300
; Sage OPs replies if the length since their last post is too short
RENZOKU_OP = yes
; Time since last post when OPs replies will sage
RENZOKU_OP_TIME = 120
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;[s4s] - Shit 4chan Says&quot; is 4chan's imageboard for posting dank memes :^)
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,s4s,memes
; The board's category
CATEGORY = nws
; The title of the image board
TITLE = [s4s] - Sh*t 4chan Says
; Enable wordfilters
WORD_FILT = no
; Enable recording of seconds in the date (changing this does not affect old posts)
SHOW_SECONDS = yes
; Show number of unique IPs in the post log
SHOW_UNIQUES = no
; Enable fortune-teller (use #fortune as tripcode)
FORTUNE_TRIP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-s4s1.png,spoiler-s4s2.png,spoiler-s4s3.png,spoiler-s4s4.png,spoiler-s4s5.png,spoiler-s4s6.png}}
; How many custom spoilers?
SPOILER_NUM = 6
; Sticky these posts
AUTOSTICKY = no
; Hide name and subject field
FORCED_ANON = no
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = no
; Strip tripcodes from names
STRIP_TRIPCODE = yes

View file

@ -0,0 +1,33 @@
[sci's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/sci/ - Science &amp; Math&quot; is 4chan's board for the discussion of science and math.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,science,math,mathematics
; The board's category
CATEGORY = ws
; jsMath support
JSMATH = yes
; Allow PDF upload and thumbnailing (needs /usr/local/bin/gs)
ENABLE_PDF = yes
[Limits]
MAX_IMGRES = 250
; abbreviator might eat math
MAX_LINES_SHOWN = 20
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Additional supported file types are: PDF</li>\
<li>Use <span class="tex-logo">T<sub>e</sub>X</span> with [math] tags for inline and [eqn] tags for block equations.</li>\
<li>Right-click equations to view the source.</li>

View file

@ -0,0 +1,51 @@
[soc's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/soc/ - Cams &amp; Meetups&quot; is 4chan's board for camwhores and meetups.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,social,meetup,hookup,cams,camwhore,chans,camwhoring,kik,snapchat
; The board's category
CATEGORY = nws
; Strip EXIF tags from images
; for privacy, but changes MD5s!
STRIP_EXIF = yes
; Strip tripcodes from names
;STRIP_TRIPCODE = yes
; Hide name and subject field
;FORCED_ANON = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
DISP_ID_NO_HEAVEN = yes
[Limits]
; Number of bumps before thread will no longer bump
MAX_RES = 500
; Maximum amount of image replies in a thread
MAX_IMGRES = 300
; Seconds between new threads
RENZOKU3 = 600
; Sage OPs replies if the length since their last post is too short
RENZOKU_OP = yes
; Time since last post when OPs replies will sage
RENZOKU_OP_TIME = 300
; Maximum upload size in KB
MAX_KB = 5120
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 8000
; Remove the threads least recently replied to
EXPIRE_NEGLECTED = yes

View file

@ -0,0 +1,40 @@
[sp's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 250
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/sp/ - Sports&quot; is 4chan's imageboard for sports discussion.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,sports,football,baseball,basketball,soccer,wrestling,banter,hockey,rugby
; The board's category
CATEGORY = ws
; Use this only for big games like the Superb Owl...
; rebuild with rebuildd instead of each post
;STATIC_REBUILD = 1
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Show country flags next to names
SHOW_COUNTRY_FLAGS = yes
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2
[Limits]
; Number of bumps
MAX_RES = 500
; Maximum amount of image replies in a thread
MAX_IMGRES = 300

View file

@ -0,0 +1,21 @@
[t's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/t/ - Torrents&quot; is 4chan's imageboard for posting links and descriptions to torrents.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,torrent,tracker,torrenting
; The board's category
CATEGORY = nws
[Limits]
; Maximum number of replies shown to a thread on index pages
REPLIES_SHOWN = 1
; Maximum number of lines shown on index pages
MAX_LINES_SHOWN = 6

View file

@ -0,0 +1,217 @@
[test's config]
MAIN_DOMAIN = 4chan.org
PHP_SERVER = https://sys.4chan.org/
CAPTCHA_ALLOW_BYPASS = yes
;ENABLE_PAINTERJS = yes
;ENABLE_OEKAKI_REPLAYS = yes
;AUTOARCHIVE_CAP = 3
;S_ANONAME = =
;MOBILE_IMG_RESIZE = yes
; maximum number of reposted live reply images, 0 for no limit
MAX_IMG_REPOST_COUNT = 0
JSON_TAIL_SIZE = 5
REPLIES_SHOWN = 5
ADS_BIDGLASS = no
ADS_DANBO = no
;AD_EMBEDEARLY = <script src="//cdn-s2s.buysellads.net/pub/4channel.js" data-cfasync="false"></script><script>BSAS2S_targeting.push(['board', [ '{{BOARD_DIR}}' ]])</script>
; content abc mobile inter-replies
;AD_RC_TOP = 107704
;AD_RC_TOP_MOBILE = 107761
;AD_INTERTHREAD_ENABLED = yes
; Text-only mode
;TEXT_ONLY = yes
; Allow thread OPs to have files when in TEXT_ONLY mode
;TEXT_ONLY_ALLOW_OP = no
;PERMASAGE_HOURS = 0
;COM_REGEX = no
;S_INVALID_COM = Your post must contain at least one valid URL
; Event CSS. Name must correspond to a stylesheet file.
;CSS_EVENT_NAME = spooky
;ROBOT9000 = yes
;ROBOT9000_POSTS = r9k_posts
;ROBOT9000_MUTES = r9k_mutes
OP_MARKUP = yes
;MAX_IMGRES = 3
MAX_USER_THREADS = 50
;MAX_USER_THREADS_PERIOD = 24
SQLLOGMD5 = f_md5
;UPLOAD_BOARD = yes
;GIF_ONLY = yes
;FORTUNE_TRIP = yes
;CAPTCHA = no
;DICE_ROLL = yes
;FORCED_ANON = yes
; Maximum upload size in KB
MAX_KB = 4096
; Maximum filesize for webm files. Must be <= MAX_KB
MAX_WEBM_FILESIZE = 4096
; Maximum duration of a video stream in seconds
;MAX_WEBM_DURATION = 30
ENABLE_WEBM_AUDIO = yes
;JSMATH = yes
META_DESCRIPTION = /test/ - Testing
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,test,testing
;PASS_POST_ONLY = yes
;PARTY = yes
;PARTY_IMAGE = xmashat.gif
;CSS_EVENT_NAME = tomorrow
;CSS_EVENT_VERSION = 1
;STICKY_CAP = 3
ENABLE_ARCHIVE = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
;ARCHIVE_MAX_AGE = 0
ARCHIVE_REBUILD_DELAY = 60
EMBEDEARLY =
;PAGE_MAX = 1
; Threads per page
;DEF_PAGES = 3
; Maximum number of entries before oldest thread is pruned
LOG_MAX = 500
;EXPIRE_NEGLECTED = no
; Disable lockdown mode for /test/
LOCKDOWN = no
CLEANUP_UPLOADS = yes
NOSCRIPT_CAPTCHA_ONLY = no
; Show poster's unique ID based on IP and date, if email field is blank
;DISP_ID = yes
; If DISP_ID is enabled, make IDs per-thread instead of per-board?
;DISP_ID_PER_THREAD = yes
; If DISP_ID is enabled, stop ID from being Heaven when sage is used
;DISP_ID_NO_HEAVEN = yes
SHOW_BLOTTER = yes
S_RULES =
CODE_TAGS = yes
SJIS_TAGS = no
STRIP_EXIF = yes
;SHOW_COUNTRY_FLAGS = yes
;ENABLE_BOARD_FLAGS = yes
; If not set, BOARD_DIR will be used.
; Flag settings are inside lib/flags_*.php
; Flag images and CSS files are inside image/flags/* on STATIC_SERVER
;BOARD_FLAGS_TYPE = pol
;CSS_VERSION_BOARD_FLAGS = 1
;PREUPLOAD_CAPTCHA = yes
[General Locations]
; The default value for BOARD_DIR is automatically set by config.php.
; it can be overridden, but it can't be defined as any useful value in this file.
; Directory name of this board relative to DOCUMENT_ROOT
; e.g. "b", "e", "hr"
BOARD_DIR = test
; The category
CATEGORY = ws
; CloudFlare API
;CLOUDFLARE_PURGE_ON_DEL = no
; Enable code tags
;CODE_TAGS = yes
; The title of the image board
TITLE = /test/ - Test
; Text to be shown at the top of each board
;GLOBAL_MSG_FILE = /www/global/globalmsg.test.txt
; Paths of header and fooder
NAV_TXT = /www/global/yotsuba/header.txt
NAV2_TXT = /www/global/yotsuba/footer.txt
[Features and related config]
; Enable recording of seconds in the date (changing this does not affect old posts)
SHOW_SECONDS = yes
SPOILERS = yes
WORD_FILT = yes
FAVICON = //s.4cdn.org/image/favicon-test.ico
ENABLE_CATALOG = yes
[Misc]
USE_RSS = no
; JSON Stuff
ENABLE_JSON = yes
ENABLE_JSON_INDEXES = no
ENABLE_JSON_CATALOG = no
ENABLE_JSON_THREADS = no
; Enable EXIF parsing during post (needs /www/global/bin/exiftags)
ENABLE_EXIF = yes
[Testing]
SQL_DEBUG = yes
TEST_BOARD = yes
RENZOKU3 = 30
TENSORCHAN_MODE = 2
TENSORCHAN_LOG_ONLY = no
;AD_MIDDLE_PLEA =
;AD_BOTTOM_PLEA =
;RECORD_POSTS = no
;PROFILING = no
;PROCESSLIST = no
;META_BOARD = yes
;STRIP_TRIPCODE = yes

View file

@ -0,0 +1,46 @@
[tg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/tg/ - Traditional Games&quot; is 4chan's imageboard for discussing traditional gaming, such as board games and tabletop RPGs.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,d&d,warhammer,traditional games,board games,quests
; The board's category
CATEGORY = ws
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-tg1.png,spoiler-tg2.png}}
; How many custom spoilers?
SPOILER_NUM = 2
; Allow PDF upload and thumbnailing (needs /usr/local/bin/gs)
ENABLE_PDF = yes
; Allow rolling of dice
DICE_ROLL = yes
; Permasage threads after X hours. 0 to disable.
;PERMASAGE_HOURS = 168
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
[Misc]
; Rules below form (tip: use backslash to continue to next line)
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Additional supported file types are: PDF</li>\
<li>Roll dice with "dice+<strong>number</strong>d<strong>faces</strong>" in the options field (without quotes).</li>

View file

@ -0,0 +1,18 @@
[toy's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Permasage threads after X hours. 0 to disable.
; 14 days
PERMASAGE_HOURS = 336
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/toy/ - Toys&quot; is 4chan's imageboard for talking about all kinds of toys!
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,toy,toys,figures
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,42 @@
[trash's config]
AD_JUICY_TOP_CATALOG = 665069
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/trash/ - Off-topic&quot; is 4chan's imageboard jail for off-topic threads.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,anonymous,random,memes
; The board's category
CATEGORY = nws
; Remove the threads least recently replied to
EXPIRE_NEGLECTED = yes
; Enable archiving of expired posts?
ENABLE_ARCHIVE = no
; skip doubles enabled at /b/ postcount ~381720221, disabled at ~584248512
SKIP_DOUBLES = no
; Show number of unique IPs in the post log
SHOW_UNIQUES = no
; Hide name and subject field
;FORCED_ANON = yes
; Show poster's unique ID based on IP and date, if email field is blank
DISP_ID = no
; Strip tripcodes from names
;STRIP_TRIPCODE = yes
; Allow credit allocation for captcha bypassing.
CAPTCHA_ALLOW_BYPASS = no
[Misc]
SUBTITLE = The stories and information posted here are artistic works of fiction and falsehood.<br>Only a fool would take anything posted here as fact.

View file

@ -0,0 +1,27 @@
[trv's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 10000
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/trv/ - Travel&quot; is 4chan's imageboard dedicated to travel and the countries of the world.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,travel,japan,vacation,world
; The board's category
CATEGORY = ws
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Maximum file size allowed is {{MAX_KB}} KB.</li>\
<li>Images greater than {{MAX_DIMENSION}}x{{MAX_DIMENSION}} pixels are not allowed.</li>

View file

@ -0,0 +1,35 @@
[tv's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 250
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/tv/ - Television &amp; Film&quot; is 4chan's imageboard dedicated to the discussion of television and film.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,tv,television,film,movies,celebrity
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-tv1.png,spoiler-tv2.png,spoiler-tv3.png,spoiler-tv4.png,spoiler-tv5.png}}
; How many custom spoilers?
SPOILER_NUM = 5
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2

View file

@ -0,0 +1,27 @@
[u's config]
[Advertisements]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/u/ - Yuri&quot; is 4chan's imageboard for yuri hentai images.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,japan,hentai,yuri
; The board's category
CATEGORY = nws
; Expire least recently replied threads
EXPIRE_NEGLECTED = yes
; Enable spoilers
SPOILERS = yes

View file

@ -0,0 +1,59 @@
[v's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; Threads per page
DEF_PAGES = 20
[Temporary]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 170
;EMBED_INDEX = <center><iframe style="display:none;" width="640" height="360" src="https://www.youtube.com/embed/zwHZwvTdnPI?autoplay=1&amp;loop=1&amp;playlist=zwHZwvTdnPI" frameborder="0"></iframe></center>
[Features and related config]
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2
; Don't allow user deletion of threads
NO_DELETE_OP = yes
;skip doubles enabled on /v/ at ~129889805
SKIP_DOUBLES = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-v1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/v/ - Video Games&quot; is 4chan's imageboard dedicated to the discussion of PC and console video games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam,vidya
; The board's category
CATEGORY = ws
; rebuild with rebuildd instead of each post
STATIC_REBUILD = 1
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
; Time in seconds after thread creation during which the OP cannot bump his thread
RENZOKU_OP_TIME = 600
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,64 @@
[vg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
;skip doubles enabled on /vg/ at 93794
SKIP_DOUBLES = yes
; Require a subject
REQUIRE_SUBJECT = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 140
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-vg1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vg/ - Video Game Generals&quot; is 4chan's imageboard dedicated to the discussion of PC and console video games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam
; The board's category
CATEGORY = ws
; rebuild with rebuildd instead of each post
STATIC_REBUILD = 1
MAX_W = 200
MAX_H = 200
[Limits]
; Number of bumps
MAX_RES = 750
; Maximum amount of image replies in a thread
MAX_IMGRES = 375
; Maximum number of pages (overrides LOG_MAX; 0 = disable)
;PAGE_MAX = 5
; Threads per page
DEF_PAGES = 20
; Maximum number of lines allowed in a post
MAX_LINES = 100
; Maximum number of replies shown to a thread on index pages
REPLIES_SHOWN = 0
; Seconds between intra thread posts
RENZOKU = 90
; Seconds between intra thread image posts
RENZOKU2 = 120

View file

@ -0,0 +1,41 @@
[vip's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
PASS_POST_ONLY = yes
JSON_TAIL_SIZE = 50
SHOW_THREAD_UNIQUES = no
[Features and related config]
; Enable Oekaki board features
ENABLE_PAINTERJS = yes
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler.png
; How many custom spoilers?
;SPOILER_NUM = 0
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vip/ - Very Important Posts&quot; is 4chan's imageboard for Pass users.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,random
; The board's category
CATEGORY = ws
;EMBED_INDEX = <iframe style="display:none" width="0" height="0" src="https://www.youtube.com/embed/YQYPmtK03c0?start=1&autoplay=1&loop=1&playlist=YQYPmtK03c0" frameborder="0"></iframe>
SJIS_TAGS = yes
[Limits]
MAX_RES = 300
MAX_IMGRES = 300

View file

@ -0,0 +1,39 @@
[vm's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Temporary]
JSON_TAIL_SIZE = 50
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 120
[Features and related config]
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-v1.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vmg/ - Video Games/Multiplayer&quot; is 4chan's imageboard dedicated to the discussion of multiplayer video games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam,vidya
; The board's category
CATEGORY = ws
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,39 @@
[vrpg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Temporary]
JSON_TAIL_SIZE = 50
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 120
[Features and related config]
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-vmg1.png,spoiler-vmg2.png,spoiler-vmg3.png}}
; How many custom spoilers?
SPOILER_NUM = 3
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vmg/ - Video Games/Mobile&quot; is 4chan's imageboard dedicated to the discussion of video games on mobile devices.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam,vidya
; The board's category
CATEGORY = ws
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,26 @@
[vp's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
JSON_TAIL_SIZE = 50
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vp/ - Pok&eacute;mon&quot; is 4chan's imageboard dedicated to discussing the Pok&eacute;mon series of video games and shows.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,nintendo,wii,ds,video games,pokemon,pikachu
; The board's category
CATEGORY = ws
; The title of the image board
;TITLE = /vp/ - Pok&eacute;mon
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-vp1.png
; How many custom spoilers?
SPOILER_NUM = 1

View file

@ -0,0 +1,32 @@
[vr's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; Permasage threads after X hours. 0 to disable.
PERMASAGE_HOURS = 336
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vr/ - Retro Games&quot; is 4chan's imageboard for discussing retro console video games and classic arcade games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,games,video,retro,arcade,classics,consoles
; The board's category
CATEGORY = ws
;skip doubles enabled on /vr/ at 743
SKIP_DOUBLES = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-vr1.png,spoiler-vr2.png}}
; How many custom spoilers?
SPOILER_NUM = 2
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,39 @@
[vrpg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Temporary]
JSON_TAIL_SIZE = 50
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 160
[Features and related config]
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-vrpg1.png,spoiler-vrpg2.png,spoiler-vrpg3.png}}
; How many custom spoilers?
SPOILER_NUM = 3
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vrpg/ - Video Games/RPG&quot; is 4chan's imageboard dedicated to the discussion of role-playing video games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam,vidya
; The board's category
CATEGORY = ws
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,39 @@
[vst's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Temporary]
JSON_TAIL_SIZE = 50
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 120
[Features and related config]
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/spoiler-vst.png
; How many custom spoilers?
SPOILER_NUM = 1
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vst/ - Video Games/Strategy&quot; is 4chan's imageboard dedicated to the discussion of strategy video games.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,consoles,playstation,psp,wii,ds,xbox,video games,mmorpg,wii u,pc game,ps3,ps4,xbone,xbox one,vita,nintendo,microsoft,steam,vidya
; The board's category
CATEGORY = ws
; maximum number of threads per user, per board
MAX_USER_THREADS = 3
[Limits]
MAX_RES = 500
MAX_IMGRES = 300

View file

@ -0,0 +1,47 @@
[vt's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
AUTOARCHIVE_CAP = 1500
[Features and related config]
JSON_TAIL_SIZE = 50
MOBILE_IMG_RESIZE = yes
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/vt/ - Virtual YouTubers&quot; is 4chan's board for discussing virtual YouTubers (&quot;VTubers&quot;).
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,vtuber,youtuber
; The board's category
CATEGORY = ws
; Don't allow user deletion of threads
NO_DELETE_OP = yes
; Seconds between new threads
RENZOKU3 = 3600
; Maximum amount of image replies in a thread
MAX_IMGRES = 300
; Enable spoilers
SPOILERS = yes
; URL of thumbnail for spoilers
SPOILER_THUMB = {{STATIC_SERVER}}image/{{!rand spoiler-vt1.png,spoiler-vt2.png,spoiler-vt3.png}}
; How many custom spoilers?
SPOILER_NUM = 3
MAX_COM_CHARS = 5000
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 72
; Use inference server to detect NSFW content.
; 0 = disabled, 1 = OPs only, 2 = All posts
TENSORCHAN_MODE = 2

View file

@ -0,0 +1,31 @@
[w's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Limits]
; Maximum upload size in KB
MAX_KB = 6144
; Minimum dimensions of an image
MIN_W = 480
MIN_H = 600
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/w/ - Anime/Wallpapers&quot; is 4chan's imageboard for posting Japanese anime wallpapers.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,japan,japanese,anime,wallpaper,wallpapers,desktop
; The board's category
CATEGORY = ws
; override "worksafe" defaults to match /wg/
MAX_IMGRES = 300
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Maximum file size allowed is {{MAX_KB}} KB.</li>\
<li>Images smaller than {{MIN_W}}x{{MIN_H}} pixels are not allowed.</li>

View file

@ -0,0 +1,31 @@
[wg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5148,5f599fefc6c73,0,2,5149,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5187,5f5ef92eec034,176,2,5188,5f5ef93fac7ed
;ADS_BIDGLASS_TOP_DESKTOP_FB = <div id="nwstfb" data-pid="10011953" data-w="728" data-h="90"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
;ADS_BIDGLASS_TOP_MOBILE_FB = <div id="nwstfb" data-pid="10001654" data-w="300" data-h="250"><\/div><script src="//s.4cdn.org/js/house_banners_nws.js"><\/script>
[Limits]
; Maximum upload size in KB
MAX_KB = 6144
; Minimum dimensions of an image
MIN_W = 480
MIN_H = 600
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/wg/ - Wallpapers/General&quot; is 4chan's imageboard for posting general wallpapers.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,general,wallpaper,wallpapers,desktop
; The board's category
CATEGORY = nws
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Maximum file size allowed is {{MAX_KB}} KB.</li>\
<li>Images smaller than {{MIN_W}}x{{MIN_H}} pixels are not allowed.</li>

View file

@ -0,0 +1,44 @@
[wsg's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
; maximum number of reposted live reply images, 0 for no limit
MAX_IMG_REPOST_COUNT = 3
[Limits]
; Maximum upload size in KB
MAX_KB = 6144
; Maximum filesize for webm files. Must be <= MAX_KB
MAX_WEBM_FILESIZE = 6144
; Maximum duration of a video stream in seconds
MAX_WEBM_DURATION = 400
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/wsg/ - Worksafe GIF&quot; is 4chan's imageboard dedicated to sharing worksafe animated GIFs and WEBMs.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,animated,gif,gifs,webm,webms
; The board's category
CATEGORY = ws
; Detect and handle embedded data in file uploads:
; - Rejects PNGs and JPGs.
; - Removes embedded data from GIFs, modifying the original file.
CLEANUP_UPLOADS = no
; Allow audio streams in webm
ENABLE_WEBM_AUDIO = yes
; Only allow gifs
GIF_ONLY = yes
; Archived threads max age in hours for archive trimming. 0 disables trimming.
ARCHIVE_MAX_AGE = 48
[Misc]
S_RULES = <li>Please read the <a href="//www.4chan.org/rules#{{BOARD_DIR}}">Rules</a> and <a href="//www.4chan.org/faq">FAQ</a> before posting.</li>\
<li>Supported file types are: GIF, WEBM, MP4</li>

View file

@ -0,0 +1,23 @@
[wsr's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/wsr/ - Worksafe Requests&quot; is 4chan's imageboard dedicated to fulfilling non-NSFW requests.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,request
; The board's category
CATEGORY = ws
[Limits]
; Maximum upload size in KB
MAX_KB = 8192
; Maximum width or height of an image (MUST be 11000 or less)
MAX_DIMENSION = 10000
ENABLE_WEBM_AUDIO = yes

View file

@ -0,0 +1,14 @@
[x's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/x/ - Paranormal&quot; is 4chan's imageboard for the discussion of paranormal, spooky pictures and conspiracy theories.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,paranormal,spooky,creepy,halloween,conspiracies,conspiracy theories
; The board's category
CATEGORY = ws

View file

@ -0,0 +1,14 @@
[xs's config]
; domainid,sizeid,zoneid,k (desktop then mobile)
AD_BIDGEAR_TOP = 176,1,5050,5f599fefc6c73,176,2,470,5f59a00f01673
AD_BIDGEAR_BOTTOM = 176,1,5078,5f5ef92eec034,176,2,5079,5f5ef93fac7ed
[Features and related config]
; Text to go inside of the meta-description tag
META_DESCRIPTION = &quot;/xs/ - Extreme Sports&quot; is 4chan's imageboard imageboard dedicated to the discussion of extreme sports.
; Text to go inside of the meta-keywords tag
META_KEYWORDS = imageboard,worksafe,sports,alternative,skateboarding,surfing,climbing,airsoft,paintball
; The board's category
CATEGORY = ws

Some files were not shown because too many files have changed in this diff Show more