diff --git a/ircrobots/interface.py b/ircrobots/interface.py index 121f6e1..6661281 100644 --- a/ircrobots/interface.py +++ b/ircrobots/interface.py @@ -6,6 +6,7 @@ from ircstates import Server from irctokens import Line from .ircv3 import Capability +from .sasl import SASLParams @dataclass class ConnectionParams(object): @@ -18,6 +19,8 @@ class ConnectionParams(object): realname: Optional[str] = None bindhost: Optional[str] = None + sasl: Optional[SASLParams] = None + class SendPriority(IntEnum): HIGH = 0 MEDIUM = 10 diff --git a/ircrobots/ircv3.py b/ircrobots/ircv3.py index 7c4ec3d..9c541dd 100644 --- a/ircrobots/ircv3.py +++ b/ircrobots/ircv3.py @@ -29,6 +29,7 @@ class Capability(object): alias=self.alias, depends_on=self.depends_on[:]) +CAP_SASL = Capability("sasl") CAPS = [ Capability("multi-prefix"), Capability("chghost"), diff --git a/ircrobots/sasl.py b/ircrobots/sasl.py new file mode 100644 index 0000000..925bad2 --- /dev/null +++ b/ircrobots/sasl.py @@ -0,0 +1,14 @@ +from typing import Optional +from dataclasses import dataclass + +@dataclass +class SASLParams(object): + mechanism: str + username: Optional[str] = None + password: Optional[str] = None +class SASLUserPass(SASLParams): + def __init__(self, username: str, password: str): + super().__init__("USERPASS", username, password) +class SASLExternal(SASLParams): + def __init__(self): + super().__init__("EXTERNAL")