lookingglass/hyperglass/models/config/credential.py
2021-12-06 12:14:00 -07:00

42 lines
1.3 KiB
Python

"""Validate credential configuration variables."""
# Standard Library
from typing import Optional
# Third Party
from pydantic import FilePath, SecretStr, StrictStr, constr, root_validator
# Local
from ..main import HyperglassModel
Methods = constr(regex=r"(password|unencrypted_key|encrypted_key)")
class Credential(HyperglassModel, extra="allow"):
"""Model for per-credential config in devices.yaml."""
username: StrictStr
password: Optional[SecretStr]
key: Optional[FilePath]
@root_validator
def validate_credential(cls, values):
"""Ensure either a password or an SSH key is set."""
if values.get("key") is None and values.get("password") is None:
raise ValueError(
"Either a password or an SSH key must be specified for user '{}'".format(
values["username"]
)
)
return values
def __init__(self, **kwargs):
"""Set private attribute _method based on validated model."""
super().__init__(**kwargs)
self._method = None
if self.password is not None and self.key is not None:
self._method = "encrypted_key"
elif self.password is None:
self._method = "unencrypted_key"
elif self.key is None:
self._method = "password"