コード例 #1
0
ファイル: types.py プロジェクト: zed7576/indy-node
class ClientGetSchemaOperation(MessageValidator):
    schema = (
        (TXN_TYPE, ConstantField(GET_SCHEMA)),
        (TARGET_NYM, IdentifierField()),
        (DATA, GetSchemaField()),
    )
コード例 #2
0
ファイル: types.py プロジェクト: ilyoungkim/indy-node
class GetSchemaField(MessageValidator):
    schema = ((SCHEMA_NAME,
               LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)),
              (SCHEMA_VERSION, VersionField(version_cls=SchemaVersion)),
              (ORIGIN, IdentifierField(optional=True)))
コード例 #3
0
class ClientGetNymOperation(MessageValidator):
    schema = (
        (TXN_TYPE, ConstantField(GET_NYM)),
        (TARGET_NYM, IdentifierField()),
    )
コード例 #4
0
class ClientGetContextOperation(MessageValidator):
    schema = (
        (TXN_TYPE, ConstantField(GET_CONTEXT)),
        (CONTEXT_FROM, IdentifierField()),
        (META, GetContextField()),
    )
コード例 #5
0
ファイル: types.py プロジェクト: snowy13/indy-node
class ClientGetAttribOperation(MessageValidator):
    schema = (
        (TXN_TYPE, ConstantField(GET_ATTR)),
        (TARGET_NYM, IdentifierField(optional=True)),
        (RAW, LimitedLengthStringField(max_length=RAW_FIELD_LIMIT)),
    )
コード例 #6
0
class ClientGetRsSchemaOperation(MessageValidator):
    schema = (
        (TXN_TYPE, ConstantField(GET_RS_SCHEMA)),
        (RS_SCHEMA_FROM, IdentifierField()),
        (META, RsSchemaMetaField()),
    )
コード例 #7
0
ファイル: types.py プロジェクト: zmh0531/indy-node
class GetSchemaField(MessageValidator):
    schema = (
        (SCHEMA_NAME, LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)),
        (SCHEMA_VERSION, VersionField(components_number=(2, 3,), max_length=VERSION_FIELD_LIMIT)),
        (ORIGIN, IdentifierField(optional=True))
    )
コード例 #8
0
class ClientMessageValidator(MessageValidator):
    schema = (
        (f.IDENTIFIER.nm, IdentifierField(optional=True, nullable=True)),
        (f.REQ_ID.nm, NonNegativeNumberField()),
        (OPERATION, ClientOperationField()),
        (f.SIG.nm,
         SignatureField(max_length=SIGNATURE_FIELD_LIMIT, optional=True)),
        (f.DIGEST.nm,
         LimitedLengthStringField(max_length=DIGEST_FIELD_LIMIT,
                                  optional=True)),
        (f.PROTOCOL_VERSION.nm, ProtocolVersionField()),
        (f.TAA_ACCEPTANCE.nm, ClientTAAAcceptance(optional=True)),
        (f.SIGS.nm,
         MapField(IdentifierField(),
                  SignatureField(max_length=SIGNATURE_FIELD_LIMIT),
                  optional=True,
                  nullable=True)),
        (f.ENDORSER.nm, IdentifierField(optional=True)),
    )

    def __init__(self, operation_schema_is_strict, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Following code is for support of non-strict schema
        # TODO: refactor this
        # TODO: this (and all related functionality) can be removed when
        # when fixed problem with transaction serialization (INDY-338)
        # Adding fields from enabled plugins to schema.
        self.schema = self.schema + tuple(PLUGIN_CLIENT_REQUEST_FIELDS.items())
        if operation_schema_is_strict:
            operation_field_index = 2
            op = ClientOperationField(
                schema_is_strict=operation_schema_is_strict)
            schema = list(self.schema)
            schema[operation_field_index] = (OPERATION, op)
            self.schema = tuple(schema)

    def validate(self, dct):
        super().validate(dct)
        identifier = dct.get(f.IDENTIFIER.nm, None)
        signatures = dct.get(f.SIGS.nm, None)
        signature = dct.get(f.SIG.nm, None)
        endorser = dct.get(f.ENDORSER.nm, None)
        if signatures and signature:
            self._raise_invalid_message(
                'Request can not contain both fields "signatures" and "signature"'
            )
        if endorser is not None:
            if not signatures or endorser not in signatures:
                self._raise_invalid_message("Endorser must sign the request")
            if identifier is None:
                self._raise_invalid_message(
                    "Author's Identifier must be present when sending via Endorser"
                )
            if not signatures or identifier not in signatures:
                self._raise_invalid_message(
                    "Author must sign the request when sending via Endorser")
        if identifier and signatures and identifier not in signatures:
            self._raise_invalid_message(
                'The identifier is not contained in signatures')
        if not (identifier or signatures):
            self._raise_invalid_message(
                'Missing both signatures and identifier')
コード例 #9
0
import pytest
import base58
from plenum.common.messages.fields import IdentifierField

from plenum.test.input_validation.utils import b58_by_len

validator = IdentifierField()


def test_identifiers():
    for byte_len in range(1, 33):
        val = b58_by_len(byte_len)
        if byte_len in (16, 32):
            assert not validator.validate(val)
        else:
            assert validator.validate(val)


def test_invalid_char():
    res = validator.validate(b58_by_len(16)[:-1] + '+')
    assert res
    assert (res == "should not contain the following chars {}".format(
        sorted(set('+'))))
コード例 #10
0
ファイル: types.py プロジェクト: ken-ebert/indy-node
class GetContextField(MessageValidator):
    context = (
        (CONTEXT_NAME, LimitedLengthStringField(max_length=NAME_FIELD_LIMIT)),
        (CONTEXT_VERSION, VersionField(version_cls=ContextVersion)),
        (ORIGIN, IdentifierField(optional=True))
    )