diff --git a/README.md b/README.md index 37965e6..c55e80e 100644 --- a/README.md +++ b/README.md @@ -30,80 +30,7 @@ ## Usage -```text - █ Upload curl: - -curl -X POST -d "Cheers" https://linedump.com/ # string -curl -X POST https://linedump.com --data-binary @- < file.txt # file -ip -br a | curl -X POST https://linedump.com --data-binary @- # command output - - - █ Upload wget: - -echo "Cheers" | wget --post-data=@- -O- https://linedump.com/ # string -wget --post-file=file.txt -O- https://linedump.com/ # file -ip -br a | wget --post-data=@- -O- https://linedump.com/ # command output - - - █ Upload Powershell: - -Invoke-RestMethod -Uri "https://linedump.com/" -Method Post -Body "Cheers" # string -Invoke-RestMethod -Uri "https://linedump.com/" -Method Post -InFile "file.txt" # file -ipconfig | Invoke-RestMethod -Uri "https://linedump.com/" -Method Post -Body { $_ } # command output - - - █ Download: - -curl https://linedump.com/{path} - -wget -O- https://linedump.com/{path} - -Invoke-RestMethod -Uri "https://linedump.com/{path}" - - - -██ Encryption Examples with curl ██ - - - █ Upload text: - -echo 'Cheers' | openssl enc -aes-256-cbc -pbkdf2 -base64 -pass pass:yourkey | curl -X POST -d @- https://linedump.com/ - - - █ Upload file: - -openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:yourkey -base64 < YOURFILE.txt | curl -sS -X POST https://linedump.com --data-binary @- - - - █ Upload command output: - -ip -br a | openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:yourkey -base64 | curl -sS -X POST https://linedump.com --data-binary @- - - - █ Download: - -curl -s https://linedump.com/PASTE_THE_ID | base64 -d | openssl enc -d -aes-256-cbc -pbkdf2 -pass pass:yourkey - - - -██ Adv Examples ██ - - - █ Multiple commands: - -{ cmd() { printf "\n# %s\n" "$*"; "$@"; }; \ - cmd hostname; \ - cmd ip -br a; \ - } 2>&1 | curl -X POST https://linedump.com --data-binary @- - - - █ Continous command: - -(timeout --signal=INT --kill-after=5s 10s \ - ping 127.1; \ - echo "--- Terminated ---") | \ - curl -X POST --data-binary @- https://linedump.com -``` +Check [linedump.com](https://linedump.com) for now - coming soon. --- diff --git a/main.py b/main.py index 7d151a2..f6ea684 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,8 @@ import os from pathlib import Path import hashlib from typing import Optional +from collections import defaultdict +import threading DOMAIN = os.getenv('DOMAIN', 'linedump.com') @@ -28,6 +30,10 @@ UPLOAD_DIR = Path("uploads") UPLOAD_DIR.mkdir(exist_ok=True) MAX_FILE_SIZE = MAX_FILE_SIZE_MB * 1024 * 1024 # Convert MB to bytes +MAX_FILES_PER_IP = 100 + +file_counter = defaultdict(int) +lock = threading.Lock() def generate_random_path(length: int = None) -> str: if length is None: @@ -42,6 +48,11 @@ def get_client_ip(request: Request) -> str: return request.client.host +def check_file_limit(request: Request) -> bool: + client_ip = get_client_ip(request) + with lock: + return file_counter[client_ip] < MAX_FILES_PER_IP + def validate_content(content: str) -> bool: """Basic validation for content size and encoding""" if len(content) > MAX_FILE_SIZE: @@ -62,6 +73,9 @@ def validate_content(content: str) -> bool: @limiter.limit(RATE_LIMIT) async def upload_text(request: Request): + if not check_file_limit(request): + raise HTTPException(status_code=429, detail="File limit exceeded") + body = await request.body() content = body.decode('utf-8', errors='ignore') @@ -80,7 +94,11 @@ async def upload_text(request: Request): try: with open(file_path, 'w', encoding='utf-8') as f: f.write(content) - + + client_ip = get_client_ip(request) + with lock: + file_counter[client_ip] += 1 + base_url = f"https://{request.headers.get('host', request.url.netloc)}" return f"{base_url}/{random_path}\n" @@ -106,7 +124,7 @@ async def get_file(file_path: str): @app.get("/", response_class=PlainTextResponse) async def root(): - return f"""LD {DOMAIN} + return f"""C|_| {DOMAIN} ████ General ████ @@ -161,20 +179,17 @@ echo 'Cheers' \ | openssl enc -aes-256-cbc -pbkdf2 -base64 -pass pass:yourkey \ | curl -X POST -d @- https://{DOMAIN}/ - █ Upload file: openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:yourkey -base64 < YOURFILE.txt \ | curl -sS -X POST https://{DOMAIN} --data-binary @- - █ Upload command output: ip -br a \ | openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:yourkey -base64 \ | curl -sS -X POST https://{DOMAIN} --data-binary @- - █ Download: curl -s https://{DOMAIN}/PASTE_THE_ID \ @@ -193,13 +208,12 @@ curl -s https://{DOMAIN}/PASTE_THE_ID \ cmd ip -br a; \\ }} 2>&1 | curl -X POST https://{DOMAIN} --data-binary @- - █ Continous command: (timeout --signal=INT --kill-after=5s 10s \\ - ping 127.1; \\ + ping google.com; \\ echo "--- Terminated ---") | \\ - curl -X POST --data-binary @- https://{DOMAIN} + curl -X POST --data-binary @- https://linedump.com