fix the signup

This commit is contained in:
ismail 2025-06-29 10:11:56 +03:00
parent 1e7ed1f88d
commit 473d7e1990
4 changed files with 67 additions and 83 deletions

View File

@ -10,38 +10,38 @@ from inventory.utils import get_user_type
logger = logging.getLogger("user_activity") logger = logging.getLogger("user_activity")
class LogUserActivityMiddleware: # class LogUserActivityMiddleware:
""" # """
Middleware for logging user activity. # Middleware for logging user activity.
This middleware logs the activity of authenticated users each time they make a # This middleware logs the activity of authenticated users each time they make a
request. It creates an entry in the UserActivityLog model capturing the user's # request. It creates an entry in the UserActivityLog model capturing the user's
ID, the action performed, and the timestamp. It is intended to assist in # ID, the action performed, and the timestamp. It is intended to assist in
tracking user actions across the application for analytics or auditing purposes. # tracking user actions across the application for analytics or auditing purposes.
:ivar get_response: The next middleware or view in the WSGI request-response # :ivar get_response: The next middleware or view in the WSGI request-response
chain. # chain.
:type get_response: Callable # :type get_response: Callable
""" # """
def __init__(self, get_response): # def __init__(self, get_response):
self.get_response = get_response # self.get_response = get_response
def __call__(self, request): # def __call__(self, request):
response = self.get_response(request) # response = self.get_response(request)
if request.user.is_authenticated: # if request.user.is_authenticated:
action = f"{request.method} {request.path}" # action = f"{request.method} {request.path}"
models.UserActivityLog.objects.create( # models.UserActivityLog.objects.create(
user=request.user, action=action, timestamp=timezone.now() # user=request.user, action=action, timestamp=timezone.now()
) # )
return response # return response
def get_client_ip(self, request): # def get_client_ip(self, request):
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR") # x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for: # if x_forwarded_for:
return x_forwarded_for.split(",")[0] # return x_forwarded_for.split(",")[0]
return request.META.get("REMOTE_ADDR") # return request.META.get("REMOTE_ADDR")
class InjectParamsMiddleware: class InjectParamsMiddleware:
@ -93,12 +93,13 @@ class InjectDealerMiddleware:
def __call__(self, request): def __call__(self, request):
try: try:
request.is_dealer = False if request.user.is_authenticated:
request.is_staff = False request.is_dealer = False
if hasattr(request.user, "dealer"): request.is_staff = False
request.is_dealer = True if hasattr(request.user, "dealer"):
elif hasattr(request.user, "staffmember"): request.is_dealer = True
request.is_staff = True elif hasattr(request.user, "staffmember"):
request.is_staff = True
except Exception: except Exception:
pass pass
response = self.get_response(request) response = self.get_response(request)
@ -120,14 +121,27 @@ class DealerSlugMiddleware:
def __call__(self, request): def __call__(self, request):
response = self.get_response(request) response = self.get_response(request)
return response return response
def process_view(self, request, view_func, view_args, view_kwargs): def process_view(self, request, view_func, view_args, view_kwargs):
if request.path_info.startswith('/en/signup/') or \
request.path_info.startswith('/en/login/') or \
request.path_info.startswith('/en/logout/') or \
request.path_info.startswith('/en/ledger/') or \
request.path_info.startswith('/ar/ledger/'):
return None
if not request.user.is_authenticated: if not request.user.is_authenticated:
return None return None
if request.path.startswith('/en/ledger/') or request.path.startswith('/ar/ledger/'):
dealer_slug = view_kwargs.get("dealer_slug")
if not dealer_slug:
return None return None
if not view_kwargs.get("dealer_slug"):
if not hasattr(request, 'dealer') or not request.dealer:
logger.warning("No dealer associated with request")
return None return None
dealer = get_user_type(request)
if view_kwargs["dealer_slug"] != dealer.slug: if dealer_slug.lower() != request.dealer.slug.lower():
logger.warning(f"Dealer slug mismatch: {dealer_slug} != {request.dealer.slug}")
raise Http404("Dealer slug mismatch") raise Http404("Dealer slug mismatch")
return None

View File

