mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 20:13:46 +00:00 
			
		
		
		
	Fix annotations related to make_safe_digest and hashes.
This commit is contained in:
		
				
					committed by
					
						 Tim Abbott
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							9020177418
						
					
				
				
					commit
					2841aa642d
				
			| @@ -9,7 +9,7 @@ if False: | ||||
| from six import text_type | ||||
|  | ||||
| def gravatar_hash(email): | ||||
|     # type: (str) -> str | ||||
|     # type: (text_type) -> text_type | ||||
|     """Compute the Gravatar hash for an email address.""" | ||||
|     # Non-ASCII characters aren't permitted by the currently active e-mail | ||||
|     # RFCs. However, the IETF has published https://tools.ietf.org/html/rfc4952, | ||||
| @@ -19,7 +19,7 @@ def gravatar_hash(email): | ||||
|     return make_safe_digest(email.lower(), hashlib.md5) | ||||
|  | ||||
| def user_avatar_hash(email): | ||||
|     # type: (str) -> str | ||||
|     # type: (text_type) -> text_type | ||||
|     # Salting the user_key may be overkill, but it prevents us from | ||||
|     # basically mimicking Gravatar's hashing scheme, which could lead | ||||
|     # to some abuse scenarios like folks using us as a free Gravatar | ||||
| @@ -35,17 +35,17 @@ def avatar_url(user_profile): | ||||
|     ) | ||||
|  | ||||
| def get_avatar_url(avatar_source, email): | ||||
|     # type: (str, str) -> str | ||||
|     if avatar_source == 'U': | ||||
|     # type: (text_type, text_type) -> text_type | ||||
|     if avatar_source == u'U': | ||||
|         hash_key = user_avatar_hash(email) | ||||
|         if settings.LOCAL_UPLOADS_DIR is not None: | ||||
|             # ?x=x allows templates to append additional parameters with &s | ||||
|             return "/user_avatars/%s.png?x=x" % (hash_key) | ||||
|             return u"/user_avatars/%s.png?x=x" % (hash_key) | ||||
|         else: | ||||
|             bucket = settings.S3_AVATAR_BUCKET | ||||
|             return "https://%s.s3.amazonaws.com/%s?x=x" % (bucket, hash_key) | ||||
|             return u"https://%s.s3.amazonaws.com/%s?x=x" % (bucket, hash_key) | ||||
|     elif settings.ENABLE_GRAVATAR: | ||||
|         hash_key = gravatar_hash(email) | ||||
|         return "https://secure.gravatar.com/avatar/%s?d=identicon" % (hash_key,) | ||||
|         return u"https://secure.gravatar.com/avatar/%s?d=identicon" % (hash_key,) | ||||
|     else: | ||||
|         return settings.DEFAULT_AVATAR_URI+'?x=x' | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import os | ||||
| import re | ||||
| import six | ||||
| from PIL import Image, ImageOps | ||||
| from six import text_type | ||||
| from six import binary_type, text_type | ||||
| from six.moves import cStringIO as StringIO | ||||
| import random | ||||
| import logging | ||||
| @@ -102,7 +102,7 @@ class ZulipUploadBackend(object): | ||||
| ### S3 | ||||
|  | ||||
| def get_bucket(conn, bucket_name): | ||||
|     # type: (S3Connection, str) -> Bucket | ||||
|     # type: (S3Connection, text_type) -> Bucket | ||||
|     # Calling get_bucket() with validate=True can apparently lead | ||||
|     # to expensive S3 bills: | ||||
|     #    http://www.appneta.com/blog/s3-list-get-bucket-default/ | ||||
| @@ -121,7 +121,7 @@ def upload_image_to_s3( | ||||
|         user_profile, | ||||
|         contents, | ||||
|     ): | ||||
|     # type: (str, str, str, UserProfile, str) -> None | ||||
|     # type: (text_type, text_type, text_type, UserProfile, text_type) -> None | ||||
|  | ||||
|     conn = S3Connection(settings.S3_KEY, settings.S3_SECRET_KEY) | ||||
|     bucket = get_bucket(conn, bucket_name) | ||||
| @@ -234,7 +234,7 @@ def mkdirs(path): | ||||
|         os.makedirs(dirname) | ||||
|  | ||||
| def write_local_file(type, path, file_data): | ||||
|     # type: (str, str, str) -> None | ||||
|     # type: (text_type, text_type, binary_type) -> None | ||||
|     file_path = os.path.join(settings.LOCAL_UPLOADS_DIR, type, path) | ||||
|     mkdirs(file_path) | ||||
|     with open(file_path, 'wb') as f: | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from time import sleep | ||||
|  | ||||
| from django.conf import settings | ||||
| from six.moves import range | ||||
| from zerver.lib.str_utils import force_text | ||||
|  | ||||
| T = TypeVar('T') | ||||
|  | ||||
| @@ -85,13 +86,13 @@ def run_in_batches(all_list, batch_size, callback, sleep_time = 0, logger = None | ||||
|             sleep(sleep_time) | ||||
|  | ||||
| def make_safe_digest(string, hash_func=hashlib.sha1): | ||||
|     # type: (text_type, Callable[[binary_type], Any]) -> str | ||||
|     # type: (text_type, Callable[[binary_type], Any]) -> text_type | ||||
|     """ | ||||
|     return a hex digest of `string`. | ||||
|     """ | ||||
|     # hashlib.sha1, md5, etc. expect bytes, so non-ASCII strings must | ||||
|     # be encoded. | ||||
|     return hash_func(string.encode('utf-8')).hexdigest() | ||||
|     return force_text(hash_func(string.encode('utf-8')).hexdigest()) | ||||
|  | ||||
|  | ||||
| def log_statsd_event(name): | ||||
|   | ||||
| @@ -1312,7 +1312,7 @@ class Huddle(models.Model): | ||||
|     huddle_hash = models.CharField(max_length=40, db_index=True, unique=True) | ||||
|  | ||||
| def get_huddle_hash(id_list): | ||||
|     # type: (List[int]) -> str | ||||
|     # type: (List[int]) -> text_type | ||||
|     id_list = sorted(set(id_list)) | ||||
|     hash_key = ",".join(str(x) for x in id_list) | ||||
|     return make_safe_digest(hash_key) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user