This commit is contained in:
Chih Cheng Liang 2019-08-08 14:22:06 +08:00 committed by Kevin Mai-Husan Chia
parent 5903012e0e
commit c536aa3e07
19 changed files with 58 additions and 62 deletions

View File

@ -1,4 +1,4 @@
from typing import Any, Awaitable, Callable, List, Sequence from typing import Any, List, Sequence
import multiaddr import multiaddr

View File

@ -1,5 +1,5 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Any, Awaitable, Callable, List, Sequence from typing import Any, List, Sequence
import multiaddr import multiaddr

View File

@ -1,5 +1,5 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, Awaitable, Callable, Dict, Sequence from typing import TYPE_CHECKING, Dict, Sequence
from multiaddr import Multiaddr from multiaddr import Multiaddr
@ -12,7 +12,7 @@ from libp2p.typing import StreamHandlerFn
from .stream.net_stream_interface import INetStream from .stream.net_stream_interface import INetStream
if TYPE_CHECKING: if TYPE_CHECKING:
from .notifee_interface import INotifee from .notifee_interface import INotifee # noqa: F401
class INetwork(ABC): class INetwork(ABC):

View File

@ -7,7 +7,7 @@ from libp2p.network.stream.net_stream_interface import INetStream
from libp2p.stream_muxer.abc import IMuxedConn from libp2p.stream_muxer.abc import IMuxedConn
if TYPE_CHECKING: if TYPE_CHECKING:
from .network_interface import INetwork from .network_interface import INetwork # noqa: F401
class INotifee(ABC): class INotifee(ABC):

View File

@ -1,5 +1,5 @@
import asyncio import asyncio
from typing import Awaitable, Callable, Dict, List, Sequence from typing import Callable, Dict, List, Sequence
from multiaddr import Multiaddr from multiaddr import Multiaddr

View File

@ -1,4 +1,4 @@
from typing import Dict, Tuple, TypeVar from typing import Dict, Tuple
from libp2p.stream_muxer.abc import IMuxedStream from libp2p.stream_muxer.abc import IMuxedStream
from libp2p.typing import StreamHandlerFn, TProtocol from libp2p.typing import StreamHandlerFn, TProtocol

View File

@ -1,5 +1,5 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Dict, Tuple, TypeVar from typing import Dict, Tuple
from libp2p.stream_muxer.abc import IMuxedStream from libp2p.stream_muxer.abc import IMuxedStream
from libp2p.typing import StreamHandlerFn, TProtocol from libp2p.typing import StreamHandlerFn, TProtocol

View File

@ -15,7 +15,7 @@ from .pubsub_notifee import PubsubNotifee
from .validators import signature_validator from .validators import signature_validator
if TYPE_CHECKING: if TYPE_CHECKING:
from .pubsub_router_interface import IPubsubRouter from .pubsub_router_interface import IPubsubRouter # noqa: F401
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View File

@ -8,8 +8,8 @@ from libp2p.network.stream.net_stream_interface import INetStream
from libp2p.stream_muxer.abc import IMuxedConn from libp2p.stream_muxer.abc import IMuxedConn
if TYPE_CHECKING: if TYPE_CHECKING:
import asyncio import asyncio # noqa: F401
from libp2p.peer.id import ID from libp2p.peer.id import ID # noqa: F401
class PubsubNotifee(INotifee): class PubsubNotifee(INotifee):

View File

@ -6,7 +6,7 @@ from libp2p.peer.id import ID
from .pb import rpc_pb2 from .pb import rpc_pb2
if TYPE_CHECKING: if TYPE_CHECKING:
from .pubsub import Pubsub from .pubsub import Pubsub # noqa: F401
class IPubsubRouter(ABC): class IPubsubRouter(ABC):

View File

