Unverified Commit 8f3c94fd authored by Robin Sonnabend's avatar Robin Sonnabend
Browse files

Move onlick=confirm into external JS

Inline JS is blocked by the CSP, removing the confirmation check on all
the deletion buttons.
parent f02d8029
......@@ -120,4 +120,14 @@ window.onload=function() {
textarea.addEventListener("keydown", function(e){tab_func(e); delayed()}, false);
resize_textarea(textarea)();
}
// confirm buttons
for (var element of document.querySelectorAll('[confirm]')) {
element.onclick = function(evt) {
var target = evt.target;
while (!target.hasAttribute("confirm")) {
target = target.parentElement;
}
return confirm(target.getAttribute("confirm"));
};
}
};
......@@ -26,12 +26,12 @@
<tr>
<td>mmustermann</td>
<td>mmustermann@domain.example</td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" onclick="return confirm('Bist du dir sicher, dass du die Todomailzuordnung mmustermann zu mmustermann@domain.example löschen willst?');">Löschen</a></td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" confirm="Bist du dir sicher, dass du die Todomailzuordnung mmustermann zu mmustermann@domain.example löschen willst?">Löschen</a></td>
</tr>
<tr>
<td>kmusterfrau</td>
<td>kmusterfrau@domain.example</td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" onclick="return confirm('Bist du dir sicher, dass du die Todomailzuordnung kmusterfrau zu kmusterfrau@domain.example löschen willst?');">Löschen</a></td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" confirm="Bist du dir sicher, dass du die Todomailzuordnung kmusterfrau zu kmusterfrau@domain.example löschen willst?">Löschen</a></td>
</tr>
</tbody>
</table>
......
......@@ -295,7 +295,7 @@
<td>1 Tage</td>
<td>Intern</td>
<td>Es ist mal wieder soweit und unsere Sitzung soll mit der angegeben TO statt finden.</td>
<td><a href="#example_mails_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du die Einladungsmail 1 Tage vor der Sitzung löschen willst?');" href="#example_mails_overview">Löschen</a></td>
<td><a href="#example_mails_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du die Einladungsmail 1 Tage vor der Sitzung löschen willst?" href="#example_mails_overview">Löschen</a></td>
</tr>
</tbody>
</table>
......@@ -358,22 +358,22 @@
<tr>
<td>Begrüßung, Beschluss der TO und Protokolle</td>
<td>-100</td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du den Standard-TOP Begrüßung, Beschluss der TO und Protokolle löschen willst?');" href="#example_tops_overview">Löschen</a></td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du den Standard-TOP Begrüßung, Beschluss der TO und Protokolle löschen willst?" href="#example_tops_overview">Löschen</a></td>
</tr>
<tr>
<td>Bericht</td>
<td>-90</td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du den Standard-TOP Bericht löschen willst?');" href="#example_tops_overview">Löschen</a></td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du den Standard-TOP Bericht löschen willst?" href="#example_tops_overview">Löschen</a></td>
</tr>
<tr>
<td>Todos</td>
<td>-80</td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du den Standard-TOP Todos löschen willst?');" href="#example_tops_overview">Löschen</a></td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du den Standard-TOP Todos löschen willst?" href="#example_tops_overview">Löschen</a></td>
</tr>
<tr>
<td>Verschiedenes</td>
<td>100</td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du den Standard-TOP Verschiedenes löschen willst?');" href="#example_tops_overview">Löschen</a></td>
<td><a href="#example_tops_overview">Runter</a>, <a href="#example_tops_overview">Hoch</a>, <a href="#example_tops_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du den Standard-TOP Verschiedenes löschen willst?" href="#example_tops_overview">Löschen</a></td>
</tr>
</tbody>
</table>
......@@ -433,7 +433,7 @@
<td>Fachschaftsraum</td>
<td>Nein</td>
<td>Nein</td>
<td><a href="#example_meta_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du das Metadatenfeld Ort löschen willst?');" href="#example_meta_overview">Löschen</a></td>
<td><a href="#example_meta_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du das Metadatenfeld Ort löschen willst?" href="#example_meta_overview">Löschen</a></td>
</tr>
<tr>
<td>Anwesend</td>
......@@ -441,7 +441,7 @@
<td></td>
<td>Nein</td>
<td>Nein</td>
<td><a href="#example_meta_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du das Metadatenfeld Anwesend löschen willst?');" href="#example_meta_overview">Löschen</a></td>
<td><a href="#example_meta_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du das Metadatenfeld Anwesend löschen willst?" href="#example_meta_overview">Löschen</a></td>
</tr>
<tr>
<td>Protokoll</td>
......@@ -449,7 +449,7 @@
<td></td>
<td>Nein</td>
<td>Nein</td>
<td><a href="#example_meta_overview">Ändern</a>, <a onclick="return confirm('Bist du dir sicher, dass du das Metadatenfeld Protokoll löschen willst?');" href="#example_meta_overview">Löschen</a></td>
<td><a href="#example_meta_overview">Ändern</a>, <a confirm="Bist du dir sicher, dass du das Metadatenfeld Protokoll löschen willst?" href="#example_meta_overview">Löschen</a></td>
</tr>
</tbody>
</table>
......@@ -514,7 +514,7 @@
<tbody>
<tr>
<td>finanzwirksam</td>
<td><a href="#example_decision_categories">Ändern</a>, <a href="#example_decision_categories" onclick="return confirm('Bist du dir sicher, dass du die Beschlusskategorie finanzwirksam löschen willst?');">Löschen</a></td>
<td><a href="#example_decision_categories">Ändern</a>, <a href="#example_decision_categories" confirm="Bist du dir sicher, dass du die Beschlusskategorie finanzwirksam löschen willst?">Löschen</a></td>
</tr>
</tbody>
</table>
......
......@@ -198,11 +198,11 @@
{% endif %}
<a class="btn btn-default" href="#example_update_protocoll">Editieren</a>
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="#example_update_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_update_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
{% endif %}
<a class="btn btn-default" href="#example_update_protocoll">Vorlage</a>
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_update_protocoll" onclick="return confirm('Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.');">Einladung versenden</a>
<a class="btn btn-default" href="#example_update_protocoll" confirm="Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.">Einladung versenden</a>
{% endif %}
<a class="btn btn-default" href="#example_update_protocoll">Typ</a>
</div>
......@@ -275,7 +275,7 @@
<a href="#example_top_overview">Ändern</a>
<a href="#example_top_overview">Runter</a>
<a href="#example_top_overview">Hoch</a>
<a href="#example_top_overview" onclick="return confirm('Bist du dir sicher, dass du den TOP Änderungsbedarf löschen möchtest?');">Löschen</a>
<a href="#example_top_overview" confirm="Bist du dir sicher, dass du den TOP Änderungsbedarf löschen möchtest?">Löschen</a>
</li>
<li class="expansion-button" id="top-2271" title="">
Neutralität
......@@ -283,7 +283,7 @@
<a href="#example_top_overview">Ändern</a>
<a href="#example_top_overview">Runter</a>
<a href="#example_top_overview">Hoch</a>
<a href="#example_top_overview" onclick="return confirm('Bist du dir sicher, dass du den TOP Neutralität löschen möchtest?');">Löschen</a>
<a href="#example_top_overview" confirm="Bist du dir sicher, dass du den TOP Neutralität löschen möchtest?">Löschen</a>
</li>
<li class="defaulttop">
Verschiedenes
......
......@@ -39,11 +39,11 @@
{% endif %}
<a class="btn btn-default" href="#example_create_protocoll">Editieren</a>
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="#example_create_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_create_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
{% endif %}
<a class="btn btn-default" href="#example_create_protocoll">Vorlage</a>
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_create_protocoll" onclick="return confirm('Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.');">Einladung versenden</a>
<a class="btn btn-default" href="#example_create_protocoll" confirm="Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.">Einladung versenden</a>
{% endif %}
<a class="btn btn-default" href="#example_create_protocoll">Typ</a>
</div>
......@@ -99,10 +99,10 @@
<div class="btn-group">
<a class="btn btn-primary" href="#example_import_protocoll">Aus Etherpad</a>
<a class="btn btn-default" href="#example_import_protocoll">Editieren</a>
<a class="btn btn-primary" href="#example_import_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_import_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
<a class="btn btn-default" href="#example_import_protocoll">Vorlage</a>
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_import_protocoll" onclick="return confirm('Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.');">Einladung versenden</a>
<a class="btn btn-default" href="#example_import_protocoll" confirm="Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.">Einladung versenden</a>
{% endif %}
<a class="btn btn-default" href="#example_import_protocoll">Typ</a>
</div>
......@@ -146,7 +146,7 @@
<a class="btn btn-primary" href="#example_corect_protocoll">Quelltext</a>
<a class="btn btn-success" href="#example_corect_protocoll">Editieren</a>
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="#example_corect_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_corect_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
{% endif %}
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_corect_protocoll">Intern versenden</a>
......@@ -181,7 +181,7 @@
<a class="btn btn-primary" href="#example_publish_protocoll">Quelltext</a>
<a class="btn btn-success" href="#example_publish_protocoll">Editieren</a>
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="#example_publish_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_publish_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
{% endif %}
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_publish_protocoll">Intern versenden</a>
......@@ -231,11 +231,11 @@
{% endif %}
<a class="btn btn-default" href="#example_internal_protocoll">Editieren</a>
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="#example_internal_protocoll" onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.');">Etherpad</a>
<a class="btn btn-primary" href="#example_internal_protocoll" confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst einigen Tagen.">Etherpad</a>
{% endif %}
<a class="btn btn-default" href="#example_internal_protocoll">Vorlage</a>
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="#example_internal_protocoll" onclick="return confirm('Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.');">Einladung versenden</a>
<a class="btn btn-default" href="#example_internal_protocoll" confirm="Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.">Einladung versenden</a>
{% endif %}
<a class="btn btn-default" href="#example_internal_protocoll">Typ</a>
</div>
......
......@@ -26,13 +26,13 @@
{% endif %}
{% if not protocol.public %}
{% if config.ETHERPAD_ACTIVE %}
<a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id, csrf_token=get_csrf_token())}}"{% if large_time_diff %} onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst {% if time_diff.days != 1 %}in {{time_diff.days}} Tagen{% else %}morgen{% endif %}.');"{% endif %} target="_blank">Etherpad</a>
<a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id, csrf_token=get_csrf_token())}}"{% if large_time_diff %} confirm="Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst {% if time_diff.days != 1 %}in {{time_diff.days}} Tagen{% else %}morgen{% endif %}."{% endif %} target="_blank">Etherpad</a>
{% endif %}
{% endif %}
{% if not protocol.is_done() %}
<a class="btn btn-default" href="{{url_for("get_protocol_template", protocol_id=protocol.id)}}">Vorlage</a>
{% if config.MAIL_ACTIVE %}
<a class="btn btn-default" href="{{url_for("send_protocol_reminder", protocol_id=protocol.id, csrf_token=get_csrf_token())}}" onclick="return confirm('Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.');">Einladung versenden</a>
<a class="btn btn-default" href="{{url_for("send_protocol_reminder", protocol_id=protocol.id, csrf_token=get_csrf_token())}}" confirm="Bist du dir sicher, dass du manuell eine Einladung verschicken willst? Dies wird auch automatisch geschehen.">Einladung versenden</a>
{% endif %}
{% else %}
{% if config.MAIL_ACTIVE %}
......@@ -51,7 +51,7 @@
{% endif %}
{% if has_admin_right %}
<a class="btn btn-default" href="{{url_for("recompile_protocol", protocol_id=protocol.id, csrf_token=get_csrf_token())}}">Neu kompilieren</a>
<a class="btn btn-danger" href="{{url_for("delete_protocol", protocol_id=protocol.id, csrf_token=get_csrf_token())}}" onclick="return confirm('Bist du dir sicher, dass du das Protokoll {{protocol.get_short_identifier()}} löschen möchtest?');">Löschen</a>
<a class="btn btn-danger" href="{{url_for("delete_protocol", protocol_id=protocol.id, csrf_token=get_csrf_token())}}" confirm="Bist du dir sicher, dass du das Protokoll {{protocol.get_short_identifier()}} löschen möchtest?">Löschen</a>
{% endif %}
{% endif %}
</div>
......
......@@ -31,7 +31,7 @@
<a href="{{url_for('edit_top', top_id=top.id)}}">Ändern</a>
<a href="{{url_for('move_top', top_id=top.id, diff=1, csrf_token=get_csrf_token())}}">Runter</a>
<a href="{{url_for('move_top', top_id=top.id, diff=-1, csrf_token=get_csrf_token())}}">Hoch</a>
<a href="{{url_for('delete_top', top_id=top.id, csrf_token=get_csrf_token())}}" onclick="return confirm('Bist du dir sicher, dass du den TOP {{top.name}} löschen möchtest?');">Löschen</a>
<a href="{{url_for('delete_top', top_id=top.id, csrf_token=get_csrf_token())}}" confirm="Bist du dir sicher, dass du den TOP {{top.name}} löschen möchtest?">Löschen</a>
{% endif %}
{% if has_private_view_right and top.description is not none and top.description|length > 0 %}
<span class="glyphicon glyphicon-info-sign"></span>
......
......@@ -26,8 +26,7 @@ class Table:
"href=\"{}\"".format(target)
]
if confirm:
attributes.append(
"onclick=\"return confirm('{}');\"".format(confirm))
attributes.append(f"confirm=\"{confirm}\"")
if css_class:
attributes.append("class=\"{}\"".format(css_class))
return Markup("<a {}>{}</a>".format(" ".join(attributes), text))
......@@ -47,6 +46,7 @@ class Table:
return Table.link(
target=target,
text=Table.glyphicon(icon),
confirm=confirm,
css_class="btn btn-{}".format(style))
@staticmethod
......@@ -149,7 +149,7 @@ class ProtocolsTable(Table):
csrf_token=get_csrf_token()),
icon="trash",
style="danger",
confirm="Bist du dir sicher, dass du das Protokoll {} "
confirm=f"Bist du dir sicher, dass du das Protokoll {protocol.get_title()} "
"löschen möchtest?"))
result.append(Table.button_group(buttons))
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment