mirror of
https://github.com/AggressiveUser/AllForOne.git
synced 2025-06-20 09:50:37 +00:00
155 lines
5.7 KiB
Python
155 lines
5.7 KiB
Python
import os
|
|
import subprocess
|
|
import shutil
|
|
import time
|
|
import requests
|
|
from tqdm import tqdm
|
|
from concurrent.futures import ThreadPoolExecutor, wait
|
|
import glob
|
|
from tabulate import tabulate
|
|
|
|
|
|
print("\033[91m\033[93m ,-. _,---._ __ / \ _ _ _ ___ ___ ")
|
|
print(r" / ) .-' `./ / \ /_\ | | | / __\__ _ __ /___\_ __ ___ ")
|
|
print(r"( ( ,' `/ /| //_\\| | | / _\/ _ \| '__| // // '_ \ / _ \ ")
|
|
print(r' \ `-" \ \ / | / _ \ | | / / | (_) | | / \_//| | | | __/ ')
|
|
print(r" `. , \ \ / | \_/ \_/_|_| \/ \___/|_| \___/ |_| |_|\___| ")
|
|
print(r" /`. ,'-`----Y | ")
|
|
print(r" ( ; | ' ")
|
|
print(r" | ,-. ,-' Git-HUB | / Nuclei Template Collector ")
|
|
print(r" | | ( | BoX | / - AggressiveUser ")
|
|
print(r" ) | \ `.___________|/ ")
|
|
print(" `--' `--' \033[0m")
|
|
|
|
def git_clone(url, destination):
|
|
env = os.environ.copy()
|
|
env['GIT_TERMINAL_PROMPT'] = '0'
|
|
result = subprocess.run(['git', 'clone', url, destination], stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, env=env)
|
|
return result.returncode, result.stderr.decode().strip()
|
|
|
|
def generate_destination_folder(url):
|
|
folder_name = os.path.basename(url.rstrip('.git'))
|
|
counter = 1
|
|
while os.path.exists(os.path.join('TRASH', folder_name)):
|
|
folder_name = f"{os.path.basename(url.rstrip('.git'))}_{counter}"
|
|
counter += 1
|
|
return folder_name
|
|
|
|
def clone_repository(repo):
|
|
destination = generate_destination_folder(repo)
|
|
return_code, error_msg = git_clone(repo, os.path.join('TRASH', destination))
|
|
if return_code != 0 or 'Username for' in error_msg:
|
|
return repo
|
|
return None
|
|
|
|
def clone_repositories(file_url):
|
|
response = requests.get(file_url)
|
|
if response.status_code == 200:
|
|
repositories = response.text.strip().split('\n')
|
|
else:
|
|
print('Failed to retrieve Repo List from the server.')
|
|
return
|
|
|
|
total_repos = len(repositories)
|
|
|
|
os.makedirs('TRASH', exist_ok=True)
|
|
|
|
failed_repos = []
|
|
|
|
with ThreadPoolExecutor(max_workers=6) as executor:
|
|
futures = [executor.submit(clone_repository, repo) for repo in repositories]
|
|
|
|
with tqdm(total=total_repos, unit='repo', desc='Cloning repositories', ncols=80) as progress_bar:
|
|
completed = 0
|
|
while completed < total_repos:
|
|
done, _ = wait(futures, return_when='FIRST_COMPLETED')
|
|
completed += len(done)
|
|
for future in done:
|
|
failed_repo = future.result()
|
|
if failed_repo:
|
|
failed_repos.append(failed_repo)
|
|
progress_bar.update(1)
|
|
progress = progress_bar.n / total_repos * 100
|
|
progress_bar.set_postfix({'Progress': f'{progress:.2f}%'})
|
|
futures = [future for future in futures if not future.done()]
|
|
|
|
progress_bar.close()
|
|
|
|
print('Cloning process complete!\n')
|
|
|
|
if failed_repos:
|
|
print("\033[91mFailed to clone the following repositories:\033[0m")
|
|
for repo in failed_repos:
|
|
print(repo)
|
|
|
|
template_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'Templates')
|
|
os.makedirs(template_folder, exist_ok=True)
|
|
|
|
for root, dirs, files in os.walk('TRASH'):
|
|
for file in files:
|
|
if file.endswith('.yaml'):
|
|
source_path = os.path.join(root, file)
|
|
cve_year = extract_cve_year(file)
|
|
if cve_year:
|
|
destination_folder = os.path.join(template_folder, f"CVE-{cve_year}")
|
|
else:
|
|
destination_folder = os.path.join(template_folder, "Vulnerability-Templates")
|
|
os.makedirs(destination_folder, exist_ok=True)
|
|
destination_path = os.path.join(destination_folder, file)
|
|
shutil.copy2(source_path, destination_path)
|
|
print('\nRemoving caches and temporary files.\n')
|
|
shutil.rmtree('TRASH')
|
|
time.sleep(2)
|
|
|
|
|
|
def extract_cve_year(file_name):
|
|
if file_name.startswith('CVE-') and file_name[4:8].isdigit():
|
|
return file_name[4:8]
|
|
return None
|
|
|
|
def count_yaml_files(folder):
|
|
count = 0
|
|
for root, dirs, files in os.walk(folder):
|
|
for file in files:
|
|
if file.endswith('.yaml'):
|
|
count += 1
|
|
return count
|
|
|
|
|
|
def summarize_templates():
|
|
|
|
cve_folders = glob.glob(os.path.join(template_folder, 'CVE-*'))
|
|
cve_yaml_count = 0
|
|
for folder in cve_folders:
|
|
cve_yaml_count += count_yaml_files(folder)
|
|
|
|
vulnerability_templates_folder = os.path.join(template_folder, 'Vulnerability-Templates')
|
|
vulnerability_yaml_count = count_yaml_files(vulnerability_templates_folder)
|
|
|
|
total_yaml_count = cve_yaml_count + vulnerability_yaml_count
|
|
|
|
data = [
|
|
["CVE Templates", cve_yaml_count],
|
|
["Other Vulnerability Templates", vulnerability_yaml_count],
|
|
["Total Templates", total_yaml_count]
|
|
]
|
|
|
|
headers = ["Templates Type", "Templates Count"]
|
|
|
|
table = tabulate(data, headers, tablefmt="fancy_grid")
|
|
|
|
print(table)
|
|
|
|
|
|
file_url = 'https://raw.githubusercontent.com/AggressiveUser/AllForOne/main/PleaseUpdateMe.txt'
|
|
|
|
clone_repositories(file_url)
|
|
|
|
template_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'Templates')
|
|
|
|
summarize_templates()
|
|
|
|
#Intro
|
|
print('\033[91m\033[93mPlease show your support by giving star to my GitHub repository "AllForOne".')
|
|
print('GITHUB: https://github.com/AggressiveUser/AllForOne\033[0m')
|