95 lines
2.1 KiB
Python
95 lines
2.1 KiB
Python
import typing as t
|
|
|
|
|
|
####################
|
|
# Directory Wrappers
|
|
#
|
|
|
|
|
|
class DirWrap:
|
|
def __init__(self, fname, *data: t.List[t.Union["DirWrap", "FileWrap"]]):
|
|
self.name = fname
|
|
self.contains = {d.name: d for d in data}
|
|
self._raw_data = data
|
|
|
|
def stringify(self, level=0) -> str:
|
|
s = ""
|
|
for key, value in self.contains.items():
|
|
s += (
|
|
"├"
|
|
+ "─"
|
|
+ "─" * (4 * level)
|
|
+ " "
|
|
+ key
|
|
+ ("/" if isinstance(value, DirWrap) else "")
|
|
+ "\n"
|
|
)
|
|
if isinstance(value, DirWrap):
|
|
s += value.stringify(level + 1)
|
|
return s
|
|
|
|
|
|
class FileWrap:
|
|
def __init__(self, fname: str, fdata: t.Union[bytes, str]) -> None:
|
|
self.name = fname
|
|
self.data = fdata.encode() if isinstance(fdata, str) else fdata
|
|
|
|
|
|
#########
|
|
# Streams
|
|
#
|
|
|
|
|
|
class IStream:
|
|
def __init__(self, file) -> None:
|
|
self.file = file
|
|
|
|
def write(self, *data):
|
|
self.file.write(*data)
|
|
|
|
|
|
class IOStream:
|
|
def __init__(self, fdin: IStream, fdout: "OStream") -> None:
|
|
self.fdin = fdin
|
|
self.fdout = fdout
|
|
|
|
def write(self, *data):
|
|
self.fdin.write(*data)
|
|
|
|
def read(self):
|
|
return self.fdout.read()
|
|
|
|
|
|
class OStream:
|
|
def __init__(self, file) -> None:
|
|
self.file = file
|
|
|
|
def read(self):
|
|
return self.file.read()
|
|
|
|
|
|
class Key:
|
|
def __init__(self, kpath, key, hash, randomart):
|
|
self.kp = kpath
|
|
self.key = key
|
|
self.hash = hash
|
|
self.randomart = randomart
|
|
|
|
def dump(self):
|
|
open(self.kp, "wb+").write(
|
|
"--- BEGIN FERNET CRYPTOGRAPHY KEY ---\n".encode()
|
|
+ self.key
|
|
+ f"\n{self.hash}\n".encode()
|
|
+ "\n--- END FERNET CRYPTOGRAPHY KEY ---".encode()
|
|
)
|
|
|
|
@classmethod
|
|
def kimport(cls, kp):
|
|
k = open(kp, "rb").read().splitlines()
|
|
key = k[1]
|
|
hash = k[2].decode()
|
|
from random_art.randomart import drunkenwalk, draw
|
|
|
|
randomart = draw(drunkenwalk(key), hash)
|
|
return cls(kp, key, hash, randomart)
|