mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-10-20 23:31:31 +02:00
137 lines
2.8 KiB
Python
137 lines
2.8 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from shared.enums.ripestat import RIPEStatLookupType
|
|
|
|
|
|
class AnnouncedPrefix(BaseModel):
|
|
prefix: str
|
|
ip_version: int = 4
|
|
first_seen: datetime | None = None
|
|
last_seen: datetime | None = None
|
|
|
|
|
|
class AnnouncedPrefixesResponse(BaseModel):
|
|
asn: int
|
|
prefixes: list[AnnouncedPrefix] = Field(default_factory=list)
|
|
|
|
|
|
class ASNNeighbour(BaseModel):
|
|
asn: int
|
|
relationship: str # upstream / downstream / uncertain
|
|
power: int = 0
|
|
|
|
|
|
class ASNNeighboursResponse(BaseModel):
|
|
asn: int
|
|
neighbours: list[ASNNeighbour] = Field(default_factory=list)
|
|
|
|
|
|
class ASOverviewResponse(BaseModel):
|
|
asn: int
|
|
holder: str = ""
|
|
rir: str | None = None
|
|
announced: bool = False
|
|
block_name: str | None = None
|
|
block_resource: str | None = None
|
|
|
|
|
|
class NetworkInfoResponse(BaseModel):
|
|
ip: str
|
|
prefix: str | None = None
|
|
asns: list[int] = Field(default_factory=list)
|
|
|
|
|
|
class AbuseContactResponse(BaseModel):
|
|
resource: str
|
|
abuse_emails: list[str] = Field(default_factory=list)
|
|
rir: str | None = None
|
|
|
|
|
|
class PrefixOverviewASN(BaseModel):
|
|
asn: int
|
|
holder: str = ""
|
|
|
|
|
|
class PrefixOverviewResponse(BaseModel):
|
|
prefix: str
|
|
asns: list[PrefixOverviewASN] = Field(default_factory=list)
|
|
is_announced: bool = False
|
|
|
|
|
|
class RelatedPrefixEntry(BaseModel):
|
|
prefix: str
|
|
relationship: str # overlap / more_specific / less_specific
|
|
origin_asn: int | None = None
|
|
|
|
|
|
class RelatedPrefixesResponse(BaseModel):
|
|
prefix: str
|
|
related: list[RelatedPrefixEntry] = Field(default_factory=list)
|
|
|
|
|
|
class AnnouncedPrefixRead(BaseModel):
|
|
prefix: str
|
|
ip_version: int
|
|
first_seen: datetime | None
|
|
last_seen: datetime | None
|
|
|
|
|
|
class ASNNeighbourRead(BaseModel):
|
|
neighbour_asn: int
|
|
relationship: str
|
|
power: int
|
|
|
|
|
|
class ASOverviewRead(BaseModel):
|
|
asn: int
|
|
holder: str
|
|
rir: str | None
|
|
announced: bool
|
|
block_name: str | None
|
|
block_resource: str | None
|
|
|
|
|
|
class NetworkInfoRead(BaseModel):
|
|
ip: str
|
|
prefix: str
|
|
asn: int
|
|
|
|
|
|
class AbuseContactRead(BaseModel):
|
|
resource: str
|
|
abuse_emails: list[str]
|
|
rir: str | None
|
|
|
|
|
|
class PrefixOverviewRead(BaseModel):
|
|
prefix: str
|
|
asn: int
|
|
holder: str
|
|
is_announced: bool
|
|
|
|
|
|
class RelatedPrefixRead(BaseModel):
|
|
related_prefix: str
|
|
relationship: str
|
|
origin_asn: int | None
|
|
|
|
|
|
# Generic wrapper for all lookup responses, includes cache metadata
|
|
class RIPEStatResult(BaseModel):
|
|
lookup_type: RIPEStatLookupType
|
|
query_value: str
|
|
result_count: int
|
|
cached: bool = False
|
|
queried_at: datetime | None = None
|
|
data: (
|
|
list[AnnouncedPrefixRead]
|
|
| list[ASNNeighbourRead]
|
|
| ASOverviewRead
|
|
| list[NetworkInfoRead]
|
|
| AbuseContactRead
|
|
| list[PrefixOverviewRead]
|
|
| list[RelatedPrefixRead]
|
|
)
|