67 lines
1.6 KiB
Python
Executable file
67 lines
1.6 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import hashlib
|
|
from pathlib import Path
|
|
|
|
import orjson
|
|
import pyperclip
|
|
import requests
|
|
import typer
|
|
|
|
|
|
HIKARI_BASE = "https://hikari.butaishoujo.moe"
|
|
HIKARI_URL = f"{HIKARI_BASE}/upload"
|
|
|
|
|
|
def upload(file: Path,
|
|
obstruct: bool = typer.Option(
|
|
False, "--obstruct", "-o",
|
|
help="Obstruct filename (by hashing)"
|
|
),
|
|
filename: str = typer.Option(
|
|
None, "--name", "-n",
|
|
help="Rename the uploaded file."
|
|
),
|
|
copy: bool = typer.Option(
|
|
False, "--copy", "-c",
|
|
help="Copy file URL to clipboard."
|
|
),
|
|
hash: bool = typer.Option(
|
|
False, "--hash", "-h",
|
|
help="Hash file before uploading to avoid having to send the whole file twice."
|
|
)):
|
|
|
|
if copy:
|
|
pyperclip.copy("")
|
|
|
|
if obstruct:
|
|
filename = hashlib.sha256(file.name.encode()).hexdigest()
|
|
elif filename is None:
|
|
filename = file.name
|
|
|
|
if hash:
|
|
h = hashlib.sha256()
|
|
with file.open('br') as f:
|
|
while buf := f.read(1024**2):
|
|
h.update(buf)
|
|
|
|
h.hexdigest()[:8]
|
|
url = f"{HIKARI_URL}/{h.hexdigest()[:8]}"
|
|
else:
|
|
url = HIKARI_URL
|
|
|
|
with file.open('br') as f:
|
|
files = {'file': (filename, f)}
|
|
|
|
with requests.post(url, files=files, stream=True) as req:
|
|
resp = req.raw.read()
|
|
data = orjson.loads(resp)
|
|
|
|
if copy:
|
|
pyperclip.copy(data['url'])
|
|
else:
|
|
print(resp.decode())
|
|
|
|
|
|
def main():
|
|
typer.run(upload)
|