test: Cannot set both name and passphrase
[platform/upstream/connman.git] / test / simple-agent
1 #!/usr/bin/python
2
3 import gobject
4
5 import dbus
6 import dbus.service
7 import dbus.mainloop.glib
8 import sys
9
10 class Canceled(dbus.DBusException):
11         _dbus_error_name = "net.connman.Error.Canceled"
12
13 class Agent(dbus.service.Object):
14         name = None
15         ssid = None
16         identity = None
17         passphrase = None
18         wpspin = None
19         username = None
20         password = None
21
22         @dbus.service.method("net.connman.Agent",
23                                         in_signature='', out_signature='')
24         def Release(self):
25                 print("Release")
26                 mainloop.quit()
27
28         def input_passphrase(self):
29                 response = {}
30
31                 if not self.identity and not self.passphrase and not self.wpspin:
32                         args = raw_input('Answer: ')
33
34                         for arg in args.split():
35                                 if arg.startswith("Identity="):
36                                         identity = arg.replace("Identity=", "", 1)
37                                         response["Identity"] = identity
38                                 if arg.startswith("Passphrase="):
39                                         passphrase = arg.replace("Passphrase=", "", 1)
40                                         response["Passphrase"] = passphrase
41                                 if arg.startswith("WPS="):
42                                         wpspin = arg.replace("WPS=", "", 1)
43                                         response["WPS"] = wpspin
44                                         break
45                 else:
46                         if self.identity:
47                                 response["Identity"] = self.identity
48                         if self.passphrase:
49                                 response["Passphrase"] = self.passphrase
50                         if self.wpspin:
51                                 response["WPS"] = self.wpspin
52
53                 return response
54
55         def input_username(self):
56                 response = {}
57
58                 if not self.username and not self.password:
59                         args = raw_input('Answer: ')
60
61                         for arg in args.split():
62                                 if arg.startswith("Username="):
63                                         username = arg.replace("Username=", "", 1)
64                                         response["Username"] = username
65                                 if arg.startswith("Password="):
66                                         password = arg.replace("Password=", "", 1)
67                                         response["Password"] = password
68                 else:
69                         if self.username:
70                                 response["Username"] = self.username
71                         if self.password:
72                                 response["Password"] = self.password
73
74                 return response
75
76         def input_hidden(self):
77                 response = {}
78
79                 if not self.name and not self.ssid:
80                         args = raw_input('Answer ')
81
82                         for arg in args.split():
83                                 if arg.startswith("Name="):
84                                         name = arg.replace("Name=", "", 1)
85                                         response["Name"] = name
86                                         break
87                                 if arg.startswith("SSID="):
88                                         ssid = arg.replace("SSID", "", 1)
89                                         response["SSID"] = ssid
90                                         break
91                 else:
92                         if self.name:
93                                 response["Name"] = self.name
94                         if self.ssid:
95                                 response["SSID"] = self.ssid
96
97                 return response
98
99         @dbus.service.method("net.connman.Agent",
100                                         in_signature='oa{sv}',
101                                         out_signature='a{sv}')
102         def RequestInput(self, path, fields):
103                 print "RequestInput (%s,%s)" % (path, fields)
104
105                 response = {}
106
107                 if fields.has_key("Name"):
108                         response.update(self.input_hidden())
109                 if fields.has_key("Passphrase"):
110                         response.update(self.input_passphrase())
111                 if fields.has_key("Username"):
112                         response.update(self.input_username())
113
114                 print "returning (%s)" % (response)
115
116                 return response
117
118         @dbus.service.method("net.connman.Agent",
119                                         in_signature='os',
120                                         out_signature='')
121         def RequestBrowser(self, path, url):
122                 print "RequestBrowser (%s,%s)" % (path, url)
123
124                 print "Please login through the given url in a browser"
125                 print "Then press enter to accept or some text to cancel"
126
127                 args = raw_input('> ')
128
129                 if len(args) > 0:
130                         raise Canceled("canceled")
131
132                 return
133
134         @dbus.service.method("net.connman.Agent",
135                                         in_signature='os',
136                                         out_signature='')
137         def ReportError(self, path, error):
138                 print "ReportError %s, %s" % (path, error)
139                 retry = raw_input("Retry service (yes/no): ")
140                 if (retry == "yes"):
141                         class Retry(dbus.DBusException):
142                                 _dbus_error_name = "net.connman.Agent.Error.Retry"
143
144                         raise Retry("retry service")
145                 else:
146                         return
147
148
149         @dbus.service.method("net.connman.Agent",
150                                         in_signature='', out_signature='')
151         def Cancel(self):
152                 print "Cancel"
153
154 def print_usage():
155         print "Usage:"
156         print "For hidden service:"
157         print "%s Name=<hidden service name> [SSID=<hidden ssid>]" % (sys.argv[0])
158         print "For EAP/WPA input:"
159         print "%s Identity=<identity> Passphrase=<passphrase> WPS=<wpspin>" % (sys.argv[0])
160         print "For WISPr login input:"
161         print "%s Username=<username> Password=<password>" % (sys.argv[0])
162         print "Help: %s help" % (sys.argv[0])
163         sys.exit(1)
164
165 if __name__ == '__main__':
166         if len(sys.argv) == 2 and sys.argv[1] == "help":
167                 print_usage()
168
169         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
170
171         bus = dbus.SystemBus()
172         manager = dbus.Interface(bus.get_object('net.connman', "/"),
173                                         'net.connman.Manager')
174
175         path = "/test/agent"
176         object = Agent(bus, path)
177
178         if len(sys.argv) >= 2:
179                 for arg in sys.argv[1:]:
180                         if arg.startswith("Name="):
181                                 object.name = arg.replace("Name=", "", 1)
182                         elif arg.startswith("SSID="):
183                                 object.ssid = arg.replace("SSID=", "", 1)
184                         elif arg.startswith("Identity="):
185                                 object.identity = arg.replace("Identity=", "", 1)
186                         elif arg.startswith("Passphrase="):
187                                 object.passphrase = arg.replace("Passphrase=", "", 1)
188                         elif arg.startswith("WPS="):
189                                 object.wpspin = arg.replace("WPS=", "", 1)
190                         elif arg.startswith("Username="):
191                                 object.username = arg.replace("Username=", "", 1)
192                         elif arg.startswith("Password="):
193                                 object.password = arg.replace("Password=", "", 1)
194                         else:
195                                 print_usage()
196
197         manager.RegisterAgent(path)
198
199         mainloop = gobject.MainLoop()
200         mainloop.run()
201
202         #manager.UnregisterAgent(path)