167
177
#self.logger('Created client {0}'
168
178
# .format(self.properties["Name"]))
180
def property_changed(self, property=None, value=None):
181
super(self, MandosClientWidget).property_changed(property,
183
if property == "ApprovalPending":
184
using_timer(bool(value))
185
if property == "LastCheckerStatus":
186
using_timer(value != 0)
187
#self.logger('Checker for client {0} (command "{1}") was '
188
# ' successful'.format(self.properties["Name"],
170
191
def using_timer(self, flag):
171
192
"""Call this method with True or False when timer should be
172
193
activated or deactivated.
174
if flag and self._update_timer_callback_tag is None:
195
old = self._update_timer_callback_lock
197
self._update_timer_callback_lock += 1
199
self._update_timer_callback_lock -= 1
200
if old == 0 and self._update_timer_callback_lock:
175
201
# Will update the shown timer value every second
176
202
self._update_timer_callback_tag = (gobject.timeout_add
178
204
self.update_timer))
179
elif not (flag or self._update_timer_callback_tag is None):
205
elif old and self._update_timer_callback_lock == 0:
180
206
gobject.source_remove(self._update_timer_callback_tag)
181
207
self._update_timer_callback_tag = None
224
250
message = 'Client {0} will get its secret in {1} seconds'
225
251
self.logger(message.format(self.properties["Name"],
253
self.using_timer(True)
228
255
def rejected(self, reason):
229
256
self.logger('Client {0} was rejected; reason: {1}'
255
282
"bold-underline-blink":
256
283
"bold-underline-blink-standout",
259
286
# Rebuild focus and non-focus widgets using current properties
261
288
# Base part of a client. Name!
262
289
base = '{name}: '.format(name=self.properties["Name"])
263
290
if not self.properties["Enabled"]:
264
291
message = "DISABLED"
265
self.using_timer(False)
266
292
elif self.properties["ApprovalPending"]:
267
293
timeout = datetime.timedelta(milliseconds
268
294
= self.properties
270
296
last_approval_request = isoformat_to_datetime(
271
297
self.properties["LastApprovalRequest"])
272
298
if last_approval_request is not None:
273
timer = max(timeout - (datetime.datetime.utcnow()
274
- last_approval_request),
275
datetime.timedelta())
299
timer = timeout - (datetime.datetime.utcnow()
300
- last_approval_request)
277
302
timer = datetime.timedelta()
278
303
if self.properties["ApprovedByDefault"]:
281
306
message = "Denial in {0}. (a)pprove?"
282
307
message = message.format(unicode(timer).rsplit(".", 1)[0])
283
self.using_timer(True)
284
308
elif self.properties["LastCheckerStatus"] != 0:
285
309
# When checker has failed, show timer until client expires
286
310
expires = self.properties["Expires"]
290
314
expires = (datetime.datetime.strptime
291
315
(expires, '%Y-%m-%dT%H:%M:%S.%f'))
292
timer = max(expires - datetime.datetime.utcnow(),
293
datetime.timedelta())
316
timer = expires - datetime.datetime.utcnow()
294
317
message = ('A checker has failed! Time until client'
295
318
' gets disabled: {0}'
296
319
.format(unicode(timer).rsplit(".", 1)[0]))
297
self.using_timer(True)
299
321
message = "enabled"
300
self.using_timer(False)
301
322
self._text = "{0}{1}".format(base, message)
303
324
if not urwid.supports_unicode():
304
325
self._text = self._text.encode("ascii", "replace")
305
326
textlist = [("normal", self._text)]