for dn, attrs in res:
cns = attrs.get("cn")
if cns:
- self._groups.append(cns[0])
+ self._groups.append(cns[0].decode())
return self._groups
@lazy_property
def latency(self):
- if self.is_reachable():
+ if self.is_reachable() and self.data.ping_time:
return self.data.ping_time / 1000.0
<td>{{ reg.user_agent }}</td>
<td>{{ reg.protocol }}/{{ reg.network_ip }}:{{ reg.network_port }}</td>
<td class="text-right">
- {% if reg.is_reachable() %}
+ {% if reg.is_reachable() and reg.latency %}
{{ "%.2f ms" % reg.latency }}
{% else %}
<span class="text-muted">{{ _("N/A") }}</span>
<div class="card">
<div class="card-body">
<h6 class="card-title">
- {{ _("Active Registrations for %s") % current_user }}
+ {{ _("Active Registrations for %s") % account }}
</h6>
- {% module TalkRegistrations(current_user) %}
+ {% module TalkRegistrations(account) %}
</div>
</div>
{% end block %}
# talk.ipfire.org
self.add_handlers(r"talk(\.dev)?\.ipfire\.org", [
(r"/", talk.IndexHandler),
- (r"/registrations", talk.RegistrationsHandler),
+ (r"/user/(\w+)/registrations", talk.RegistrationsHandler),
(r"/conferences", TalkConferencesHandler),
(r"/diagnosis", TalkDiagnosisHandler),
(r"/hangup/(.*)", TalkHangupChannelHandler),
class RegistrationsHandler(base.BaseHandler):
@tornado.web.authenticated
- def get(self):
- self.render("talk/registrations.html")
+ def get(self, uid):
+ # Get own account
+ if self.current_user.uid == uid:
+ account = self.current_user
+
+ # Admins can access all other users, too
+ elif self.current_user.is_admin():
+ account = self.backend.accounts.get_by_uid(uid)
+ if not account:
+ raise tornado.web.HTTPError(404, "Could not find account %s" % uid)
+
+ # Otherwise, no access is permitted
+ else:
+ raise tornado.web.HTTPError(403)
+
+ self.render("talk/registrations.html", account=account)
class RegistrationsModule(ui_modules.UIModule):