diff options
| author | Loek Le Blansch <loek@pipeframe.xyz> | 2025-10-14 18:55:31 +0200 |
|---|---|---|
| committer | Loek Le Blansch <loek@pipeframe.xyz> | 2025-10-14 18:55:31 +0200 |
| commit | e8f200337975e9f8b8d57a5a0a3a2b25395cee88 (patch) | |
| tree | 07cfdfa9983c11f8454e0428475b95b3a5b1b02b /nmpass/main.py | |
initial commit (wip)
Diffstat (limited to 'nmpass/main.py')
| -rw-r--r-- | nmpass/main.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/nmpass/main.py b/nmpass/main.py new file mode 100644 index 0000000..e969e13 --- /dev/null +++ b/nmpass/main.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from asyncio import new_event_loop +from sdbus_async.networkmanager import NetworkManagerSecretAgentInterfaceAsync, NetworkManagerAgentManager, NetworkManagerConnectionProperties +from sdbus_async.networkmanager.settings import ConnectionProfile +from typing import Any +import sdbus + +from .store import PasswordStore + +class NetworkManagerPasswordStoreAgent(NetworkManagerSecretAgentInterfaceAsync): + store = PasswordStore() + + @sdbus.dbus_method_async_override() + async def get_secrets( + self, + connection: NetworkManagerConnectionProperties, + _connection_path: str, + setting_name: str, + _hints: list[str], + _flags: int, + ) -> dict[str, dict[str, tuple[str, Any]]]: + profile = ConnectionProfile.from_dbus(connection) + + printf(setting_name) + if setting_name == '802-11-wireless-security': + ssid = profile.wireless.ssid.decode() + pass_name = f"net/{ssid}/passwd" + password = self.store.retrieve(pass_name) + printf(f"SSID: {ssid} PASSWORD: {password}") + if password != None: + profile.wireless_security.psk = password + return profile.wireless_security.psk.to_dbus() + + return {} + + @sdbus.dbus_method_async_override() + async def save_secrets( + self, + connection: NetworkManagerConnectionProperties, + _connection_path: str, + ) -> None: + profile = ConnectionProfile.from_dbus(connection) + print(profile) + raise NotImplementedError + +def main(): + sdbus.set_default_bus(sdbus.sd_bus_open_system()) + agent = NetworkManagerPasswordStoreAgent() + loop = new_event_loop() + agent.export_to_dbus('/org/freedesktop/NetworkManager/SecretAgent') + agent_manager = NetworkManagerAgentManager() + try: + loop.run_until_complete(agent_manager.register('org.nmpassd')) + loop.run_forever() + except KeyboardInterrupt: + loop.stop() + +if __name__ == "__main__": + main() + |