@ -1,12 +1,11 @@
from typing import TYPE_CHECKING, cast from typing import cast
from libp2p.security.secure_conn_interface import ISecureConn from libp2p.security.secure_conn_interface import ISecureConn
from libp2p.security.secure_transport_interface import ISecureTransport from libp2p.security.secure_transport_interface import ISecureTransport
if TYPE_CHECKING: from libp2p.network.connection.raw_connection_interface import IRawConnection
from libp2p.network.connection.raw_connection_interface import IRawConnection from libp2p.peer.id import ID
from libp2p.peer.id import ID from .typing import TSecurityDetails
from .typing import TSecurityDetails
class InsecureTransport(ISecureTransport): class InsecureTransport(ISecureTransport):
@ -20,7 +19,7 @@ class InsecureTransport(ISecureTransport):
def __init__(self, transport_id: str) -> None: def __init__(self, transport_id: str) -> None:
self.transport_id = transport_id self.transport_id = transport_id
async def secure_inbound(self, conn: "IRawConnection") -> ISecureConn: async def secure_inbound(self, conn: IRawConnection) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are not the initiator) for an inbound connection (i.e. we are not the initiator)
@ -29,7 +28,7 @@ class InsecureTransport(ISecureTransport):
insecure_conn = InsecureConn(conn, self.transport_id) insecure_conn = InsecureConn(conn, self.transport_id)
return insecure_conn return insecure_conn
async def secure_outbound(self, conn: "IRawConnection", peer_id: "ID") -> ISecureConn: async def secure_outbound(self, conn: IRawConnection, peer_id: ID) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are the initiator) for an inbound connection (i.e. we are the initiator)
@ -40,21 +39,21 @@ class InsecureTransport(ISecureTransport):
class InsecureConn(ISecureConn): class InsecureConn(ISecureConn):
conn: "IRawConnection" conn: IRawConnection
details: "TSecurityDetails" details: TSecurityDetails
def __init__(self, conn: "IRawConnection", conn_id: str) -> None: def __init__(self, conn: IRawConnection, conn_id: str) -> None:
self.conn = conn self.conn = conn
self.details = cast("TSecurityDetails", {}) self.details = cast(TSecurityDetails, {})
self.details["id"] = conn_id self.details["id"] = conn_id
def get_conn(self) -> "IRawConnection": def get_conn(self) -> IRawConnection:
""" """
:return: connection object that has been made secure :return: connection object that has been made secure
""" """
return self.conn return self.conn
def get_security_details(self) -> "TSecurityDetails": def get_security_details(self) -> TSecurityDetails:
""" """
:return: map containing details about the connections security :return: map containing details about the connections security
""" """

View File

@ -1,9 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
if TYPE_CHECKING: from libp2p.network.connection.raw_connection_interface import IRawConnection
from libp2p.network.connection.raw_connection_interface import IRawConnection from .typing import TSecurityDetails
from .typing import TSecurityDetails
""" """
@ -16,13 +14,13 @@ Relevant go repo: https://github.com/libp2p/go-conn-security/blob/master/interfa
class ISecureConn(ABC): class ISecureConn(ABC):
@abstractmethod @abstractmethod
def get_conn(self) -> "IRawConnection": def get_conn(self) -> IRawConnection:
""" """
:return: the underlying raw connection :return: the underlying raw connection
""" """
@abstractmethod @abstractmethod
def get_security_details(self) -> "TSecurityDetails": def get_security_details(self) -> TSecurityDetails:
""" """
:return: map containing details about the connections security :return: map containing details about the connections security
""" """

View File

