mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-04-09 20:20:40 +02:00
Part of !537. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/537
91 lines
2.3 KiB
Python
Executable file
91 lines
2.3 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from gi.repository import GLib
|
|
import sys
|
|
import dbus
|
|
import dbus.service
|
|
import dbus.mainloop.glib
|
|
|
|
IFACE_SECRET_AGENT = "org.freedesktop.NetworkManager.SecretAgent"
|
|
IFACE_AGENT_MANAGER = "org.freedesktop.NetworkManager.AgentManager"
|
|
|
|
|
|
class NotAuthorizedException(dbus.DBusException):
|
|
_dbus_error_name = IFACE_SECRET_AGENT + ".NotAuthorized"
|
|
|
|
|
|
class Agent(dbus.service.Object):
|
|
def __init__(self, bus, object_path):
|
|
self.agents = {}
|
|
self.bus = bus
|
|
dbus.service.Object.__init__(self, bus, object_path)
|
|
|
|
@dbus.service.method(
|
|
IFACE_SECRET_AGENT,
|
|
in_signature="a{sa{sv}}osasb",
|
|
out_signature="a{sa{sv}}",
|
|
sender_keyword="sender",
|
|
)
|
|
def GetSecrets(
|
|
self,
|
|
connection_hash,
|
|
connection_path,
|
|
setting_name,
|
|
hints,
|
|
request_new,
|
|
sender=None,
|
|
):
|
|
if not sender:
|
|
raise NotAuthorizedException("Internal error: couldn't get sender")
|
|
uid = self.bus.get_unix_user(sender)
|
|
if uid != 0:
|
|
raise NotAuthorizedException("UID %d not authorized" % uid)
|
|
|
|
print(
|
|
"Secrets requested path '%s' setting '%s' hints '%s' new %d"
|
|
% (connection_path, setting_name, str(hints), request_new)
|
|
)
|
|
|
|
# return some random GSM secrets
|
|
s_gsm = dbus.Dictionary({"password": "asdfadfasdfaf"})
|
|
con = dbus.Dictionary({"gsm": s_gsm})
|
|
return con
|
|
|
|
|
|
def register(proxy):
|
|
proxy.Register("test.agent.id", dbus_interface=IFACE_AGENT_MANAGER)
|
|
print("Registered!")
|
|
return False
|
|
|
|
|
|
def unregister(proxy, loop):
|
|
proxy.Unregister(dbus_interface=IFACE_AGENT_MANAGER)
|
|
loop.quit()
|
|
return False
|
|
|
|
|
|
def main():
|
|
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
|
|
|
bus = dbus.SystemBus()
|
|
obj = Agent(bus, "/org/freedesktop/NetworkManager/SecretAgent")
|
|
proxy = bus.get_object(
|
|
"org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/AgentManager"
|
|
)
|
|
|
|
mainloop = GLib.MainLoop()
|
|
|
|
GLib.idle_add(register, proxy)
|
|
print("Running test secret agent")
|
|
|
|
try:
|
|
mainloop.run()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
print("Unregistering...")
|
|
unregister(proxy, mainloop)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|