Source code for hackthebox.endgame

from typing import List, cast, Optional

from . import htb
from .user import User
from .errors import IncorrectFlagException


[docs]class Endgame(htb.HTBObject): """The class representing Hack The Box endgames Attributes: name: The name of the Endgame avatar: The relative URL of the Endgame's avatar cover_image: The relative URL of the Endgame's cover image retired: Whether the Endgame is retired vip: Whether the Endgame requires VIP points: The points awarded by the Endgame completions: The number of players who have completed the Endgame reset_votes: The number of votes to reset the Endgame entry_points: IP addresses the Endgame can be contacted on description: The HTML description of the Endgame """ name: str avatar: str cover_image: str retired: bool vip: bool _detailed_attributes = ( "points", "completions", "reset_votes", "entry_points", "description", ) points: int completions: int reset_votes: int entry_points: List[str] description: str _authors: Optional[List[User]] = None _author_ids: Optional[List[int]] = None
[docs] def submit(self, flag: str): """Submits a flag for an Endgame Args: flag: The flag for the Endgame """ submission = cast( dict, self._client.do_request( f"endgame/{self.id}/flag", json_data={ "flag": flag, }, ), ) if submission["message"] == "Wrong flag": raise IncorrectFlagException return True
@property def authors(self): """ The creators of the Endgame Returns: A list of Users """ if self._authors is None: self._authors = [] for user_id in self._author_ids: self._authors.append(self._client.get_user(user_id)) return self._authors def __repr__(self): return f"<Endgame '{self.name}'>" def __init__(self, data: dict, client: htb.HTBClient, summary=False): self._client = client self._detailed_func = client.get_endgame # type: ignore self.id = data["id"] self.name = data["name"] self.avatar = data["avatar_url"] self.cover_image = data["cover_image_url"] self.retired = data["retired"] self._author_ids = [] self.vip = data["vip"] for user in data["creators"]: self._author_ids.append(user["id"]) if not summary: self.points = int(data["points"]) self.entry_points = data["entry_points"] self.completions = data["players_completed"] self.reset_votes = data["endgame_reset_votes"] self.description = data["description"] else: self._is_summary = True