Advertisement
Guest User

Untitled

a guest
Apr 28th, 2016
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.85 KB | None | 0 0
  1. <?php
  2.  
  3. /*
  4. * Instance Configuration
  5. * ----------------------
  6. * Edit this file and not config.php for imageboard configuration.
  7. *
  8. * You can copy values from config.php (defaults) and paste them here.
  9. */
  10. require_once "lib/htmlpurifier-4.5.0/library/HTMLPurifier.auto.php";
  11. require_once "8chan-functions.php";
  12.  
  13. $config['db']['server'] = 'localhost';
  14. $config['db']['database'] = '8chan';
  15. $config['db']['prefix'] = '';
  16. $config['db']['user'] = 'root';
  17. $config['db']['password'] = '';
  18. $config['timezone'] = 'UTC';
  19. $config['cache']['enabled'] = 'apc';
  20.  
  21.  
  22. $config['cookies']['mod'] = 'mod';
  23. $config['cookies']['salt'] = '';
  24.  
  25. $config['spam']['hidden_inputs_max_pass'] = 128;
  26. $config['spam']['hidden_inputs_expire'] = 60 * 60 * 4; // three hours
  27.  
  28. $config['flood_time'] = 5;
  29. $config['flood_time_ip'] = 2;
  30. $config['flood_time_same'] = 2;
  31. $config['max_body'] = 5000;
  32. $config['reply_limit'] = 250;
  33. $config['max_links'] = 20;
  34. $config['thumb_width'] = 255;
  35. $config['thumb_height'] = 255;
  36. $config['max_width'] = 10000;
  37. $config['max_height'] = 10000;
  38. $config['threads_per_page'] = 15;
  39. $config['max_pages'] = 10;
  40. $config['threads_preview'] = 5;
  41. $config['root'] = '/';
  42. $config['secure_trip_salt'] = '';
  43. $config['always_noko'] = true;
  44. $config['allow_no_country'] = true;
  45. $config['thread_subject_in_title'] = true;
  46. $config['spam']['hidden_inputs_max_pass'] = 128;
  47. $config['ayah_enabled'] = true;
  48.  
  49. include "secrets.php";
  50.  
  51. // Image shit
  52. $config['thumb_method'] = 'gm+gifsicle';
  53. $config['thumb_ext'] = '';
  54. $config['thumb_keep_animation_frames'] = 100;
  55. $config['show_ratio'] = true;
  56. //$config['allow_upload_by_url'] = true;
  57. $config['max_filesize'] = 1024 * 1024 * 5; // 5MB
  58. $config['disable_images'] = false;
  59. $config['spoiler_images'] = true;
  60. $config['image_reject_repost'] = true;
  61. $config['allowed_ext_files'][] = 'webm';
  62. $config['webm']['use_ffmpeg'] = true;
  63. $config['webm']['allow_audio'] = true;
  64. $config['webm']['max_length'] = 60 * 15;
  65.  
  66. // Mod shit
  67. $config['mod']['groups'][25] = 'Supermod';
  68. define_groups();
  69. $config['mod']['capcode'][MOD] = array('Board Volunteer');
  70. $config['mod']['capcode'][SUPERMOD] = array('Global Volunteer');
  71. $config['custom_capcode']['Admin'] = array(
  72. '<span class="capcode" style="color:blue;font-weight:bold"> <i class="fa fa-wheelchair"></i> %s</span>',
  73. );
  74. $config['custom_capcode']['Bear'] = array(
  75. '<span class="capcode" style="color:brown;font-weight:bold"> <img src="/static/paw.svg" height="12" width="12"> %s</span>',
  76. );
  77. //$config['mod']['view_banlist'] = SUPERMOD;
  78. $config['mod']['manageusers'] = SUPERMOD;
  79. $config['mod']['noticeboard_post'] = SUPERMOD;
  80. $config['mod']['search'] = SUPERMOD;
  81. $config['mod']['debug_recent'] = ADMIN;
  82. $config['mod']['debug_antispam'] = ADMIN;
  83. $config['mod']['modlog'] = SUPERMOD;
  84. $config['mod']['recent_reports'] = 65535;
  85.  
  86. // Board shit
  87. $config['max_links'] = 40;
  88. $config['poster_id_length'] = 6;
  89. $config['ayah_enabled'] = true;
  90. $config['url_banner'] = '/banners.php';
  91. //$config['default_stylesheet'] = array('Notsuba', 'notsuba.css');
  92. $config['additional_javascript'][] = 'js/jquery.min.js';
  93. $config['additional_javascript'][] = 'js/jquery.tablesorter.min.js';
  94. $config['additional_javascript'][] = 'js/options.js';
  95. $config['additional_javascript'][] = 'js/style-select.js';
  96. $config['additional_javascript'][] = 'js/options/general.js';
  97. $config['additional_javascript'][] = 'js/post-hover.js';
  98. $config['additional_javascript'][] = 'js/favorites.js';
  99. $config['additional_javascript'][] = 'js/show-op.js';
  100. $config['additional_javascript'][] = 'js/hide-threads.js';
  101. $config['additional_javascript'][] = 'js/smartphone-spoiler.js';
  102. $config['additional_javascript'][] = 'js/inline-expanding.js';
  103. $config['additional_javascript'][] = 'js/show-backlinks.js';
  104. $config['additional_javascript'][] = 'js/webm-settings.js';
  105. $config['additional_javascript'][] = 'js/expand-video.js';
  106. $config['additional_javascript'][] = 'js/treeview.js';
  107. $config['additional_javascript'][] = 'js/quick-post-controls.js';
  108. $config['additional_javascript'][] = 'js/expand-too-long.js';
  109. $config['additional_javascript'][] = 'js/settings.js';
  110. $config['additional_javascript'][] = 'js/fix-report-delete-submit.js';
  111. $config['additional_javascript'][] = 'js/hide-images.js';
  112. $config['additional_javascript'][] = 'js/expand-all-images.js';
  113. $config['additional_javascript'][] = 'js/local-time.js';
  114. $config['additional_javascript'][] = 'js/no-animated-gif.js';
  115. $config['additional_javascript'][] = 'js/expand.js';
  116. $config['additional_javascript'][] = 'js/titlebar-notifications.js';
  117. $config['additional_javascript'][] = 'js/auto-reload.js';
  118. $config['additional_javascript'][] = 'js/quick-reply.js';
  119. $config['additional_javascript'][] = 'js/options/user-css.js';
  120. $config['additional_javascript'][] = 'js/options/user-js.js';
  121. $config['additional_javascript'][] = 'js/forced-anon.js';
  122. $config['additional_javascript'][] = 'js/toggle-locked-threads.js';
  123. $config['additional_javascript'][] = 'js/toggle-images.js';
  124. $config['additional_javascript'][] = 'js/mobile-style.js';
  125. $config['additional_javascript'][] = 'js/id_highlighter.js';
  126. $config['additional_javascript'][] = 'js/id_colors.js';
  127.  
  128. $config['font_awesome_css'] = '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css';
  129.  
  130. $config['stylesheets']['Dark'] = 'dark.css';
  131. $config['stylesheets']['Photon'] = 'photon.css';
  132.  
  133. $config['stylesheets_board'] = true;
  134. $config['markup'][] = array("/^[ |\t]*==(.+?)==[ |\t]*$/m", "<span class=\"heading\">\$1</span>");
  135. $config['markup'][] = array("/\[spoiler\](.+?)\[\/spoiler\]/", "<span class=\"spoiler\">\$1</span>");
  136. $config['markup'][] = array("/~~(.+?)~~/", "<s>\$1</s>");
  137.  
  138. $config['boards'] = array(array('<i class="fa fa-home" title="Home"></i>' => '/', '<i class="fa fa-tags" title="Boards"></i>' => '/boards.html', '<i class="fa fa-question" title="FAQ"></i>' => '/faq.html', '<i class="fa fa-random" title="Random"></i>' => '/random.php', '<i class="fa fa-plus" title="New board"></i>' => '/create.php', '<i class="fa fa-search" title="Search"></i>' => '/search.php', '<i class="fa fa-cog" title="Manage board"></i>' => '/mod.php', '<i class="fa fa-quote-right" title="Chat"></i>' => 'https://qchat.rizon.net/?channels=#8chan'), array('b', 'meta', 'int'), array('v', 'a', 'tg', 'fit', 'pol', 'tech', 'mu', 'co', 'sp', 'boards'), array('<i class="fa fa-twitter" title="Twitter"></i>'=>'https://twitter.com/infinitechan'));
  139.  
  140. $config['footer'][] = 'Contribute to 8chan.co development at <a href="https://github.com/ctrlcctrlv/8chan">github</a>';
  141. $config['footer'][] = 'To make a DMCA request or report illegal content, please email <a href="mailto:admin@8chan.co">admin@8chan.co</a> or use the "Global Report" functionality on every page.';
  142.  
  143. $config['search']['enable'] = true;
  144.  
  145. //$config['debug'] = true;
  146. $config['syslog'] = true;
  147.  
  148. $config['wordfilters'][] = array('\rule', ''); // 'true' means it's a regular expression
  149.  
  150. if (!function_exists('prettify_textarea')){
  151. function prettify_textarea($s){
  152. return str_replace("\t", '&#09;', str_replace("\n", '&#13;&#10;', htmlentities($s)));
  153. }
  154. }
  155.  
  156. if (!function_exists('purify')){
  157. function purify($s){
  158. $config = HTMLPurifier_Config::createDefault();
  159. $purifier = new HTMLPurifier($config);
  160. $clean_html = $purifier->purify($s);
  161. return $clean_html;
  162. }
  163. }
  164.  
  165. $config['mod']['custom_pages']['/banners/(\%b)'] = function($b) {
  166. global $config, $mod, $board;
  167. require_once 'inc/image.php';
  168.  
  169. if (!in_array($b, $mod['boards']) and $mod['boards'][0] != '*')
  170. error($config['error']['noaccess']);
  171.  
  172. if (!openBoard($b))
  173. error("Could not open board!");
  174.  
  175. $dir = 'static/banners/'.$b;
  176.  
  177. if (!is_dir($dir)){
  178. mkdir($dir, 0777, true);
  179. }
  180.  
  181.  
  182. if (isset($_FILES['file'])){
  183. $upload = $_FILES['file']['tmp_name'];
  184. $banners = array_diff(scandir($dir), array('..', '.'));
  185.  
  186. if (!is_readable($upload))
  187. error($config['error']['nomove']);
  188.  
  189. $id = time() . substr(microtime(), 2, 3);
  190. $extension = strtolower(mb_substr($_FILES['file']['name'], mb_strrpos($_FILES['file']['name'], '.') + 1));
  191.  
  192. if (!in_array($extension, array('jpg','jpeg','png','gif'))){
  193. error('Not an image extension.');
  194. }
  195.  
  196. if (filesize($upload) > 512000){
  197. error('File too large!');
  198. }
  199.  
  200. if (!$size = @getimagesize($upload)) {
  201. error($config['error']['invalidimg']);
  202. }
  203.  
  204. if ($size[0] != 300 or $size[1] != 100){
  205. error('Image wrong size!');
  206. }
  207. if (sizeof($banners) >= 20) {
  208. error('Too many banners.');
  209. }
  210.  
  211. copy($upload, "$dir/$id.$extension");
  212. }
  213.  
  214. if (isset($_POST['delete'])){
  215. foreach ($_POST['delete'] as $i => $d){
  216. if (!preg_match('/[0-9+]\.(png|jpeg|jpg|gif)/', $d)){
  217. error('Nice try.');
  218. }
  219. unlink("$dir/$d");
  220. }
  221. }
  222.  
  223. $banners = array_diff(scandir($dir), array('..', '.'));
  224. mod_page(_('Edit banners'), 'mod/banners.html', array('board'=>$board,'banners'=>$banners,'token'=>make_secure_link_token('banners/'.$board['uri'])));
  225.  
  226. };
  227.  
  228. $config['mod']['custom_pages']['/settings/(\%b)'] = function($b) {
  229. global $config, $mod;
  230.  
  231. if (!in_array($b, $mod['boards']) and $mod['boards'][0] != '*')
  232. error($config['error']['noaccess']);
  233.  
  234. if (!openBoard($b))
  235. error("Could not open board!");
  236.  
  237. $possible_languages = array_diff(scandir('inc/locale/'), array('..', '.', '.tx', 'README.md'));
  238.  
  239. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  240. $title = $_POST['title'];
  241. $subtitle = $_POST['subtitle'];
  242. $country_flags = isset($_POST['country_flags']) ? 'true' : 'false';
  243. $field_disable_name = isset($_POST['field_disable_name']) ? 'true' : 'false';
  244. $enable_embedding = isset($_POST['enable_embedding']) ? 'true' : 'false';
  245. $force_image_op = isset($_POST['force_image_op']) ? 'true' : 'false';
  246. $disable_images = isset($_POST['disable_images']) ? 'true' : 'false';
  247. $poster_ids = isset($_POST['poster_ids']) ? 'true' : 'false';
  248. $show_sages = isset($_POST['show_sages']) ? 'true' : 'false';
  249. $auto_unicode = isset($_POST['auto_unicode']) ? 'true' : 'false';
  250. $meta_noindex = isset($_POST['meta_noindex']) ? 'true' : 'false';
  251. $allow_roll = isset($_POST['allow_roll']) ? 'true' : 'false';
  252. $image_reject_repost = isset($_POST['image_reject_repost']) ? 'true' : 'false';
  253. $allow_flash = isset($_POST['allow_flash']) ? '$config[\'allowed_ext_files\'][] = \'swf\';' : '';
  254. $code_tags = isset($_POST['code_tags']) ? '$config[\'additional_javascript\'][] = \'js/code_tags/run_prettify.js\';$config[\'markup\'][] = array("/\[code\](.+?)\[\/code\]/ms", "<code><pre class=\'prettyprint\' style=\'display:inline-block\'>\$1</pre></code>");' : '';
  255. $katex = isset($_POST['katex']) ? '$config[\'katex\'] = true;$config[\'additional_javascript\'][] = \'js/katex/katex.min.js\'; $config[\'markup\'][] = array("/\[tex\](.+?)\[\/tex\]/ms", "<span class=\'tex\'>\$1</span>"); $config[\'additional_javascript\'][] = \'js/katex-enable.js\';' : '';
  256. $oekaki_js = <<<OEKAKI
  257. \$config['additional_javascript'][] = 'js/jquery-ui.custom.min.js';
  258. \$config['additional_javascript'][] = 'js/ajax.js';
  259. \$config['additional_javascript'][] = 'js/wPaint/lib/wColorPicker.min.js';
  260. \$config['additional_javascript'][] = 'js/wPaint/wPaint.min.js';
  261. \$config['additional_javascript'][] = 'js/wPaint/plugins/main/wPaint.menu.main.min.js';
  262. \$config['additional_javascript'][] = 'js/wPaint/plugins/text/wPaint.menu.text.min.js';
  263. \$config['additional_javascript'][] = 'js/wPaint/plugins/shapes/wPaint.menu.main.shapes.min.js';
  264. \$config['additional_javascript'][] = 'js/wPaint/plugins/file/wPaint.menu.main.file.min.js';
  265. \$config['additional_javascript'][] = 'js/wpaint.js';
  266. \$config['additional_javascript'][] = 'js/upload-selection.js';
  267. OEKAKI;
  268. $oekaki = isset($_POST['oekaki']) ? $oekaki_js : '';
  269. if ($_POST['locale'] !== 'en' && in_array($_POST['locale'], $possible_languages)) {
  270. $locale = "\$config['locale'] = '{$_POST['locale']}.UTF-8';
  271. \$config['file_script'] = '$b/main.js';";
  272. } else {
  273. $locale = '';
  274. }
  275.  
  276. if (isset($_POST['max_images']) && (int)$_POST['max_images'] && (int)$_POST['max_images'] <= 5) {
  277. $_POST['max_images'] = (int)$_POST['max_images'];
  278. $multiimage = "\$config['max_images'] = {$_POST['max_images']};
  279. \$config['file_script'] = '$b/main.js';
  280. \$config['additional_javascript'][] = 'js/multi-image.js';";
  281. } else {
  282. $multiimage = '';
  283. }
  284.  
  285. $anonymous = base64_encode($_POST['anonymous']);
  286. $blotter = base64_encode(purify(html_entity_decode($_POST['blotter'])));
  287. $add_to_config = @file_get_contents($b.'/extra_config.php');
  288. $replace = '';
  289.  
  290. if (isset($_POST['replace'])) {
  291. if (count($_POST['replace']) == count($_POST['with'])) {
  292. foreach ($_POST['replace'] as $i => $r ) {
  293. if ($r !== '') {
  294. $w = $_POST['with'][$i];
  295. $replace .= '$config[\'wordfilters\'][] = array(base64_decode(\'' . base64_encode($r) . '\'), base64_decode(\'' . base64_encode($w) . '\'));';
  296. }
  297. }
  298. }
  299. }
  300.  
  301. if (!(strlen($title) < 40))
  302. error('Invalid title');
  303. if (!(strlen($subtitle) < 200))
  304. error('Invalid subtitle');
  305.  
  306. $query = prepare('UPDATE ``boards`` SET `title` = :title, `subtitle` = :subtitle WHERE `uri` = :uri');
  307. $query->bindValue(':title', $title);
  308. $query->bindValue(':subtitle', $subtitle);
  309. $query->bindValue(':uri', $b);
  310. $query->execute() or error(db_error($query));
  311.  
  312.  
  313. $config_file = <<<EOT
  314. <?php
  315. \$config['country_flags'] = $country_flags;
  316. \$config['field_disable_name'] = $field_disable_name;
  317. \$config['enable_embedding'] = $enable_embedding;
  318. \$config['force_image_op'] = $force_image_op;
  319. \$config['disable_images'] = $disable_images;
  320. \$config['poster_ids'] = $poster_ids;
  321. \$config['show_sages'] = $show_sages;
  322. \$config['auto_unicode'] = $auto_unicode;
  323. \$config['meta_noindex'] = $meta_noindex;
  324. \$config['allow_roll'] = $allow_roll;
  325. \$config['image_reject_repost'] = $image_reject_repost;
  326. \$config['anonymous'] = base64_decode('$anonymous');
  327. \$config['blotter'] = base64_decode('$blotter');
  328. \$config['stylesheets']['Custom'] = 'board/$b.css';
  329. \$config['default_stylesheet'] = array('Custom', \$config['stylesheets']['Custom']);
  330. $code_tags $katex $oekaki $replace $multiimage $allow_flash
  331. if (\$config['disable_images'])
  332. \$config['max_pages'] = 10000;
  333.  
  334. $locale
  335. $add_to_config
  336. EOT;
  337.  
  338. file_write($b.'/config.php', $config_file);
  339. file_write('stylesheets/board/'.$b.'.css', $_POST['css']);
  340. file_write($b.'/rules.html', Element('page.html', array('title'=>'Rules', 'subtitle'=>'', 'config'=>$config, 'body'=>'<div class="ban">'.purify($_POST['rules']).'</div>')));
  341. file_write($b.'/rules.txt', $_POST['rules']);
  342. openBoard($b);
  343. buildIndex();
  344. buildJavascript();
  345. $query = query(sprintf("SELECT `id` FROM ``posts_%s`` WHERE `thread` IS NULL", $b)) or error(db_error());
  346. while ($post = $query->fetch(PDO::FETCH_ASSOC)) {
  347. buildThread($post['id']);
  348. }
  349. modLog('Edited board settings', $b);
  350. }
  351.  
  352. $query = prepare('SELECT * FROM boards WHERE uri = :board');
  353. $query->bindValue(':board', $b);
  354. $query->execute() or error(db_error($query));
  355. $board = $query->fetchAll()[0];
  356.  
  357. $rules = @file_get_contents($board['uri'] . '/rules.txt');
  358. $css = @file_get_contents('stylesheets/board/' . $board['uri'] . '.css');
  359.  
  360. openBoard($b);
  361.  
  362. if ($config['cache']['enabled'])
  363. cache::delete('board_' . $board['uri']);
  364. cache::delete('all_boards');
  365.  
  366. mod_page(_('Board configuration'), 'mod/settings.html', array('board'=>$board, 'rules'=>prettify_textarea($rules), 'css'=>prettify_textarea($css), 'token'=>make_secure_link_token('settings/'.$board['uri']), 'languages'=>$possible_languages));
  367. };
  368. $config['embedding'] = array(
  369. array(
  370. '/^https?:\/\/(\w+\.)?youtube\.com\/watch\?v=([a-zA-Z0-9\-_]{10,11})(&.+)?$/i',
  371. '<iframe style="float: left;margin: 10px 20px;" width="%%tb_width%%" height="%%tb_height%%" frameborder="0" id="ytplayer" type="text/html" src="https://www.youtube.com/embed/$2"></iframe>'
  372. ),
  373. array(
  374. '/^https?:\/\/(\w+\.)?vimeo\.com\/(\d{2,10})(\?.+)?$/i',
  375. '<object style="float: left;margin: 10px 20px;" width="%%tb_width%%" height="%%tb_height%%"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="https://vimeo.com/moogaloop.swf?clip_id=$2&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="https://vimeo.com/moogaloop.swf?clip_id=$2&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="%%tb_width%%" height="%%tb_height%%"></embed></object>'
  376. ),
  377. array(
  378. '/^https?:\/\/(\w+\.)?dailymotion\.com\/video\/([a-zA-Z0-9]{2,10})(_.+)?$/i',
  379. '<object style="float: left;margin: 10px 20px;" width="%%tb_width%%" height="%%tb_height%%"><param name="movie" value="https://www.dailymotion.com/swf/video/$2"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed type="application/x-shockwave-flash" src="https://www.dailymotion.com/swf/video/$2" width="%%tb_width%%" height="%%tb_height%%" wmode="transparent" allowfullscreen="true" allowscriptaccess="always"></embed></object>'
  380. ),
  381. array(
  382. '/^https?:\/\/(\w+\.)?metacafe\.com\/watch\/(\d+)\/([a-zA-Z0-9_\-.]+)\/(\?.+)?$/i',
  383. '<div style="float:left;margin:10px 20px;width:%%tb_width%%px;height:%%tb_height%%px"><embed flashVars="playerVars=showStats=no|autoPlay=no" src="https://www.metacafe.com/fplayer/$2/$3.swf" width="%%tb_width%%" height="%%tb_height%%" wmode="transparent" allowFullScreen="true" allowScriptAccess="always" name="Metacafe_$2" pluginspage="https://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></div>'
  384. ),
  385. array(
  386. '/^https?:\/\/video\.google\.com\/videoplay\?docid=(\d+)([&#](.+)?)?$/i',
  387. '<embed src="https://video.google.com/googleplayer.swf?docid=$1&hl=en&fs=true" style="width:%%tb_width%%px;height:%%tb_height%%px;float:left;margin:10px 20px" allowFullScreen="true" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>'
  388. ),
  389. array(
  390. '/^https?:\/\/(\w+\.)?vocaroo\.com\/i\/([a-zA-Z0-9]{2,15})$/i',
  391. '<object style="float: left;margin: 10px 20px;" width="148" height="44"><param name="movie" value="https://vocaroo.com/player.swf?playMediaID=$2&autoplay=0"></param><param name="wmode" value="transparent"></param><embed src="https://vocaroo.com/player.swf?playMediaID=$2&autoplay=0" width="148" height="44" wmode="transparent" type="application/x-shockwave-flash"></embed></object>'
  392. )
  393. );
  394.  
  395. $config['gzip_static'] = false;
  396.  
  397. if (!isset($dont_include_dnsbls) && !$dont_include_dnsbls) {
  398. require_once "dnsbls.php";
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement