diff options
Diffstat (limited to 'src/core/tests/test-secret-agent.py')
| -rwxr-xr-x | src/core/tests/test-secret-agent.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/core/tests/test-secret-agent.py b/src/core/tests/test-secret-agent.py new file mode 100755 index 00000000..46f82b34 --- /dev/null +++ b/src/core/tests/test-secret-agent.py @@ -0,0 +1,91 @@ +#!/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() |