connect fix 3
This commit is contained in:
@ -6,6 +6,7 @@ Groessenlimit, Sha256-Hashing und optionaler AV-Scan sind Pflicht (Konzept
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, Request, UploadFile, status
|
||||
from fastapi.responses import StreamingResponse
|
||||
@ -15,8 +16,14 @@ from app.db import get_db
|
||||
from app.rbac import user_has_role_for_host
|
||||
from app.security.audit import write_audit_event
|
||||
from app.security.av_scan import scan_bytes
|
||||
from app.ssh_proxy.proxy import HostNotConfiguredError, connect_to_host, load_host
|
||||
from app.ssh_proxy.proxy import (
|
||||
HostNotConfiguredError,
|
||||
PrivateKeyUnusableError,
|
||||
connect_to_host,
|
||||
load_host,
|
||||
)
|
||||
|
||||
logger = logging.getLogger("jumphost.ssh_proxy.sftp")
|
||||
router = APIRouter(prefix="/ssh", tags=["file-transfer"])
|
||||
|
||||
MAX_UPLOAD_BYTES = 200 * 1024 * 1024 # 200 MiB, ueber Ansible-Variable konfigurierbar (siehe Konzept)
|
||||
@ -97,6 +104,13 @@ async def upload_file(
|
||||
ssh_conn.close()
|
||||
except HostNotConfiguredError as exc:
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, str(exc))
|
||||
except PrivateKeyUnusableError as exc:
|
||||
# Gleiche Ursache wie bei einer scheiternden Terminalsitzung (siehe
|
||||
# app/ssh_proxy/terminal_ws.py): passphrasegeschuetzter Schluessel
|
||||
# ohne hinterlegte Passphrase. Hier als 400 mit Klartext statt als
|
||||
# unbehandelter 500.
|
||||
logger.warning("Dateitransfer fuer Host %s nicht moeglich: %s", host_id, exc)
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, str(exc))
|
||||
|
||||
await _log_transfer(
|
||||
conn, user=user, host_id=host_id, client_ip=_client_ip(request), direction="upload",
|
||||
@ -127,6 +141,13 @@ async def download_file(
|
||||
ssh_conn.close()
|
||||
except HostNotConfiguredError as exc:
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, str(exc))
|
||||
except PrivateKeyUnusableError as exc:
|
||||
# Gleiche Ursache wie bei einer scheiternden Terminalsitzung (siehe
|
||||
# app/ssh_proxy/terminal_ws.py): passphrasegeschuetzter Schluessel
|
||||
# ohne hinterlegte Passphrase. Hier als 400 mit Klartext statt als
|
||||
# unbehandelter 500.
|
||||
logger.warning("Dateitransfer fuer Host %s nicht moeglich: %s", host_id, exc)
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, str(exc))
|
||||
|
||||
sha256 = hashlib.sha256(data).hexdigest()
|
||||
filename = remote_path.rsplit("/", 1)[-1]
|
||||
|
||||
Reference in New Issue
Block a user