diff --git a/blueprints/forum/routes.py b/blueprints/forum/routes.py index a1a2283..eb59f3d 100644 --- a/blueprints/forum/routes.py +++ b/blueprints/forum/routes.py @@ -149,6 +149,16 @@ def forum_new_topic(): db = SessionLocal() try: + # Duplicate submission protection: same author, same title+content, within 60 seconds + recent_duplicate = db.query(ForumTopic).filter( + ForumTopic.author_id == current_user.id, + ForumTopic.title == title, + ForumTopic.content == content, + ForumTopic.created_at >= datetime.now() - timedelta(seconds=60) + ).first() + if recent_duplicate: + return redirect(url_for('.forum_topic', topic_id=recent_duplicate.id)) + topic = ForumTopic( title=title, content=content, diff --git a/templates/forum/new_topic.html b/templates/forum/new_topic.html index 1f02e6e..1020a95 100755 --- a/templates/forum/new_topic.html +++ b/templates/forum/new_topic.html @@ -383,6 +383,14 @@ if (!valid) { e.preventDefault(); + return; + } + + const submitBtn = this.querySelector('button[type="submit"]'); + if (submitBtn) { + submitBtn.disabled = true; + submitBtn.dataset.originalText = submitBtn.textContent; + submitBtn.textContent = 'Wysyłanie…'; } });