def serialize_user(user, authenticated_user, force_show_email=False): if not user: return {} ret = { 'name': user.name, 'rank': user.rank, 'creationTime': user.creation_time, 'lastLoginTime': user.last_login_time, 'avatarStyle': user.avatar_style, 'email': user.email, } if user.avatar_style == user.AVATAR_GRAVATAR: ret['avatarUrl'] = 'http://gravatar.com/avatar/%s?d=retro&s=%d' % ( util.get_md5((user.email or user.name).lower()), config.config['thumbnails']['avatar_width']) else: ret['avatarUrl'] = '%s/avatars/%s.png' % ( config.config['data_url'].rstrip('/'), user.name.lower()) if authenticated_user.user_id != user.user_id \ and not force_show_email \ and not auth.has_privilege(authenticated_user, 'users:edit:any:email'): del ret['email'] return ret
def update_post_content(post: model.Post, content: Optional[bytes]) -> None: assert post if not content: raise InvalidPostContentError("Post content missing.") update_signature = False post.mime_type = mime.get_mime_type(content) if mime.is_flash(post.mime_type): post.type = model.Post.TYPE_FLASH elif mime.is_image(post.mime_type): update_signature = True if mime.is_animated_gif(content): post.type = model.Post.TYPE_ANIMATION else: post.type = model.Post.TYPE_IMAGE elif mime.is_video(post.mime_type): post.type = model.Post.TYPE_VIDEO else: raise InvalidPostContentError("Unhandled file type: %r" % post.mime_type) post.checksum = util.get_sha1(content) post.checksum_md5 = util.get_md5(content) other_post = (db.session.query( model.Post).filter(model.Post.checksum == post.checksum).filter( model.Post.post_id != post.post_id).one_or_none()) if (other_post and other_post.post_id and other_post.post_id != post.post_id): raise PostAlreadyUploadedError(other_post) if update_signature: purge_post_signature(post) post.signature = generate_post_signature(post, content) post.file_size = len(content) try: image = images.Image(content) post.canvas_width = image.width post.canvas_height = image.height except errors.ProcessingError as ex: logger.exception(ex) if not config.config["allow_broken_uploads"]: raise InvalidPostContentError("Unable to process image metadata") else: post.canvas_width = None post.canvas_height = None if (post.canvas_width is not None and post.canvas_width <= 0) or (post.canvas_height is not None and post.canvas_height <= 0): if not config.config["allow_broken_uploads"]: raise InvalidPostContentError( "Invalid image dimensions returned during processing") else: post.canvas_width = None post.canvas_height = None setattr(post, "__content", content)
def get_avatar_url(user: model.User) -> str: assert user if user.avatar_style == user.AVATAR_GRAVATAR: assert user.email or user.name return 'https://gravatar.com/avatar/%s?d=retro&s=%d' % (util.get_md5( (user.email or user.name).lower()), config.config['thumbnails']['avatar_width']) assert user.name return '%s/avatars/%s.png' % (config.config['data_url'].rstrip('/'), user.name.lower())
def get_avatar_url(user: model.User) -> str: assert user if user.avatar_style == user.AVATAR_GRAVATAR: assert user.email or user.name return 'https://gravatar.com/avatar/%s?d=retro&s=%d' % ( util.get_md5((user.email or user.name).lower()), config.config['thumbnails']['avatar_width']) assert user.name return '%s/avatars/%s.png' % ( config.config['data_url'].rstrip('/'), user.name.lower())
def update_all_md5_checksums() -> None: posts_to_hash = ( db.session.query(model.Post).filter( model.Post.checksum_md5 == None) # noqa: E711 .order_by(model.Post.post_id.asc()).all()) for post in posts_to_hash: try: post.checksum_md5 = util.get_md5( files.get(get_post_content_path(post))) db.session.commit() logger.info("Created MD5 - Post %d", post.post_id) except Exception as ex: logger.exception(ex)
def get_avatar_url(user: model.User) -> str: assert user if user.avatar_style == user.AVATAR_GRAVATAR: assert user.email or user.name return "https://gravatar.com/avatar/%s?d=retro&s=%d" % ( util.get_md5((user.email or user.name).lower()), config.config["thumbnails"]["avatar_width"], ) assert user.name return "%s/avatars/%s.png" % ( config.config["data_url"].rstrip("/"), user.name.lower(), )
def update_post_content(post, content): if not content: raise InvalidPostContentError('Post content missing.') post.mime_type = mime.get_mime_type(content) if mime.is_flash(post.mime_type): post.type = db.Post.TYPE_FLASH elif mime.is_image(post.mime_type): if mime.is_animated_gif(content): post.type = db.Post.TYPE_ANIMATION else: post.type = db.Post.TYPE_IMAGE elif mime.is_video(post.mime_type): post.type = db.Post.TYPE_VIDEO else: raise InvalidPostContentError('Unhandled file type: %r' % post.mime_type) post.checksum = util.get_md5(content) other_post = db.session \ .query(db.Post) \ .filter(db.Post.checksum == post.checksum) \ .filter(db.Post.post_id != post.post_id) \ .one_or_none() if other_post: raise PostAlreadyUploadedError( 'Post already uploaded (%d)' % other_post.post_id) post.file_size = len(content) try: image = images.Image(content) post.canvas_width = image.width post.canvas_height = image.height except errors.ProcessingError: post.canvas_width = None post.canvas_height = None files.save(get_post_content_path(post), content) update_post_thumbnail(post, content=None, delete=False)
def update_post_content(post: model.Post, content: Optional[bytes]) -> None: assert post if not content: raise InvalidPostContentError("Post content missing.") update_signature = False post.mime_type = mime.get_mime_type(content) if mime.is_flash(post.mime_type): raise InvalidPostContentError( "Flash animations are deprecated in this build and are slowly " + "being phased out.") elif mime.is_image(post.mime_type): update_signature = True if mime.is_animated_gif(content): post.type = model.Post.TYPE_ANIMATION else: post.type = model.Post.TYPE_IMAGE elif mime.is_video(post.mime_type): post.type = model.Post.TYPE_VIDEO else: raise InvalidPostContentError(f"Unhandled file type: {post.mime_type}") post.checksum = util.get_sha1(content) post.checksum_md5 = util.get_md5(content) other_post = (db.session.query( model.Post).filter(model.Post.checksum == post.checksum).filter( model.Post.post_id != post.post_id).one_or_none()) if (other_post and other_post.post_id and other_post.post_id != post.post_id): raise PostAlreadyUploadedError(other_post) if update_signature: purge_post_signature(post) post.signature = generate_post_signature(post, content) post.file_size = len(content) post.canvas_width = None post.canvas_height = None post.date_taken = None post.camera = None try: if post.type == model.Post.TYPE_IMAGE: media = images.Image(content) elif post.type in (model.Post.TYPE_ANIMATION, model.Post.TYPE_VIDEO): media = images.Video(content) except Exception as ex: logger.exception(ex) if not config.config["allow_broken_uploads"]: raise InvalidPostContentError("Unable to process image metadata") else: if not media.width or not media.height: if not config.config["allow_broken_uploads"]: raise InvalidPostContentError( "Invalid image dimensions returned during processing") post.canvas_width = media.width post.canvas_height = media.height post.date_taken = media.date_taken post.camera = media.camera setattr(post, "__content", content)