Common: Add PasswordSchema
This commit is contained in:
parent
3f3494e5d4
commit
0be43157cf
|
@ -1,8 +1,25 @@
|
|||
from dataclasses import dataclass, field
|
||||
|
||||
from marshmallow import Schema, fields, post_load, validate
|
||||
from marshmallow_enum import EnumField
|
||||
|
||||
from common.utils.code_utils import del_key
|
||||
|
||||
from . import CredentialComponentType, ICredentialComponent
|
||||
|
||||
|
||||
class PasswordSchema(Schema):
|
||||
credential_type = EnumField(
|
||||
CredentialComponentType, validate=validate.Equal(CredentialComponentType.PASSWORD)
|
||||
)
|
||||
password = fields.Str()
|
||||
|
||||
@post_load
|
||||
def _strip_credential_type(self, data, **kwargs):
|
||||
del_key(data, "credential_type")
|
||||
return data
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Password(ICredentialComponent):
|
||||
credential_type: CredentialComponentType = field(
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
from copy import deepcopy
|
||||
|
||||
import pytest
|
||||
from marshmallow.exceptions import ValidationError
|
||||
|
||||
from common.credentials import CredentialComponentType, Password
|
||||
from common.credentials.password import PasswordSchema
|
||||
|
||||
PASSWORD_VALUE = "123456"
|
||||
PASSWORD_DICT = {
|
||||
"credential_type": CredentialComponentType.PASSWORD.name,
|
||||
"password": PASSWORD_VALUE,
|
||||
}
|
||||
|
||||
|
||||
def test_password_serialize():
|
||||
schema = PasswordSchema()
|
||||
password = Password(PASSWORD_VALUE)
|
||||
|
||||
serialized_password = schema.dump(password)
|
||||
|
||||
assert serialized_password == PASSWORD_DICT
|
||||
|
||||
|
||||
def test_password_deserialize():
|
||||
schema = PasswordSchema()
|
||||
|
||||
password = Password(**schema.load(PASSWORD_DICT))
|
||||
|
||||
assert password.credential_type == CredentialComponentType.PASSWORD
|
||||
assert password.password == PASSWORD_VALUE
|
||||
|
||||
|
||||
def test_invalid_credential_type():
|
||||
invalid_password_dict = deepcopy(PASSWORD_DICT)
|
||||
invalid_password_dict["credential_type"] = "INVALID"
|
||||
schema = PasswordSchema()
|
||||
|
||||
with pytest.raises(ValidationError):
|
||||
Password(**schema.load(invalid_password_dict))
|
||||
|
||||
|
||||
def test_incorrect_credential_type():
|
||||
invalid_password_dict = deepcopy(PASSWORD_DICT)
|
||||
invalid_password_dict["credential_type"] = CredentialComponentType.USERNAME.name
|
||||
schema = PasswordSchema()
|
||||
|
||||
with pytest.raises(ValidationError):
|
||||
Password(**schema.load(invalid_password_dict))
|
|
@ -196,6 +196,9 @@ _make_tcp_scan_configuration # unused method (monkey/common/configuration/agent
|
|||
_make_network_scan_configuration # unused method (monkey/common/configuration/agent_configuration.py:110)
|
||||
_make_propagation_configuration # unused method (monkey/common/configuration/agent_configuration.py:167)
|
||||
|
||||
# Credentials
|
||||
_strip_credential_type # unused method(monkey/common/credentials/password.py:18)
|
||||
|
||||
# Models
|
||||
_make_simulation # unused method (monkey/monkey_island/cc/models/simulation.py:19
|
||||
|
||||
|
|
Loading…
Reference in New Issue