diff --git a/openlibrary/plugins/upstream/covers.py b/openlibrary/plugins/upstream/covers.py index 68642f77671..c0d53c776e6 100644 --- a/openlibrary/plugins/upstream/covers.py +++ b/openlibrary/plugins/upstream/covers.py @@ -25,11 +25,16 @@ def setup(): pass -class image_validator: +class ImageValidator: def __init__(self): self.max_file_size = 10 * 1024 * 1024 # 10 MB self.allowed_extensions = {'.jpg', '.jpeg', '.gif', '.png'} + def validate(self, file): + self.validate_extension(file.filename) + self.validate_size(file.file) + self.validate_image(file.file) + def validate_size(self, file_data): file_size = len(file_data.read()) file_data.seek(0) @@ -72,7 +77,10 @@ def POST(self, key): # remove references to field storage objects web.ctx.pop("_fieldstorage", None) - data = self.upload(key, i) + try: + data = self.upload(key, i) + except ValueError as e: + return render_template("covers/add", book, status=web.storage({"code": 1})) if coverid := data.get('id'): if isinstance(i.url, bytes): @@ -88,18 +96,10 @@ def upload(self, key, i): olid = key.split("/")[-1] if i.file is not None and hasattr(i.file, 'file'): - file_data = i.file.file - filename = i.file.filename - - validator = image_validator() - try: - validator.validate_extension(filename) - validator.validate_size(file_data) - validator.validate_image(file_data) - except ValueError as e: - return web.storage({'error': str(e)}) - - data = file_data + validator = ImageValidator() + validator.validate(i.file) + + data = i.file.file else: data = None