From 9c090991c0b586ade6e301a760b99c74208fb3c3 Mon Sep 17 00:00:00 2001 From: Jordan ERNST Date: Wed, 27 Apr 2022 15:25:51 +0200 Subject: [PATCH] Cleaning tmp --- README.md | 10 +++++++-- pendora-box.py | 59 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e888e4d..ed12047 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,17 @@ This too has several functions: ## To-Do -* Auto-clean files/tmp/ folder * Prettier code * Only update once per day, except if `-u` `--update` * Adding more services to listen to ? -## Dependencies +## Pre-requisites * requests python module +* rpmfile python module * impacket smbserver.py must be in PATH + ## Usage [Create a Github personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token), and create the file `credz.json`: @@ -33,3 +34,8 @@ This too has several functions: Simply add the informations to [config.json](./config.json), for a release set "local_version" to a random value and run the script. The file is gonna be automatically downloaded. + +## Share a file temporarly + +You can add a file you wish to share once in `files/tmp`. +Every time you start the script, you will be asked if you want to clear the folder (if not empty). \ No newline at end of file diff --git a/pendora-box.py b/pendora-box.py index 4e6c885..f9f2220 100644 --- a/pendora-box.py +++ b/pendora-box.py @@ -1,5 +1,5 @@ import json -import pathlib +from pathlib import Path import hashlib import requests import base64 @@ -62,7 +62,7 @@ def extract_bin(archtype, binpath, destpath, content): def githubmastersync(reponame, filepaths, credz): for filepath in filepaths: - localfile = pathlib.Path('files').joinpath(pathlib.Path(filepath).name) + localfile = Path('files').joinpath(Path(filepath).name) print(f" * {localfile} ", end='') lastsha, content = get_master_info(reponame, filepath, credz) @@ -96,14 +96,14 @@ def githubreleasesync(reponame, repoinfo, credz): binpath = filename['binpath'] filename = filename['filename'] filename = filename.replace('{last_version}', last_version).replace('{short_version}', short_version) - localfile = pathlib.Path('files').joinpath(pathlib.Path(binpath).name) + localfile = Path('files').joinpath(Path(binpath).name) if filename.endswith('.gz'): is_gz = True print(f" * {localfile} ", end='') else: filename = filename.replace('{last_version}', last_version).replace('{short_version}', short_version) - localfile = pathlib.Path('files').joinpath(pathlib.Path(filename).name) + localfile = Path('files').joinpath(Path(filename).name) print(f" * {localfile} ", end='') urldl = f'https://github.com/{reponame}/releases/download/{last_version}/{filename}' @@ -145,7 +145,7 @@ def ncatsync(conf): local_version = conf['local_version'] for filename in conf['files']: - localfile = pathlib.Path('files').joinpath(pathlib.Path(filename).name) + localfile = Path('files').joinpath(Path(filename).name) print(f" * {localfile} ", end='') if filename == "ncat.exe": @@ -208,12 +208,52 @@ def update(config): def make_executable(): - path = pathlib.Path('files') + path = Path('files') for fpath in path.glob("*"): if fpath.name != '.gitkeep': fpath.chmod(0o777) +def yes_or_no(question, default="yes"): + """Ask a yes/no question via input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is True for "yes" or False for "no". + """ + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + print(question + prompt) + choice = input().lower() + if default is not None and choice == "": + return valid[default] + elif choice in valid: + return valid[choice] + else: + print("Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n") + + +def rmtree(root): + for p in root.iterdir(): + if p.is_dir(): + rmtree(p) + else: + p.unlink() + root.rmdir() + + def print_menu(menu_options): for key in menu_options.keys(): print(key, '->', menu_options[key]) @@ -317,7 +357,7 @@ def menu_choice(menu_options): except ValueError: print('Wrong input. Please enter a number ...') - files_dir = pathlib.Path.cwd().joinpath('files') + files_dir = Path.cwd().joinpath('files') if option == 1: listen_http(files_dir) @@ -336,6 +376,11 @@ if __name__ == '__main__': config = json.load(jsonfile) update(config) + tmp = Path('files/tmp') + is_empty = not any(tmp.iterdir()) + if not is_empty: + if yes_or_no("The folder 'files/tmp' is not empty. Would you like to remove the content ?", default="no"): + rmtree(tmp) print('Choose a service to start a listener:') menu_options = {