mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Problem: upsert-validator approve has no error handling for an unauthorized signing key
Solution: Raise an exception if the signature doesn't match one of the authorized keys
This commit is contained in:
parent
8c0bf8caa0
commit
2ade51056e
@ -16,7 +16,7 @@ import sys
|
|||||||
from bigchaindb.utils import load_node_key
|
from bigchaindb.utils import load_node_key
|
||||||
from bigchaindb.common.exceptions import (DatabaseAlreadyExists,
|
from bigchaindb.common.exceptions import (DatabaseAlreadyExists,
|
||||||
DatabaseDoesNotExist,
|
DatabaseDoesNotExist,
|
||||||
OperationError)
|
OperationError, KeypairMismatchException)
|
||||||
import bigchaindb
|
import bigchaindb
|
||||||
from bigchaindb import (backend, ValidatorElection,
|
from bigchaindb import (backend, ValidatorElection,
|
||||||
BigchainDB, ValidatorElectionVote)
|
BigchainDB, ValidatorElectionVote)
|
||||||
@ -159,9 +159,15 @@ def run_upsert_validator_approve(args, bigchain):
|
|||||||
|
|
||||||
key = load_node_key(args.sk)
|
key = load_node_key(args.sk)
|
||||||
tx = bigchain.get_transaction(args.election_id)
|
tx = bigchain.get_transaction(args.election_id)
|
||||||
voting_power = [v.amount for v in tx.outputs if key.public_key in v.public_keys][0]
|
voting_powers = [v.amount for v in tx.outputs if key.public_key in v.public_keys]
|
||||||
|
if len(voting_powers) > 0:
|
||||||
|
voting_power = voting_powers[0]
|
||||||
|
else:
|
||||||
|
raise KeypairMismatchException(
|
||||||
|
'The key you provided does not match any of the eligible voters in this election.'
|
||||||
|
)
|
||||||
|
|
||||||
inputs = [input for input in tx.to_inputs() if key.public_key in input.owners_before]
|
inputs = [i for i in tx.to_inputs() if key.public_key in i.owners_before]
|
||||||
approval = ValidatorElectionVote.generate(inputs, [
|
approval = ValidatorElectionVote.generate(inputs, [
|
||||||
([key.public_key], voting_power)], tx.id).sign([key.private_key])
|
([key.public_key], voting_power)], tx.id).sign([key.private_key])
|
||||||
approval.validate(bigchain)
|
approval.validate(bigchain)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user