Source code for hackthebox.fortress

from __future__ import annotations
from typing import List, cast

from . import htb
from .errors import IncorrectFlagException


[docs]class Fortress(htb.HTBObject): """The class representing Hack The Box fortresses Attributes: id: The ID of the Fortress name: The name of the Fortress image: The relative URL of the Fortress' image num_flags: The number of available flags reset_votes: The number of votes to reset the Fortress progress: The active user's progress through the Fortress, out of 100 flags: The list of flags available company: The Fortress' associated Company ip: IP address the Fortress can be contacted on """ name: str image: str num_flags: int _detailed_attributes = ("reset_votes", "progress", "flags", "company", "ip") reset_votes: int progress: int flags: List company: Company ip: str
[docs] def submit(self, flag: str): """Submits a flag for an Fortress Args: flag: The flag for the Fortress """ submission = cast( dict, self._client.do_request( f"fortress/{self.id}/flag", json_data={ "flag": flag, }, ), ) if submission["message"] == "Wrong flag": raise IncorrectFlagException return True
def __repr__(self): return f"<Fortress '{self.name}'>" def __init__(self, data: dict, client: htb.HTBClient, summary=False): self._client = client self._detailed_func = client.get_fortress # type: ignore self.id = data["id"] self.name = data["name"] self.image = data["image"] if summary: self.num_flags = data["number_of_flags"] self._is_summary = True else: self.num_flags = len(data["flags"]) self.company = Company(data["company"]) self.reset_votes = data["reset_votes"] self.progress = data["progress_percent"] self.flags = data["flags"] self.ip = data["ip"]
class Company: """Representation of a company registered on Hack The Box Attributes: id: The Company ID name: The Company name description: The Company description url: The Company website image: The Company logo """ id: int name: str description: str url: str image: str def __init__(self, data: dict): self.id = data["id"] self.name = data["name"] self.description = data["description"] self.url = data["url"] self.image = data["image"]