Skip to content
Snippets Groups Projects
Commit d400d0bd authored by Vincent Texier's avatar Vincent Texier
Browse files

[enh] #798 use only pubkey in evaluate_condition to allow it before entering credentials

parent 22e93520
Branches
Tags
1 merge request!778Release 0.51.0
...@@ -334,7 +334,11 @@ class TransferController(QObject): ...@@ -334,7 +334,11 @@ class TransferController(QObject):
source = self.model.current_source source = self.model.current_source
condition = pypeg2.parse(source.conditions, Condition) condition = pypeg2.parse(source.conditions, Condition)
result, _errors = self.model.app.sources_service.evaluate_condition( result, _errors = self.model.app.sources_service.evaluate_condition(
self.model.app.currency, condition, [], [], source.identifier self.model.app.currency,
condition,
[self.model.connection.pubkey],
[],
source.identifier,
) )
if result: if result:
message = QCoreApplication.translate( message = QCoreApplication.translate(
......
...@@ -302,7 +302,7 @@ class DocumentsService: ...@@ -302,7 +302,7 @@ class DocumentsService:
:param int amount: The amount target value :param int amount: The amount target value
:param int amount_base: The amount base target value :param int amount_base: The amount base target value
:param str currency: The community target of the transaction :param str currency: The community target of the transaction
:param str key: The key owning the sources :param SigningKey key: The key owning the sources
:return: The list of inputs to use in the transaction document :return: The list of inputs to use in the transaction document
""" """
...@@ -332,7 +332,7 @@ class DocumentsService: ...@@ -332,7 +332,7 @@ class DocumentsService:
condition = pypeg2.parse(s.conditions, Condition) condition = pypeg2.parse(s.conditions, Condition)
# evaluate the condition # evaluate the condition
result, _ = self._sources_services.evaluate_condition( result, _ = self._sources_services.evaluate_condition(
currency, condition, [key], [], s.identifier currency, condition, [key.pubkey], [], s.identifier
) )
if not result: if not result:
continue continue
......
...@@ -279,7 +279,7 @@ class SourcesServices(QObject): ...@@ -279,7 +279,7 @@ class SourcesServices(QObject):
self, self,
currency: str, currency: str,
condition: Condition, condition: Condition,
keys: list, pubkeys: list,
passwords: list, passwords: list,
identifier: str, identifier: str,
result: bool = False, result: bool = False,
...@@ -291,11 +291,12 @@ class SourcesServices(QObject): ...@@ -291,11 +291,12 @@ class SourcesServices(QObject):
:param str currency: Name of currency :param str currency: Name of currency
:param Condition condition: Condition instance :param Condition condition: Condition instance
:param [SigningKey] keys: Keys to unlock condition :param [str] pubkeys: Keys to unlock condition
:param [str] passwords: List of passwords :param [str] passwords: List of passwords
:param str identifier: Source transaction identifier :param str identifier: Source transaction identifier
:param bool result: Evaluation result accumulator :param bool result: Evaluation result accumulator
:param [tuple] _errors: List of tuple with parameters returning false (parameter: str, message: str, param: int) :param [tuple] _errors: List of tuple with infos on condition returning false (condition: str, message: str,
param: str|int)
:return: :return:
""" """
left = False left = False
...@@ -304,17 +305,29 @@ class SourcesServices(QObject): ...@@ -304,17 +305,29 @@ class SourcesServices(QObject):
if isinstance(condition.left, Condition): if isinstance(condition.left, Condition):
# evaluate condition # evaluate condition
left, _errors = self.evaluate_condition( left, _errors = self.evaluate_condition(
currency, condition.left, keys, passwords, identifier, result, _errors currency,
condition.left,
pubkeys,
passwords,
identifier,
result,
_errors,
) )
# if right param is a condition... # if right param is a condition...
if isinstance(condition.right, Condition): if isinstance(condition.right, Condition):
# evaluate condition # evaluate condition
right, _errors = self.evaluate_condition( right, _errors = self.evaluate_condition(
currency, condition.right, keys, passwords, identifier, result, _errors currency,
condition.right,
pubkeys,
passwords,
identifier,
result,
_errors,
) )
# if left param is a SIG... # if left param is a SIG...
if isinstance(condition.left, SIG): if isinstance(condition.left, SIG):
if condition.left.pubkey in (key.pubkey for key in keys): if condition.left.pubkey in pubkeys:
left = True left = True
else: else:
if _errors is None: if _errors is None:
...@@ -388,7 +401,7 @@ class SourcesServices(QObject): ...@@ -388,7 +401,7 @@ class SourcesServices(QObject):
# if right param is a SIG... # if right param is a SIG...
if isinstance(condition.right, SIG): if isinstance(condition.right, SIG):
if condition.right.pubkey in (key.pubkey for key in keys): if condition.right.pubkey in pubkeys:
right = True right = True
else: else:
if _errors is None: if _errors is None:
......
...@@ -127,7 +127,11 @@ def test_evaluate_condition_source_lock_mode_0( ...@@ -127,7 +127,11 @@ def test_evaluate_condition_source_lock_mode_0(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [bob.key], [], tx_hash application_with_one_connection.currency,
condition,
[bob.key.pubkey],
[],
tx_hash,
) )
assert result is True assert result is True
assert _errors is None assert _errors is None
...@@ -137,7 +141,11 @@ def test_evaluate_condition_source_lock_mode_0( ...@@ -137,7 +141,11 @@ def test_evaluate_condition_source_lock_mode_0(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [alice.key], [], tx_hash, application_with_one_connection.currency,
condition,
[alice.key.pubkey],
[],
tx_hash,
) )
assert result is False assert result is False
assert _errors == [ assert _errors == [
...@@ -215,7 +223,11 @@ def test_evaluate_condition_source_lock_mode_1( ...@@ -215,7 +223,11 @@ def test_evaluate_condition_source_lock_mode_1(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [bob.key], [], tx_hash application_with_one_connection.currency,
condition,
[bob.key.pubkey],
[],
tx_hash,
) )
assert result is True assert result is True
assert _errors == [ assert _errors == [
...@@ -232,7 +244,11 @@ def test_evaluate_condition_source_lock_mode_1( ...@@ -232,7 +244,11 @@ def test_evaluate_condition_source_lock_mode_1(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [alice.key], [], tx_hash, application_with_one_connection.currency,
condition,
[alice.key.pubkey],
[],
tx_hash,
) )
assert result is False assert result is False
assert _errors == [ assert _errors == [
...@@ -289,7 +305,11 @@ def test_evaluate_condition_source_lock_mode_1( ...@@ -289,7 +305,11 @@ def test_evaluate_condition_source_lock_mode_1(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [bob.key], [], tx_hash application_with_one_connection.currency,
condition,
[bob.key.pubkey],
[],
tx_hash,
) )
assert result is True assert result is True
assert _errors == [ assert _errors == [
...@@ -305,7 +325,11 @@ def test_evaluate_condition_source_lock_mode_1( ...@@ -305,7 +325,11 @@ def test_evaluate_condition_source_lock_mode_1(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [alice.key], [], tx_hash, application_with_one_connection.currency,
condition,
[alice.key.pubkey],
[],
tx_hash,
) )
assert result is True assert result is True
assert _errors == [ assert _errors == [
...@@ -378,7 +402,11 @@ def test_evaluate_condition_source_multisig( ...@@ -378,7 +402,11 @@ def test_evaluate_condition_source_multisig(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [bob.key], [], tx_hash application_with_one_connection.currency,
condition,
[bob.key.pubkey],
[],
tx_hash,
) )
assert result is False assert result is False
assert _errors == [ assert _errors == [
...@@ -394,7 +422,11 @@ def test_evaluate_condition_source_multisig( ...@@ -394,7 +422,11 @@ def test_evaluate_condition_source_multisig(
result, result,
_errors, _errors,
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, condition, [alice.key], [], tx_hash, application_with_one_connection.currency,
condition,
[alice.key.pubkey],
[],
tx_hash,
) )
assert result is False assert result is False
assert _errors == [ assert _errors == [
...@@ -412,7 +444,7 @@ def test_evaluate_condition_source_multisig( ...@@ -412,7 +444,7 @@ def test_evaluate_condition_source_multisig(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
condition, condition,
[alice.key, bob.key], [alice.key.pubkey, bob.key.pubkey],
[], [],
tx_hash, tx_hash,
) )
...@@ -570,7 +602,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -570,7 +602,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx2_condition, tx2_condition,
[alice.key], [alice.key.pubkey],
[password], [password],
tx2_hash, tx2_hash,
) )
...@@ -597,7 +629,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -597,7 +629,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx1_condition, tx1_condition,
[bob.key], [bob.key.pubkey],
[password], [password],
tx1_hash, tx1_hash,
) )
...@@ -623,7 +655,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -623,7 +655,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx1_condition, tx1_condition,
[bob.key, alice.key], [bob.key.pubkey, alice.key.pubkey],
[password], [password],
tx1_hash, tx1_hash,
) )
...@@ -639,7 +671,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -639,7 +671,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx2_condition, tx2_condition,
[bob.key, alice.key], [bob.key.pubkey, alice.key.pubkey],
[password], [password],
tx2_hash, tx2_hash,
) )
...@@ -655,7 +687,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -655,7 +687,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx2_condition, tx2_condition,
[alice.key], [alice.key.pubkey],
[], [],
tx2_hash, tx2_hash,
) )
...@@ -686,7 +718,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -686,7 +718,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx1_condition, tx1_condition,
[bob.key], [bob.key.pubkey],
[], [],
tx1_hash, tx1_hash,
) )
...@@ -797,7 +829,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -797,7 +829,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx1_condition, tx1_condition,
[alice.key], [alice.key.pubkey],
[], [],
tx1_hash, tx1_hash,
) )
...@@ -827,7 +859,7 @@ def test_evaluate_condition_source_atomic_swap( ...@@ -827,7 +859,7 @@ def test_evaluate_condition_source_atomic_swap(
) = application_with_one_connection.sources_service.evaluate_condition( ) = application_with_one_connection.sources_service.evaluate_condition(
application_with_one_connection.currency, application_with_one_connection.currency,
tx2_condition, tx2_condition,
[bob.key], [bob.key.pubkey],
[], [],
tx2_hash, tx2_hash,
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment