forked from Github-Mirrors/canaille
refactor: template overhaul
This commit is contained in:
parent
d27aab8651
commit
324b36c829
58 changed files with 95 additions and 48 deletions
|
@ -43,7 +43,7 @@ def mail_index(user):
|
||||||
else:
|
else:
|
||||||
flash(_("The test invitation mail has not been sent correctly"), "error")
|
flash(_("The test invitation mail has not been sent correctly"), "error")
|
||||||
|
|
||||||
return render_template("mail/admin.html", form=form, menuitem="admin")
|
return render_template("mails/admin.html", form=form, menuitem="admin")
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/mail/test.html")
|
@bp.route("/mail/test.html")
|
||||||
|
@ -51,7 +51,7 @@ def mail_index(user):
|
||||||
def test_html(user):
|
def test_html(user):
|
||||||
base_url = url_for("core.account.index", _external=True)
|
base_url = url_for("core.account.index", _external=True)
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/test.html",
|
"mails/test.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
logo=current_app.config.get("LOGO"),
|
logo=current_app.config.get("LOGO"),
|
||||||
|
@ -66,7 +66,7 @@ def test_html(user):
|
||||||
def test_txt(user):
|
def test_txt(user):
|
||||||
base_url = url_for("core.account.index", _external=True)
|
base_url = url_for("core.account.index", _external=True)
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/test.txt",
|
"mails/test.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=current_app.config.get("SERVER_NAME", base_url),
|
site_url=current_app.config.get("SERVER_NAME", base_url),
|
||||||
)
|
)
|
||||||
|
@ -87,7 +87,7 @@ def password_init_html(user):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/firstlogin.html",
|
"mails/firstlogin.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -110,7 +110,7 @@ def password_init_txt(user):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/firstlogin.txt",
|
"mails/firstlogin.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=current_app.config.get("SERVER_NAME", base_url),
|
site_url=current_app.config.get("SERVER_NAME", base_url),
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -132,7 +132,7 @@ def password_reset_html(user):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/reset.html",
|
"mails/reset.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -155,7 +155,7 @@ def password_reset_txt(user):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/reset.txt",
|
"mails/reset.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=current_app.config.get("SERVER_NAME", base_url),
|
site_url=current_app.config.get("SERVER_NAME", base_url),
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -174,7 +174,7 @@ def invitation_html(user, identifier, email):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/invitation.html",
|
"mails/invitation.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
registration_url=registration_url,
|
registration_url=registration_url,
|
||||||
|
@ -197,7 +197,7 @@ def invitation_txt(user, identifier, email):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/invitation.txt",
|
"mails/invitation.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
registration_url=registration_url,
|
registration_url=registration_url,
|
||||||
|
@ -216,7 +216,7 @@ def email_confirmation_html(user, identifier, email):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/email-confirmation.html",
|
"mails/email-confirmation.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
confirmation_url=email_confirmation_url,
|
confirmation_url=email_confirmation_url,
|
||||||
|
@ -239,7 +239,7 @@ def email_confirmation_txt(user, identifier, email):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"mail/email-confirmation.txt",
|
"mails/email-confirmation.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
confirmation_url=email_confirmation_url,
|
confirmation_url=email_confirmation_url,
|
||||||
|
|
|
@ -4,7 +4,7 @@ from . import account
|
||||||
from . import admin
|
from . import admin
|
||||||
from . import groups
|
from . import groups
|
||||||
|
|
||||||
bp = Blueprint("core", __name__)
|
bp = Blueprint("core", __name__, template_folder="templates")
|
||||||
|
|
||||||
bp.register_blueprint(account.bp)
|
bp.register_blueprint(account.bp)
|
||||||
bp.register_blueprint(admin.bp)
|
bp.register_blueprint(admin.bp)
|
||||||
|
|
|
@ -15,12 +15,12 @@ def send_test_mail(email):
|
||||||
website_name=current_app.config.get("NAME", "Canaille")
|
website_name=current_app.config.get("NAME", "Canaille")
|
||||||
)
|
)
|
||||||
text_body = render_template(
|
text_body = render_template(
|
||||||
"mail/test.txt",
|
"mails/test.txt",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
)
|
)
|
||||||
html_body = render_template(
|
html_body = render_template(
|
||||||
"mail/test.html",
|
"mails/test.html",
|
||||||
site_name=current_app.config.get("NAME", "Canaille"),
|
site_name=current_app.config.get("NAME", "Canaille"),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
logo=f"cid:{logo_cid[1:-1]}" if logo_cid else None,
|
logo=f"cid:{logo_cid[1:-1]}" if logo_cid else None,
|
||||||
|
@ -54,13 +54,13 @@ def send_password_reset_mail(user, mail):
|
||||||
website_name=current_app.config.get("NAME", base_url)
|
website_name=current_app.config.get("NAME", base_url)
|
||||||
)
|
)
|
||||||
text_body = render_template(
|
text_body = render_template(
|
||||||
"mail/reset.txt",
|
"mails/reset.txt",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
)
|
)
|
||||||
html_body = render_template(
|
html_body = render_template(
|
||||||
"mail/reset.html",
|
"mails/reset.html",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -95,13 +95,13 @@ def send_password_initialization_mail(user, email):
|
||||||
website_name=current_app.config.get("NAME", base_url)
|
website_name=current_app.config.get("NAME", base_url)
|
||||||
)
|
)
|
||||||
text_body = render_template(
|
text_body = render_template(
|
||||||
"mail/firstlogin.txt",
|
"mails/firstlogin.txt",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
)
|
)
|
||||||
html_body = render_template(
|
html_body = render_template(
|
||||||
"mail/firstlogin.html",
|
"mails/firstlogin.html",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
reset_url=reset_url,
|
reset_url=reset_url,
|
||||||
|
@ -126,13 +126,13 @@ def send_invitation_mail(email, registration_url):
|
||||||
website_name=current_app.config.get("NAME", base_url)
|
website_name=current_app.config.get("NAME", base_url)
|
||||||
)
|
)
|
||||||
text_body = render_template(
|
text_body = render_template(
|
||||||
"mail/invitation.txt",
|
"mails/invitation.txt",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
registration_url=registration_url,
|
registration_url=registration_url,
|
||||||
)
|
)
|
||||||
html_body = render_template(
|
html_body = render_template(
|
||||||
"mail/invitation.html",
|
"mails/invitation.html",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
registration_url=registration_url,
|
registration_url=registration_url,
|
||||||
|
@ -157,13 +157,13 @@ def send_confirmation_email(email, confirmation_url):
|
||||||
website_name=current_app.config.get("NAME", base_url)
|
website_name=current_app.config.get("NAME", base_url)
|
||||||
)
|
)
|
||||||
text_body = render_template(
|
text_body = render_template(
|
||||||
"mail/email-confirmation.txt",
|
"mails/email-confirmation.txt",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
confirmation_url=confirmation_url,
|
confirmation_url=confirmation_url,
|
||||||
)
|
)
|
||||||
html_body = render_template(
|
html_body = render_template(
|
||||||
"mail/email-confirmation.html",
|
"mails/email-confirmation.html",
|
||||||
site_name=current_app.config.get("NAME", base_url),
|
site_name=current_app.config.get("NAME", base_url),
|
||||||
site_url=base_url,
|
site_url=base_url,
|
||||||
confirmation_url=confirmation_url,
|
confirmation_url=confirmation_url,
|
||||||
|
|
|
@ -19,7 +19,7 @@ def index(user):
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
return render_htmx_template(
|
return render_htmx_template(
|
||||||
"oidc/admin/authorization_list.html",
|
"authorization_list.html",
|
||||||
menuitem="admin",
|
menuitem="admin",
|
||||||
table_form=table_form,
|
table_form=table_form,
|
||||||
)
|
)
|
||||||
|
@ -29,7 +29,7 @@ def index(user):
|
||||||
@permissions_needed("manage_oidc")
|
@permissions_needed("manage_oidc")
|
||||||
def view(user, authorization):
|
def view(user, authorization):
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/admin/authorization_view.html",
|
"authorization_view.html",
|
||||||
authorization=authorization,
|
authorization=authorization,
|
||||||
menuitem="admin",
|
menuitem="admin",
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,7 +7,7 @@ from . import endpoints
|
||||||
from . import tokens
|
from . import tokens
|
||||||
from . import well_known
|
from . import well_known
|
||||||
|
|
||||||
bp = Blueprint("oidc", __name__)
|
bp = Blueprint("oidc", __name__, template_folder="templates")
|
||||||
|
|
||||||
bp.register_blueprint(authorizations.bp)
|
bp.register_blueprint(authorizations.bp)
|
||||||
bp.register_blueprint(clients.bp)
|
bp.register_blueprint(clients.bp)
|
||||||
|
|
|
@ -27,7 +27,7 @@ def index(user):
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
return render_htmx_template(
|
return render_htmx_template(
|
||||||
"oidc/admin/client_list.html", menuitem="admin", table_form=table_form
|
"client_list.html", menuitem="admin", table_form=table_form
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,18 +37,14 @@ def add(user):
|
||||||
form = ClientAddForm(request.form or None)
|
form = ClientAddForm(request.form or None)
|
||||||
|
|
||||||
if not request.form or form.form_control():
|
if not request.form or form.form_control():
|
||||||
return render_template(
|
return render_template("client_add.html", form=form, menuitem="admin")
|
||||||
"oidc/admin/client_add.html", form=form, menuitem="admin"
|
|
||||||
)
|
|
||||||
|
|
||||||
if not form.validate():
|
if not form.validate():
|
||||||
flash(
|
flash(
|
||||||
_("The client has not been added. Please check your information."),
|
_("The client has not been added. Please check your information."),
|
||||||
"error",
|
"error",
|
||||||
)
|
)
|
||||||
return render_template(
|
return render_template("client_add.html", form=form, menuitem="admin")
|
||||||
"oidc/admin/client_add.html", form=form, menuitem="admin"
|
|
||||||
)
|
|
||||||
|
|
||||||
client_id = gen_salt(24)
|
client_id = gen_salt(24)
|
||||||
client_id_issued_at = datetime.datetime.now(datetime.timezone.utc)
|
client_id_issued_at = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
@ -106,7 +102,7 @@ def client_edit(client):
|
||||||
|
|
||||||
if not request.form or form.form_control():
|
if not request.form or form.form_control():
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/admin/client_edit.html", form=form, client=client, menuitem="admin"
|
"client_edit.html", form=form, client=client, menuitem="admin"
|
||||||
)
|
)
|
||||||
|
|
||||||
if not form.validate():
|
if not form.validate():
|
||||||
|
@ -115,7 +111,7 @@ def client_edit(client):
|
||||||
"error",
|
"error",
|
||||||
)
|
)
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/admin/client_edit.html", form=form, client=client, menuitem="admin"
|
"client_edit.html", form=form, client=client, menuitem="admin"
|
||||||
)
|
)
|
||||||
|
|
||||||
client.update(
|
client.update(
|
||||||
|
|
|
@ -30,7 +30,7 @@ def consents(user):
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/user/consent_list.html",
|
"consent_list.html",
|
||||||
consents=consents,
|
consents=consents,
|
||||||
menuitem="consents",
|
menuitem="consents",
|
||||||
scope_details=SCOPE_DETAILS,
|
scope_details=SCOPE_DETAILS,
|
||||||
|
@ -55,7 +55,7 @@ def pre_consents(user):
|
||||||
nb_preconsents = len(preconsented)
|
nb_preconsents = len(preconsented)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/user/preconsent_list.html",
|
"preconsent_list.html",
|
||||||
menuitem="consents",
|
menuitem="consents",
|
||||||
scope_details=SCOPE_DETAILS,
|
scope_details=SCOPE_DETAILS,
|
||||||
ignored_scopes=["openid"],
|
ignored_scopes=["openid"],
|
||||||
|
|
|
@ -121,7 +121,7 @@ def authorize():
|
||||||
|
|
||||||
form = AuthorizeForm(request.form or None)
|
form = AuthorizeForm(request.form or None)
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/user/authorize.html",
|
"authorize.html",
|
||||||
user=user,
|
user=user,
|
||||||
grant=grant,
|
grant=grant,
|
||||||
client=client,
|
client=client,
|
||||||
|
@ -283,9 +283,7 @@ def end_session():
|
||||||
or (data.get("logout_hint") and data["logout_hint"] != user.user_name[0])
|
or (data.get("logout_hint") and data["logout_hint"] != user.user_name[0])
|
||||||
) and not session.get("end_session_confirmation"):
|
) and not session.get("end_session_confirmation"):
|
||||||
session["end_session_data"] = data
|
session["end_session_data"] = data
|
||||||
return render_template(
|
return render_template("logout.html", form=form, client=client, menu=False)
|
||||||
"oidc/user/logout.html", form=form, client=client, menu=False
|
|
||||||
)
|
|
||||||
|
|
||||||
if data.get("id_token_hint"):
|
if data.get("id_token_hint"):
|
||||||
id_token = jwt.decode(
|
id_token = jwt.decode(
|
||||||
|
@ -326,9 +324,7 @@ def end_session():
|
||||||
"end_session_confirmation"
|
"end_session_confirmation"
|
||||||
):
|
):
|
||||||
session["end_session_data"] = data
|
session["end_session_data"] = data
|
||||||
return render_template(
|
return render_template("logout.html", form=form, client=client, menu=False)
|
||||||
"oidc/user/logout.html", form=form, client=client, menu=False
|
|
||||||
)
|
|
||||||
|
|
||||||
user.logout()
|
user.logout()
|
||||||
|
|
||||||
|
|
|
@ -40,5 +40,5 @@
|
||||||
|
|
||||||
{{ table.search(table_form, "table.codes") }}
|
{{ table.search(table_form, "table.codes") }}
|
||||||
</div>
|
</div>
|
||||||
{% include "partial/oidc/admin/authorization_list.html" %}
|
{% include "partial/authorization_list.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -40,5 +40,5 @@
|
||||||
|
|
||||||
{{ table.search(table_form, "table.clients") }}
|
{{ table.search(table_form, "table.clients") }}
|
||||||
</div>
|
</div>
|
||||||
{% include "partial/oidc/admin/client_list.html" %}
|
{% include "partial/client_list.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
46
canaille/oidc/templates/login.html
Normal file
46
canaille/oidc/templates/login.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{% extends theme('base.html') %}
|
||||||
|
{% import 'macro/flask.html' as flask %}
|
||||||
|
{% import 'macro/form.html' as fui %}
|
||||||
|
{% import 'partial/login_field.html' as login_field %}
|
||||||
|
|
||||||
|
{% block container %}
|
||||||
|
<div class="ui container" hx-boost="false">
|
||||||
|
<div class="content">
|
||||||
|
<div class="ui clearing segment">
|
||||||
|
{% if logo_url %}
|
||||||
|
<a href="{{ url_for('core.account.index') }}">
|
||||||
|
<img class="ui tiny centered image" src="{{ logo_url }}" alt="{{ website_name }}">
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<i class="massive sign in icon image ui"></i>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<h2 class="ui center aligned header">
|
||||||
|
<div class="content">
|
||||||
|
{{ _("Sign in at %(website)s", website=website_name) }}
|
||||||
|
</div>
|
||||||
|
<div class="sub header">{% trans %}Manage your information and your authorizations{% endtrans %}</div>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
{{ flask.messages() }}
|
||||||
|
|
||||||
|
{% call fui.render_form(form) %}
|
||||||
|
{% block login_field scoped %}{{ login_field.render_field(form.login, class="autofocus") }}{% endblock %}
|
||||||
|
|
||||||
|
{% if "password" in form %}
|
||||||
|
{% block password_field scoped %}{{ login_field.render_field(form.password) }}{% endblock %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="ui right aligned container">
|
||||||
|
<div class="ui stackable buttons">
|
||||||
|
{% if has_smtp and has_password_recovery %}
|
||||||
|
<a type="button" class="ui right floated button" href="{{ url_for('core.account.forgotten') }}">{{ _("Forgotten password") }}</a>
|
||||||
|
{% endif %}
|
||||||
|
<button type="submit" name="answer" class="ui right floated primary button" hx-boost="false">{{ _("Continue") }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endcall %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
9
canaille/oidc/templates/partial/login_field.html
Normal file
9
canaille/oidc/templates/partial/login_field.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{% import 'macro/form.html' as fui %}
|
||||||
|
{% macro render_field(field) %}
|
||||||
|
{% if field.name == "login" %}
|
||||||
|
{{ fui.render_field(field, icon="user", noindicator=true, class="autofocus", **kwargs) }}
|
||||||
|
{% endif %}
|
||||||
|
{% if field.name == "password" %}
|
||||||
|
{{ fui.render_field(field, icon="key", noindicator=true, **kwargs) }}
|
||||||
|
{% endif %}
|
||||||
|
{% endmacro %}
|
|
@ -40,5 +40,5 @@
|
||||||
|
|
||||||
{{ table.search(table_form, "table.tokens") }}
|
{{ table.search(table_form, "table.tokens") }}
|
||||||
</div>
|
</div>
|
||||||
{% include "partial/oidc/admin/token_list.html" %}
|
{% include "partial/token_list.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -23,7 +23,7 @@ def index(user):
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
return render_htmx_template(
|
return render_htmx_template(
|
||||||
"oidc/admin/token_list.html", menuitem="admin", table_form=table_form
|
"token_list.html", menuitem="admin", table_form=table_form
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ def view(user, token):
|
||||||
abort(400, f"bad form action: {request.form.get('action')}")
|
abort(400, f"bad form action: {request.form.get('action')}")
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"oidc/admin/token_view.html",
|
"token_view.html",
|
||||||
token=token,
|
token=token,
|
||||||
menuitem="admin",
|
menuitem="admin",
|
||||||
form=form,
|
form=form,
|
||||||
|
|
Loading…
Reference in a new issue