mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
add ssh key authentication support, closes #81
This commit is contained in:
@@ -1,14 +1,42 @@
|
||||
"""Validate credential configuration variables."""
|
||||
|
||||
# Standard Library
|
||||
from typing import Optional
|
||||
|
||||
# Third Party
|
||||
from pydantic import SecretStr, StrictStr
|
||||
from pydantic import FilePath, SecretStr, StrictStr, constr, root_validator
|
||||
|
||||
# Local
|
||||
from ..main import HyperglassModel
|
||||
from ..main import HyperglassModelExtra
|
||||
|
||||
Methods = constr(regex=r"(password|unencrypted_key|encrypted_key)")
|
||||
|
||||
|
||||
class Credential(HyperglassModel):
|
||||
class Credential(HyperglassModelExtra):
|
||||
"""Model for per-credential config in devices.yaml."""
|
||||
|
||||
username: StrictStr
|
||||
password: SecretStr
|
||||
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["key"] is None and values["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"
|
||||
|
Reference in New Issue
Block a user