diff --git a/data/client/king_phisher/client_config.json b/data/client/king_phisher/client_config.json index af249c9c..b8a4e8ca 100644 --- a/data/client/king_phisher/client_config.json +++ b/data/client/king_phisher/client_config.json @@ -54,6 +54,7 @@ "proxy.url": null, "rpc.serializer": null, "server": "localhost:22", + "server.history": [], "server_remote_port": 80, "server_use_ssl": false, "server_username": "", diff --git a/king_phisher/client/application.py b/king_phisher/client/application.py index 31000a2b..e260f333 100644 --- a/king_phisher/client/application.py +++ b/king_phisher/client/application.py @@ -726,6 +726,13 @@ def server_connect(self, username, password, otp=None, window=None): rpc.username = username self.logger.debug('successfully authenticated to the remote king phisher service') + server_str = self.config['server'] + history = self.config['server.history'] + if server_str in history: + history.remove(server_str) + history.insert(0, server_str) + self.config['server.history'] = history + event_subscriber = server_events.ServerEventSubscriber(rpc) if not event_subscriber.is_connected: event_subscriber.reconnect = False @@ -736,10 +743,13 @@ def server_connect(self, username, password, otp=None, window=None): self.rpc = rpc self.server_events = event_subscriber self._rpc_ping_event = GLib.timeout_add_seconds(parse_timespan('5m'), functools.partial(_rpc_ping, rpc)) - user = self.rpc.graphql("""\ - query getUser($name: String!) { - db { user(name: $name) { id name } } - }""", {'name': self.config['server_username']})['db']['user'] + user = self.rpc.graphql( + """\ + query getUser($name: String!) { + db { user(name: $name) { id name } } + }""", + {'name': self.config['server_username']} + )['db']['user'] self.server_user = ServerUser(id=user['id'], name=user['name']) self.emit('server-connected') return True, ConnectionErrorReason.SUCCESS diff --git a/king_phisher/client/dialogs/login.py b/king_phisher/client/dialogs/login.py index b8dc1106..f738916d 100644 --- a/king_phisher/client/dialogs/login.py +++ b/king_phisher/client/dialogs/login.py @@ -104,6 +104,15 @@ def __init__(self, *args, **kwargs): self.popup_menu.append('About', lambda x: about.AboutDialog(self.application).interact()) self.popup_menu.append('Import Configuration', self.signal_menuitem_activate_import_config) + # setup server completion + model = Gtk.ListStore(str) + for entry in self.config['server.history']: + model.append((entry,)) + completion = Gtk.EntryCompletion() + completion.set_model(model) + completion.set_text_column(0) + self.gobjects['entry_server'].set_completion(completion) + def signal_button_pressed(self, _, event): if not (event.type == Gdk.EventType.BUTTON_PRESS and event.button == Gdk.BUTTON_SECONDARY): return