@ -1,10 +1,8 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
if TYPE_CHECKING: from .secure_conn_interface import ISecureConn
from .secure_conn_interface import ISecureConn from libp2p.network.connection.raw_connection_interface import IRawConnection
from libp2p.network.connection.raw_connection_interface import IRawConnection from libp2p.peer.id import ID
from libp2p.peer.id import ID
""" """
@ -17,7 +15,7 @@ Relevant go repo: https://github.com/libp2p/go-conn-security/blob/master/interfa
class ISecureTransport(ABC): class ISecureTransport(ABC):
@abstractmethod @abstractmethod
async def secure_inbound(self, conn: "IRawConnection") -> "ISecureConn": async def secure_inbound(self, conn: IRawConnection) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are not the initiator) for an inbound connection (i.e. we are not the initiator)
@ -25,7 +23,7 @@ class ISecureTransport(ABC):
""" """
@abstractmethod @abstractmethod
async def secure_outbound(self, conn: "IRawConnection", peer_id: "ID") -> "ISecureConn": async def secure_outbound(self, conn: IRawConnection, peer_id: ID) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are the initiator) for an inbound connection (i.e. we are the initiator)

View File

@ -1,5 +1,5 @@
from abc import ABC from abc import ABC
from typing import Dict, NewType from typing import Dict
from libp2p.network.connection.raw_connection_interface import IRawConnection from libp2p.network.connection.raw_connection_interface import IRawConnection
from libp2p.peer.id import ID from libp2p.peer.id import ID
@ -20,9 +20,9 @@ Relevant go repo: https://github.com/libp2p/go-conn-security/blob/master/interfa
class SecurityMultistream(ABC): class SecurityMultistream(ABC):
transports: Dict[TProtocol, "ISecureTransport"] transports: Dict[TProtocol, ISecureTransport]
multiselect: "Multiselect" multiselect: Multiselect
multiselect_client: "MultiselectClient" multiselect_client: MultiselectClient
def __init__(self) -> None: def __init__(self) -> None:
# Map protocol to secure transport # Map protocol to secure transport
@ -34,7 +34,7 @@ class SecurityMultistream(ABC):
# Create multiselect client # Create multiselect client
self.multiselect_client = MultiselectClient() self.multiselect_client = MultiselectClient()
def add_transport(self, protocol: TProtocol, transport: "ISecureTransport") -> None: def add_transport(self, protocol: TProtocol, transport: ISecureTransport) -> None:
# Associate protocol with transport # Associate protocol with transport
self.transports[protocol] = transport self.transports[protocol] = transport
@ -43,7 +43,7 @@ class SecurityMultistream(ABC):
# we only care about selecting the protocol, not any handler function # we only care about selecting the protocol, not any handler function
self.multiselect.add_handler(protocol, None) self.multiselect.add_handler(protocol, None)
async def secure_inbound(self, conn: "IRawConnection") -> "ISecureConn": async def secure_inbound(self, conn: IRawConnection) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are not the initiator) for an inbound connection (i.e. we are not the initiator)
@ -58,7 +58,7 @@ class SecurityMultistream(ABC):
return secure_conn return secure_conn
async def secure_outbound(self, conn: "IRawConnection", peer_id: "ID") -> "ISecureConn": async def secure_outbound(self, conn: IRawConnection, peer_id: ID) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are the initiator) for an inbound connection (i.e. we are the initiator)
@ -73,7 +73,7 @@ class SecurityMultistream(ABC):
return secure_conn return secure_conn
async def select_transport(self, conn: "IRawConnection", initiator: bool) -> "ISecureTransport": async def select_transport(self, conn: IRawConnection, initiator: bool) -> ISecureTransport:
""" """
Select a transport that both us and the node on the Select a transport that both us and the node on the
other end of conn support and agree on other end of conn support and agree on

View File

