diff options
author | neptune | 2022-11-25 17:59:09 -0300 |
---|---|---|
committer | neptune | 2022-11-25 17:59:09 -0300 |
commit | b09e855283b8521caa35e1aa0762cf8e986559d4 (patch) | |
tree | 2d1459eba210e2f7415b00d450fbc7cce700ff2f /cgi | |
parent | 0889034f67f8d8cadc98dcbefcd7021b42a00408 (diff) | |
download | weabot-b09e855283b8521caa35e1aa0762cf8e986559d4.tar.gz weabot-b09e855283b8521caa35e1aa0762cf8e986559d4.tar.xz weabot-b09e855283b8521caa35e1aa0762cf8e986559d4.zip |
Actualizado repo
Diffstat (limited to 'cgi')
-rw-r--r-- | cgi/formatting.py | 54 | ||||
-rw-r--r-- | cgi/framework.py | 10 | ||||
-rw-r--r-- | cgi/manage.py | 90 | ||||
-rw-r--r-- | cgi/oekaki.py | 2 | ||||
-rw-r--r-- | cgi/post.py | 88 | ||||
-rw-r--r-- | cgi/templates/board.html | 6 | ||||
-rw-r--r-- | cgi/templates/board.jp.html | 6 | ||||
-rw-r--r-- | cgi/templates/home.html | 2 | ||||
-rw-r--r-- | cgi/templates/mobile/board.html | 12 | ||||
-rw-r--r-- | cgi/templates/mobile/txt_thread.html | 2 | ||||
-rw-r--r-- | cgi/templates/paint.html | 8 | ||||
-rwxr-xr-x | cgi/weabot.py | 51 |
12 files changed, 180 insertions, 151 deletions
diff --git a/cgi/formatting.py b/cgi/formatting.py index 97f44a6..33495a3 100644 --- a/cgi/formatting.py +++ b/cgi/formatting.py @@ -317,12 +317,23 @@ def close_html(message): """ Old retarded version of sanitize_html, it just closes open tags. """ - import BeautifulSoup + #import BeautifulSoup - message = message.encode('utf-8') - soup = BeautifulSoup.BeautifulSoup(message) + #message = message.encode('utf-8') + #soup = BeautifulSoup.BeautifulSoup(message) + + #return str(soup).replace(' ', '').encode('utf-8') - return str(soup).replace(' ', '').encode('utf-8') + try: + l = message.rindex('<') + except ValueError: + return message + test = message[l:] + try: + r = test.rindex('>') + return message + except ValueError: + return message[:l] def sanitize_html(message, decode=True): @@ -375,27 +386,26 @@ def checkWordfilters(message, ip, board): if wordfilter["boards"]: boards = str2boards(wordfilter["boards"]) if not wordfilter["boards"] or board in boards: - if wordfilter['action'] == '0': + if wordfilter['action'] == 0: if not re.search(wordfilter['from'], message, re.DOTALL | re.IGNORECASE) is None: raise UserError(wordfilter['reason']) - elif wordfilter['action'] == '1': + elif wordfilter['action'] == 1: message = re.compile(wordfilter['from'], re.DOTALL | re.IGNORECASE).sub( wordfilter['to'], message) - elif wordfilter['action'] == '2': + elif wordfilter['action'] == 2: # Ban if not re.search(wordfilter['from'], message, re.DOTALL | re.IGNORECASE) is None: - if wordfilter['seconds'] != '0': - until = str(timestamp() + int(wordfilter['seconds'])) + if wordfilter['seconds']: + until = timestamp() + int(wordfilter['seconds']) else: - until = '0' + until = 0 - InsertDb("INSERT INTO `bans` (`ip`, `boards`, `added`, `until`, `staff`, `reason`, `note`, `blind`) VALUES (" + - "INET6_ATON('" + str(ip) + "'), '" + _mysql.escape_string(wordfilter['boards']) + - "', " + str(timestamp()) + ", " + until + ", 'System', '" + _mysql.escape_string(wordfilter['reason']) + - "', 'Word Auto-ban', '"+_mysql.escape_string(wordfilter['blind'])+"')") + sql_query = "INSERT INTO `bans` (`ipstart`, `ipend`, `ipstr`, `boards`, `added`, `until`, `staff`, `reason`, `note`, `blind`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" + sql_params = (ip, ip, ip, wordfilter['boards'], timestamp(), until, "System", wordfilter['reason'], "Filter auto-ban", wordfilter['blind']) + InsertDb(sql_query, sql_params) regenerateAccess() raise UserError(wordfilter['reason']) - elif wordfilter['action'] == '3': + elif wordfilter['action'] == 3: if not re.search(wordfilter['from'], message, re.DOTALL | re.IGNORECASE) is None: raise UserError('<meta http-equiv="refresh" content="%s;url=%s" />%s' % (wordfilter['redirect_time'], wordfilter['redirect_url'], wordfilter['reason'])) return message @@ -426,18 +436,18 @@ def checkNamefilters(name, tripcode, ip, board): if match: # do action - if namefilter['action'] == '0': + if namefilter['action'] == 0: raise UserError(namefilter['reason']) - elif namefilter['action'] == '1': + elif namefilter['action'] == 1: name = namefilter['to'] tripcode = '' return name, tripcode - elif namefilter['action'] == '2': + elif namefilter['action'] == 2: # Ban - if namefilter['seconds'] != '0': - until = str(timestamp() + int(namefilter['seconds'])) + if namefilter['seconds']: + until = timestamp() + int(namefilter['seconds']) else: - until = '0' + until = 0 InsertDb("INSERT INTO `bans` (`ip`, `boards`, `added`, `until`, `staff`, `reason`, `note`, `blind`) VALUES (" + "'" + _mysql.escape_string(ip) + "', '" + _mysql.escape_string(namefilter['boards']) + @@ -445,6 +455,6 @@ def checkNamefilters(name, tripcode, ip, board): "', 'Name Auto-ban', '"+_mysql.escape_string(namefilter['blind'])+"')") regenerateAccess() raise UserError(namefilter['reason']) - elif namefilter['action'] == '3': + elif namefilter['action'] == 3: raise UserError('<meta http-equiv="refresh" content="%s;url=%s" />%s' % (namefilter['redirect_time'], namefilter['redirect_url'], namefilter['reason'])) return name, tripcode diff --git a/cgi/framework.py b/cgi/framework.py index 38ba2ad..1a2d78e 100644 --- a/cgi/framework.py +++ b/cgi/framework.py @@ -128,6 +128,16 @@ def getCountry(ip): return "??" +def clearCache(): + if Settings._.CONN: + Settings._.CONN.close() + Settings._.CONN = None + + Settings._.BOARD = None + Settings._.IS_TOR = None + Settings._.HOST = None + + def getHost(ip): if Settings._.HOST is None: try: diff --git a/cgi/manage.py b/cgi/manage.py index 02eaf41..93a9921 100644 --- a/cgi/manage.py +++ b/cgi/manage.py @@ -274,23 +274,18 @@ def manage(self, path_split): if not moderator: return - try: - action_taken = True - member = FetchOne( - 'SELECT `username` FROM `staff` WHERE `id` = ' + _mysql.escape_string(path_split[4]) + ' LIMIT 1') - if member: - UpdateDb('DELETE FROM `staff` WHERE `id` = ' + - _mysql.escape_string(path_split[4]) + ' LIMIT 1') - message = 'Staff member deleted.' - template_filename = "message.html" - logAction(staff_account['username'], _( - 'Deleted staff account for %s') % member['username']) - else: - message = _( - 'Unable to locate a staff account with that ID.') - template_filename = "message.html" - except: - pass + action_taken = True + member = FetchOne('SELECT `username` FROM `staff` WHERE `id` = %s LIMIT 1', (path_split[4],)) + if member: + UpdateDb('DELETE FROM `staff` WHERE `id` = %s LIMIT 1', (path_split[4],)) + message = 'Staff member deleted.' + template_filename = "message.html" + logAction(staff_account['username'], _( + 'Deleted staff account for %s') % member['username']) + else: + message = _( + 'Unable to locate a staff account with that ID.') + template_filename = "message.html" if not action_taken: staff = FetchAll('SELECT * FROM `staff` ORDER BY `rights`') @@ -353,7 +348,7 @@ def manage(self, path_split): if imageonly: message = 'Archivo de post /%s/%s eliminado.' % ( board['dir'], post['id']) - elif permanently or post["parentid"] == '0': + elif permanently or post["parentid"] == 0: message = 'Post /%s/%s eliminado permanentemente.' % ( board['dir'], post['id']) else: @@ -384,7 +379,7 @@ def manage(self, path_split): message = _('Post is not a thread opener.') template_filename = "message.html" else: - if not post['locked']: + if post['locked'] == 0: # Cerrar si esta abierto setLocked = 1 else: @@ -392,7 +387,7 @@ def manage(self, path_split): setLocked = 0 UpdateDb("UPDATE `posts` SET `locked` = %s WHERE `boardid` = %s AND `id` = %s LIMIT 1", - (setLocked, board["id"], postid)) + (setLocked, board["id"], post["id"])) threadUpdated(postid) if setLocked == 1: message = _('Thread successfully closed.') @@ -732,7 +727,7 @@ def manage(self, path_split): else: message = _('Ban successfully placed.') action = 'Banned ' + ip - if until != '0': + if until != 0: action += ' until ' + \ formatTimestamp(until) else: @@ -997,16 +992,16 @@ def manage(self, path_split): if path_split[4] == 'restore': board = setBoard(path_split[5]) - post = FetchOne('SELECT `parentid` FROM `posts` WHERE `boardid` = ' + - board['id'] + ' AND `id` = \'' + _mysql.escape_string(path_split[6]) + '\' LIMIT 1') + post = FetchOne('SELECT `parentid` FROM `posts` WHERE `boardid` = %s AND `id` = %s LIMIT 1', + (board['id'], path_split[6])) if not post: message = _( 'Unable to locate a post with that ID.') + '<br />' template_filename = "message.html" else: - UpdateDb('UPDATE `posts` SET `IS_DELETED` = 0 WHERE `boardid` = ' + - board['id'] + ' AND `id` = \'' + _mysql.escape_string(path_split[6]) + '\' LIMIT 1') - if post['parentid'] != '0': + UpdateDb('UPDATE `posts` SET `IS_DELETED` = 0 WHERE `boardid` = %s AND `id` = %s LIMIT 1', + (board['id'], path_split[6])) + if post['parentid'] != 0: threadUpdated(post['parentid']) else: regenerateFrontPages() @@ -1485,8 +1480,7 @@ def manage(self, path_split): elif filter_action == 1: # Change to if len(self.formdata["changeto"]) > 0: - filter_to = _mysql.escape_string( - self.formdata["changeto"]) + filter_to = self.formdata["changeto"] sql_query = "INSERT INTO `filters` (`id`, `boards`, `type`, `action`, `from`, `from_trip`, `reason`, `to`, `added`, `staff`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" sql_params = (edit_id, where, filter_type, filter_action, filter_from, filter_tripcode, filter_reason, filter_to, timestamp(), staff_account['username']) else: @@ -1495,27 +1489,24 @@ def manage(self, path_split): return elif filter_action == 2: # Ban - filter_seconds = '0' + filter_seconds = 0 if len(self.formdata["seconds"]) > 0: - filter_seconds = _mysql.escape_string( - self.formdata["seconds"]) - if "blind" in self.formdata and self.formdata["blind"] == '1': - filter_blind = '1' + filter_seconds = int(self.formdata["seconds"]) + if "blind" in self.formdata and self.formdata["blind"] == 1: + filter_blind = 1 else: - filter_blind = '2' + filter_blind = 2 - sql_query = "INSERT INTO `filters` (`id`, `boards`, `type`, `action`, `from`, `from_trip`, `reason`, `seconds`, `blind`, `added`, `staff`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \ - (edit_id, where, str(filter_type), str(filter_action), filter_from, filter_tripcode, filter_reason, - filter_seconds, filter_blind, str(timestamp()), _mysql.escape_string(staff_account['username'])) + sql_query = "INSERT INTO `filters` (`id`, `boards`, `type`, `action`, `from`, `from_trip`, `reason`, `seconds`, `blind`, `added`, `staff`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" + sql_params = (edit_id, where, filter_type, filter_action, filter_from, filter_tripcode, filter_reason, + filter_seconds, filter_blind, timestamp(), staff_account['username']) elif filter_action == 3: # Redirect URL if len(self.formdata['redirect_url']) > 0: - redirect_url = _mysql.escape_string( - self.formdata['redirect_url']) + redirect_url = self.formdata['redirect_url'] redirect_time = 0 try: - redirect_time = int( - self.formdata['redirect_time']) + redirect_time = int(self.formdata['redirect_time']) except: pass else: @@ -1523,20 +1514,17 @@ def manage(self, path_split): _("You must enter a URL to redirect to.")) return - sql_query = "INSERT INTO `filters` (`id`, `boards`, `type`, `action`, `from`, `from_trip`, `reason`, `redirect_url`, `redirect_time`, `added`, `staff`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \ - (edit_id, where, str(filter_type), str(filter_action), filter_from, filter_tripcode, filter_reason, redirect_url, str( - redirect_time), str(timestamp()), _mysql.escape_string(staff_account['username'])) + sql_query = "INSERT INTO `filters` (`id`, `boards`, `type`, `action`, `from`, `from_trip`, `reason`, `redirect_url`, `redirect_time`, `added`, `staff`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" + sql_params = (edit_id, where, filter_type, filter_action, filter_from, filter_tripcode, filter_reason, redirect_url, redirect_time, timestamp(), staff_account['username']) # DO QUERY! if edit_id > 0: - UpdateDb( - "DELETE FROM `filters` WHERE `id` = %s" % str(edit_id)) - UpdateDb(sql_query) + UpdateDb("DELETE FROM `filters` WHERE `id` = %s", (edit_id,)) + UpdateDb(sql_query, sql_params) message = 'Filter edited.' else: - filt = FetchOne("SELECT `id` FROM `filters` WHERE `boards` = '%s' AND `type` = '%s' AND `from` = '%s'" % ( - where, str(filter_type), filter_from)) + filt = FetchOne("SELECT `id` FROM `filters` WHERE `boards` = %s AND `type` = %s AND `from` = %s", (where, filter_type, filter_from)) if not filt: - UpdateDb(sql_query) + UpdateDb(sql_query, sql_params) message = 'Filter added.' else: message = 'This filter already exists here:' + ' <a href="' + \ @@ -1802,7 +1790,7 @@ def manage(self, path_split): return # Delete! - UpdateDb("DELETE FROM `news` WHERE id = '" + _mysql.escape_string(path_split[4]) + "' AND type = '0'") + UpdateDb("DELETE FROM `news` WHERE id = %s AND type = '0'", (path_split[4],)) message = _("Deleted successfully.") template_filename = "message.html" else: diff --git a/cgi/oekaki.py b/cgi/oekaki.py index d12e94e..ab31fb7 100644 --- a/cgi/oekaki.py +++ b/cgi/oekaki.py @@ -209,7 +209,7 @@ def write_from_base64(fname, data): def write_from_shi(fname, fp): # Check data type type = fp.read(1) - if type != 'P': + if type != b'P': return "UNSUPPORTED" # Read header diff --git a/cgi/post.py b/cgi/post.py index 89c2a19..07b05bc 100644 --- a/cgi/post.py +++ b/cgi/post.py @@ -7,6 +7,7 @@ import threading import queue import formatting import logging +import html from database import * from template import * @@ -193,7 +194,7 @@ def shortenMsg(message, elid='0', elboard='0'): if len(message_shortened) > limit: message_shortened = message_shortened[:limit] - #message_shortened = formatting.close_html(message_shortened) + message_shortened = formatting.close_html(message_shortened) return True, message_shortened else: @@ -722,12 +723,14 @@ def deletePost(postid, password, deltype=0, imageonly=False, quick=False): if not post["parentid"]: deleteReplies(post) - logging.info("Deleting post " + str(postid)) + logging.info("Deleting post %d - parentid: %d" % (post["id"], post["parentid"])) if deltype != 0 and post["parentid"]: # Soft delete (recycle bin) + logging.info("Soft delete") UpdateDb("UPDATE `posts` SET `IS_DELETED` = %s WHERE `boardid` = %s AND `id` = %s LIMIT 1", (deltype, board["id"], post["id"])) else: # Hard delete + logging.info("Hard delete") if post["file"]: deleteFile(post) @@ -745,10 +748,16 @@ def deletePost(postid, password, deltype=0, imageonly=False, quick=False): (newlast["timestamp"], threadNumReplies(post["parentid"]), post["parentid"], board["id"])) if not post['parentid']: + logging.info("Unlinking html") if board['board_type'] == 1: - os.unlink(Settings.ROOT_DIR + str(board["dir"]) + "/res/" + str(post["timestamp"]) + ".html") + fname = Settings.ROOT_DIR + str(board["dir"]) + "/res/" + str(post["timestamp"]) + ".html" else: - os.unlink(Settings.ROOT_DIR + str(board["dir"]) + "/res/" + str(post["id"]) + ".html") + fname = Settings.ROOT_DIR + str(board["dir"]) + "/res/" + str(post["id"]) + ".html" + + try: + os.unlink(fname) + except FileNotFoundError: + logging.warn("Thread HTML (%s) didn't exist! Continuing..." % fname) regenerateHome() @@ -907,7 +916,7 @@ def autoclose_thread(parentid, t, replies): notice_post["bumped"] = get_parent_post(parentid, board["id"])["bumped"] notice_post["timestamp_formatted"] = str(replylimit) + " mensajes" notice_post.insert() - UpdateDb("UPDATE `posts` SET `locked` = 1 WHERE `boardid` = '%s' AND `id` = '%s' LIMIT 1" % (board["id"], _mysql.escape_string(parentid))) + UpdateDb("UPDATE `posts` SET `locked` = 1 WHERE `boardid` = %s AND `id` = %s LIMIT 1", (board["id"], parentid)) def pageNavigator(page_num, page_count, is_omitted=False): """ @@ -972,10 +981,12 @@ def flood_check(t,post,boardid): if not post["parentid"]: maxtime = round(t - int(board['threadsecs'])) - #lastpost = FetchOne("SELECT COUNT(*) FROM `posts` WHERE `ip` = INET6_ATON('%s') and `parentid` = 0 and `boardid` = '%s' and IS_DELETED = 0 AND timestamp > %d" % (str(post["ip"]), boardid, int(maxtime)), 0) + lastpost = FetchOne("SELECT `timestamp` FROM `posts` WHERE `ip` = INET6_ATON(%s) and `parentid` = 0 and `boardid` = %s and IS_DELETED = 0 AND timestamp > %s", + (post["ip"], boardid, maxtime)) # NO MATTER THE IP - lastpost = FetchOne("SELECT `timestamp` FROM `posts` WHERE `parentid` = 0 and `boardid` = %s and IS_DELETED = 0 AND timestamp > %s", + if not lastpost: + lastpost = FetchOne("SELECT `timestamp` FROM `posts` WHERE `parentid` = 0 and `boardid` = %s and IS_DELETED = 0 AND timestamp > %s", (boardid, maxtime)) else: maxtime = round(t - int(board['postsecs'])) @@ -990,11 +1001,10 @@ def flood_check(t,post,boardid): wait = int(int(board['threadsecs']) - (t - int(lastpost["timestamp"]))) raise UserError("Espera " + str(wait) + " segundos antes de crear otro hilo.") -def cut_home_msg(message, boardlength=0): +def cut_msg(message, limit): short_message = message.replace("<br />", " ") short_message = short_message.split("<hr />")[0] short_message = re.compile(r"<[^>]*?>", re.DOTALL | re.IGNORECASE).sub("", short_message) # Removes HTML tags - limit = Settings.HOME_LASTPOSTS_LENGTH - boardlength if len(short_message) > limit: if isinstance(short_message, str): @@ -1002,6 +1012,9 @@ def cut_home_msg(message, boardlength=0): short_message = re.compile(r"&(.(?!;))*$", re.DOTALL | re.IGNORECASE).sub("", short_message) # Removes incomplete HTML return short_message +def cut_home_msg(message, boardlength=0): + return cut_msg(message, Settings.HOME_LASTPOSTS_LENGTH - boardlength) + def getLastAge(board_type, limit): threads = [] sql = "SELECT posts.id, boards.name AS board_fulln, boards.subname AS board_name, board_type, boards.dir, timestamp, bumped, last, length, thumb, CASE WHEN posts.subject = boards.subject THEN posts.message ELSE posts.subject END AS content FROM posts INNER JOIN boards ON boardid = boards.id WHERE parentid = 0 AND IS_DELETED = 0 AND boards.secret = 0 AND posts.locked < 3 AND boards.board_type = %s ORDER BY bumped DESC LIMIT %s" @@ -1209,12 +1222,13 @@ def latestAdd(post, postnum, postid, parent_post): else: url = '/%s/res/%s.html#%s' % (board['dir'], parentid, postid) - sql = "INSERT INTO last (id, boardid, board_name, timestamp, timestamp_formatted, content, url) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (str(postid), board['id'], _mysql.escape_string(board['name']), post['timestamp'], _mysql.escape_string(timestamp_formatted), _mysql.escape_string(content), _mysql.escape_string(url)) - UpdateDb(sql) + sql = "INSERT INTO last (id, boardid, board_name, timestamp, timestamp_formatted, content, url) VALUES (%s, %s, %s, %s, %s, %s, %s)" + params = (postid, board['id'], board['name'], post['timestamp'], timestamp_formatted, content, url) + UpdateDb(sql, params) def latestRemove(postid): board = Settings._.BOARD - UpdateDb("DELETE FROM last WHERE id = %s AND boardid = %s" % (str(postid), board['id'])) + UpdateDb("DELETE FROM last WHERE id = %s AND boardid = %s", (postid, board['id'])) def archiveThread(postid): import json @@ -1271,7 +1285,7 @@ def magic_ball(): return string -def discord_hook(post, url): +def discord_hook(post, parent_post, url): if not Settings.DISCORD_HOOK_URL: return @@ -1280,23 +1294,31 @@ def discord_hook(post, url): board = Settings._.BOARD - #data = {"embeds": [{ - # "title": post['subject'], - # "description": cut_home_msg(post['message'], 30), - # "url": "https://bienvenidoainternet.org" + url, # TODO: Parametrizar. - # "color": 11910504, - # "timestamp": datetime.datetime.utcfromtimestamp(post['timestamp']).isoformat(), - # "footer": { "text": board['name'] }, - # "thumbnail": { "url": "%s%s/thumb/%s" % (Settings.HOME_URL, board['dir'], post['thumb']) }, - # "author": { - # "name": "Nuevo hilo", - # "icon_url": "%s0/junk/w/shobon.gif" % Settings.HOME_URL - # }}] - #} - data = {"content": "test"} - jsondata = json.dumps(data, separators=(',',':')) - - opener = urllib.request.build_opener() - #opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0')] - response = opener.open(Settings.DISCORD_HOOK_URL, jsondata, 6) - the_page = response.read() + if parent_post: + ptitle = "Nueva respuesta en {} ({})".format(html.unescape(parent_post["subject"]), parent_post["length"]+1) + else: + ptitle = "Nuevo hilo: {}".format(html.unescape(post['subject'])) + + data = {"embeds": [{ + "type": "rich", + "title": ptitle, + "description": html.unescape(cut_msg(post['message'], 200)), + "color": 11910504, + "url": "https://bienvenidoainternet.org" + url, # TODO: Parametrizar. + "timestamp": datetime.datetime.utcfromtimestamp(post['timestamp']).isoformat(), + "footer": { "text": board['name'] }, + }] + } + if post['thumb']: + data["embeds"][0]["thumbnail"] = {"url": "%s%s/thumb/%s" % (Settings.HOME_URL, board['dir'], post['thumb'])} + jsondata = json.dumps(data, separators=(',',':')).encode('utf-8') + + try: + req = urllib.request.Request(Settings.DISCORD_HOOK_URL) + req.add_header('Content-Type', 'application/json') + req.add_header('Content-Length', len(jsondata)) + req.add_header('User-Agent', "weabot/0.1") + response = urllib.request.urlopen(req, jsondata) + except urllib.error.HTTPError as e: + raise Exception(e.read()) + diff --git a/cgi/templates/board.html b/cgi/templates/board.html index 70718b8..3732ba9 100644 --- a/cgi/templates/board.html +++ b/cgi/templates/board.html @@ -241,11 +241,11 @@ <div style="color:red;font-weight:bold;">Este hilo es viejo y desaparecerá pronto.</div> <?py #endif ?> <?py #endif ?> - <?py if post['parentid'] == "0": ?> + <?py if not post['parentid']: ?> <?py if not replythread: ?> - <?py if int(thread['omitted']) == 1: ?> + <?py if thread['omitted'] == 1: ?> <div class="omitted">Un post omitido. Haz clic en Responder para ver.</div> - <?py elif int(thread['omitted']) > 1: ?> + <?py elif thread['omitted'] > 1: ?> <div class="omitted">#{thread['omitted']} posts omitidos. Haz clic en Responder para ver.</div> <?py #endif ?> <?py #endif ?> diff --git a/cgi/templates/board.jp.html b/cgi/templates/board.jp.html index f463dee..06a9391 100644 --- a/cgi/templates/board.jp.html +++ b/cgi/templates/board.jp.html @@ -238,9 +238,9 @@ <div style="color:red;font-weight:bold">このスレは古いので、もうすぐ消えます。</div> <?py #endif ?> <?py #endif ?> - <?py if int(post['parentid']) == 0: ?> + <?py if not post['parentid']: ?> <?py if not replythread: ?> - <?py if int(thread['omitted']) > 0: ?> + <?py if thread['omitted']: ?> <span class="omitted">レス${thread['omitted']}件省略。全て読むには返信ボタンを押してください。</span> <?py #endif ?> <?py #endif ?> @@ -266,4 +266,4 @@ <?py if pagenav: ?> <div class="pg">#{pagenav}</div> <?py #endif ?> -<?py include('templates/base_bottom.html') ?>
\ No newline at end of file +<?py include('templates/base_bottom.html') ?> diff --git a/cgi/templates/home.html b/cgi/templates/home.html index a9ca238..47ee5c7 100644 --- a/cgi/templates/home.html +++ b/cgi/templates/home.html @@ -29,10 +29,12 @@ <a href="/juegos/">Juegos</a> <a href="/musica/">Música</a> <a href="/letras/">Humanidades</a> + <a href="/drogas/">Psicotrópicos</a> </div> <div class="cat"> <h3>Conversación</h3> <a href="/zonavip/">Club VIP</a> + <a href="/consejos/">Consejos</a> <a href="/world/">World Lobby</a> </div> <div class="cat"> diff --git a/cgi/templates/mobile/board.html b/cgi/templates/mobile/board.html index 8466c8f..f32a12c 100644 --- a/cgi/templates/mobile/board.html +++ b/cgi/templates/mobile/board.html @@ -4,12 +4,12 @@ <?py for thread in threads: ?> <div id="thread"> <?py for post in thread['posts']: ?> - <?py if post['IS_DELETED'] == "1": ?> + <?py if post['IS_DELETED'] == 1: ?> <div class="pst"><h3 class="del"><a name="#{post['id']}"></a>No.#{post['id']} eliminado por usuario.</h3></div> - <?py elif post['IS_DELETED'] == "2": ?> + <?py elif post['IS_DELETED'] == 2: ?> <div class="pst"><h3 class="del"><a name="#{post['id']}"></a>No.#{post['id']} eliminado por staff.</h3></div> <?py else: ?> - <?py if post['parentid'] == "0": ?> + <?py if not post['parentid']: ?> <div class="first"><h1>#{post["subject"]} <span>(#{thread['length']})</span></h1> <?py else: ?> <div class="pst"> @@ -21,11 +21,11 @@ <div class="msg">#{post['message']}</div></div> <?py #endif ?> <?py #endfor ?> -<?py if threads[0]['posts'][0]['locked'] != "1": ?> +<?py if threads[0]['posts'][0]['locked'] != 1: ?> <a href="./#{thread['id']}" id="n">Recargar</a><span id="n2"></span> <?py #endif ?> <div class="nav"><div><a href="//m.bienvenidoainternet.org">Home</a><a href="#{cgi_url}mobile/#{board}/">Volver</a><a href="#top">▲</a></div></div> -<?py if threads[0]['posts'][0]['locked'] == "1": ?> +<?py if threads[0]['posts'][0]['locked'] == 1: ?> <div class="warn red" style="text-align:center;">El hilo ha sido cerrado. Ya no se puede postear en él.</div> <?py else: ?> <form name="postform" id="postform" action="/cgi/post" method="post" enctype="multipart/form-data"> @@ -52,4 +52,4 @@ <?py #endfor ?> <a name="form"></a> </body> -</html>
\ No newline at end of file +</html> diff --git a/cgi/templates/mobile/txt_thread.html b/cgi/templates/mobile/txt_thread.html index 3df16fc..8397fc7 100644 --- a/cgi/templates/mobile/txt_thread.html +++ b/cgi/templates/mobile/txt_thread.html @@ -71,4 +71,4 @@ <a name="form"></a> <?py #endfor ?> </body> -</html>
\ No newline at end of file +</html> diff --git a/cgi/templates/paint.html b/cgi/templates/paint.html index 945a8d2..4787674 100644 --- a/cgi/templates/paint.html +++ b/cgi/templates/paint.html @@ -13,8 +13,8 @@ <script type="text/javascript">palette_selfy();</script> <?py #endif ?> <?py elif applet == 'neo': ?> -<link rel="stylesheet" href="#{static_url}js/paintbbs/PaintBBS-1.3.4.css" type="text/css" /> -<script src="#{static_url}js/paintbbs/PaintBBS-1.3.4.js" charset="UTF-8"></script> +<link rel="stylesheet" href="#{static_url}js/paintbbs/PaintBBS-1.5.15.css" type="text/css" /> +<script src="#{static_url}js/paintbbs/PaintBBS-1.5.15.js" charset="UTF-8"></script> <applet-dummy id="oekaki" name="paintbbs" width="#{width+250}" height="#{height+280}"> <param name="image_width" value="#{width}"> <param name="image_height" value="#{height}"> @@ -27,8 +27,8 @@ <param name="color_bk2" value="#D5D8EF"> <param name="color_icon" value="#A1B8D8"> <param name="color_iconselect" value="#000000"> -<param name="url_save" value="#{cgi_url}oekaki/save/#{board}/paintbbs?rawpost"> -<param name="url_exit" value="#{cgi_url}oekaki/finish/#{board}/#{replythread}"> +<param name="url_save" value="save/#{board}/paintbbs?rawpost"> +<param name="url_exit" value="finish/#{board}/#{replythread}"> <param name="poo" value="false"> <param name="send_advance" value="true"> <param name="thumbnail_width" value="100%"> diff --git a/cgi/weabot.py b/cgi/weabot.py index e0e941a..ff3c9d3 100755 --- a/cgi/weabot.py +++ b/cgi/weabot.py @@ -126,6 +126,8 @@ class weabot(object): self._newcookies = None def run(self): + clearCache() + path_split = self.environ["PATH_INFO"].split("/") caught = False @@ -454,7 +456,7 @@ class weabot(object): # Disallow posting if the site OR board is in maintenance if Settings.MAINTENANCE and board["dir"] != 'polka': raise UserError(_("%s is currently under maintenance. We'll be back.") % Settings.SITE_TITLE) - if board["locked"] == '1': + if board["locked"] == 1: raise UserError(_("This board is closed. You can't post in it.")) # create post object @@ -471,17 +473,17 @@ class weabot(object): parent_timestamp = parent_post['timestamp'] post["parentid"] = parent_post['id'] post["bumped"] = parent_post['bumped'] - if parent_post['locked'] == '1': + if parent_post['locked'] == 1: raise UserError(_("The thread is closed. You can't post in it.")) # check if the user is flooding flood_check(t, post, board["id"]) # use fields only if enabled - if board["disable_name"] != '1': + if not board["disable_name"]: post["name"] = cleanString(name) post["email"] = cleanString(email, quote=True) - if board["disable_subject"] != '1': + if not board["disable_subject"]: post["subject"] = cleanString(subject) # process tripcodes @@ -495,7 +497,7 @@ class weabot(object): if not post["parentid"] and board["dir"] not in ['bai', 'world']: # creating thread - __extend = re.compile(r"^!extend(:\w+)(:\w+)?\n") + __extend = re.compile(r"!extend(:\w+)(:\w+)?\n", re.IGNORECASE) res = __extend.match(message) if res: extend = res.groups() @@ -510,7 +512,8 @@ class weabot(object): # add function messages if extend_str: - extend_str = extend_str.replace('!extend', 'EXTEND') + extend_str = extend_str[1:] + extend_str = extend_str.replace('extend', 'EXTEND') post["message"] += '<hr />' + extend_str + ' configurado.' if not post["parentid"] and post["email"].lower() == 'sage': @@ -527,12 +530,6 @@ class weabot(object): capcode = Settings.CAPCODES[post["name"]] if post["tripcode"] == (Settings.TRIP_CHAR + capcode[0]): post["name"], post["tripcode"] = capcode[1], capcode[2] - # if board['board_type'] == '1': - # post["name"], post["tripcode"] = capcode[1], '' - # else: - # post["name"] = post["tripcode"] = '' - # post["message"] = ('[<span style="color:red">%s</span>]<br />' % capcode[2]) + post["message"] - cap_id, hide_end, use_icon = capcode[3], capcode[4], capcode[5] # hide ip if necessary @@ -566,28 +563,28 @@ class weabot(object): try: # 1: ID if extend[0] == ':no': - board["useid"] = '0' + board["useid"] = 0 elif extend[0] == ':yes': - board["useid"] = '1' + board["useid"] = 1 elif extend[0] == ':force': - board["useid"] = '2' + board["useid"] = 2 elif extend[0] == ':extra': - board["useid"] = '3' + board["useid"] = 3 # 2: Slip if extend[1] == ':no': - board["slip"] = '0' + board["slip"] = 0 elif extend[1] == ':yes': - board["slip"] = '1' + board["slip"] = 1 elif extend[1] == ':domain': - board["slip"] = '2' + board["slip"] = 2 elif extend[1] == ':verbose': - board["slip"] = '3' + board["slip"] = 3 elif extend[1] == ':country': - board["countrycode"] = '1' + board["countrycode"] = 1 elif extend[1] == ':all': - board["slip"] = '3' - board["countrycode"] = '1' + board["slip"] = 3 + board["countrycode"] = 1 except IndexError: pass @@ -743,7 +740,7 @@ class weabot(object): host = '*.' + host elif ':' in ip: iprs = ip.split(':') - host = '%s:%s:%s:%s:*.*.*.*' % (iprs[0], iprs[1], iprs[2], iprs[3]) + host = '%s:%s:*:*:*.*.*.*' % (iprs[0], iprs[1]) else: iprs = ip.split('.') host = '%s.%s.*.*' % (iprs[0], iprs[1]) @@ -824,7 +821,7 @@ class weabot(object): thread_length = threadNumReplies(post["parentid"]) # bump if not saged - if 'sage' not in post["email"].lower() and parent_post['locked'] != '2': + if 'sage' not in post["email"].lower() and parent_post['locked'] != 2: UpdateDb("UPDATE `posts` SET bumped = %s WHERE (`id` = %s OR `parentid` = %s) AND `boardid` = %s", (post["timestamp"], post["parentid"], post["parentid"], board["id"])) @@ -855,10 +852,10 @@ class weabot(object): if Settings.ENABLE_RSS: latestAdd(post, thread_length, postid, parent_post) # call discord hook - if Settings.ENABLE_DISCORD_HOOK and not post["parentid"]: + if Settings.ENABLE_DISCORD_HOOK: hook_url = make_url( postid, post, parent_post or post, True, False) - discord_hook(post, hook_url) + discord_hook(post, parent_post, hook_url) return (post_url, ttaken, postid) |