Files
5ducky/templates/admin_comments.html
kibiandClaude Opus 5.5 d0f2d526df Port 4ducky to Rust (Axum + SQLite)
Same design, layout, URLs and features as the PHP version: browse grid,
image view with AJAX comments, BBCode, likes, uploads (file, URL and
bookmarklet), quicktagger, profile, block list, inbox, invites, Hall of
Ducks, Truhe, abuse reports and the admin tools.

- Parameterized SQL, escaped templates (askama), argon2 passwords,
  server-side sessions, CSRF tokens on every write, strict script CSP
- SSRF-safe remote image fetching, magic-byte upload checks
- Self-hosted captcha replaces reCAPTCHA v1; analytics/social widgets removed
- Vanilla JS replaces jQuery and its plugins with the same DOM behaviour
- Reverse proxy support (frontend_path, trust_proxy, secure_cookies)
- Admin CLI: admin, settings, invites

See README.md for running it and the full list of changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 02:15:05 +02:00

84 lines
2.3 KiB
HTML

{% include "header.html" %}
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" valign="top">
<h2>Newest Comments:</h2>
<div style="width:100%">
{%- for c in comments %}
<div class="comment">
<div class="commentHead">
<img class="avatarSmall" width="16" height="16" src="/{{ c.avatar }}"/>
<a href="/user/{{ c.name_enc }}">{{ c.name }}</a>
at {{ c.date }}
[bild:<a href="/all/view/{{ c.keyword }}">{{ c.keyword }}</a>]
<div style="float:right;" id="del">
<a href="#" data-delcomment="{{ c.id }}">[x]</a>
</div>
</div>
{{ c.content }}
</div>
{%- endfor %}
</div></td>
<td width="50%" valign="top">
{%- if !spammers.is_empty() %}
<h2 style="margin:5px;" >Newest Spammer:</h2>
{%- for u in spammers %}
<div class="userInfo" style="margin:5px;">
<img class="avatar" width="40" height="40" src="/{{ u.avatar }}"/>
<div class="name">
<strong>
<a href="/user/{{ u.name_enc }}">{{ u.name }}</a>
</strong>
</div>
<div class="info">
ID: <strong>{{ u.id }}</strong> /
Images: <strong>{{ u.images }}</strong>
{%- if let Some(w) = u.website %}/
Website: <strong><a href="{{ w }}" target="_blank">
{{ w }}
</a></strong>
{%- endif %}
</div>
<div style="clear:both;"></div>
</div>
{%- endfor %}
{%- else %}
<h2 style="margin:5px;" >No Spammer</h2>
{%- endif %}
{%- if !abuses.is_empty() %}
<h2 style="margin:5px;" >Newest Abuses:</h2>
{%- for a in abuses %}
{%- if let Some(t) = a.thumb %}
<div class="userInfo" style="margin:5px;">
<img style="float:left; margin:2px;" width="64" height="64" src="{{ t }}"/>
<div class="info">
Reason: <strong>{{ a.reason }}</strong> /
Email: <strong>{{ a.email }}</strong>
</div>
<div class="info">
<strong><a href="/all/view/{{ a.keyword }}" > &gt;&gt; Thread</a> </strong>
</div>
<div style="clear:both;"></div>
</div>
{%- else %}
<div class="userInfo" style="padding:5px;">{% if let Some(h) = a.imagelink_href %}<a href="{{ h }}" rel="nofollow noopener">{{ a.imagelink }}</a>{% else %}{{ a.imagelink }}{% endif %}<br>Reason: <strong>{{ a.reason }}</strong> /
Email: <strong>{{ a.email }}</strong></div>
{%- endif %}
{%- endfor %}
{%- else %}
<h2 style="margin:5px;" >No Abuses</h2>
{%- endif %}
</td>
</tr>
</table>
{% include "footer.html" %}