@ -1,13 +1,12 @@
import asyncio import asyncio
from typing import TYPE_CHECKING, cast from typing import cast
from libp2p.security.secure_conn_interface import ISecureConn from libp2p.security.secure_conn_interface import ISecureConn
from libp2p.security.secure_transport_interface import ISecureTransport from libp2p.security.secure_transport_interface import ISecureTransport
if TYPE_CHECKING: from libp2p.network.connection.raw_connection_interface import IRawConnection
from libp2p.network.connection.raw_connection_interface import IRawConnection from libp2p.peer.id import ID
from libp2p.peer.id import ID from .typing import TSecurityDetails
from .typing import TSecurityDetails
class SimpleSecurityTransport(ISecureTransport): class SimpleSecurityTransport(ISecureTransport):
@ -16,7 +15,7 @@ class SimpleSecurityTransport(ISecureTransport):
def __init__(self, key_phrase: str) -> None: def __init__(self, key_phrase: str) -> None:
self.key_phrase = key_phrase self.key_phrase = key_phrase
async def secure_inbound(self, conn: "IRawConnection") -> "ISecureConn": async def secure_inbound(self, conn: IRawConnection) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are not the initiator) for an inbound connection (i.e. we are not the initiator)
@ -31,7 +30,7 @@ class SimpleSecurityTransport(ISecureTransport):
secure_conn = SimpleSecureConn(conn, self.key_phrase) secure_conn = SimpleSecureConn(conn, self.key_phrase)
return secure_conn return secure_conn
async def secure_outbound(self, conn: "IRawConnection", peer_id: "ID") -> "ISecureConn": async def secure_outbound(self, conn: IRawConnection, peer_id: ID) -> ISecureConn:
""" """
Secure the connection, either locally or by communicating with opposing node via conn, Secure the connection, either locally or by communicating with opposing node via conn,
for an inbound connection (i.e. we are the initiator) for an inbound connection (i.e. we are the initiator)
@ -52,22 +51,22 @@ class SimpleSecurityTransport(ISecureTransport):
class SimpleSecureConn(ISecureConn): class SimpleSecureConn(ISecureConn):
conn: "IRawConnection" conn: IRawConnection
key_phrase: str key_phrase: str
details: "TSecurityDetails" details: TSecurityDetails
def __init__(self, conn: "IRawConnection", key_phrase: str) -> None: def __init__(self, conn: IRawConnection, key_phrase: str) -> None:
self.conn = conn self.conn = conn
self.details = cast("TSecurityDetails", {}) self.details = cast(TSecurityDetails, {})
self.details["key_phrase"] = key_phrase self.details["key_phrase"] = key_phrase
def get_conn(self) -> "IRawConnection": def get_conn(self) -> IRawConnection:
""" """
:return: connection object that has been made secure :return: connection object that has been made secure
""" """
return self.conn return self.conn
def get_security_details(self) -> "TSecurityDetails": def get_security_details(self) -> TSecurityDetails:
""" """
:return: map containing details about the connections security :return: map containing details about the connections security
""" """

View File

@ -89,7 +89,7 @@ async def no_common_protocol(host_a, host_b):
# try to creates a new new with a procotol not known by the other host # try to creates a new new with a procotol not known by the other host
with pytest.raises(MultiselectClientError): with pytest.raises(MultiselectClientError):
_ = await host_b.new_stream(host_a.get_id(), ["/fakeproto/0.0.1"]) await host_b.new_stream(host_a.get_id(), ["/fakeproto/0.0.1"])
@pytest.mark.asyncio @pytest.mark.asyncio

View File

@ -19,7 +19,7 @@ def test_init():
def test_no_init_value(): def test_no_init_value():
with pytest.raises(Exception) as _: with pytest.raises(Exception):
ID() ID()

View File

@ -28,7 +28,7 @@ def test_init_():
def test_init_no_value(): def test_init_no_value():
with pytest.raises(Exception) as _: with pytest.raises(Exception):
PeerInfo() PeerInfo()

View File

@ -4,6 +4,8 @@ from libp2p.pubsub.mcache import MessageCache
class Msg: class Msg:
__slots__ = ["topicIDs", "seqno", "from_id"]
def __init__(self, topicIDs, seqno, from_id): def __init__(self, topicIDs, seqno, from_id):
self.topicIDs = topicIDs self.topicIDs = topicIDs
self.seqno = seqno self.seqno = seqno