def is_admin(self):
return "wheel" in self.groups
- def is_talk_enabled(self):
- return "sipUser" in self.classes or "sipRoutingObject" in self.classes \
- or self.telephone_numbers or self.address
+ def is_staff(self):
+ return "staff" in self.groups
+
+ def has_shell(self):
+ return "posixAccount" in self.classes
+
+ def has_mail(self):
+ return "postfixMailUser" in self.classes
+
+ def has_sip(self):
+ return "sipUser" in self.classes or "sipRoutingObject" in self.classes
def can_be_managed_by(self, account):
"""
aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="fas fa-bars"></span>
</button>
-
+
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav ml-auto mr-3">
<li class="nav-item">
{{ _("My Profile") }}
</a>
</li>
-
- <li class="nav-item">
- <a class="nav-link {% if request.path.startswith("/users/%s/calls" % current_user.uid) %}active{% end %}" href="/users/{{ current_user.uid }}/calls">
- {{ _("My Calls") }}
-
- {% if current_user.sip_channels %}
- <span class="badge badge-primary ml-2">{{ len(current_user.sip_channels) }}</span>
- {% end %}
- </a>
- </li>
-
- <li class="nav-item">
- <a class="nav-link {% if request.path == "/users" %}active{% end %}" href="/users">
- {{ _("Users") }}
- </a>
- </li>
-
- <li class="nav-item">
- <a class="nav-link {% if request.path.startswith("/conferences") %}active{% end %}" href="/conferences">
- {{ _("Conferences") }}
- </a>
- </li>
+
+ {% if current_user.has_sip() %}
+ <li class="nav-item">
+ <a class="nav-link {% if request.path.startswith("/users/%s/calls" % current_user.uid) %}active{% end %}" href="/users/{{ current_user.uid }}/calls">
+ {{ _("My Calls") }}
+
+ {% if current_user.sip_channels %}
+ <span class="badge badge-primary ml-2">{{ len(current_user.sip_channels) }}</span>
+ {% end %}
+ </a>
+ </li>
+ {% end %}
+
+ {% if current_user.is_staff() %}
+ <li class="nav-item">
+ <a class="nav-link {% if request.path == "/users" %}active{% end %}" href="/users">
+ {{ _("Users") }}
+ </a>
+ </li>
+ {% end %}
+
+ {% if current_user.has_sip() %}
+ <li class="nav-item">
+ <a class="nav-link {% if request.path.startswith("/conferences") %}active{% end %}" href="/conferences">
+ {{ _("Conferences") }}
+ </a>
+ </li>
+ {% end %}
</ul>
<form class="form-inline my-2 my-lg-0" action="/search" method="GET">
<a class="text-white" href="/users/{{ account.uid }}">{{ account.name }}</a>
</h3>
- {% if account.sip_id %}
+ {% if account.has_sip() %}
<h5>
{{ account.sip_id }}
{% end %}
<div class="btn-toolbar mb-3">
- <a class="btn btn-light btn-sm btn-block" href="/~{{ account.uid }}/">
- <span class="fas fa-home mr-2"></span> {{ _("Home Directory") }}
- </a>
+ {% if account.has_shell() %}
+ <a class="btn btn-light btn-sm btn-block" href="/~{{ account.uid }}/">
+ <span class="fas fa-home mr-2"></span> {{ _("Home Directory") }}
+ </a>
- <a class="btn btn-light btn-sm btn-block" href="/users/{{ account.uid }}/ssh-keys">
- <span class="fas fa-key mr-2"></span> {{ _("SSH Keys") }}
- </a>
+ <a class="btn btn-light btn-sm btn-block" href="/users/{{ account.uid }}/ssh-keys">
+ <span class="fas fa-key mr-2"></span> {{ _("SSH Keys") }}
+ </a>
+ {% end %}
{% if account.can_be_managed_by(current_user) %}
<a class="btn btn-warning btn-sm btn-block" href="/users/{{ account.uid }}/edit">
</small>
</div>
+ {% if account.has_mail() %}
+ <fieldset>
+ <legend>{{ _("Email") }}</legend>
- <fieldset>
- <legend>{{ _("Email") }}</legend>
+ <div class="form-group">
+ <label>{{ _("Forward Emails") }}</label>
- <div class="form-group">
- <label>{{ _("Forward Emails") }}</label>
+ <input type="mail" class="form-control" name="mail_routing_address"
+ placeholder="{{ _("Email Address") }}" value="{{ account.mail_routing_address or "" }}">
- <input type="mail" class="form-control" name="mail_routing_address"
- placeholder="{{ _("Email Address") }}" value="{{ account.mail_routing_address or "" }}">
-
- <small class="form-text text-muted">
- {{ _("All emails will be forwarded to this email address") }}
- </small>
- </div>
- </fieldset>
+ <small class="form-text text-muted">
+ {{ _("All emails will be forwarded to this email address") }}
+ </small>
+ </div>
+ </fieldset>
+ {% end %}
<fieldset>
<legend>{{ _("Telephone") }}</legend>
</small>
</div>
- <div class="form-group">
- <label>{{ _("Forward Calls") }}</label>
+ {% if account.has_sip() %}
+ <div class="form-group">
+ <label>{{ _("Forward Calls") }}</label>
- <input type="text" class="form-control" name="sip_routing_address"
- placeholder="{{ _("SIP URI or Phone Number") }}" value="{{ account.sip_routing_address or "" }}">
+ <input type="text" class="form-control" name="sip_routing_address"
+ placeholder="{{ _("SIP URI or Phone Number") }}" value="{{ account.sip_routing_address or "" }}">
- <small class="form-text text-muted">
- {{ _("All calls will be forwarded to this phone number or SIP URI") }}
- </small>
- </div>
+ <small class="form-text text-muted">
+ {{ _("All calls will be forwarded to this phone number or SIP URI") }}
+ </small>
+ </div>
+ {% end %}
</fieldset>
<input class="btn btn-primary btn-block" type="submit" value="{{ _("Save") }}">
class UsersHandler(auth.CacheMixin, base.BaseHandler):
@tornado.web.authenticated
def get(self):
+ # Only staff can see other users
+ if not self.current_user.is_staff():
+ raise tornado.web.HTTPError(403)
+
self.render("people/users.html")