Пример #1
0
    def __init__(self, value, level=None):
        """
        Initialize a secure value.

        If the value is not yet secured, secure it

        :param value: the secure value
        :param level: the level to encrypt the value if it is still unencrypted
        """
        if not is_encrypted(value):
            assert level is not None, "Missing level to encrypt the given value"
            value = None if value._string is None else str(value)
            value = encrypt(value, level=level)
        super().__init__(value)
Пример #2
0
    def test_is_encrypted(self):
        self.assertFalse(is_encrypted("any string"))
        self.assertFalse(is_encrypted(0))
        self.assertFalse(is_encrypted(True))

        self.assertFalse(is_encrypted({}))
        self.assertFalse(is_encrypted({"i": 0}))
        self.assertFalse(is_encrypted({"i": 0, "l": 0}))
        self.assertFalse(
            is_encrypted({
                "i": 0,
                "l": 0,
                "v": "value",
                "any": "other"
            }))

        self.assertTrue(
            is_encrypted(json.dumps({
                "i": 0,
                "l": 0,
                "v": "value"
            })))
Пример #3
0
    def from_value(cls, value, **kwargs):
        """
        Initialize a secure value from a read value (import or database)

        If the date is read via an import, a confidence level should be supplied
        to encrypt the data. Also the data should first be unprotected, as all
        data that is read from any external source is protected upon retrieval.

        :param value: a value read via an import or from the database
        :param kwargs:
        :return: an instance of a Secure datatype
        """
        if is_encrypted(value):
            return cls(value)
        else:
            assert "level" in kwargs, "Missing level to encrypt the given value"
            level = kwargs["level"]
            del kwargs["level"]
            value = read_unprotect(value)

            value = cls.BaseType.from_value(value, **kwargs)
            return cls(value, level)