155
154
self.last_checker_failed = False
156
155
gobject.source_remove(self._update_timer_callback_tag)
157
156
self._update_timer_callback_tag = None
158
#self.logger(u'Checker for client %s (command "%s")'
160
# % (self.properties[u"Name"], command))
157
self.logger(u'Checker for client %s (command "%s")'
159
% (self.properties[u"name"], command))
169
168
if os.WIFEXITED(condition):
170
169
self.logger(u'Checker for client %s (command "%s")'
171
170
u' failed with exit code %s'
172
% (self.properties[u"Name"], command,
171
% (self.properties[u"name"], command,
173
172
os.WEXITSTATUS(condition)))
174
173
elif os.WIFSIGNALED(condition):
175
174
self.logger(u'Checker for client %s (command "%s")'
176
175
u' was killed by signal %s'
177
% (self.properties[u"Name"], command,
176
% (self.properties[u"name"], command,
178
177
os.WTERMSIG(condition)))
179
178
elif os.WCOREDUMP(condition):
180
179
self.logger(u'Checker for client %s (command "%s")'
182
% (self.properties[u"Name"], command))
181
% (self.properties[u"name"], command))
184
self.logger(u'Checker for client %s completed'
183
self.logger(u'Checker for client %s completed mysteriously')
188
186
def checker_started(self, command):
189
187
#self.logger(u'Client %s started checker "%s"'
190
# % (self.properties[u"Name"], unicode(command)))
188
# % (self.properties[u"name"], unicode(command)))
193
191
def got_secret(self):
194
192
self.last_checker_failed = False
195
193
self.logger(u'Client %s received its secret'
196
% self.properties[u"Name"])
194
% self.properties[u"name"])
198
196
def need_approval(self, timeout, default):
202
200
message = u'Client %s will get its secret in %s seconds'
203
201
self.logger(message
204
% (self.properties[u"Name"], timeout/1000))
202
% (self.properties[u"name"], timeout/1000))
206
204
def rejected(self, reason):
207
205
self.logger(u'Client %s was rejected; reason: %s'
208
% (self.properties[u"Name"], reason))
206
% (self.properties[u"name"], reason))
210
208
def selectable(self):
211
209
"""Make this a "selectable" widget.
239
237
# Base part of a client. Name!
240
238
base = (u'%(name)s: '
241
% {u"name": self.properties[u"Name"]})
242
if not self.properties[u"Enabled"]:
239
% {u"name": self.properties[u"name"]})
240
if not self.properties[u"enabled"]:
243
241
message = u"DISABLED"
244
elif self.properties[u"ApprovalPending"]:
245
if self.properties[u"ApprovedByDefault"]:
242
elif self.properties[u"approved_pending"]:
243
if self.properties[u"approved_by_default"]:
246
244
message = u"Connection established to client. (d)eny?"
248
246
message = u"Seeks approval to send secret. (a)pprove?"
249
247
elif self.last_checker_failed:
250
248
timeout = datetime.timedelta(milliseconds
249
= self.properties[u"timeout"])
253
250
last_ok = isoformat_to_datetime(
254
max((self.properties[u"LastCheckedOK"]
255
or self.properties[u"Created"]),
256
self.properties[u"LastEnabled"]))
251
max((self.properties["last_checked_ok"]
252
or self.properties["created"]),
253
self.properties[u"last_enabled"]))
257
254
timer = timeout - (datetime.datetime.utcnow() - last_ok)
258
message = (u'A checker has failed! Time until client'
255
message = (u'A checker has failed! Time until client gets diabled: %s'
260
256
% unicode(timer).rsplit(".", 1)[0])
262
258
message = u"enabled"
346
346
use them as an excuse to shift focus away from this widget.
348
348
def keypress(self, (maxcol, maxrow), key):
349
ret = super(ConstrainedListBox, self).keypress((maxcol,
349
ret = super(ConstrainedListBox, self).keypress((maxcol, maxrow), key)
351
350
if ret in (u"up", u"down"):
470
469
Call this when the widget layout needs to change"""
472
471
#self.uilist.append(urwid.ListBox(self.clients))
473
self.uilist.append(urwid.Frame(ConstrainedListBox(self.
472
self.uilist.append(urwid.Frame(ConstrainedListBox(self.clients),
475
473
#header=urwid.Divider(),
478
urwid.Divider(div_char=
475
footer=urwid.Divider(div_char=self.divider)))
480
476
if self.log_visible:
481
477
self.uilist.append(self.logbox)
500
496
"""Toggle visibility of the log buffer."""
501
497
self.log_visible = not self.log_visible
503
#self.log_message(u"Log visibility changed to: "
504
# + unicode(self.log_visible))
499
self.log_message(u"Log visibility changed to: "
500
+ unicode(self.log_visible))
506
502
def change_log_display(self):
507
503
"""Change type of log display.
512
508
self.log_wrap = u"clip"
513
509
for textwidget in self.log:
514
510
textwidget.set_wrap_mode(self.log_wrap)
515
#self.log_message(u"Wrap mode: " + self.log_wrap)
511
self.log_message(u"Wrap mode: " + self.log_wrap)
517
513
def find_and_remove_client(self, path, name):
518
514
"""Find an client from its object path and remove it.
546
542
path = client.proxy.object_path
547
543
self.clients_dict[path] = client
548
self.clients.sort(None, lambda c: c.properties[u"Name"])
544
self.clients.sort(None, lambda c: c.properties[u"name"])
551
547
def remove_client(self, client, path=None):