Skip to content

Commit 366fd84

Browse files
Merge branch 'main' into allow_self_signed_cert
2 parents 1cc5a27 + 25924cf commit 366fd84

5 files changed

Lines changed: 40 additions & 94 deletions

File tree

dev-requirements.txt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,16 +239,6 @@ wheel==0.44.0
239239
# via pip-tools
240240
zipp==3.20.1
241241
# via importlib-metadata
242-
jwskate==0.11.1
243-
binapy==0.8.0
244-
# via jwskate
245-
cffi==1.17.1
246-
# via jwskate
247-
cryptography==44.0.2
248-
# via jwskate
249-
pycparser==2.22
250-
# via jwskate
251-
252242

253243
# The following packages are considered to be unsafe in a requirements file:
254244
# pip

setup.cfg

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ install_requires =
4343
pytz
4444
click
4545
websockets~=13.1
46-
jwskate~=0.11
47-
4846

4947
[options.packages.find]
5048
where = src

src/s2python/generated/gen_s2_pairing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class PairingRequest(BaseModel):
5151
publicKey: str
5252
s2ClientNodeId: str
5353
s2ClientNodeDescription: str
54-
supportedProtocols: List[Protocols]
54+
supportedProtocols: Protocols
5555

5656

5757
class PairingResponse(BaseModel):
@@ -68,7 +68,7 @@ class ConnectionRequest(BaseModel):
6868
extra='forbid',
6969
)
7070
s2ClientNodeId: str
71-
supportedProtocols: List[Protocols]
71+
supportedProtocols: Protocols
7272

7373

7474
class ConnectionDetails(BaseModel):

src/s2python/s2_connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from dataclasses import dataclass
88
from typing import Optional, List, Type, Dict, Callable, Awaitable, Union
99

10-
import ssl
1110
import websockets
1211
from websockets.asyncio.client import ClientConnection as WSConnection, connect as ws_connect
1312

@@ -330,6 +329,7 @@ async def _connect_ws(self) -> None:
330329
ssl_context.verify_mode = ssl.CERT_NONE
331330

332331
self.ws = await ws_connect(uri=self.url, ssl=ssl_context)
332+
333333
except (EOFError, OSError) as e:
334334
logger.info("Could not connect due to: %s", str(e))
335335

src/s2python/s2_pairing.py

Lines changed: 37 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,49 @@
1+
import asyncio
2+
import json
13
import logging
2-
import uuid
3-
from typing import List
4-
import requests
4+
from dataclasses import dataclass
55

6-
from jwskate import JweCompact
7-
from jwskate.jwk.rsa import RSAJwk
8-
from binapy.binapy import BinaPy
9-
10-
from s2python.generated.gen_s2_pairing import (Protocols,
11-
PairingRequest,
12-
S2NodeDescription,
13-
PairingResponse,
14-
ConnectionRequest,
15-
ConnectionDetails)
6+
from s2python.generated.gen_s2_pairing import Protocols, S2NodeDescription
167

178

189
logger = logging.getLogger("s2python")
1910

11+
@dataclass
12+
class S2PairingEndpoint:
13+
request_pairing_endpoint: str
14+
request_connection_endpoint: str
15+
16+
2017
class S2Pairing: # pylint: disable=too-many-instance-attributes
18+
publicKey: str
19+
privateKey: str
20+
pairing_endpoints: S2PairingEndpoint
21+
token: str
22+
s2ClientNodeId: str
23+
s2ClientNodeDescription: S2NodeDescription
24+
selectedProtocol: Protocols
25+
challenge: str
2126
paired: bool
22-
s2_server_node_id: str
23-
server_node_description: str
24-
selected_protocol: Protocols
25-
connection_uri: str
26-
challenge: BinaPy
27-
28-
_request_pairing_endpoint: str
29-
_token: str
30-
_s2_client_node_description: S2NodeDescription
31-
_verify_certificate: bool | str
32-
_client_node_id: str
33-
_supported_protocols: List[Protocols]
34-
_rsa_key_pair: RSAJwk
3527
def __init__( # pylint: disable=too-many-arguments
3628
self,
37-
request_pairing_endpoint: str,
29+
publicKey: str,
30+
privateKey: str,
31+
pairing_endpoints: S2PairingEndpoint,
3832
token: str,
39-
s2_client_node_description: S2NodeDescription,
40-
verify_certificate: bool | str = False,
41-
client_node_id: str = str(uuid.uuid4()),
42-
supported_protocols: Protocols = (Protocols.WebSocketSecure, )
33+
s2ClientNodeId: str,
34+
s2ClientNodeDescription: S2NodeDescription,
35+
selectedProtocol: Protocols = Protocols.WebSocketSecure
4336
) -> None:
44-
self.paired = False
45-
self.s2_server_node_id = None
46-
self.server_node_description = None
47-
self.selected_protocol = None
48-
self.connection_uri = None
49-
self.challenge = None
50-
51-
self._request_pairing_endpoint = request_pairing_endpoint
52-
self._token = token
53-
self._s2_client_node_description = s2_client_node_description
54-
self._verify_certificate = verify_certificate
55-
self._client_node_id = client_node_id
56-
self._supported_protocols = supported_protocols
57-
self._rsa_key_pair = RSAJwk(self._rsa_key_pair)
58-
59-
def pair(self) -> bool:
60-
self.paired = False
61-
pairing_request: PairingRequest = PairingRequest(token=self._token,
62-
publicKey=self._rsa_key_pair.public_jwk().to_pem(),
63-
s2ClientNodeId=self._client_node_id,
64-
s2ClientNodeDescription=self._s2_client_node_description,
65-
supportedProtocols=self._supported_protocols)
66-
67-
response = requests.post(self.request_pairing_endpoint,
68-
json=pairing_request.model_dump_json(),
69-
timeout=10,
70-
verify = self.verify_certificate)
71-
response.raise_for_status()
72-
pairing_response: PairingResponse = PairingResponse.parse_raw(response.json())
73-
self.s2_server_node_id = pairing_response.s2ServerNodeId
74-
self.server_node_description = pairing_response.serverNodeDescription
75-
76-
connection_request: ConnectionRequest = ConnectionRequest(s2ClientNodeId=self._client_node_id,
77-
supportedProtocols=self._supported_protocols)
78-
79-
response = requests.post(pairing_response.requestConnectionUri,
80-
json=connection_request.model_dump_json(),
81-
timeout=10,
82-
verify = self.verify_certificate)
83-
response.raise_for_status()
84-
connection_details: ConnectionDetails = ConnectionDetails.parse_raw(response.json())
85-
86-
self.selected_protocol = connection_details.selectedProtocol
87-
self.connection_uri = connection_details.connectionUri
88-
self.challenge = JweCompact(connection_details.challenge).decrypt(self._rsa_key_pair)
89-
90-
self.paired = True
91-
return self.paired
37+
self.publicKey = publicKey
38+
self.privateKey = privateKey
39+
self.pairing_endpoints = pairing_endpoints
40+
self.token = token
41+
self.s2ClientNodeId = s2ClientNodeId
42+
self.s2ClientNodeDescription = s2ClientNodeDescription
43+
self.selectedProtocol = selectedProtocol
44+
45+
self.challenge = None
46+
self.paired = false
47+
48+
def pair() -> bool:
49+
return False

0 commit comments

Comments
 (0)