@ -8,44 +8,13 @@ from django.conf.urls import handler403, handler400, handler404, handler500
urlpatterns = [ urlpatterns = [
# main URLs # main URLs
path("", views.WelcomeView, name="welcome"),
path("signup/", views.dealer_signup, name="account_signup"),
path("", views.HomeView.as_view(), name="home"), path("", views.HomeView.as_view(), name="home"),
path("<slug:dealer_slug>/", views.HomeView.as_view(), name="home"), path("<slug:dealer_slug>/", views.HomeView.as_view(), name="home"),
path("welcome/", views.WelcomeView.as_view(), name="welcome"),
# Accounts URLs
# path("login/", allauth_views.LoginView.as_view(template_name="account/login.html"), name="account_login"),
# path(
# "logout/",
# allauth_views.LogoutView.as_view(template_name="account/logout.html"),
# name="account_logout",
# ),
# path('signup/', allauth_views.SignupView.as_view(template_name='account/signup.html'), name='account_signup'),
path("signup/", views.dealer_signup, name="account_signup"),
# path("otp", views.OTPView.as_view(), name="otp"),
# path(
# "password/change/", allauth_views.PasswordChangeView.as_view(template_name="account/password_change.html"), name="account_change_password",
# ),
# path(
# "password/reset/",
# allauth_views.PasswordResetView.as_view(
# template_name="account/password_reset.html"
# ),
# name="account_reset_password",
# ),
# path(
# "accounts/password/reset/done/",
# allauth_views.PasswordResetDoneView.as_view(
# template_name="account/password_reset_done.html"
# ),
# name="account_password_reset_done",
# ),
# path(
# "accounts/login/code/",
# allauth_views.RequestLoginCodeView.as_view(
# template_name="account/request_login_code.html"
# ),
# ),
# Tasks # Tasks
path("tasks/", views.task_list, name="task_list"), path("<slug:dealer_slug>/tasks/", views.task_list, name="task_list"),
path("legal/", views.terms_and_privacy, name="terms_and_privacy"), path("legal/", views.terms_and_privacy, name="terms_and_privacy"),
# path('tasks/<int:task_id>/detail/', views.task_detail, name='task_detail'), # path('tasks/<int:task_id>/detail/', views.task_detail, name='task_detail'),
# Dashboards # Dashboards

View File

@ -268,8 +268,10 @@ def switch_language(request):
logger.warning(f"Invalid language code: {language}") logger.warning(f"Invalid language code: {language}")
return redirect("/") return redirect("/")
def testview(request):
return HttpResponse("test")
def dealer_signup(request, *args, **kwargs): def dealer_signup(request):
""" """
Handles the dealer signup wizard process, including forms validation, user and group Handles the dealer signup wizard process, including forms validation, user and group
creation, permissions assignment, and dealer data storage. This view supports GET creation, permissions assignment, and dealer data storage. This view supports GET
@ -557,7 +559,7 @@ def terms_and_privacy(request):
return render(request, "terms_and_privacy.html") return render(request, "terms_and_privacy.html")
class WelcomeView(TemplateView): def WelcomeView(request):
""" """
Handles the rendering and context data for the Welcome view. Handles the rendering and context data for the Welcome view.
@ -569,14 +571,11 @@ class WelcomeView(TemplateView):
:ivar template_name: Path to the template used by the view. :ivar template_name: Path to the template used by the view.
:type template_name: str :type template_name: str
""" """
if request.user.is_authenticated:
template_name = "welcome.html" return redirect("home", dealer_slug=request.dealer.slug)
plan_list = Plan.objects.all()
def get_context_data(self, **kwargs): context = {"plan_list": plan_list}
context = super().get_context_data(**kwargs) return render(request, "welcome.html", context)
plan_list = Plan.objects.all()
context["plan_list"] = plan_list
return context
class CarCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView): class CarCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):

View File

@ -60,7 +60,9 @@
{% include "toast-alert.html" %} {% include "toast-alert.html" %}
<main class="main" id="top"> <main class="main" id="top">
{% include 'header.html' %} {% if request.user.is_authenticated %}
{% include 'header.html' %}
{% endif %}
<div class="content"> <div class="content">