Merge pull request #63 from kokarare1212/deepsource-transform-0f72db65

Format code with yapf
This commit is contained in:
こうから
2021-09-13 21:07:03 +09:00
committed by GitHub
2 changed files with 47 additions and 20 deletions

View File

@@ -1097,10 +1097,13 @@ class Session(Closeable, MessageListener, SubListener):
def blob(self, username: str, blob: bytes) -> Session.Builder: def blob(self, username: str, blob: bytes) -> Session.Builder:
if self.device_id is None: if self.device_id is None:
raise TypeError("You must specify the device ID first.") raise TypeError("You must specify the device ID first.")
self.login_credentials = self.decrypt_blob(self.device_id, username, blob) self.login_credentials = self.decrypt_blob(self.device_id,
username, blob)
return self return self
def decrypt_blob(self, device_id: str, username: str, encrypted_blob: bytes) -> Authentication.LoginCredentials: def decrypt_blob(
self, device_id: str, username: str,
encrypted_blob: bytes) -> Authentication.LoginCredentials:
encrypted_blob = base64.b64decode(encrypted_blob) encrypted_blob = base64.b64decode(encrypted_blob)
sha1 = SHA1.new() sha1 = SHA1.new()
sha1.update(device_id.encode()) sha1.update(device_id.encode())
@@ -1119,7 +1122,9 @@ class Session(Closeable, MessageListener, SubListener):
type_int = self.read_blob_int(blob) type_int = self.read_blob_int(blob)
type_ = Authentication.AuthenticationType.Name(type_int) type_ = Authentication.AuthenticationType.Name(type_int)
if type_ is None: if type_ is None:
raise IOError(TypeError("Unknown AuthenticationType: {}".format(type_int))) raise IOError(
TypeError(
"Unknown AuthenticationType: {}".format(type_int)))
le = self.read_blob_int(blob) le = self.read_blob_int(blob)
auth_data = blob.read(le) auth_data = blob.read(le)
return Authentication.LoginCredentials( return Authentication.LoginCredentials(

View File

@@ -62,12 +62,16 @@ class ZeroconfServer(Closeable):
if listen_port == -1: if listen_port == -1:
listen_port = random.randint(self.__min_port + 1, self.__max_port) listen_port = random.randint(self.__min_port + 1, self.__max_port)
self.__runner = ZeroconfServer.HttpRunner(self, listen_port) self.__runner = ZeroconfServer.HttpRunner(self, listen_port)
threading.Thread(target=self.__runner.run, name="zeroconf-http-server").start() threading.Thread(target=self.__runner.run,
name="zeroconf-http-server").start()
self.__zeroconf = zeroconf.Zeroconf() self.__zeroconf = zeroconf.Zeroconf()
self.__service_info = zeroconf.ServiceInfo( self.__service_info = zeroconf.ServiceInfo(
ZeroconfServer.service, ZeroconfServer.service,
inner.device_name + "." + ZeroconfServer.service, inner.device_name + "." + ZeroconfServer.service,
listen_port, 0, 0, { listen_port,
0,
0,
{
"CPath": "/", "CPath": "/",
"VERSION": "1.0", "VERSION": "1.0",
"STACK": "SP", "STACK": "SP",
@@ -75,13 +79,15 @@ class ZeroconfServer(Closeable):
inner.device_name, inner.device_name,
) )
self.__zeroconf.register_service(self.__service_info) self.__zeroconf.register_service(self.__service_info)
threading.Thread(target=self.__zeroconf.start, name="zeroconf-multicast-dns-server").start() threading.Thread(target=self.__zeroconf.start,
name="zeroconf-multicast-dns-server").start()
def close(self) -> None: def close(self) -> None:
self.__zeroconf.close() self.__zeroconf.close()
self.__runner.close() self.__runner.close()
def handle_add_user(self, __socket: socket.socket, params: dict[str, str], http_version: str) -> None: def handle_add_user(self, __socket: socket.socket, params: dict[str, str],
http_version: str) -> None:
username = params.get("userName") username = params.get("userName")
if not username: if not username:
logging.error("Missing userName!") logging.error("Missing userName!")
@@ -95,13 +101,16 @@ class ZeroconfServer(Closeable):
logging.error("Missing clientKey!") logging.error("Missing clientKey!")
with self.__connection_lock: with self.__connection_lock:
if username == self.__connecting_username: if username == self.__connecting_username:
logging.info("{} is already trying to connect.".format(username)) logging.info(
"{} is already trying to connect.".format(username))
__socket.send(http_version.encode()) __socket.send(http_version.encode())
__socket.send(b" 403 Forbidden") __socket.send(b" 403 Forbidden")
__socket.send(self.__eol) __socket.send(self.__eol)
__socket.send(self.__eol) __socket.send(self.__eol)
return return
shared_key = util.int_to_bytes(self.__keys.compute_shared_key(base64.b64decode(client_key_str.encode()))) shared_key = util.int_to_bytes(
self.__keys.compute_shared_key(
base64.b64decode(client_key_str.encode())))
blob_bytes = base64.b64decode(blob_str) blob_bytes = base64.b64decode(blob_str)
iv = blob_bytes[:16] iv = blob_bytes[:16]
encrypted = blob_bytes[16:len(blob_bytes) - 20] encrypted = blob_bytes[16:len(blob_bytes) - 20]
@@ -129,7 +138,8 @@ class ZeroconfServer(Closeable):
decrypted = aes.decrypt(encrypted) decrypted = aes.decrypt(encrypted)
with self.__connection_lock: with self.__connection_lock:
self.__connecting_username = username self.__connecting_username = username
logging.info("Accepted new user from {}. [deviceId: {}]".format(params.get("deviceName"), self.__inner.device_id)) logging.info("Accepted new user from {}. [deviceId: {}]".format(
params.get("deviceName"), self.__inner.device_id))
response = json.dumps(self.__default_successful_add_user) response = json.dumps(self.__default_successful_add_user)
__socket.send(http_version.encode()) __socket.send(http_version.encode())
__socket.send(b" 200 OK") __socket.send(b" 200 OK")
@@ -149,14 +159,18 @@ class ZeroconfServer(Closeable):
with self.__connection_lock: with self.__connection_lock:
self.__connecting_username = None self.__connecting_username = None
def handle_get_info(self, __socket: socket.socket, http_version: str) -> None: def handle_get_info(self, __socket: socket.socket,
http_version: str) -> None:
info = copy.deepcopy(self.__default_get_info_fields) info = copy.deepcopy(self.__default_get_info_fields)
info["device_id"] = self.__inner.device_id info["device_id"] = self.__inner.device_id
info["remoteName"] = self.__inner.device_name info["remoteName"] = self.__inner.device_name
info["publicKey"] = base64.b64encode(self.__keys.public_key_bytes()).decode() info["publicKey"] = base64.b64encode(
self.__keys.public_key_bytes()).decode()
info["deviceType"] = Connect.DeviceType.Name(self.__inner.device_type) info["deviceType"] = Connect.DeviceType.Name(self.__inner.device_type)
with self.__connection_lock: with self.__connection_lock:
info["activeUser"] = self.__connecting_username if self.__connecting_username is not None else self.__session.username() if self.has_valid_session() else "" info[
"activeUser"] = self.__connecting_username if self.__connecting_username is not None else self.__session.username(
) if self.has_valid_session() else ""
def has_valid_session(self) -> bool: def has_valid_session(self) -> bool:
valid = self.__session and self.__session.is_valid() valid = self.__session and self.__session.is_valid()
@@ -195,13 +209,15 @@ class ZeroconfServer(Closeable):
def anonymous(): def anonymous():
self.__handle(__socket) self.__handle(__socket)
__socket.close() __socket.close()
self.__worker.submit(anonymous) self.__worker.submit(anonymous)
def __handle(self, __socket: socket.socket) -> None: def __handle(self, __socket: socket.socket) -> None:
request = io.BytesIO(__socket.recv(1024 * 1024)) request = io.BytesIO(__socket.recv(1024 * 1024))
request_line = request.readline().split(b" ") request_line = request.readline().split(b" ")
if len(request_line) != 3: if len(request_line) != 3:
logging.warning("Unexpected request line: {}".format(request_line)) logging.warning(
"Unexpected request line: {}".format(request_line))
method = request_line[0].decode() method = request_line[0].decode()
path = request_line[1].decode() path = request_line[1].decode()
http_version = request_line[2].decode() http_version = request_line[2].decode()
@@ -213,7 +229,9 @@ class ZeroconfServer(Closeable):
split = header.split(b":") split = header.split(b":")
headers[split[0].decode()] = split[1].strip().decode() headers[split[0].decode()] = split[1].strip().decode()
if not self.__zeroconf_server.has_valid_session(): if not self.__zeroconf_server.has_valid_session():
logging.debug("Handling request: {}, {}, {}, headers: {}".format(method, path, http_version, headers)) logging.debug(
"Handling request: {}, {}, {}, headers: {}".format(
method, path, http_version, headers))
params = {} params = {}
if method == "POST": if method == "POST":
content_type = headers.get("Content-Type") content_type = headers.get("Content-Type")
@@ -229,7 +247,8 @@ class ZeroconfServer(Closeable):
pairs = body.split("&") pairs = body.split("&")
for pair in pairs: for pair in pairs:
split = pair.split("=") split = pair.split("=")
params[urllib.parse.unquote(split[0])] = urllib.parse.unquote(split[1]) params[urllib.parse.unquote(
split[0])] = urllib.parse.unquote(split[1])
else: else:
params = self.__zeroconf_server.parse_path(path) params = self.__zeroconf_server.parse_path(path)
action = params.get("action") action = params.get("action")
@@ -238,12 +257,12 @@ class ZeroconfServer(Closeable):
return return
self.handle_request(__socket, http_version, action, params) self.handle_request(__socket, http_version, action, params)
def handle_request(self, __socket: socket.socket, http_version: str, action: str, params: dict[str, str]) -> None: def handle_request(self, __socket: socket.socket, http_version: str,
action: str, params: dict[str, str]) -> None:
if action == "addUser": if action == "addUser":
if params is None: if params is None:
raise RuntimeError raise RuntimeError
class Inner: class Inner:
conf: typing.Final[Session.Configuration] conf: typing.Final[Session.Configuration]
device_name: typing.Final[str] device_name: typing.Final[str]
@@ -251,9 +270,12 @@ class ZeroconfServer(Closeable):
device_type: typing.Final[Connect.DeviceType] device_type: typing.Final[Connect.DeviceType]
preferred_locale: typing.Final[str] preferred_locale: typing.Final[str]
def __init__(self, device_type: Connect.DeviceType, device_name: str, device_id: str, preferred_locale: str, conf: Session.Configuration): def __init__(self, device_type: Connect.DeviceType, device_name: str,
device_id: str, preferred_locale: str,
conf: Session.Configuration):
self.conf = conf self.conf = conf
self.device_name = device_name self.device_name = device_name
self.device_id = util.random_hex_string(40).lower() if device_id else device_id self.device_id = util.random_hex_string(
40).lower() if device_id else device_id
self.device_type = device_type self.device_type = device_type
self.preferred_locale = preferred_locale self.preferred_locale = preferred_locale