83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
from __future__ import annotations
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
|
|
PORT = 22
|
|
USER = "mspe"
|
|
ROOT = "public_html"
|
|
PROTOCOL = "https"
|
|
DIR = False
|
|
|
|
|
|
class PubNix:
|
|
def __init__(
|
|
self,
|
|
dn,
|
|
ssh: str | None = None,
|
|
port: int = PORT,
|
|
user: str = USER,
|
|
root: str = ROOT,
|
|
dir: bool = DIR,
|
|
web: str | None = None,
|
|
sub: bool | None = None,
|
|
):
|
|
self.dn = dn
|
|
self.ssh = f"{ssh}.{self.dn}" if ssh else self.dn
|
|
self.port = port
|
|
self.user = user
|
|
self.root = root
|
|
self.web = f"{web}.{self.dn}" if web else self.dn
|
|
if sub:
|
|
self.fqdn = f"{self.user}.{self.web}"
|
|
self.context = None
|
|
else:
|
|
self.fqdn = self.web
|
|
self.context = f"~{self.user}"
|
|
self.path = (Path(self.root) / self.fqdn) if dir else self.root
|
|
self.target = f"{self.user}@{self.ssh}:{self.path}"
|
|
self.url = [f"{PROTOCOL}:", "", self.fqdn]
|
|
if self.context:
|
|
self.url.append(self.context)
|
|
self.url = "/".join(self.url)
|
|
|
|
def capturun(self, *args):
|
|
return self.run(*args, capture_output=True)
|
|
|
|
def run(self, *args, **kwargs):
|
|
return subprocess.run(
|
|
[
|
|
"ssh",
|
|
"-o",
|
|
"LogLevel Error",
|
|
"-p",
|
|
str(self.port),
|
|
f"{self.user}@{self.ssh}",
|
|
"--",
|
|
*args,
|
|
],
|
|
**kwargs,
|
|
)
|
|
|
|
def disk_free(self) -> str:
|
|
"""Fetch free space information."""
|
|
process = self.capturun("df", "-h", os.curdir)
|
|
return process.stdout.decode("UTF-8").strip()
|
|
|
|
def os(self) -> str:
|
|
"""Fetch Operating System release information."""
|
|
ps = self.capturun("cat", "/etc/os-release")
|
|
if ps.returncode == 0:
|
|
for line in ps.stdout.decode("UTF-8").strip().split(os.linesep):
|
|
if "PRETTY_NAME" in line:
|
|
text = line.split("=")[1].split('"')[1]
|
|
break
|
|
else:
|
|
text = ""
|
|
return text
|
|
else:
|
|
return self.capturun("uname", "-sr").stdout.decode("UTF-8").strip()
|
|
|
|
def __str__(self) -> str:
|
|
"""Return target & url."""
|
|
return os.linesep.join([self.target, self.url])
|