diff --git a/monkey/common/credentials/credentials.py b/monkey/common/credentials/credentials.py index 34ee346fb..846137af1 100644 --- a/monkey/common/credentials/credentials.py +++ b/monkey/common/credentials/credentials.py @@ -185,8 +185,18 @@ class Credentials: """ Serialize a Credentials object to JSON - :param credentials: A Credentials objcet + :param credentials: A Credentials object :return: A JSON string representing a Credentials object """ return CredentialsSchema().dumps(credentials) + + @staticmethod + def to_json_array(credentials: Sequence[Credentials]) -> str: + """ + Serialize a Sequence of Credentials objects to a JSON array + + :param credentials: A Sequence of Credentials objects + :return: A JSON string representing an array of Credentials objects + """ + return "[" + ",".join([Credentials.to_json(c) for c in credentials]) + "]" diff --git a/monkey/tests/unit_tests/common/credentials/test_credentials.py b/monkey/tests/unit_tests/common/credentials/test_credentials.py index 07a6a5ad6..def11896b 100644 --- a/monkey/tests/unit_tests/common/credentials/test_credentials.py +++ b/monkey/tests/unit_tests/common/credentials/test_credentials.py @@ -89,20 +89,33 @@ def test_credentials_deserialization__invalid_component(): Credentials.from_mapping(invalid_data) +DESERIALIZED_CREDENTIALS_0 = Credentials.from_mapping(CREDENTIALS_DICT) +DESERIALIZED_CREDENTIALS_1 = Credentials( + secrets=(Password(PASSWORD),), identities=(Username("STUPID"),) +) +DESERIALIZED_CREDENTIALS_2 = Credentials(secrets=(LMHash(LM_HASH),), identities=tuple()) +credentials_array_json = ( + f"[{Credentials.to_json(DESERIALIZED_CREDENTIALS_0)}," + f"{Credentials.to_json(DESERIALIZED_CREDENTIALS_1)}," + f"{Credentials.to_json(DESERIALIZED_CREDENTIALS_2)}]" +) + + def test_from_json_array(): - deserialized_credentials_0 = Credentials.from_mapping(CREDENTIALS_DICT) - deserialized_credentials_1 = Credentials( - secrets=(Password(PASSWORD),), identities=(Username("STUPID"),) - ) - deserialized_credentials_2 = Credentials(secrets=(LMHash(LM_HASH),), identities=tuple()) - credentials_array_json = ( - f"[{Credentials.to_json(deserialized_credentials_0)}," - f"{Credentials.to_json(deserialized_credentials_1)}," - f"{Credentials.to_json(deserialized_credentials_2)}]" + credentials_sequence = Credentials.from_json_array(credentials_array_json) + + assert len(credentials_sequence) == 3 + assert credentials_sequence[0] == DESERIALIZED_CREDENTIALS_0 + assert credentials_sequence[1] == DESERIALIZED_CREDENTIALS_1 + assert credentials_sequence[2] == DESERIALIZED_CREDENTIALS_2 + + +def test_to_json_array(): + expected_credentials_dict = json.loads(credentials_array_json) + actual_credentials_dict = json.loads( + Credentials.to_json_array( + [DESERIALIZED_CREDENTIALS_0, DESERIALIZED_CREDENTIALS_1, DESERIALIZED_CREDENTIALS_2] + ) ) - credentials_sequence = Credentials.from_json_array(credentials_array_json) - assert len(credentials_sequence) == 3 - assert credentials_sequence[0] == deserialized_credentials_0 - assert credentials_sequence[1] == deserialized_credentials_1 - assert credentials_sequence[2] == deserialized_credentials_2 + assert actual_credentials_dict == expected_credentials_dict