diff --git a/Website/skoolos/settings.py b/Website/skoolos/settings.py index c312991..4912bfc 100644 --- a/Website/skoolos/settings.py +++ b/Website/skoolos/settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = [ 'rest_framework', 'api', 'crispy_forms', + 'django_forms_bootstrap', ] diff --git a/Website/skoolos/urls.py b/Website/skoolos/urls.py index 6a5d5ac..0d2bd2a 100644 --- a/Website/skoolos/urls.py +++ b/Website/skoolos/urls.py @@ -14,6 +14,9 @@ router.register(r'classes', api_views.ClassesViewSet) # router.register(r'files', api_views.DefFilesViewSet) router.register(r'users', api_views.UserViewSet) +from users import views as user_views +from users.forms import LoginForm + # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. urlpatterns = [ @@ -21,7 +24,7 @@ urlpatterns = [ path('api/', include(router.urls)), path('api-auth/', include('rest_framework.urls')), path('admin/', admin.site.urls), - path('login/', auth_views.LoginView.as_view(template_name="users/login.html"), name='login'), + path('login/', auth_views.LoginView.as_view(template_name='users/login.html', authentication_form=LoginForm), name='login'), path('register/', user_views.register, name='register'), path('create_account/', user_views.create_account, name='create_account'), path('callback/', user_views.callback, name='callback'), diff --git a/Website/users/forms.py b/Website/users/forms.py index 956b95d..ffcaa81 100644 --- a/Website/users/forms.py +++ b/Website/users/forms.py @@ -1,19 +1,37 @@ from django import forms from django.contrib.auth.models import User +from django.contrib.auth.forms import AuthenticationForm +from django.db.models import Q + + +class LoginForm(AuthenticationForm): + username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'})) + password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Password'})) class UserCreationForm(forms.ModelForm): - username = forms.CharField(disabled=True) - email = forms.EmailField(disabled=True) - first_name = forms.CharField(disabled=True) - last_name = forms.CharField(disabled=True) - password = forms.PasswordInput() - confirm_password = forms.PasswordInput() - + username = forms.CharField() + email = forms.EmailField() + first_name = forms.CharField() + last_name = forms.CharField() + isStudent = forms.BooleanField(widget = forms.HiddenInput()) + password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'})) + confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password'})) + token = forms.CharField(widget = forms.HiddenInput()) def __init__(self, *args, **kwargs): super(UserCreationForm, self).__init__(*args, **kwargs) + def clean(self): + cleaned_data = super(UserCreationForm, self).clean() + password = cleaned_data.get("password") + confirm_password = cleaned_data.get("confirm_password") + + if password != confirm_password: + raise forms.ValidationError("Passwords do not match!") + + return cleaned_data + class Meta: model = User - fields = ['username', 'email', 'first_name', 'password', 'confirm_password'] + fields = ('username', 'email', 'first_name', 'last_name', 'password') diff --git a/Website/users/models.py b/Website/users/models.py index bed1e0f..29b216c 100644 --- a/Website/users/models.py +++ b/Website/users/models.py @@ -18,4 +18,4 @@ class Token(models.Model): return super(Token, self).save(*args, **kwargs) def __str__(self): - return f"{self.username}'s Token"; + return self.token; diff --git a/Website/users/templates/users/create_account.html b/Website/users/templates/users/create_account.html new file mode 100644 index 0000000..f3f814d --- /dev/null +++ b/Website/users/templates/users/create_account.html @@ -0,0 +1,22 @@ +{% extends "users/base.html" %} +{% load bootstrap_tags %} + +{% block content %} +
+
+ +
+
+{% endblock %} diff --git a/Website/users/templates/users/create_password.html b/Website/users/templates/users/create_password.html deleted file mode 100644 index 6018ee3..0000000 --- a/Website/users/templates/users/create_password.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "users/base.html" %} -{% block content %} -
-
-
- - - - -
-
-
-{% endblock %} diff --git a/Website/users/templates/users/login.html b/Website/users/templates/users/login.html index 40837e2..efde965 100644 --- a/Website/users/templates/users/login.html +++ b/Website/users/templates/users/login.html @@ -1,16 +1,23 @@ {% extends "users/base.html" %} -{% load crispy_forms_tags %} +{% load bootstrap_tags %} {% block content %}
- {% endblock %} diff --git a/Website/users/views.py b/Website/users/views.py index c8bf1af..b14099f 100644 --- a/Website/users/views.py +++ b/Website/users/views.py @@ -7,6 +7,7 @@ from requests_oauthlib import OAuth2Session from django.contrib import messages from .models import Token +from .forms import UserCreationForm from django.contrib.auth import authenticate from django.contrib.auth import login as auth_login @@ -53,7 +54,7 @@ def callback (request): if User.objects.filter(username=username).count() != 0: messages.success(request, "This user already exists!") - return redirect('register') + return redirect('/login/') else: token = Token(username = username, email = email, first_name = first_name, last_name = last_name, isStudent = isStudent) token.save() @@ -63,18 +64,57 @@ def callback (request): messages.warning(request, "Invalid Callback Response") - return redirect('register') + return redirect('/login/') def create_account (request): + if request.method == "POST": + print("POSTPOSTPOSTPOSTPOSTPOSTPOSTPOST") + form = UserCreationForm(request.POST) + print(form.is_valid()) + print(request.POST) + if form.is_valid(): + cleaned_data = form.cleaned_data + token = Token.objects.get(token=cleaned_data.get('token')) + username = token.username + email = token.email + first_name = token.first_name + last_name = token.last_name + isStudent = token.isStudent + password = cleaned_data.get('password') + + user = User.objects.create_user(username=username, + email=email, + first_name=first_name, + last_name=last_name, + password=password) + user.save() + token.delete() + print (user) + return redirect(f'/login/?username={username}') + else: + print(form.errors) + Token.objects.get(token=request.GET.get('token')).delete() + return redirect('/register/?error=password') + if request.method == "GET" and Token.objects.filter(token=request.GET.get('token')).count() == 1: + print("GETGETGETGETGETGET") token = Token.objects.get(token=request.GET.get('token')) + tokenHash = request.GET.get('token') username = token.username email = token.email first_name = token.first_name last_name = token.last_name isStudent = token.isStudent + initial = { + 'username': username, + 'email': email, + 'first_name': first_name, + 'last_name': last_name, + 'isStudent': isStudent, + 'token': token, + } + form = UserCreationForm(initial=initial) + return render(request, 'users/create_account.html', {'form': form}) - - else: - return redirect('/register/') + return redirect('/login/')