wipe metadata from audio files - also serving as anti-malware

pull/142/head
Aevann 2023-03-17 12:50:13 +02:00
parent 1bce14efcd
commit 0dc9e1e35a
1 changed files with 19 additions and 10 deletions

View File

@ -69,7 +69,13 @@ def process_files(files, v, body):
def process_audio(file, v): def process_audio(file, v):
name = f'/audio/{time.time()}'.replace('.','') old = f'/audio/{time.time()}'.replace('.','')
file.save(old)
size = os.stat(old).st_size
if size > MAX_IMAGE_AUDIO_SIZE_MB_PATRON * 1024 * 1024 or not v.patron and size > MAX_IMAGE_AUDIO_SIZE_MB * 1024 * 1024:
os.remove(old)
abort(413, f"Max image/audio size is {MAX_IMAGE_AUDIO_SIZE_MB} MB ({MAX_IMAGE_AUDIO_SIZE_MB_PATRON} MB for {patron.lower()}s)")
name_original = secure_filename(file.filename) name_original = secure_filename(file.filename)
extension = name_original.split('.')[-1].lower() extension = name_original.split('.')[-1].lower()
@ -77,26 +83,29 @@ def process_audio(file, v):
if extension not in {'mp3','ogg','flac'}: if extension not in {'mp3','ogg','flac'}:
extension = 'mp3' extension = 'mp3'
name = name + '.' + extension new = old + '.' + extension
file.save(name)
size = os.stat(name).st_size try:
if size > MAX_IMAGE_AUDIO_SIZE_MB_PATRON * 1024 * 1024 or not v.patron and size > MAX_IMAGE_AUDIO_SIZE_MB * 1024 * 1024: subprocess.run(["ffmpeg", "-y", "-loglevel", "warning", "-nostats", "-i", old, "-map_metadata", "-1", "-c:a", "copy", new], check=True)
os.remove(name) except:
abort(413, f"Max image/audio size is {MAX_IMAGE_AUDIO_SIZE_MB} MB ({MAX_IMAGE_AUDIO_SIZE_MB_PATRON} MB for {patron.lower()}s)") os.remove(old)
if os.path.isfile(new):
os.remove(new)
abort(400)
media = g.db.query(Media).filter_by(filename=name, kind='audio').one_or_none() os.remove(old)
media = g.db.query(Media).filter_by(filename=new, kind='audio').one_or_none()
if media: g.db.delete(media) if media: g.db.delete(media)
media = Media( media = Media(
kind='audio', kind='audio',
filename=name, filename=new,
user_id=v.id, user_id=v.id,
size=size size=size
) )
g.db.add(media) g.db.add(media)
return name return new
def convert_to_mp4(old, new, vid, db): def convert_to_mp4(old, new, vid, db):