From 00a6a48712beecd69177a6f8a8c6039236c5fd32 Mon Sep 17 00:00:00 2001
From: h4-rahman <hamidur2.rahman@live.uwe.ac.uk>
Date: Mon, 25 Mar 2024 18:30:09 +0000
Subject: [PATCH] Added logout redirect url into settings. Successful register
 will now automatically login Combined profile and user token creation into
 one signal.

---
 .../myapp/migrations/0004_usertokencount.py   | 24 +++++++++
 myproject/myapp/models.py                     |  9 +---
 myproject/myapp/signals.py                    |  7 +--
 myproject/myapp/urls.py                       | 11 ++--
 myproject/myapp/views.py                      | 54 +++++--------------
 myproject/myproject/settings.py               |  1 +
 6 files changed, 49 insertions(+), 57 deletions(-)
 create mode 100644 myproject/myapp/migrations/0004_usertokencount.py

diff --git a/myproject/myapp/migrations/0004_usertokencount.py b/myproject/myapp/migrations/0004_usertokencount.py
new file mode 100644
index 0000000..607bae5
--- /dev/null
+++ b/myproject/myapp/migrations/0004_usertokencount.py
@@ -0,0 +1,24 @@
+# Generated by Django 5.0.1 on 2024-03-25 17:46
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('myapp', '0003_profile'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UserTokenCount',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('token_count', models.IntegerField(default=0)),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
diff --git a/myproject/myapp/models.py b/myproject/myapp/models.py
index edc97af..f6d4d5a 100644
--- a/myproject/myapp/models.py
+++ b/myproject/myapp/models.py
@@ -58,14 +58,7 @@ class UserTokenCount(models.Model):
 
     def __str__(self):
         return f'{self.user.username}\'s token count: {self.token_count}'
-    
-# Automatically create a UserTokenCount entry for each user on user creation
-@receiver(post_save, sender=User)
-def create_or_update_user_profile(sender, instance, created, **kwargs):
-    if created:
-        UserTokenCount.objects.get_or_create(user=instance)
-        Profile.objects.get_or_create(user=instance)
-    # instance.profile.save()
+
 
 class Action(Enum):
     UPLOAD_FILE = "The user has successfully uploaded a file."
diff --git a/myproject/myapp/signals.py b/myproject/myapp/signals.py
index e1c9ac6..4e1b841 100644
--- a/myproject/myapp/signals.py
+++ b/myproject/myapp/signals.py
@@ -1,10 +1,11 @@
 from django.db.models.signals import post_save
 from django.contrib.auth.models import User
 from django.dispatch import receiver
-from .models import Profile
+from .models import Profile, UserTokenCount
 
 @receiver(post_save, sender=User)
 def create_or_update_user_profile(sender, instance, created, **kwargs):
     if created:
-        Profile.objects.create(user=instance)
-    instance.profile.save()
+        UserTokenCount.objects.get_or_create(user=instance)
+        Profile.objects.get_or_create(user=instance)
+    instance.profile.save()
\ No newline at end of file
diff --git a/myproject/myapp/urls.py b/myproject/myapp/urls.py
index f7c169c..49240b9 100644
--- a/myproject/myapp/urls.py
+++ b/myproject/myapp/urls.py
@@ -1,5 +1,5 @@
 from django.urls import path
-from .views import InstrumentDetectionView, index, users, maintenance, handler404, handler500, terms_conditions, privacy_policy, handling_music_file, pricing, generate_pdf, admin_table
+from .views import InstrumentDetectionView, index, log_fileupload, users, maintenance, handler404, handler500, terms_conditions, privacy_policy, handling_music_file, pricing, generate_pdf, admin_table
 from .payments import create_payment, execute_payment, payment_cancelled, payment_success
 from django.contrib.auth import views as auth_views
 
@@ -26,11 +26,10 @@ urlpatterns = [
     path('instrument_detection/', InstrumentDetectionView.as_view(), name='instrument_detection'),
     path('password_change/', auth_views.PasswordChangeView.as_view(template_name='password_change_form.html'), name='password_change'),
     path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(template_name='password_change_done.html'), name='password_change_done'),
-    # path('user_logout/', auth_views.LogoutView.as_view(next_page='index'), name='user_logout'),
-    path('payment/create/', create_payment, name='create_payment'),
-    path('payment/execute/', execute_payment, name='execute_payment'),
-    path('payment/cancel/', payment_cancelled, name='payment_cancelled'),
-    path('payment_success/', payment_success, name='success'),
+
+    # Logging
+    path('log_fileupload', log_fileupload, name='log_fileupload'),
+
 
     # Authentication
     path('login/', CustomLoginView.as_view(), name='login'),
diff --git a/myproject/myapp/views.py b/myproject/myapp/views.py
index 3aab0b8..40b209f 100644
--- a/myproject/myapp/views.py
+++ b/myproject/myapp/views.py
@@ -199,54 +199,28 @@ def handler500(request, *args, **kwargs):
 def maintenance(request):
     return render(request, 'maintenance.html')
 
-# def user_login(request):
-#     if request.method == 'POST':
-#         form = LoginForm(request.POST)
-
-#         if form.is_valid():
-#             username = form.cleaned_data.get('username')
-#             password = form.cleaned_data.get('password')
-
-#             user = authenticate(request, username=username, password=password)  # Passing request along with username and password
-
-#             if user:
-#                 login(request, user=user)  # Passing request along with user
-#                 return redirect('users')
-#             else:
-#                 messages.error(request, 'Invalid username or password.')
-#         else:
-#             pass
-
-#     else:
-#         form = LoginForm()
-#     return render(request, 'login.html', {'form': form})
-
-
-# def register(request):
-#     if request.method == 'POST':
-#         form = CustomRegistrationForm(request.POST)
-#         if form.is_valid():
-#             form.save()
-#             return redirect('user_login')
-#     else:
-#         form = CustomRegistrationForm()
-
-#     return render(request, 'register.html', {'form': form})
-
-# def user_logout(request):
-#     logout(request)
-#     return redirect('user_login')
-
 
 # Authentication
 class RegisterView(generic.CreateView):
     form_class = UserRegisterForm
-    success_url = reverse_lazy('login')
+    success_url = reverse_lazy('index')
     template_name = 'registration/register.html'
 
     def form_valid(self, form):
         response = super().form_valid(form)
-        Profile.objects.create(user=self.object, user_type=0)  # Default user type as Basic User
+        user = self.object  # Grab the user instance
+
+        # Ensure the user is active; this line might be redundant if you're sure users are active by default
+        user.is_active = True
+        user.save()
+
+        # Check if the Profile exists, and if not, create it
+        if not Profile.objects.filter(user=user).exists():
+            Profile.objects.create(user=user, user_type=0)  # Default user type as Basic User
+
+        # Log the user in
+        login(self.request, user)
+
         return response
     
 
diff --git a/myproject/myproject/settings.py b/myproject/myproject/settings.py
index 5bb1e55..d1a9799 100644
--- a/myproject/myproject/settings.py
+++ b/myproject/myproject/settings.py
@@ -173,6 +173,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 IMAGE_URL = 'static/src/images/'
 
 LOGIN_REDIRECT_URL = '/'
+LOGOUT_REDIRECT_URL = '/'
 
 
 #PayPal API settings
-- 
GitLab