# -*- coding: utf-8 -*- # This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) # Copyright (C) 2023 OzzieIsaacs # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from tempfile import gettempdir import os import shutil import magic import zipfile from . import constants def get_temp_dir(): tmp_dir = os.path.join(gettempdir(), 'calibre_web') if not os.path.isdir(tmp_dir): os.mkdir(tmp_dir) return tmp_dir def del_temp_dir(): tmp_dir = os.path.join(gettempdir(), 'calibre_web') shutil.rmtree(tmp_dir) def validate_mime_type(tmp_file_path): mime = magic.Magic(mime=True) tmp_mime_type = mime.from_file(tmp_file_path) if any(mime_type in tmp_mime_type for mime_type in constants.EXTENSIONS_UPLOAD): return True # Some epubs show up as zip mimetypes elif "zip" in tmp_mime_type: try: with zipfile.ZipFile(tmp_file_path, 'r') as epub: if "mimetype" in epub.namelist(): return True except: pass raise Exception("Forbidden MIME type to upload")