import os, codecs import tkinter as tk from tkinter import filedialog, messagebox, simpledialog LOGO_URL = "https://data-recovery-prague.com/img/LOGO_FINAL.png" def read_folder(folder, f): global ctr global fctr global sum_bytes ctr += 1 try: dir_contents = os.listdir(folder) n = os.path.basename(folder) if n == "": n = "Root" f.write('
[+] ' + n + "
") f.write('
') print(f"#{ctr} ... {folder}") for directory in sorted(dir_contents): dir_path = os.path.join(folder, directory) if os.path.isdir(dir_path) and not os.path.islink(dir_path): read_folder(dir_path, f) elif os.path.isdir(dir_path) and os.path.islink(dir_path): f.write(' ' + directory + " -> " + os.readlink(dir_path) + "
") for fname in sorted(dir_contents): if not os.path.isdir(os.path.join(folder, fname)): try: try: css_class = fname.split(".")[-1].lower() except: css_class= "none" if css_class in ("mov", "mp4", "avi", "3gp", "3g2", "m2v", "mkv", "m4v", "mpe", "mpg", "mpeg", "ogv", "rm", "vob", "webm", "wmv", "qt", "ra", "ram", "f4v", "flv"): css_class = "mov" elif css_class in ("mp3", "3ga", "aa", "aac", "aif", "aifc", "aiff", "amr", "asx", "au", "flac", "iff", "m3u", "m3u8", "m4a", "m4r", "mid", "midi", "mod", "mp2", "mpa", "mpga", "ogg", "wav", "wma"): css_class = "snd" elif css_class in ("exe", "com", "app", "apk", "jar", "pyc", "sys"): css_class = "exe" elif css_class in ("doc", "docb", "docm", "docx", "dot", "dotm", "dotx", "odt", "rtf"): css_class = "doc" elif css_class in ("xls", "xlb", "xlc", "xlm", "xlsb", "xlsm", "xlsx", "xlt", "xltm", "xltx", "ods"): css_class = "xls" elif css_class in ("potx", "pps", "ppsx", "ppt", "pptm", "pptx", "odp"): css_class = "ppt" elif css_class in ("raw", "cr2", "orf", "dng", "nef"): css_class = "raw" elif css_class in ("jpg", "png", "bmp", "bpg", "gif", "heic", "image", "jpe", "jpeg", "psd", "psp", "tif", "tiff", "tga", "webp", "xcf"): css_class = "img" elif css_class in ("pdf", "ps"): css_class = "pdf" elif css_class in ("zip", "rar", "tar", "7z", "ace", "bz2", "gz", "cab", "sit", "xz", "z"): css_class = "zip" elif css_class in ("htm", "html", "xml", "xsl", "xps", "xaml", "rdl", "dtd"): css_class = "xml" elif css_class in ("c", "cpp", "php", "py", "java", "lua", "js", "applescript", "asax", "ascx", "ashx", "asmx", "asp", "aspx", "bash", "sh", "bat", "cfm", "cfml", "class", "cs", "csh", "go", "h", "iml", "json", "jsp", "jsx", "lisp", "pl", "pm", "rb", "ru", "rub", "swift", "vb", "zsh", "asm"): css_class = "code" elif css_class in ("sql", "db", "accdb", "accdt", "adn", "dbf", "dsn", "mdb", "odb", "pdb", "sdf", "sqlite", "edb"): css_class = "db" elif css_class in ("deb", "rpm", "dmg", "msi", "msu", "pkg", "xrb"): css_class = "pkg" elif css_class in ("dwg", "cad", "dgn", "dxf", "stl", "scad", "step"): css_class = "cad" elif css_class in ("ai", "eps", "svg"): css_class = "eps" elif css_class in ("ttf", "otf", "eot", "fnt", "fon", "woff", "woff2"): css_class = "fnt" elif css_class in ("eml", "pst", "ost"): css_class = "eml" elif css_class in ("txt", "log", "ini", "yaml", "yml", "asc", "dist", "readme", "me", "pid", "rdf", "tex"): css_class = "txt" elif css_class in ("bin", "img", "dd", "iso"): css_class = "bin" else: css_class = "other" f.write('

' + fname + "

") try: fsize = os.path.getsize(os.path.join(folder, fname)) except FileNotFoundError: fsize = 1 sum_bytes += fsize fctr += 1 except UnicodeEncodeError: pass f.write('
') except PermissionError: f.write('
[+] ' + os.path.basename(folder) + " :: PERMISSION DENIED
") root = tk.Tk() root.withdraw() dirname = filedialog.askdirectory(parent=root, initialdir="/", title='Please select the restore-directory') projectname = simpledialog.askstring(title="Please specify", prompt="Project name: ") ctr = 0 fctr = 0 sum_bytes = 0 if dirname is not None: html_path = filedialog.asksaveasfilename(parent=root, initialdir=dirname, title='Select a place to save the HTML-File', defaultextension=".html") f = codecs.open(html_path, "w", "UTF-8") if f is not None: f.write('') f.write('') f.write('') f.write('') f.write('Recovery-Report for ' + dirname + '') f.write('') f.write('') #f.write('') f.write('') f.write('') f.write('') f.write('') f.write('
') f.write('

FILE-REPORT

') f.write('

PROJECT: ' + projectname + '





') f.write('
') f.write(' ') f.write(' ') f.write('') f.write('
') f.write('
') read_folder(dirname, f) f.write("


") f.write(f"
Files: {fctr}
Folders: {ctr}
Recovered: {sum_bytes/1024/1024/1024:.2f} GB
") f.write("") f.write("") f.close() messagebox.showinfo("Finnish", f"HTML-report was generated successfully!\n\nFiles: {fctr}\nFolders: {ctr}")