minor update
This commit is contained in:
Binary file not shown.
Binary file not shown.
+11
-3
@@ -27,23 +27,31 @@ class User(AbstractUser):
|
|||||||
related_name='core_user_permissions',
|
related_name='core_user_permissions',
|
||||||
related_query_name='core_user',
|
related_query_name='core_user',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Ban-related fields
|
||||||
is_banned = models.BooleanField(default=False)
|
is_banned = models.BooleanField(default=False)
|
||||||
banned_until = models.DateTimeField(null=True, blank=True)
|
banned_until = models.DateTimeField(null=True, blank=True)
|
||||||
|
|
||||||
def ban(self, days=1):
|
def ban(self, days=7):
|
||||||
"""Ban user for given days (default 7 days)."""
|
"""Ban user for given number of days (default = 7)."""
|
||||||
self.is_banned = True
|
self.is_banned = True
|
||||||
self.banned_until = timezone.now() + timedelta(days=days)
|
self.banned_until = timezone.now() + timedelta(days=days)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def unban(self):
|
def unban(self):
|
||||||
|
"""Unban user immediately."""
|
||||||
self.is_banned = False
|
self.is_banned = False
|
||||||
self.banned_until = None
|
self.banned_until = None
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def is_currently_banned(self):
|
def is_currently_banned(self):
|
||||||
|
"""Check if user is still banned (auto-unban if expired)."""
|
||||||
if self.is_banned and self.banned_until:
|
if self.is_banned and self.banned_until:
|
||||||
return timezone.now() < self.banned_until
|
if timezone.now() >= self.banned_until:
|
||||||
|
# Auto unban if ban expired
|
||||||
|
self.unban()
|
||||||
|
return False
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
class Department(models.Model):
|
class Department(models.Model):
|
||||||
|
|||||||
+16
-3
@@ -6,6 +6,7 @@ from django.db import IntegrityError
|
|||||||
from django.db.models import Exists, OuterRef
|
from django.db.models import Exists, OuterRef
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import render, redirect, get_object_or_404
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
|
from django.utils import timezone
|
||||||
from django.views.decorators.http import require_POST
|
from django.views.decorators.http import require_POST
|
||||||
from .models import Issue, User, Vote, Comment, Department
|
from .models import Issue, User, Vote, Comment, Department
|
||||||
from .forms import CitizenRegistrationForm, IssueForm, CommentForm
|
from .forms import CitizenRegistrationForm, IssueForm, CommentForm
|
||||||
@@ -117,7 +118,18 @@ def custom_login(request):
|
|||||||
username = form.cleaned_data.get('username')
|
username = form.cleaned_data.get('username')
|
||||||
password = form.cleaned_data.get('password')
|
password = form.cleaned_data.get('password')
|
||||||
user = authenticate(username=username, password=password)
|
user = authenticate(username=username, password=password)
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
|
# 🔹 Auto unban check
|
||||||
|
if hasattr(user, "is_currently_banned") and user.is_currently_banned():
|
||||||
|
days_left = (user.banned_until - timezone.now()).days
|
||||||
|
messages.error(
|
||||||
|
request,
|
||||||
|
f"🚫 Your account is banned for {days_left} more days for reporting a fake issue."
|
||||||
|
)
|
||||||
|
return redirect('login')
|
||||||
|
|
||||||
|
# Normal login
|
||||||
login(request, user)
|
login(request, user)
|
||||||
messages.success(request, f'Welcome back, {username}!')
|
messages.success(request, f'Welcome back, {username}!')
|
||||||
return redirect('home')
|
return redirect('home')
|
||||||
@@ -127,6 +139,7 @@ def custom_login(request):
|
|||||||
messages.error(request, 'Invalid username or password.')
|
messages.error(request, 'Invalid username or password.')
|
||||||
else:
|
else:
|
||||||
form = AuthenticationForm()
|
form = AuthenticationForm()
|
||||||
|
|
||||||
return render(request, 'core/login.html', {'form': form})
|
return render(request, 'core/login.html', {'form': form})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -314,15 +327,15 @@ def unban_user(request, user_id):
|
|||||||
messages.success(request, f"{citizen.username} has been unbanned.")
|
messages.success(request, f"{citizen.username} has been unbanned.")
|
||||||
return redirect('manage_users')
|
return redirect('manage_users')
|
||||||
|
|
||||||
# core/views.py
|
|
||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(superadmin_check)
|
@user_passes_test(superadmin_check)
|
||||||
def delete_fake_issue(request, issue_id):
|
def delete_fake_issue(request, issue_id):
|
||||||
issue = get_object_or_404(Issue, id=issue_id)
|
issue = get_object_or_404(Issue, id=issue_id)
|
||||||
reporter = issue.reporter
|
reporter = issue.reporter
|
||||||
|
reporter.ban(7)
|
||||||
issue.delete()
|
issue.delete()
|
||||||
messages.error(request, f"Issue by {reporter.username} was reported fake and deleted.")
|
messages.success(request, f"✅ Issue deleted and user {reporter.username} has been banned for 7 days.")
|
||||||
return redirect('manage_issues')
|
return redirect("manage_issues")
|
||||||
|
|
||||||
|
|
||||||
def resolver_check(user):
|
def resolver_check(user):
|
||||||
|
|||||||
Reference in New Issue
Block a user