| #!/usr/bin/python3 | |
| from gi.repository import GLib | |
| import dbus | |
| import dbus.service | |
| import dbus.mainloop.glib | |
| import sys | |
| from random import randrange | |
| class Canceled(dbus.DBusException): | |
| _dbus_error_name = "net.connman.iwd.Error.Canceled" | |
| class Agent(dbus.service.Object): | |
| passphrase = None | |
| @dbus.service.method("net.connman.iwd.Agent", | |
| in_signature='', out_signature='') | |
| def Release(self): | |
| print("Release") | |
| mainloop.quit() | |
| @dbus.service.method("net.connman.iwd.Agent", | |
| in_signature='o', | |
| out_signature='s') | |
| def RequestPassphrase(self, path): | |
| print("RequestPassphrase (%s)" % (path)) | |
| print("Service credentials requested, type cancel to cancel") | |
| passphrase = input('Answer: ') | |
| if not passphrase or passphrase == 'cancel': | |
| raise Canceled("canceled") | |
| print("returning (%s)" % (passphrase)) | |
| return passphrase | |
| @dbus.service.method("net.connman.iwd.Agent", | |
| in_signature='o', | |
| out_signature='s') | |
| def RequestPrivateKeyPassphrase(self, path): | |
| print("RequestPrivateKeyPassphrase (%s)" % (path)) | |
| print("Service credentials requested, type cancel to cancel") | |
| passphrase = input('Answer: ') | |
| if not passphrase or passphrase == 'cancel': | |
| raise Canceled("canceled") | |
| print("returning (%s)" % (passphrase)) | |
| return passphrase | |
| @dbus.service.method("net.connman.iwd.Agent", | |
| in_signature='o', | |
| out_signature='ss') | |
| def RequestUserNameAndPassword(self, path): | |
| print("RequestUserNameAndPassword (%s)" % (path)) | |
| print("Service credentials requested, type cancel to cancel") | |
| user = input('User name: ') | |
| if not user or user == 'cancel': | |
| raise Canceled("canceled") | |
| passwd = input('User password: ') | |
| if not passwd or passwd == 'cancel': | |
| raise Canceled("canceled") | |
| print("returning (%s, %s)" % (user, passwd)) | |
| return (user, passwd) | |
| @dbus.service.method("net.connman.iwd.Agent", | |
| in_signature='s', out_signature='') | |
| def Cancel(self, reason): | |
| print("Cancel: " + reason) | |
| def print_usage(): | |
| print("Usage:") | |
| print("For WPA input:") | |
| print("%s Passphrase=<passphrase>" % (sys.argv[0])) | |
| print("Help: %s help" % (sys.argv[0])) | |
| sys.exit(1) | |
| if __name__ == '__main__': | |
| if len(sys.argv) == 2 and sys.argv[1] == "help": | |
| print_usage() | |
| dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | |
| bus = dbus.SystemBus() | |
| manager = dbus.Interface(bus.get_object('net.connman.iwd', | |
| '/net/connman/iwd'), | |
| 'net.connman.iwd.AgentManager') | |
| path = "/test/agent/" + str(randrange(100)) | |
| object = Agent(bus, path) | |
| if len(sys.argv) >= 2: | |
| for arg in sys.argv[1:]: | |
| if arg.startswith("Passphrase="): | |
| object.passphrase = arg.replace("Passphrase=", "", 1) | |
| else: | |
| print_usage() | |
| try: | |
| manager.RegisterAgent(path) | |
| except: | |
| print("Cannot register iwd agent.") | |
| mainloop = GLib.MainLoop() | |
| mainloop.run() |