move dataclasses to a dedicated file
This commit is contained in:
@@ -20,4 +20,4 @@ __copyright__ = "Copyright 2020 Istvan Ruzman"
|
|||||||
__version__ = "0.1.0"
|
__version__ = "0.1.0"
|
||||||
__docformat__ = "restructuredtext en"
|
__docformat__ = "restructuredtext en"
|
||||||
|
|
||||||
__all__ = ["client", "code", "dictionary", "packet", "tools", "utils"]
|
__all__ = ["client", "dictionary", "packet", "tools", "types", "utils"]
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
# Copyright 2020 Istvan Ruzman
|
|
||||||
# SPDX-License-Identifier: MIT OR Apache-2.0
|
|
||||||
|
|
||||||
|
|
||||||
"""Valid RADIUS codes (registered in IANA)
|
|
||||||
|
|
||||||
Currently not all RADIUS codes are contained, because
|
|
||||||
we don't support them (yet).
|
|
||||||
"""
|
|
||||||
|
|
||||||
from enum import IntEnum
|
|
||||||
|
|
||||||
|
|
||||||
class Code(IntEnum):
|
|
||||||
"""Valid RADIUS codes (registered in IANA)"""
|
|
||||||
|
|
||||||
AccessRequest = 1
|
|
||||||
AccessAccept = 2
|
|
||||||
AccessReject = 3
|
|
||||||
AccountingRequest = 4
|
|
||||||
AccountingResponse = 5
|
|
||||||
AccountingInterim = 6
|
|
||||||
PasswordRequest = 7
|
|
||||||
PasswordAck = 8
|
|
||||||
PasswordReject = 9
|
|
||||||
AccountingMessage = 10
|
|
||||||
AccessChallenge = 11
|
|
||||||
StatusServer = 12
|
|
||||||
StatusClient = 13
|
|
||||||
DisconnectRequest = 40
|
|
||||||
DisconnectACK = 41
|
|
||||||
DisconnectNAK = 42
|
|
||||||
CoARequest = 43
|
|
||||||
CoAACK = 44
|
|
||||||
CoANAK = 45
|
|
||||||
@@ -7,11 +7,11 @@ Classes and Types to parse and represent a RADIUS dictionary.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from dataclasses import dataclass
|
|
||||||
from enum import Enum, IntEnum, auto
|
|
||||||
from os.path import dirname, isabs, join, normpath
|
from os.path import dirname, isabs, join, normpath
|
||||||
from typing import IO, Dict, Generator, List, Optional, Sequence, Tuple, Union
|
from typing import IO, Dict, Generator, List, Optional, Sequence, Tuple, Union
|
||||||
|
|
||||||
|
from pyrad3.types import Attribute, Datatype, Encrypt, Vendor
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -24,32 +24,6 @@ INTEGER_TYPES: Dict[str, Tuple[int, int]] = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Datatype(Enum):
|
|
||||||
"""Possible Datatypes for ATTRIBUTES"""
|
|
||||||
|
|
||||||
string = auto()
|
|
||||||
octets = auto()
|
|
||||||
date = auto()
|
|
||||||
abinary = auto()
|
|
||||||
byte = auto()
|
|
||||||
short = auto()
|
|
||||||
integer = auto()
|
|
||||||
signed = auto()
|
|
||||||
integer64 = auto()
|
|
||||||
ipaddr = auto()
|
|
||||||
ipv4prefix = auto()
|
|
||||||
ipv6addr = auto()
|
|
||||||
ipv6prefix = auto()
|
|
||||||
comboip = auto()
|
|
||||||
ifid = auto()
|
|
||||||
ether = auto()
|
|
||||||
concat = auto()
|
|
||||||
tlv = auto()
|
|
||||||
extended = auto()
|
|
||||||
longextended = auto()
|
|
||||||
evs = auto()
|
|
||||||
|
|
||||||
|
|
||||||
class ParseError(Exception):
|
class ParseError(Exception):
|
||||||
"""RADIUS Dictionary Parser Error"""
|
"""RADIUS Dictionary Parser Error"""
|
||||||
|
|
||||||
@@ -71,41 +45,6 @@ class ParseError(Exception):
|
|||||||
return f"{self.file}{line}: ParseError: {self.msg}"
|
return f"{self.file}{line}: ParseError: {self.msg}"
|
||||||
|
|
||||||
|
|
||||||
class Encrypt(IntEnum):
|
|
||||||
"""Enum for different RADIUS Encryption types."""
|
|
||||||
|
|
||||||
NoEncrpytion = 0
|
|
||||||
RadiusCrypt = 1
|
|
||||||
SaltCrypt = 2
|
|
||||||
AscendCrypt = 3
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Attribute: # pylint: disable=too-many-instance-attributes
|
|
||||||
"""RADIUS Attribute definition"""
|
|
||||||
|
|
||||||
name: str
|
|
||||||
code: int
|
|
||||||
datatype: Datatype
|
|
||||||
values: Dict[Union[int, str], Union[int, str]]
|
|
||||||
has_tag: bool = False
|
|
||||||
encrypt: Encrypt = Encrypt(0)
|
|
||||||
is_sub_attr: bool = False
|
|
||||||
# vendor = Dictionary
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Vendor:
|
|
||||||
"""Representation of a vendor"""
|
|
||||||
|
|
||||||
name: str
|
|
||||||
code: int
|
|
||||||
tlength: int
|
|
||||||
llength: int
|
|
||||||
continuation: bool
|
|
||||||
attrs: Dict[Union[int, Tuple[int, ...]], Attribute]
|
|
||||||
|
|
||||||
|
|
||||||
def dict_parser(
|
def dict_parser(
|
||||||
filename: str, rad_dict: IO
|
filename: str, rad_dict: IO
|
||||||
) -> Generator[Tuple[int, List[str]], None, None]:
|
) -> Generator[Tuple[int, List[str]], None, None]:
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ from collections import OrderedDict
|
|||||||
from secrets import token_bytes
|
from secrets import token_bytes
|
||||||
from typing import Any, Dict, Optional, Sequence, Tuple, Union
|
from typing import Any, Dict, Optional, Sequence, Tuple, Union
|
||||||
|
|
||||||
from pyrad3.code import Code
|
|
||||||
from pyrad3.host import Host
|
from pyrad3.host import Host
|
||||||
|
from pyrad3.types import Code
|
||||||
from pyrad3.utils import (
|
from pyrad3.utils import (
|
||||||
Attribute,
|
Attribute,
|
||||||
PacketError,
|
PacketError,
|
||||||
|
|||||||
98
src/pyrad3/types.py
Normal file
98
src/pyrad3/types.py
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# Copyright 2020 Istvan Ruzman
|
||||||
|
# SPDX-License-Identifier: MIT OR Apache-2.0
|
||||||
|
|
||||||
|
|
||||||
|
"""Valid RADIUS codes (registered in IANA)
|
||||||
|
|
||||||
|
Currently not all RADIUS codes are contained, because
|
||||||
|
we don't support them (yet).
|
||||||
|
"""
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from enum import Enum, IntEnum, auto
|
||||||
|
from typing import Dict, Tuple, Union
|
||||||
|
|
||||||
|
|
||||||
|
class Code(IntEnum):
|
||||||
|
"""Valid RADIUS codes (registered in IANA)"""
|
||||||
|
|
||||||
|
AccessRequest = 1
|
||||||
|
AccessAccept = 2
|
||||||
|
AccessReject = 3
|
||||||
|
AccountingRequest = 4
|
||||||
|
AccountingResponse = 5
|
||||||
|
AccountingInterim = 6
|
||||||
|
PasswordRequest = 7
|
||||||
|
PasswordAck = 8
|
||||||
|
PasswordReject = 9
|
||||||
|
AccountingMessage = 10
|
||||||
|
AccessChallenge = 11
|
||||||
|
StatusServer = 12
|
||||||
|
StatusClient = 13
|
||||||
|
DisconnectRequest = 40
|
||||||
|
DisconnectACK = 41
|
||||||
|
DisconnectNAK = 42
|
||||||
|
CoARequest = 43
|
||||||
|
CoAACK = 44
|
||||||
|
CoANAK = 45
|
||||||
|
|
||||||
|
|
||||||
|
class Datatype(Enum):
|
||||||
|
"""Possible Datatypes for ATTRIBUTES"""
|
||||||
|
|
||||||
|
string = auto()
|
||||||
|
octets = auto()
|
||||||
|
date = auto()
|
||||||
|
abinary = auto()
|
||||||
|
byte = auto()
|
||||||
|
short = auto()
|
||||||
|
integer = auto()
|
||||||
|
signed = auto()
|
||||||
|
integer64 = auto()
|
||||||
|
ipaddr = auto()
|
||||||
|
ipv4prefix = auto()
|
||||||
|
ipv6addr = auto()
|
||||||
|
ipv6prefix = auto()
|
||||||
|
comboip = auto()
|
||||||
|
ifid = auto()
|
||||||
|
ether = auto()
|
||||||
|
concat = auto()
|
||||||
|
tlv = auto()
|
||||||
|
extended = auto()
|
||||||
|
longextended = auto()
|
||||||
|
evs = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class Encrypt(IntEnum):
|
||||||
|
"""Enum for different RADIUS Encryption types."""
|
||||||
|
|
||||||
|
NoEncrpytion = 0
|
||||||
|
RadiusCrypt = 1
|
||||||
|
SaltCrypt = 2
|
||||||
|
AscendCrypt = 3
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Attribute: # pylint: disable=too-many-instance-attributes
|
||||||
|
"""RADIUS Attribute definition"""
|
||||||
|
|
||||||
|
name: str
|
||||||
|
code: int
|
||||||
|
datatype: Datatype
|
||||||
|
values: Dict[Union[int, str], Union[int, str]]
|
||||||
|
has_tag: bool = False
|
||||||
|
encrypt: Encrypt = Encrypt(0)
|
||||||
|
is_sub_attr: bool = False
|
||||||
|
# vendor = Dictionary
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Vendor:
|
||||||
|
"""Representation of a vendor"""
|
||||||
|
|
||||||
|
name: str
|
||||||
|
code: int
|
||||||
|
tlength: int
|
||||||
|
llength: int
|
||||||
|
continuation: bool
|
||||||
|
attrs: Dict[Union[int, Tuple[int, ...]], Attribute]
|
||||||
@@ -9,9 +9,9 @@ import struct
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from typing import List, Optional, Tuple, Union
|
from typing import List, Optional, Tuple, Union
|
||||||
|
|
||||||
from pyrad3.code import Code
|
from pyrad3.dictionary import Dictionary
|
||||||
from pyrad3.dictionary import Attribute as DictAttr, Datatype, Dictionary
|
|
||||||
from pyrad3.tools import decode_attr
|
from pyrad3.tools import decode_attr
|
||||||
|
from pyrad3.types import Attribute as DictAttr, Code, Datatype
|
||||||
|
|
||||||
RANDOM_GENERATOR = secrets.SystemRandom()
|
RANDOM_GENERATOR = secrets.SystemRandom()
|
||||||
MD5 = hashlib.md5
|
MD5 = hashlib.md5
|
||||||
|
|||||||
Reference in New Issue
Block a user