Skip to content

Commit 9a58032

Browse files
authored
Merge pull request #15 from tubleronchik/master
Generate pubkey
2 parents 274cc1a + 2ffa80a commit 9a58032

2 files changed

Lines changed: 17 additions & 16 deletions

File tree

src/stations/.vscode/settings.json

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/stations/httpstation.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,22 @@
66
import json
77
import cgi
88
import nacl.signing
9+
import copy
910

1011
from stations import IStation, StationData, Measurement, STATION_VERSION
11-
#from collections import deque
1212
from http.server import BaseHTTPRequestHandler, HTTPServer
1313

14-
#q = deque()
1514

1615
thlock = threading.RLock()
1716
sessions = dict()
1817

18+
def _generate_pubkey() -> str:
19+
signing_key = nacl.signing.SigningKey.generate()
20+
verify_key = signing_key.verify_key
21+
verify_key_hex = bytes(verify_key).hex()
22+
return str(verify_key_hex)
23+
24+
1925
class RequestHandler(BaseHTTPRequestHandler):
2026

2127
def _set_headers(self):
@@ -29,19 +35,14 @@ def do_HEAD(self):
2935
def do_GET(self):
3036
self._set_headers()
3137

32-
def _generate_pubkey(self) -> str:
33-
signing_key = nacl.signing.SigningKey.generate()
34-
verify_key = signing_key.verify_key
35-
verify_key_hex = bytes(verify_key).hex()
36-
return str(verify_key_hex)
3738

38-
def parser(self, data) -> Measurement:
39+
def _parser(self, data: dict) -> Measurement:
3940
global sessions
4041
global thlock
4142
#rospy.loginfo(f"parser data: {data}")
4243
try:
4344
if data["esp8266id"]:
44-
self.client_id = data["esp8266id"]
45+
self.client_id = int(data["esp8266id"])
4546
for d in data["sensordatavalues"]:
4647
if d["value_type"] == "SDS_P1":
4748
pm10 = float(d["value"])
@@ -57,7 +58,7 @@ def parser(self, data) -> Measurement:
5758
with thlock:
5859
if self.client_id not in sessions:
5960
#rospy.loginfo(f"There is no such address: {self.client_address}")
60-
public = self._generate_pubkey()
61+
public = _generate_pubkey()
6162
else:
6263
#rospy.loginfo(f"Found such address: {self.client_address}")
6364
public = sessions[self.client_id].public
@@ -84,7 +85,7 @@ def do_POST(self):
8485
length = int(self.headers.get("content-length"))
8586
self.data = json.loads(self.rfile.read(length))
8687
rospy.loginfo(self.data)
87-
meas = self.parser(self.data)
88+
meas = self._parser(self.data)
8889
rospy.loginfo(meas)
8990
with thlock:
9091
if meas:
@@ -116,7 +117,7 @@ def __init__(self, config: dict):
116117
self.version = f"airalab-http-{STATION_VERSION}"
117118
self.DEAD_SENSOR_TIME = 60*60 # 1 hour
118119

119-
def get_data(self):
120+
def get_data(self) -> StationData:
120121
global sessions
121122
rospy.loginfo(sessions)
122123

@@ -138,9 +139,12 @@ def _drop_dead_sensors(self) -> dict:
138139
stripped = dict()
139140
current_time = int(time.time())
140141
with thlock:
141-
for k, v in sessions.items():
142+
sessions_copy = copy.deepcopy(sessions)
143+
for k, v in sessions_copy.items():
142144
if (current_time - v.timestamp) < self.DEAD_SENSOR_TIME:
143145
stripped[k] = v
146+
else:
147+
del sessions[k]
144148

145149
return stripped
146150

0 commit comments

Comments
 (0)