Source code for hackthebox.solve

from . import htb
from datetime import datetime

from typing import Optional, TYPE_CHECKING, cast

if TYPE_CHECKING:
    from .htb import HTBClient, HTBObject
    from .machine import Machine


[docs]class Solve: """Representation of completion of Hack The Box content Attributes: id: The ID of the solved item name: The name of the solved item date: The date of the solve blood: Whether the solve was a first blood points: The points awarded from the solve item (HTBObject): The solved item """ _client: "HTBClient" _item: Optional["HTBObject"] = None # The solved item id: int name: str date: datetime blood: bool points: int def __init__(self, data: dict, client: "HTBClient"): self._client = client self.date = data["date"] self.blood = data["first_blood"] self.id = data["id"] self.name = data["name"]
[docs]class MachineSolve(Solve): """Representation of solving a Machine""" type: str # User/Root def __repr__(self): return f"<Solve {self.type}@{self.name}>" @property def item(self): return self.machine # noinspection PyUnresolvedReferences @property def machine(self) -> "Machine": """The solved Machine""" from .machine import Machine if not self._item: self._item = self._client.get_machine(self.id) return cast(Machine, self._item) def __init__(self, data: dict, client: "htb.HTBClient"): super().__init__(data, client) self.type = data["type"]
[docs]class ChallengeSolve(Solve): """Representation of solving a Challenge""" category: str def __repr__(self): return f"<Solve {self.name}@{self.category}>" @property def item(self): return self.challenge @property def challenge(self): """The solved Challenge""" if not self._item: self._item = self._client.get_challenge(self.id) return self._item def __init__(self, data: dict, client: "htb.HTBClient"): super().__init__(data, client) self.category = data["challenge_category"]
[docs]class EndgameSolve(Solve): """Representation of solving a Endgame""" flag_name: str def __repr__(self): return f"<Solve {self.flag_name}@{self.name}>" @property def item(self): return self.endgame @property def endgame(self): """The solved Endgame""" if not self._item: self._item = self._client.get_endgame(self.id) return self._item def __init__(self, data: dict, client: "htb.HTBClient"): super().__init__(data, client) self.flag_name = data["flag_title"]
[docs]class FortressSolve(Solve): """Representation of solving a Fortress""" flag_name: str def __repr__(self): return f"<Solve {self.flag_name}@{self.name}>" @property def item(self): return self.fortress @property def fortress(self): """The solved Fortress""" if not self._item: self._item = self._client.get_fortress(self.id) return self._item def __init__(self, data: dict, client: "htb.HTBClient"): super().__init__(data, client) self.flag_name = data["flag_title"]