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