Title: Register a new secret agent · python-sdbus/python-sdbus-networkmanager · Discussion #73 · GitHub
Open Graph Title: Register a new secret agent · python-sdbus/python-sdbus-networkmanager · Discussion #73
X Title: Register a new secret agent · python-sdbus/python-sdbus-networkmanager · Discussion #73
Description: Register a new secret agent
Open Graph Description: Hi, I want to create a small python script that does the same thing as 'nmcli -t agent secret', i.e. register itself as the NetworkManager's secret agent and forward all password requests to the te...
X Description: Hi, I want to create a small python script that does the same thing as 'nmcli -t agent secret', i.e. register itself as the NetworkManager's secret agent and forward all password reques...
Opengraph URL: https://github.com/python-sdbus/python-sdbus-networkmanager/discussions/73
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"QAPage","mainEntity":{"@type":"Question","name":"Register a new secret agent","text":"Hi,
\nI want to create a small python script that does the same thing as 'nmcli -t agent secret', i.e. register itself as the NetworkManager's secret agent and forward all password requests to the terminal input, replacing the systems dialog. I'm new to D-Bus and couldn't figure out how to do that using python-sdbus-networkmanager. Would it be possible to add a small example for that?
","upvoteCount":1,"answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"After reading NetworkManager documentation I realized that the agent is not required to obtain any D-Bus names.
\nSo I fixed your code and added example of overriding the agent methods:
\nfrom __future__ import annotations\n\nfrom asyncio import new_event_loop\nfrom typing import Any\n\nimport sdbus\nfrom sdbus_async.networkmanager import (\n NetworkManagerSecretAgentInterfaceAsync,\n NetworkManagerAgentManager,\n NetworkManagerConnectionProperties,\n)\n\nsdbus.set_default_bus(sdbus.sd_bus_open_system())\n\n\nclass MySecretAgent(NetworkManagerSecretAgentInterfaceAsync):\n @sdbus.dbus_method_async_override()\n async def get_secrets(\n self,\n connection: NetworkManagerConnectionProperties,\n connection_path: str,\n setting_name: str,\n hints: list[str],\n flags: int,\n ) -> dict[str, dict[str, tuple[str, Any]]]:\n \"\"\"Retrieve stored secrets\"\"\"\n print(\"get_secrets called\")\n print(\"Connection:\", connection)\n print(\"Connection path:\", connection_path)\n print(\"Setting name:\", setting_name)\n print(\"Hints:\", hints)\n print(\"Flags:\", flags)\n raise NotImplementedError\n\n @sdbus.dbus_method_async_override()\n async def save_secrets(\n self,\n connection: NetworkManagerConnectionProperties,\n connection_path: str,\n ) -> None:\n \"\"\"Save given secrets\"\"\"\n print(\"save_secrets called\")\n print(\"Connection:\", connection)\n print(\"Connection path:\", connection_path)\n raise NotImplementedError\n\n\nsecret_agent = MySecretAgent()\n\n\nasync def start() -> None:\n # Start serving at /org/freedesktop/NetworkManager/SecretAgent path\n secret_agent.export_to_dbus('/org/freedesktop/NetworkManager/SecretAgent')\n # Register the agent\n agent_manager = NetworkManagerAgentManager()\n await agent_manager.register('org.example.test')\n print(\"Registered\")\n\n\nloop = new_event_loop()\nloop.run_until_complete(start())\nloop.run_forever()
\nAfter running it and editing some Wifi passwords with nm-connection-editor it seems to be working:
\nRegistered\nsave_secrets called\nConnection: {'connection': {'id': ('s', 'Access Point'), .....................\nConnection path: /org/freedesktop/NetworkManager/Settings/8\n
","upvoteCount":0,"url":"https://github.com/python-sdbus/python-sdbus-networkmanager/discussions/73#discussioncomment-13122191"}}}
| route-pattern | /_view_fragments/Voltron::DiscussionsFragmentsController/show/:user_id/:repository/:discussion_number/discussion_layout(.:format) |
| route-controller | voltron_discussions_fragments |
| route-action | discussion_layout |
| fetch-nonce | v2:8a75dd72-79e1-916c-1935-d9fffe06980e |
| current-catalog-service-hash | 9f0abe34da433c9b6db74bffa2466494a717b579a96b30a5d252e5090baea7be |
| request-id | D152:EB967:11A0298:1679B8A:698FF039 |
| html-safe-nonce | 2d951fbbe8be3b51f39090340246cd7c4612b0b97711ac91ab749d8f44cefe77 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMTUyOkVCOTY3OjExQTAyOTg6MTY3OUI4QTo2OThGRjAzOSIsInZpc2l0b3JfaWQiOiIxMTMyMjQwNjI3NzIxNzkwMDEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | c727e604cb21a4803ee83afb26ebfe5f861d1301a39fd6db87073e39ea601452 |
| hovercard-subject-tag | discussion:8284371 |
| github-keyboard-shortcuts | repository,network-graph,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/Voltron::DiscussionsFragmentsController/show/python-sdbus/python-sdbus-networkmanager/73/discussion_layout |
| twitter:image | https://opengraph.githubassets.com/ca38e48147f333ee7e00e5d6497be31776a8224873f83a60ed89a9f4d37f9df2/python-sdbus/python-sdbus-networkmanager/discussions/73 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/ca38e48147f333ee7e00e5d6497be31776a8224873f83a60ed89a9f4d37f9df2/python-sdbus/python-sdbus-networkmanager/discussions/73 |
| og:image:alt | Hi, I want to create a small python script that does the same thing as 'nmcli -t agent secret', i.e. register itself as the NetworkManager's secret agent and forward all password requests to the te... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 42c603b9d642c4a9065a51770f75e5e27132fef0e858607f5c9cb7e422831a7b |
| turbo-cache-control | no-preview |
| go-import | github.com/python-sdbus/python-sdbus-networkmanager git https://github.com/python-sdbus/python-sdbus-networkmanager.git |
| octolytics-dimension-user_id | 88226657 |
| octolytics-dimension-user_login | python-sdbus |
| octolytics-dimension-repository_id | 384529652 |
| octolytics-dimension-repository_nwo | python-sdbus/python-sdbus-networkmanager |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 384529652 |
| octolytics-dimension-repository_network_root_nwo | python-sdbus/python-sdbus-networkmanager |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 3b33c5aedc9808f45bc5fcf0b1e4404cf749dac7 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width