python3: Add missing utf-8 encoding/decoding in various places.

This commit is contained in:
Tim Abbott
2016-01-23 20:18:35 -08:00
parent a46647a87a
commit df0d2a726d
5 changed files with 14 additions and 10 deletions

View File

@@ -1,5 +1,6 @@
from __future__ import absolute_import from __future__ import absolute_import
import codecs
import markdown import markdown
import logging import logging
import traceback import traceback
@@ -242,9 +243,11 @@ class InlineHttpsProcessor(markdown.treeprocessors.Treeprocessor):
if not url.startswith("http://"): if not url.startswith("http://"):
# Don't rewrite images on our own site (e.g. emoji). # Don't rewrite images on our own site (e.g. emoji).
continue continue
digest = hmac.new(settings.CAMO_KEY, url, hashlib.sha1).hexdigest() encoded_url = url.encode("utf-8")
encoded_url = url.encode("hex") encoded_camo_key = settings.CAMO_KEY.encode("utf-8")
img.set("src", "%s%s/%s" % (settings.CAMO_URI, digest, encoded_url)) digest = hmac.new(encoded_camo_key, encoded_url, hashlib.sha1).hexdigest()
hex_encoded_url = codecs.encode(encoded_url, "hex")
img.set("src", "%s%s/%s" % (settings.CAMO_URI, digest, hex_encoded_url))
class InlineInterestingLinkProcessor(markdown.treeprocessors.Treeprocessor): class InlineInterestingLinkProcessor(markdown.treeprocessors.Treeprocessor):
TWITTER_MAX_IMAGE_HEIGHT = 400 TWITTER_MAX_IMAGE_HEIGHT = 400

View File

@@ -11,8 +11,8 @@ from six.moves import range
def random_api_key(): def random_api_key():
choices = string.ascii_letters + string.digits choices = string.ascii_letters + string.digits
altchars = ''.join([choices[ord(os.urandom(1)) % 62] for _ in range(2)]) altchars = ''.join([choices[ord(os.urandom(1)) % 62] for _ in range(2)]).encode("utf-8")
return base64.b64encode(os.urandom(24), altchars=altchars) return base64.b64encode(os.urandom(24), altchars=altchars).decode("utf-8")
# create_user_profile is based on Django's User.objects.create_user, # create_user_profile is based on Django's User.objects.create_user,
# except that we don't save to the database so it can used in # except that we don't save to the database so it can used in

View File

@@ -10,7 +10,8 @@ def initial_password(email):
created by populate_db.""" created by populate_db."""
if settings.INITIAL_PASSWORD_SALT is not None: if settings.INITIAL_PASSWORD_SALT is not None:
digest = hashlib.sha256(settings.INITIAL_PASSWORD_SALT + email).digest() encoded_key = (settings.INITIAL_PASSWORD_SALT + email).encode("utf-8")
digest = hashlib.sha256(encoded_key).digest()
return base64.b64encode(digest)[:16] return base64.b64encode(digest)[:16]
else: else:
# None as a password for a user tells Django to set an unusable password # None as a password for a user tells Django to set an unusable password

View File

@@ -96,7 +96,7 @@ def write_log_line(log_data, path, method, remote_ip, email, client_name,
# Remove non-ascii chars from path (there should be none, if there are it's # Remove non-ascii chars from path (there should be none, if there are it's
# because someone manually entered a nonexistant path), as UTF-8 chars make # because someone manually entered a nonexistant path), as UTF-8 chars make
# statsd sad when it sends the key name over the socket # statsd sad when it sends the key name over the socket
statsd_path = statsd_path.encode('ascii', errors='ignore') statsd_path = statsd_path.encode('ascii', errors='ignore').decode("ascii")
blacklisted_requests = ['do_confirm', 'send_confirm', blacklisted_requests = ['do_confirm', 'send_confirm',
'eventslast_event_id', 'webreq.content', 'avatar', 'user_uploads', 'eventslast_event_id', 'webreq.content', 'avatar', 'user_uploads',
'password.reset', 'static', 'json.bots', 'json.users', 'json.streams', 'password.reset', 'static', 'json.bots', 'json.users', 'json.streams',

View File

@@ -664,10 +664,10 @@ def linebreak(string):
return string.replace('\n\n', '<p/>').replace('\n', '<br/>') return string.replace('\n\n', '<p/>').replace('\n', '<br/>')
def extract_message_dict(message_str): def extract_message_dict(message_str):
return ujson.loads(zlib.decompress(message_str)) return ujson.loads(zlib.decompress(message_str).decode("utf-8"))
def stringify_message_dict(message_dict): def stringify_message_dict(message_dict):
return zlib.compress(ujson.dumps(message_dict)) return zlib.compress(ujson.dumps(message_dict).encode("utf-8"))
def to_dict_cache_key_id(message_id, apply_markdown): def to_dict_cache_key_id(message_id, apply_markdown):
return 'message_dict:%d:%d' % (message_id, apply_markdown) return 'message_dict:%d:%d' % (message_id, apply_markdown)