cloudpasteview / Dockerfile
dragg2's picture
Update Dockerfile
b39ad01 verified
raw
history blame
4.57 kB
FROM ymlisoft/kkfileview
USER root
RUN apt-get update && apt-get install -y xvfb python3 curl && rm -rf /var/lib/apt/lists/*
ENV SERVER_PORT=8012
ENV KKFILEVIEW_SECURITY_TRUST_HOST=default
ENV ACCESS_TOKEN=your-secret-token-here
# εˆ›ε»Ί Token ιͺŒθ―θ„šζœ¬
RUN printf '#!/usr/bin/env python3\n\
import http.server\n\
import socketserver\n\
import urllib.request\n\
import os\n\
import sys\n\
from urllib.parse import urlparse, parse_qs\n\
\n\
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", buffering=1)\n\
sys.stderr = os.fdopen(sys.stderr.fileno(), "w", buffering=1)\n\
\n\
PORT = 7860\n\
BACKEND = "http://127.0.0.1:8012"\n\
TOKEN = os.getenv("ACCESS_TOKEN", "changeme")\n\
\n\
print(f"[TOKEN_PROXY] Starting on port {PORT}", flush=True)\n\
print(f"[TOKEN_PROXY] Backend: {BACKEND}", flush=True)\n\
print(f"[TOKEN_PROXY] Token: {TOKEN[:5]}***", flush=True)\n\
\n\
class TokenHandler(http.server.SimpleHTTPRequestHandler):\n\
def log_message(self, format, *args):\n\
print(f"[ACCESS] {format % args}", flush=True)\n\
\n\
def do_GET(self):\n\
parsed = urlparse(self.path)\n\
params = parse_qs(parsed.query)\n\
provided_token = params.get("token", [""])[0]\n\
\n\
if provided_token != TOKEN:\n\
print(f"[DENIED] Invalid token from {self.client_address[0]}", flush=True)\n\
self.send_response(403)\n\
self.send_header("Content-type", "text/html; charset=utf-8")\n\
self.end_headers()\n\
html = f"""<!DOCTYPE html>\n\
<html><head><meta charset="utf-8"><title>Access Denied</title></head>\n\
<body style="font-family: Arial; padding: 50px; text-align: center;">\n\
<h1>πŸ”’ Access Denied</h1>\n\
<p>Please provide valid token in URL</p>\n\
<p><code>?token=YOUR_TOKEN</code></p>\n\
<p style="color: #666; margin-top: 30px;">Current token: <strong>{provided_token or "(empty)"}</strong></p>\n\
</body></html>"""\n\
self.wfile.write(html.encode())\n\
return\n\
\n\
print(f"[ALLOWED] Valid token - forwarding to backend", flush=True)\n\
url = BACKEND + self.path\n\
try:\n\
req = urllib.request.Request(url)\n\
for header in ["User-Agent", "Accept", "Accept-Language"]:\n\
if header in self.headers:\n\
req.add_header(header, self.headers[header])\n\
\n\
response = urllib.request.urlopen(req, timeout=60)\n\
self.send_response(response.getcode())\n\
for header, value in response.headers.items():\n\
if header.lower() not in ["connection", "transfer-encoding"]:\n\
self.send_header(header, value)\n\
self.end_headers()\n\
self.wfile.write(response.read())\n\
except Exception as e:\n\
print(f"[ERROR] Backend error: {str(e)}", flush=True)\n\
self.send_error(502, f"Backend error: {str(e)}")\n\
\n\
do_POST = do_GET\n\
\n\
try:\n\
with socketserver.TCPServer(("0.0.0.0", PORT), TokenHandler) as httpd:\n\
print(f"[TOKEN_PROXY] βœ… Server ready on port {PORT}!", flush=True)\n\
print(f"[TOKEN_PROXY] Access: https://your-space.hf.space/?token={TOKEN}", flush=True)\n\
httpd.serve_forever()\n\
except Exception as e:\n\
print(f"[FATAL] {str(e)}", flush=True)\n\
import traceback\n\
traceback.print_exc()\n\
sys.exit(1)\n' > /token_check.py && \
chmod +x /token_check.py
# ε―εŠ¨θ„šζœ¬
RUN printf '#!/bin/bash\n\
set -e\n\
echo "=== kkFileView with Token Auth ==="\n\
echo ""\n\
echo "[1/4] Starting Xvfb..."\n\
Xvfb :99 -screen 0 1024x768x24 >/dev/null 2>&1 &\n\
export DISPLAY=:99\n\
sleep 1\n\
echo "βœ“ Xvfb started"\n\
\n\
echo "[2/4] Starting kkFileView backend..."\n\
/opt/kkFileView/bin/kkFileView --server.port=8012 >/tmp/kkfileview.log 2>&1 &\n\
KKFILEVIEW_PID=$!\n\
echo "βœ“ kkFileView PID: $KKFILEVIEW_PID"\n\
\n\
echo "[3/4] Waiting for backend (max 60s)..."\n\
for i in {1..60}; do\n\
if python3 -c "import urllib.request; urllib.request.urlopen('"'"'http://127.0.0.1:8012'"'"', timeout=1)" 2>/dev/null; then\n\
echo "βœ“ Backend ready after ${i}s"\n\
break\n\
fi\n\
if [ $i -eq 60 ]; then\n\
echo "βœ— Backend timeout! Showing logs:"\n\
tail -50 /tmp/kkfileview.log\n\
exit 1\n\
fi\n\
sleep 1\n\
done\n\
\n\
echo "[4/4] Starting Token Proxy..."\n\
echo ""\n\
exec python3 -u /token_check.py\n' > /start.sh && \
chmod +x /start.sh
EXPOSE 7860
CMD ["/start.sh"]