This commit is contained in:
@@ -19,3 +19,7 @@ TOTP_SECRET = os.environ.get("TOTP_SECRET", "JBSWY3DPEHPK3PXP") # Base32 encoded
|
||||
SSH_HOST = os.environ.get("SSH_HOST", "host.docker.internal")
|
||||
SSH_USER = os.environ.get("SSH_USER", "zjgump")
|
||||
SSH_KEY_PATH = os.environ.get("SSH_KEY_PATH", "/app/ssh/id_ed25519")
|
||||
|
||||
VPS_SSH_HOST = os.environ.get("VPS_SSH_HOST", "158.101.140.85")
|
||||
VPS_SSH_USER = os.environ.get("VPS_SSH_USER", "jimmyg")
|
||||
VPS_SSH_KEY_PATH = os.environ.get("VPS_SSH_KEY_PATH", "/app/ssh/vps_id_ed25519")
|
||||
|
||||
@@ -5,8 +5,13 @@ import asyncssh
|
||||
import jwt
|
||||
import config
|
||||
|
||||
HOSTS = {
|
||||
"nas": {"host": config.SSH_HOST, "user": config.SSH_USER, "key": config.SSH_KEY_PATH},
|
||||
"vps": {"host": config.VPS_SSH_HOST, "user": config.VPS_SSH_USER, "key": config.VPS_SSH_KEY_PATH},
|
||||
}
|
||||
|
||||
async def ws_endpoint(websocket: WebSocket, token: str = Query("")):
|
||||
|
||||
async def ws_endpoint(websocket: WebSocket, token: str = Query(""), host: str = Query("nas")):
|
||||
try:
|
||||
payload = jwt.decode(token, config.SECRET_KEY, algorithms=[config.ALGORITHM])
|
||||
if payload.get("sub") != config.ADMIN_USER:
|
||||
@@ -18,10 +23,11 @@ async def ws_endpoint(websocket: WebSocket, token: str = Query("")):
|
||||
|
||||
await websocket.accept()
|
||||
|
||||
h = HOSTS.get(host, HOSTS["nas"])
|
||||
try:
|
||||
conn = await asyncssh.connect(
|
||||
config.SSH_HOST, username=config.SSH_USER,
|
||||
client_keys=[config.SSH_KEY_PATH], known_hosts=None,
|
||||
h["host"], username=h["user"],
|
||||
client_keys=[h["key"]], known_hosts=None,
|
||||
)
|
||||
except Exception:
|
||||
await websocket.close(code=1011, reason="SSH connection failed")
|
||||
|
||||
Reference in New Issue
Block a user