forked from Github-Mirrors/canaille
Introduced a submenu
This commit is contained in:
parent
3ef07a955b
commit
69c67345c2
22 changed files with 441 additions and 193 deletions
|
@ -51,7 +51,9 @@ def create_group(user):
|
|||
)
|
||||
return redirect(url_for("groups.group", groupname=group.display_name))
|
||||
|
||||
return render_template("group.html", form=form, edited_group=None, members=None)
|
||||
return render_template(
|
||||
"group.html", menuitem="groups", form=form, edited_group=None, members=None
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/<groupname>", methods=("GET", "POST"))
|
||||
|
@ -107,6 +109,7 @@ def edit_group(group):
|
|||
"group.html",
|
||||
"partial/users.html",
|
||||
form=form,
|
||||
menuitem="groups",
|
||||
edited_group=group,
|
||||
table_form=table_form,
|
||||
)
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
|
||||
|
||||
@media only screen and (min-width: 1200px) {
|
||||
.ui.ui.ui.container:not(.fluid) {
|
||||
width: 770px;
|
||||
|
@ -33,7 +31,8 @@ body {
|
|||
}
|
||||
|
||||
.logo {
|
||||
margin: auto;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
@ -42,6 +41,14 @@ body {
|
|||
max-height: 50px;
|
||||
}
|
||||
|
||||
.menu-container {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.menu-container .ui.item.menu {
|
||||
justify-content: normal;
|
||||
}
|
||||
|
||||
footer {
|
||||
font-size: x-small;
|
||||
text-align: center;
|
||||
|
|
|
@ -15,6 +15,19 @@
|
|||
<script src="/static/js/users.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached two item borderless menu">
|
||||
<a class="{% if edited_group %}active {% endif %}item" href="{{ url_for('groups.groups') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}View{% endtrans %}
|
||||
</a>
|
||||
<a class="{% if not edited_group %}active {% endif %}item" href="{{ url_for('groups.create_group') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if edited_group %}
|
||||
<div class="ui basic modal" id="modal-delete">
|
||||
|
@ -89,18 +102,16 @@
|
|||
</div>
|
||||
|
||||
{% if edited_group %}
|
||||
<div class="ui segment">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Group members{% endtrans %}
|
||||
</div>
|
||||
</h2>
|
||||
|
||||
<div class="ui attached segment">
|
||||
{{ table.search(table_form, "table.users") }}
|
||||
</div>
|
||||
{% include "partial/users.html" %}
|
||||
{{ table.search(table_form, "table.users") }}
|
||||
</div>
|
||||
{% include "partial/users.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -5,20 +5,27 @@
|
|||
{% trans %}Groups{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui segment">
|
||||
<a class="ui primary button" href="{{ url_for('groups.create_group') }}">{% trans %}Add a group{% endtrans %}</a>
|
||||
</div>
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached two item borderless menu">
|
||||
<a class="active item" href="{{ url_for('groups.groups') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}View{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('groups.create_group') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
<div class="ui segment">
|
||||
{% block content %}
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Groups{% endtrans %}
|
||||
</div>
|
||||
</h2>
|
||||
<div class="ui attached segment">
|
||||
{{ table.search(table_form, "table.groups") }}
|
||||
</div>
|
||||
{% include "partial/groups.html" %}
|
||||
{{ table.search(table_form, "table.groups") }}
|
||||
</div>
|
||||
{% include "partial/groups.html" %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,11 +9,28 @@
|
|||
<script src="/static/js/copy.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached three item borderless menu">
|
||||
<a class="item" href="{{ url_for('account.users') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}View{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('account.profile_creation') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('account.user_invitation') }}">
|
||||
<i class="paper plane icon"></i>
|
||||
{% trans %}Invite{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="invitationform">
|
||||
{% if form_validated %}
|
||||
|
||||
<div class="ui attached segment">
|
||||
<div class="ui segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% if request.form["action"] == "generate" %}
|
||||
|
@ -25,34 +42,31 @@
|
|||
{% endif %}
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
{% if request.form["action"] == "generate" %}
|
||||
{% if request.form["action"] == "generate" %}
|
||||
|
||||
<div class="ui attached success message">
|
||||
{% trans %}Here is the invitation link you can provide to the user you want to invite:{% endtrans %}
|
||||
</div>
|
||||
<div class="ui success message">
|
||||
{% trans %}Here is the invitation link you can provide to the user you want to invite:{% endtrans %}
|
||||
</div>
|
||||
|
||||
{% elif mail_sent %}
|
||||
{% elif mail_sent %}
|
||||
|
||||
<div class="ui attached success message">
|
||||
{% set email = form.mail.data %}
|
||||
{% trans %}This invitation link has been sent to {{ email }}{% endtrans %}
|
||||
{% trans %}If you need to provide this link by other ways than email, you can copy it there:{% endtrans %}
|
||||
</div>
|
||||
<div class="ui success message">
|
||||
{% set email = form.mail.data %}
|
||||
{% trans %}This invitation link has been sent to {{ email }}{% endtrans %}
|
||||
{% trans %}If you need to provide this link by other ways than email, you can copy it there:{% endtrans %}
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
{% else %}
|
||||
|
||||
<div class="ui attached error message">
|
||||
{% set email = form.mail.data %}
|
||||
{% trans %}This invitation link could not be sent to {{ email }} due to technical issues.{% endtrans %}
|
||||
{% trans %}However you can copy the link there to provide it by other ways than email:{% endtrans %}
|
||||
</div>
|
||||
<div class="ui error message">
|
||||
{% set email = form.mail.data %}
|
||||
{% trans %}This invitation link could not be sent to {{ email }} due to technical issues.{% endtrans %}
|
||||
{% trans %}However you can copy the link there to provide it by other ways than email:{% endtrans %}
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="ui attached segment">
|
||||
<div class="ui center aligned container">
|
||||
<div class="ui fields">
|
||||
<div class="ui action input">
|
||||
|
@ -79,22 +93,20 @@
|
|||
|
||||
{% else %}
|
||||
|
||||
<div class="ui attached segment">
|
||||
<div class="ui segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{{ _("Invite a user") }}
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div class="ui attached message">
|
||||
{% trans %}
|
||||
After this form is sent, the recipient your indicated will receive an email
|
||||
containing an account creation link.
|
||||
{% endtrans %}
|
||||
</div>
|
||||
<div class="ui message">
|
||||
{% trans %}
|
||||
After this form is sent, the recipient your indicated will receive an email
|
||||
containing an account creation link.
|
||||
{% endtrans %}
|
||||
</div>
|
||||
|
||||
<div class="ui attached segment">
|
||||
<form method="POST"
|
||||
id="{{ form.id or form.__class__.__name__|lower }}"
|
||||
action="{{ request.url }}"
|
||||
|
|
|
@ -5,6 +5,31 @@
|
|||
{% trans %}Emails{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="active item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui segment">
|
||||
<h2 class="ui center aligned header">
|
||||
|
|
|
@ -9,8 +9,33 @@
|
|||
<script src="/static/js/users.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui attached segment">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Codes{% endtrans %}
|
||||
|
|
|
@ -5,6 +5,31 @@
|
|||
{% trans %}View an authorization{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="loginform">
|
||||
<h3 class="ui top attached header">
|
||||
|
|
|
@ -5,14 +5,37 @@
|
|||
{% trans %}Add a client{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="loginform">
|
||||
<h3 class="ui top attached header">
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</h3>
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
<div class="ui attached clearing segment">
|
||||
{{ sui.render_form(form, _("Confirm")) }}
|
||||
</div>
|
||||
{% block content %}
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</h2>
|
||||
|
||||
{{ sui.render_form(form, _("Confirm")) }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,6 +9,31 @@
|
|||
<script src="/static/js/admin/client_edit.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui basic modal">
|
||||
<div class="ui icon header">
|
||||
|
@ -24,65 +49,63 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loginform">
|
||||
<h3 class="ui top attached header">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
{% trans %}Edit a client{% endtrans %}
|
||||
</h3>
|
||||
</h2>
|
||||
|
||||
<div class="ui attached clearing segment">
|
||||
<div class="ui form">
|
||||
<form id="readonly">
|
||||
<div class="field">
|
||||
<label>{% trans %}ID{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_id }}" readonly name="client_id">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
<div class="ui form">
|
||||
<form id="readonly">
|
||||
<div class="field">
|
||||
<label>{% trans %}ID{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_id }}" readonly name="client_id">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{% trans %}Secret{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_secret }}" readonly name="client_secret">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{% trans %}Secret{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_secret }}" readonly name="client_secret">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{% trans %}Issued at{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_id_issued_at }}" readonly name="client_id_issued_at">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{% trans %}Issued at{% endtrans %}</label>
|
||||
<div class="ui cornor labeled input">
|
||||
<input type="text" value="{{ client.client_id_issued_at }}" readonly name="client_id_issued_at">
|
||||
<div class="ui corner label" title="{{ _("This field is not editable") }}">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<form method="POST"
|
||||
id="{{ form.__class__.__name__|lower }}"
|
||||
action="{{ form.action }}"
|
||||
role="form"
|
||||
enctype="multipart/form-data"
|
||||
class="ui form"
|
||||
>
|
||||
|
||||
{{ sui.render_fields(form) }}
|
||||
|
||||
<div class="ui right aligned container">
|
||||
<div class="ui stackable buttons">
|
||||
<button type="submit" class="ui right floated negative basic button confirm" name="action" value="delete" id="delete">
|
||||
{{ _("Delete the client") }}
|
||||
</button>
|
||||
<button type="submit" class="ui right floated primary button" name="action" value="edit" id="edit">
|
||||
{{ _("Edit") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<form method="POST"
|
||||
id="{{ form.__class__.__name__|lower }}"
|
||||
action="{{ form.action }}"
|
||||
role="form"
|
||||
enctype="multipart/form-data"
|
||||
class="ui form"
|
||||
>
|
||||
|
||||
{{ sui.render_fields(form) }}
|
||||
|
||||
<div class="ui right aligned container">
|
||||
<div class="ui stackable buttons">
|
||||
<button type="submit" class="ui right floated negative basic button confirm" name="action" value="delete" id="delete">
|
||||
{{ _("Delete the client") }}
|
||||
</button>
|
||||
<button type="submit" class="ui right floated primary button" name="action" value="edit" id="edit">
|
||||
{{ _("Edit") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,13 +9,33 @@
|
|||
<script src="/static/js/users.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="ui segment">
|
||||
<a class="ui primary button" href="{{ url_for('oidc.clients.add') }}">{% trans %}Add client{% endtrans %}</a>
|
||||
</div>
|
||||
|
||||
<div class="ui attached segment">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Clients{% endtrans %}
|
||||
|
|
|
@ -9,8 +9,33 @@
|
|||
<script src="/static/js/users.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui attached segment">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
|
|
|
@ -10,6 +10,31 @@
|
|||
<script src="/static/js/copy.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached five item borderless menu">
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.clients.add') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add a client{% endtrans %}
|
||||
</a>
|
||||
<a class="active item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="modal-delete" class="ui basic modal">
|
||||
<div class="ui icon header">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% import "macro/table.html" as table %}
|
||||
<table class="ui attached table groups">
|
||||
<table class="ui bottom attached table groups">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% import "macro/table.html" as table %}
|
||||
<table class="ui attached table codes">
|
||||
<table class="ui bottom attached table codes">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}Code{% endtrans %}</th>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% import "macro/table.html" as table %}
|
||||
<table class="ui attached table clients">
|
||||
<table class="ui bottom attached table clients">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% import "macro/table.html" as table %}
|
||||
<table class="ui attached table tokens">
|
||||
<table class="ui bottom attached table tokens">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}Token{% endtrans %}</th>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% import "macro/table.html" as table %}
|
||||
<table class="ui attached table users">
|
||||
<table class="ui bottom attached table users">
|
||||
<thead>
|
||||
<tr>
|
||||
{% if user.can_read("jpegPhoto") %}
|
||||
|
|
|
@ -16,6 +16,27 @@
|
|||
<script src="/static/js/profile.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
{% if not edited_user or edited_user != user %}
|
||||
<nav class="ui bottom attached {% if has_smtp %}three{% else %}two{% endif %} item borderless menu">
|
||||
<a class="{% if edited_user %}active {% endif %}item" href="{{ url_for('account.users') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}View{% endtrans %}
|
||||
</a>
|
||||
<a class="{% if not edited_user %}active {% endif %}item" href="{{ url_for('account.profile_creation') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add{% endtrans %}
|
||||
</a>
|
||||
{% if has_smtp %}
|
||||
<a class="item" href="{{ url_for('account.user_invitation') }}">
|
||||
<i class="paper plane icon"></i>
|
||||
{% trans %}Invite{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% macro render_field(field, noindicator=false) %}
|
||||
{% set lock_indicator = field.render_kw and ("readonly" in field.render_kw or "disabled" in field.render_kw) %}
|
||||
{% if not edited_user %}
|
||||
|
|
|
@ -9,16 +9,27 @@
|
|||
<script src="/static/js/users.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
<nav class="ui bottom attached {% if has_smtp %}three{% else %}two{% endif %} item borderless menu">
|
||||
<a class="active item" href="{{ url_for('account.users') }}">
|
||||
<i class="th list icon"></i>
|
||||
{% trans %}View{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('account.profile_creation') }}">
|
||||
<i class="plus icon"></i>
|
||||
{% trans %}Add{% endtrans %}
|
||||
</a>
|
||||
{% if has_smtp %}
|
||||
<a class="item" href="{{ url_for('account.user_invitation') }}">
|
||||
<i class="paper plane icon"></i>
|
||||
{% trans %}Invite{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui segment">
|
||||
<div class="ui stackable buttons">
|
||||
<a class="ui primary button" href="{{ url_for('account.profile_creation') }}">{% trans %}Add a user{% endtrans %}</a>
|
||||
{% if has_smtp %}
|
||||
<a class="ui button" href="{{ url_for('account.user_invitation') }}">{% trans %}Invite a user{% endtrans %}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui attached segment">
|
||||
<div class="ui top attached segment">
|
||||
<h2 class="ui center aligned header">
|
||||
<div class="content">
|
||||
{% trans %}Users{% endtrans %}
|
||||
|
|
|
@ -25,77 +25,62 @@
|
|||
<body>
|
||||
{% block menu %}
|
||||
{% if user and menu %}
|
||||
<nav class="ui stackable labeled icon menu container">
|
||||
{% if logo_url %}
|
||||
<div class="header item">
|
||||
<a href="/" class="logo">
|
||||
<div class="ui container menu-container">
|
||||
<nav class="ui stackable labeled icon seven item {% if self.submenu() | trim %}top attached{% endif %} menu">
|
||||
{% if logo_url %}
|
||||
<a href="/" class="item logo">
|
||||
<img class="ui img" src="{{ logo_url }}" alt="{{ website_name }}" />
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if user.can_edit_self %}
|
||||
<a class="item {% if menuitem == "profile" %}active{% endif %}"
|
||||
href="{{ url_for('account.profile_edition', username=user.uid[0]) }}">
|
||||
<i class="id card icon"></i>
|
||||
{% trans %}My profile{% endtrans %}
|
||||
{% endif %}
|
||||
|
||||
{% if user.can_edit_self %}
|
||||
<a class="item {% if menuitem == "profile" %}active{% endif %}"
|
||||
href="{{ url_for('account.profile_edition', username=user.uid[0]) }}">
|
||||
<i class="id card icon"></i>
|
||||
{% trans %}Profile{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_use_oidc %}
|
||||
<a class="item {% if menuitem == "consents" %}active{% endif %}"
|
||||
href="{{ url_for('oidc.consents.consents') }}">
|
||||
<i class="handshake icon"></i>
|
||||
{% trans %}Consents{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_users %}
|
||||
<a class="item {% if menuitem == "users" %}active{% endif %}"
|
||||
href="{{ url_for('account.users') }}">
|
||||
<i class="address book icon"></i>
|
||||
{% trans %}Users{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_groups %}
|
||||
<a class="item {% if menuitem == "groups" %}active{% endif %}"
|
||||
href="{{ url_for('groups.groups') }}">
|
||||
<i class="users icon"></i>
|
||||
{% trans %}Groups{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_oidc %}
|
||||
<a class="item {% if menuitem == "admin" %}active{% endif %}" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="settings icon"></i>
|
||||
{% trans %}Admin{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
<a class="item" href="{{ url_for('account.logout') }}">
|
||||
<i class="sign out alternate icon"></i>
|
||||
{% trans %}Log out{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_use_oidc %}
|
||||
<a class="item {% if menuitem == "consents" %}active{% endif %}"
|
||||
href="{{ url_for('oidc.consents.consents') }}">
|
||||
<i class="handshake icon"></i>
|
||||
{% trans %}My consents{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_users %}
|
||||
<a class="item {% if menuitem == "users" %}active{% endif %}"
|
||||
href="{{ url_for('account.users') }}">
|
||||
<i class="address book icon"></i>
|
||||
{% trans %}Users{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_groups %}
|
||||
<a class="item {% if menuitem == "groups" %}active{% endif %}"
|
||||
href="{{ url_for('groups.groups') }}">
|
||||
<i class="users icon"></i>
|
||||
{% trans %}Groups{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.can_manage_oidc %}
|
||||
<div class="ui dropdown item {% if menuitem == "admin" %}dropdown-active{% endif %}">
|
||||
<i class="settings icon"></i>
|
||||
{% trans %}Admin{% endtrans %}
|
||||
<div class="menu">
|
||||
<a class="item" href="{{ url_for('oidc.clients.index') }}">
|
||||
<i class="plug icon"></i>
|
||||
{% trans %}Clients{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.tokens.index') }}">
|
||||
<i class="key icon"></i>
|
||||
{% trans %}Tokens{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('oidc.authorizations.index') }}">
|
||||
<i class="user secret icon"></i>
|
||||
{% trans %}Codes{% endtrans %}
|
||||
</a>
|
||||
<a class="item" href="{{ url_for('admin.mail_index') }}">
|
||||
<i class="user mail icon"></i>
|
||||
{% trans %}Emails{% endtrans %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<a class="item" href="{{ url_for('account.logout') }}">
|
||||
<i class="sign out alternate icon"></i>
|
||||
{% trans %}Log out{% endtrans %}
|
||||
</a>
|
||||
</nav>
|
||||
</nav>
|
||||
{% block submenu %}{% endblock %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block container %}
|
||||
<div class="ui container">
|
||||
<div class="content">
|
||||
<div class="ui content">
|
||||
{{ flask.messages() }}
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
|
|
@ -253,17 +253,17 @@ def test_no_registration_if_logged_in(testclient, logged_user, foo_group):
|
|||
|
||||
def test_unavailable_if_no_smtp(testclient, logged_admin):
|
||||
res = testclient.get("/users")
|
||||
res.mustcontain("Invite a user")
|
||||
res.mustcontain("Invite")
|
||||
res = testclient.get("/profile")
|
||||
res.mustcontain("Invite a user")
|
||||
res.mustcontain("Invite")
|
||||
testclient.get("/invite")
|
||||
|
||||
del testclient.app.config["SMTP"]
|
||||
|
||||
res = testclient.get("/users")
|
||||
res.mustcontain(no="Invite a user")
|
||||
res.mustcontain(no="Invite")
|
||||
res = testclient.get("/profile")
|
||||
res.mustcontain(no="Invite a user")
|
||||
res.mustcontain(no="Invite")
|
||||
testclient.get("/invite", status=500, expect_errors=True)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue