From 7e35bd608952e19d52636aa3a184c06a742b5b9f Mon Sep 17 00:00:00 2001 From: suti7yk5032 Date: Sat, 7 Sep 2024 13:40:13 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9ID=E3=82=92?= =?UTF-8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E3=82=A4=E3=83=B3=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=B9=E3=83=91=E3=82=B9=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20=E3=83=AF=E3=83=B3=E3=82=BF=E3=82=A4=E3=83=A0?= =?UTF-8?q?=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC=E3=83=89=E3=81=8C=E6=B6=88?= =?UTF-8?q?=E5=8E=BB=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E3=83=90=E3=82=B0?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=20=E3=83=87=E3=83=90=E3=82=A4?= =?UTF-8?q?=E3=82=B9=E7=99=BB=E9=8C=B2=E3=81=AE=E9=9A=9BUSB=E3=83=87?= =?UTF-8?q?=E3=83=90=E3=82=A4=E3=82=B9=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E5=85=A5=E5=8A=9B=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E4=B8=80=E8=A6=A7=E3=82=92=E5=87=BA=E5=8A=9B=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=20=E8=87=AA=E5=89=8D=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E3=81=AF0=E7=95=AA?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=E5=87=A6=E7=90=86=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dislocker.py | 8 +++---- dislocker_auth.py | 54 ++++++++++++++++++++++++++++++--------------- dislocker_client.py | 51 +++++++++++++++++++++++------------------- 3 files changed, 68 insertions(+), 45 deletions(-) diff --git a/dislocker.py b/dislocker.py index 866a0e9..ab724cc 100644 --- a/dislocker.py +++ b/dislocker.py @@ -84,8 +84,8 @@ class DL(): cursor = self.db.cursor() self.pc_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - self.keyboard_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - self.mouse_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + self.keyboard_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + self.mouse_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.preset_games = self.server_config["bot"]["preset_games"] self.debug = self.server_config["bot"]["debug"] @@ -110,7 +110,7 @@ class DL(): find_keyboard_list_table = cursor.fetchall() print(find_keyboard_list_table) if find_keyboard_list_table[0][0] == False: - cursor.execute("CREATE TABLE keyboard_list (keyboard_number INTEGER NOT NULL, using_member_id INTEGER, device_id TEXT, device_name TEXT, detail TEXT, PRIMARY KEY (keyboard_number), FOREIGN KEY (using_member_id) REFERENCES club_member(member_id))") + cursor.execute("CREATE TABLE keyboard_list (keyboard_number INTEGER NOT NULL, using_member_id INTEGER, device_instance_path TEXT, device_name TEXT, detail TEXT, PRIMARY KEY (keyboard_number), FOREIGN KEY (using_member_id) REFERENCES club_member(member_id))") for i in self.keyboard_list: print(i) cursor.execute("INSERT INTO keyboard_list (keyboard_number) VALUES (%s)", (i,)) @@ -120,7 +120,7 @@ class DL(): find_mouse_list_table = cursor.fetchall() print(find_mouse_list_table) if find_mouse_list_table[0][0] == False: - cursor.execute("CREATE TABLE mouse_list (mouse_number INTEGER NOT NULL, using_member_id INTEGER, device_id TEXT, device_name TEXT, detail TEXT, PRIMARY KEY (mouse_number), FOREIGN KEY (using_member_id) REFERENCES club_member(member_id))") + cursor.execute("CREATE TABLE mouse_list (mouse_number INTEGER NOT NULL, using_member_id INTEGER, device_instance_path TEXT, device_name TEXT, detail TEXT, PRIMARY KEY (mouse_number), FOREIGN KEY (using_member_id) REFERENCES club_member(member_id))") for i in self.mouse_list: print(i) cursor.execute("INSERT INTO mouse_list (mouse_number) VALUES (%s)", (i,)) diff --git a/dislocker_auth.py b/dislocker_auth.py index 4600902..742a398 100644 --- a/dislocker_auth.py +++ b/dislocker_auth.py @@ -75,7 +75,7 @@ class Auth(): pc_info = cursor.fetchall() if pc_info: for device in device_list: - cursor.execute("SELECT * FROM keyboard_list WHERE device_id = %s", (device["device_id"],)) + cursor.execute("SELECT * FROM keyboard_list WHERE device_instance_path = %s", (device["device_instance_path"],)) keyboard_record = cursor.fetchall() if keyboard_record: keyboard_number = int(keyboard_record[0][0]) @@ -84,7 +84,7 @@ class Auth(): pass for device in device_list: - cursor.execute("SELECT * FROM mouse_list WHERE device_id = %s", (device["device_id"],)) + cursor.execute("SELECT * FROM mouse_list WHERE device_instance_path = %s", (device["device_instance_path"],)) mouse_record = cursor.fetchall() if mouse_record: mouse_number = int(mouse_record[0][0]) @@ -116,14 +116,16 @@ class Auth(): def device_use_register(self, **kwargs): try: pc_number = int(kwargs["pc_number"]) - if "keyboard_number" in kwargs: + if kwargs["keyboard_number"] == "own": + keyboard_number = 0 + else: keyboard_number = int(kwargs["keyboard_number"]) + + if kwargs["mouse_number"] == "own": + mouse_number = 0 else: - keyboard_number = None - if "mouse_number" in kwargs: mouse_number = int(kwargs["mouse_number"]) - else: - mouse_number = None + cursor = self.db.cursor() cursor.execute("SELECT * FROM pc_list WHERE pc_number = %s", (pc_number,)) @@ -135,9 +137,19 @@ class Auth(): cursor.execute("SELECT * FROM pc_usage_history WHERE member_id = %s AND pc_number = %s ORDER BY id DESC LIMIT 1", (pc_using_member_id, pc_number)) pc_usage_history_record = cursor.fetchall() pc_usage_history_record_id = pc_usage_history_record[0][0] + cursor.execute("UPDATE pc_usage_history SET keyboard_number = %s, mouse_number = %s WHERE id = %s", (keyboard_number, mouse_number, pc_usage_history_record_id)) - cursor.execute("UPDATE keyboard_list SET using_member_id = %s WHERE keyboard_number = %s", (pc_using_member_id, keyboard_number)) - cursor.execute("UPDATE mouse_list SET using_member_id = %s WHERE mouse_number = %s", (pc_using_member_id, mouse_number)) + + if keyboard_number == 0: + pass + else: + cursor.execute("UPDATE keyboard_list SET using_member_id = %s WHERE keyboard_number = %s", (pc_using_member_id, keyboard_number)) + + if mouse_number == 0: + pass + else: + cursor.execute("UPDATE mouse_list SET using_member_id = %s WHERE mouse_number = %s", (pc_using_member_id, mouse_number)) + self.db.commit() return {"result": 0, "about": "ok"} @@ -153,7 +165,7 @@ class Auth(): cursor = self.db.cursor() mode = kwargs["mode"] number = kwargs["number"] - device_id = kwargs["device_id"] + device_instance_path = kwargs["device_instance_path"] device_name = kwargs["device_name"] if mode == "keyboard": @@ -161,22 +173,22 @@ class Auth(): cursor.execute("SELECT * FROM keyboard_list WHERE keyboard_number = %s", (keyboard_number,)) keyboard_record = cursor.fetchall() if keyboard_record: - cursor.execute("UPDATE keyboard_list SET device_id = %s, device_name = %s WHERE keyboard_number = %s", (device_id, device_name, keyboard_number)) + cursor.execute("UPDATE keyboard_list SET device_instance_path = %s, device_name = %s WHERE keyboard_number = %s", (device_instance_path, device_name, keyboard_number)) self.db.commit() return {"result": 0, "about": "ok"} else: - cursor.execute("INSERT INTO keyboard_list (keyboard_number, device_id, device_name) VALUES (%s, %s, %s)", (keyboard_number, device_id, device_name)) + cursor.execute("INSERT INTO keyboard_list (keyboard_number, device_instance_path, device_name) VALUES (%s, %s, %s)", (keyboard_number, device_instance_path, device_name)) return {"result": 0, "about": "ok"} elif mode == "mouse": mouse_number = int(kwargs["number"]) cursor.execute("SELECT * FROM mouse_list WHERE mouse_number = %s", (mouse_number,)) mouse_record = cursor.fetchall() if mouse_record: - cursor.execute("UPDATE mouse_list SET device_id = %s, device_name = %s WHERE mouse_number = %s", (device_id, device_name, mouse_number)) + cursor.execute("UPDATE mouse_list SET device_instance_path = %s, device_name = %s WHERE mouse_number = %s", (device_instance_path, device_name, mouse_number)) self.db.commit() return {"result": 0, "about": "ok"} else: - cursor.execute("INSERT INTO mouse_list (mouse_number, device_id, device_name) VALUES (%s, %s, %s)", (mouse_number, device_id, device_name)) + cursor.execute("INSERT INTO mouse_list (mouse_number, device_instance_path, device_name) VALUES (%s, %s, %s)", (mouse_number, device_instance_path, device_name)) return {"result": 0, "about": "ok"} except Exception as error: @@ -324,7 +336,7 @@ def register(): pc_token = register_result["output_dict"]["pc_token"] master_password = register_result["output_dict"]["master_password"] master_password_hash = register_result["output_dict"]["master_password_hash"] - onetime_config["onetime"]["pcregister"] = None + onetime_config["onetime"]["pc_register"] = None with open(onetime_config_path, "w") as w: json.dump(onetime_config, w, indent=4) return jsonify({'message': 'ok', 'pc_token': pc_token, 'master_password': master_password, 'master_password_hash': master_password_hash}), 200 @@ -378,7 +390,7 @@ def device_register(): onetime_password = str(request.json.get('onetime')) mode = str(request.json.get('mode')) number = int(request.json.get('number')) - device_id = str(request.json.get('device_id')) + device_instance_path = str(request.json.get('device_instance_path')) device_name = str(request.json.get('device_name')) if os.path.isfile(onetime_config_path): @@ -388,18 +400,24 @@ def device_register(): if onetime_password == onetime_config["onetime"]["device_register"]: if mode == "keyboard": print("キーボードの登録処理を開始...") - device_register = auth.device_register(mode="keyboard", number=number, device_id=device_id, device_name=device_name) + device_register = auth.device_register(mode="keyboard", number=number, device_instance_path=device_instance_path, device_name=device_name) if device_register["result"] == 0: print(f"キーボード {number} 番の登録処理は成功しました.") + onetime_config["onetime"]["device_register"] = None + with open(onetime_config_path, "w") as w: + json.dump(onetime_config, w, indent=4) return jsonify({'message': 'ok'}), 200 else: print(f"キーボード {number} 番の登録処理は失敗しました.") return jsonify({'message': 'error'}), 500 elif mode == "mouse": print("マウスの登録処理を開始...") - device_register = auth.device_register(mode="mouse", number=number, device_id=device_id, device_name=device_name) + device_register = auth.device_register(mode="mouse", number=number, device_instance_path=device_instance_path, device_name=device_name) if device_register["result"] == 0: print(f"マウス {number} 番の登録処理は成功しました.") + onetime_config["onetime"]["device_register"] = None + with open(onetime_config_path, "w") as w: + json.dump(onetime_config, w, indent=4) return jsonify({'message': 'ok'}), 200 else: print(f"マウス {number} 番の登録処理は失敗しました.") diff --git a/dislocker_client.py b/dislocker_client.py index faf41cd..18490d9 100644 --- a/dislocker_client.py +++ b/dislocker_client.py @@ -45,34 +45,36 @@ elif os.path.isfile(client_config_path): with open(client_config_path, "r") as r: client_config = json.load(r) -def get_usb_devices(): +def get_input_devices(): str_computer = "." obj_wmi_service = win32com.client.Dispatch("WbemScripting.SWbemLocator") obj_swem_services = obj_wmi_service.ConnectServer(str_computer, "root\\cimv2") - col_items = obj_swem_services.ExecQuery("Select * from Win32_PnPEntity where PNPDeviceID like 'USB%'") + col_items = obj_swem_services.ExecQuery("Select * from Win32_PnPEntity where PNPDeviceID like 'HID%'") - devices = [] + input_devices = [] for obj_item in col_items: - devices.append({ + input_devices.append({ "device_id": obj_item.DeviceID, "PNPDeviceID": obj_item.PNPDeviceID, - "device_name": obj_item.Description, - "name": obj_item.Name, + "Description": obj_item.Description, + "device_name": obj_item.Name, "Manufacturer": obj_item.Manufacturer, - "Service": obj_item.Service + "Service": obj_item.Service, + "FriendlyName": obj_item.Name, # デバイスとプリンターで表示される名前 + "device_instance_path": obj_item.DeviceID # デバイスインスタンスパス }) - return devices + return input_devices def device_register(**kwargs): onetime = str(kwargs["onetime"]) mode = str(kwargs["mode"]) number = int(kwargs["number"]) - device_id = str(kwargs["device_id"]) + device_instance_path = str(kwargs["device_instance_path"]) device_name = str(kwargs["device_name"]) device_register_json = { "number": number, - "device_id": device_id, + "device_instance_path": device_instance_path, "device_name": device_name, "mode": mode, "onetime": onetime @@ -316,27 +318,29 @@ class Lock(customtkinter.CTkToplevel): self.signin_button.configure(state="normal", fg_color="#3c8dd0") self.signout_button.configure(state="normal", fg_color="#3c8dd0") - def get_usb_devices(self): + def get_input_devices(self): try: pythoncom.CoInitialize() str_computer = "." obj_wmi_service = win32com.client.Dispatch("WbemScripting.SWbemLocator") obj_swem_services = obj_wmi_service.ConnectServer(str_computer, "root\\cimv2") - col_items = obj_swem_services.ExecQuery("Select * from Win32_PnPEntity where PNPDeviceID like 'USB%'") + col_items = obj_swem_services.ExecQuery("Select * from Win32_PnPEntity where PNPDeviceID like 'HID%'") - devices = [] + input_devices = [] for obj_item in col_items: - devices.append({ - "device_id": obj_item.DeviceID, + input_devices.append({ + "DeviceID": obj_item.DeviceID, "PNPDeviceID": obj_item.PNPDeviceID, "Description": obj_item.Description, - "device_name": obj_item.Name, + "Name": obj_item.Name, "Manufacturer": obj_item.Manufacturer, - "Service": obj_item.Service + "Service": obj_item.Service, + "FriendlyName": obj_item.Name, + "DeviceInstancePath": obj_item.DeviceID }) pythoncom.CoUninitialize() - return devices + return input_devices except pythoncom.com_error as e: print("Error:", e) return [] @@ -344,7 +348,7 @@ class Lock(customtkinter.CTkToplevel): def auth(self): self.button_disable() password = str(self.password_entry.get()) - devices = self.get_usb_devices() + devices = self.get_input_devices() if len(password) == 10: print("マスターパスワードで認証を試行します。") @@ -563,16 +567,17 @@ if __name__ == '__main__': pass else: mode = input('登録するデバイスはキーボードとマウスのどちらですか?(keyboard/mouse): ') - usb_devices = get_usb_devices() + input_devices = get_input_devices() + i = 0 - for device in usb_devices: - print(f"{str(i + 1)} 番目 | デバイス名: {device['device_name']} \n製造元: {device['Manufacturer']} \nデバイスID: {device['device_id']}") + for device in input_devices: + print(f"{str(i + 1)} 番目 | デバイス名: {device['device_name']} \n製造元: {device['Manufacturer']} \nデバイスインスタンスパス: {device['device_instance_path']}") print("-" * 20) i += 1 device_num = input('どのデバイスを登録しますか?番号で指定してください: ') device_register_num = input('そのデバイスは何番目のデバイスとして登録しますか?番号で指定してください: ') onetime = input('ワンタイムパスワードを入力してください: ') - device_register_result = device_register(onetime=onetime, mode=mode, number=int(device_register_num), device_id=usb_devices[int(device_num) - 1]["device_id"], device_name=usb_devices[int(device_num) - 1]["device_name"]) + device_register_result = device_register(onetime=onetime, mode=mode, number=int(device_register_num), device_instance_path=input_devices[int(device_num) - 1]["device_instance_path"], device_name=input_devices[int(device_num) - 1]["device_name"]) if device_register_result["result"] == 0: print("登録されました。") elif device_register_result["result"] == 1: