Merge branch 'fix-update-stream'
[API] add `aioupnp_version` to `upnp` field in the response to `status` [API] fix uncaught claim signature errors
This commit is contained in:
commit
6cb30f8e05
6 changed files with 19 additions and 8 deletions
|
@ -30,7 +30,7 @@ class HTTPSHandler(logging.Handler):
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _emit(self, record):
|
def _emit(self, record):
|
||||||
payload = self.format(record)
|
payload = self.format(record)
|
||||||
response = yield treq.post(self.url, data=payload, cookies=self.cookies)
|
response = yield treq.post(self.url, data=payload.encode(), cookies=self.cookies)
|
||||||
self.cookies.update(response.cookies())
|
self.cookies.update(response.cookies())
|
||||||
|
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
|
|
|
@ -8,6 +8,7 @@ from hashlib import sha256
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
from twisted.internet import defer, threads, reactor, error, task
|
from twisted.internet import defer, threads, reactor, error, task
|
||||||
import lbryschema
|
import lbryschema
|
||||||
|
from aioupnp import __version__ as aioupnp_version
|
||||||
from aioupnp.upnp import UPnP
|
from aioupnp.upnp import UPnP
|
||||||
from aioupnp.fault import UPnPError
|
from aioupnp.fault import UPnPError
|
||||||
from lbrynet import conf
|
from lbrynet import conf
|
||||||
|
@ -792,8 +793,9 @@ class UPnPComponent(Component):
|
||||||
|
|
||||||
def get_status(self):
|
def get_status(self):
|
||||||
return {
|
return {
|
||||||
|
'aioupnp_version': aioupnp_version,
|
||||||
'redirects': self.upnp_redirects,
|
'redirects': self.upnp_redirects,
|
||||||
'gateway': '' if not self.upnp else self.upnp.gateway.manufacturer_string,
|
'gateway': 'No gateway found' if not self.upnp else self.upnp.gateway.manufacturer_string,
|
||||||
'dht_redirect_set': 'UDP' in self.upnp_redirects,
|
'dht_redirect_set': 'UDP' in self.upnp_redirects,
|
||||||
'peer_redirect_set': 'TCP' in self.upnp_redirects,
|
'peer_redirect_set': 'TCP' in self.upnp_redirects,
|
||||||
'external_ip': self.external_ip
|
'external_ip': self.external_ip
|
||||||
|
|
|
@ -773,6 +773,7 @@ class Daemon(AuthJSONRPCServer):
|
||||||
'managed_files': (int) count of files in the file manager,
|
'managed_files': (int) count of files in the file manager,
|
||||||
},
|
},
|
||||||
'upnp': {
|
'upnp': {
|
||||||
|
'aioupnp_version': (str),
|
||||||
'redirects': {
|
'redirects': {
|
||||||
<TCP | UDP>: (int) external_port,
|
<TCP | UDP>: (int) external_port,
|
||||||
},
|
},
|
||||||
|
@ -2295,7 +2296,7 @@ class Daemon(AuthJSONRPCServer):
|
||||||
except DecodeError as err:
|
except DecodeError as err:
|
||||||
# there was a problem with a metadata field, raise an error here rather than
|
# there was a problem with a metadata field, raise an error here rather than
|
||||||
# waiting to find out when we go to publish the claim (after having made the stream)
|
# waiting to find out when we go to publish the claim (after having made the stream)
|
||||||
raise Exception("invalid publish metadata: %s" % err.message)
|
raise Exception(f"invalid publish metadata: {err}")
|
||||||
|
|
||||||
certificate = None
|
certificate = None
|
||||||
if channel_id or channel_name:
|
if channel_id or channel_name:
|
||||||
|
|
|
@ -2,6 +2,7 @@ from decimal import Decimal
|
||||||
from binascii import hexlify
|
from binascii import hexlify
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from json import JSONEncoder
|
from json import JSONEncoder
|
||||||
|
from ecdsa import BadSignatureError
|
||||||
from lbrynet.wallet.transaction import Transaction, Output
|
from lbrynet.wallet.transaction import Transaction, Output
|
||||||
from lbrynet.wallet.dewies import dewies_to_lbc
|
from lbrynet.wallet.dewies import dewies_to_lbc
|
||||||
from lbrynet.wallet.ledger import MainNetLedger
|
from lbrynet.wallet.ledger import MainNetLedger
|
||||||
|
@ -68,9 +69,12 @@ class JSONResponseEncoder(JSONEncoder):
|
||||||
output['valid_signature'] = None
|
output['valid_signature'] = None
|
||||||
if txo.channel is not None:
|
if txo.channel is not None:
|
||||||
output['channel_name'] = txo.channel.claim_name
|
output['channel_name'] = txo.channel.claim_name
|
||||||
|
try:
|
||||||
output['valid_signature'] = claim.validate_signature(
|
output['valid_signature'] = claim.validate_signature(
|
||||||
txo.get_address(self.ledger), txo.channel.claim
|
txo.get_address(self.ledger), txo.channel.claim
|
||||||
)
|
)
|
||||||
|
except BadSignatureError:
|
||||||
|
output['valid_signature'] = False
|
||||||
|
|
||||||
if txo.script.is_claim_name:
|
if txo.script.is_claim_name:
|
||||||
output['type'] = 'claim'
|
output['type'] = 'claim'
|
||||||
|
|
|
@ -709,7 +709,9 @@ class SQLiteStorage:
|
||||||
"select claim_id from claim where claim_outpoint=?", current_associated_content
|
"select claim_id from claim where claim_outpoint=?", current_associated_content
|
||||||
).fetchone()[0]
|
).fetchone()[0]
|
||||||
if current_associated_claim_id != new_claim_id:
|
if current_associated_claim_id != new_claim_id:
|
||||||
raise Exception("invalid stream update")
|
raise Exception(
|
||||||
|
f"mismatching claim ids when updating stream {current_associated_claim_id} vs {new_claim_id}"
|
||||||
|
)
|
||||||
|
|
||||||
# update the claim associated to the file
|
# update the claim associated to the file
|
||||||
transaction.execute("insert or replace into content_claim values (?, ?)", (stream_hash, claim_outpoint))
|
transaction.execute("insert or replace into content_claim values (?, ?)", (stream_hash, claim_outpoint))
|
||||||
|
|
|
@ -334,7 +334,9 @@ class ContentClaimStorageTests(StorageTest):
|
||||||
invalid_update_info['nout'] = 0
|
invalid_update_info['nout'] = 0
|
||||||
invalid_update_info['claim_id'] = "beef0002" * 5
|
invalid_update_info['claim_id'] = "beef0002" * 5
|
||||||
invalid_update_outpoint = "%s:%i" % (invalid_update_info['txid'], invalid_update_info['nout'])
|
invalid_update_outpoint = "%s:%i" % (invalid_update_info['txid'], invalid_update_info['nout'])
|
||||||
with self.assertRaisesRegex(Exception, "invalid stream update"):
|
with self.assertRaisesRegex(Exception, "mismatching claim ids when updating stream "
|
||||||
|
"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef "
|
||||||
|
"vs beef0002beef0002beef0002beef0002beef0002"):
|
||||||
yield self.storage.save_claims([invalid_update_info])
|
yield self.storage.save_claims([invalid_update_info])
|
||||||
yield self.storage.save_content_claim(stream_hash, invalid_update_outpoint)
|
yield self.storage.save_content_claim(stream_hash, invalid_update_outpoint)
|
||||||
current_claim_info = yield self.storage.get_content_claim(stream_hash)
|
current_claim_info = yield self.storage.get_content_claim(stream_hash)
|
||||||
|
|
Loading…
Reference in a new issue