Source code for acmeow.models.identifier

"""Identifier model for ACME protocol.

Represents identifiers (domains, IPs) that certificates are issued for.
"""

from __future__ import annotations

from dataclasses import dataclass

from acmeow.enums import IdentifierType


[docs] @dataclass(frozen=True, slots=True) class Identifier: """An ACME identifier representing a domain or IP address. Identifiers specify what the certificate will be issued for. They are immutable to ensure consistency throughout the certificate issuance process. Args: type: The type of identifier (DNS or IP). value: The identifier value (e.g., "example.com" or "192.168.1.1"). Examples: >>> domain = Identifier(IdentifierType.DNS, "example.com") >>> ip = Identifier(IdentifierType.IP, "192.168.1.1") """ type: IdentifierType value: str
[docs] def to_dict(self) -> dict[str, str]: """Convert to dictionary for ACME requests. Returns: Dictionary with "type" and "value" keys. """ return {"type": self.type.value, "value": self.value}
[docs] @classmethod def from_dict(cls, data: dict[str, str]) -> Identifier: """Create an Identifier from an ACME response dictionary. Args: data: Dictionary with "type" and "value" keys. Returns: New Identifier instance. """ return cls( type=IdentifierType(data["type"]), value=data["value"], )
[docs] @classmethod def dns(cls, domain: str) -> Identifier: """Create a DNS identifier for a domain name. Args: domain: Domain name (e.g., "example.com"). Returns: DNS Identifier for the domain. """ return cls(IdentifierType.DNS, domain)
[docs] @classmethod def ip(cls, address: str) -> Identifier: """Create an IP identifier for an IP address. Args: address: IP address (e.g., "192.168.1.1"). Returns: IP Identifier for the address. """ return cls(IdentifierType.IP, address)
[docs] def __str__(self) -> str: """Return a human-readable string representation.""" return f"{self.type.value}:{self.value}"