diff --git a/src/apps/profiles/forms.py b/src/apps/profiles/forms.py index 7b4ad71e8..3adb4d8e3 100644 --- a/src/apps/profiles/forms.py +++ b/src/apps/profiles/forms.py @@ -33,3 +33,7 @@ class LoginForm(forms.Form): username = forms.CharField(max_length=150) password = forms.CharField(max_length=150, widget=forms.PasswordInput) + + +class ActivationForm(forms.Form): + email = forms.EmailField(max_length=254, required=True) diff --git a/src/apps/profiles/urls_accounts.py b/src/apps/profiles/urls_accounts.py index 779292962..69f3f54ad 100644 --- a/src/apps/profiles/urls_accounts.py +++ b/src/apps/profiles/urls_accounts.py @@ -7,6 +7,7 @@ urlpatterns = [ url(r'^signup', views.sign_up, name="signup"), + path('resend_activation/', views.resend_activation, name='resend_activation'), path('login/', views.log_in, name='login'), path('logout/', views.LogoutView.as_view(), name='logout'), path('password_reset/', views.CustomPasswordResetView.as_view(), name='password_reset'), diff --git a/src/apps/profiles/views.py b/src/apps/profiles/views.py index a6a21cb64..08c697e85 100644 --- a/src/apps/profiles/views.py +++ b/src/apps/profiles/views.py @@ -19,7 +19,7 @@ from api.serializers.profiles import UserSerializer, OrganizationDetailSerializer, OrganizationEditSerializer, \ UserNotificationSerializer -from .forms import SignUpForm, LoginForm +from .forms import SignUpForm, LoginForm, ActivationForm from .models import User, Organization, Membership from oidc_configurations.models import Auth_Organization from .tokens import account_activation_token @@ -82,8 +82,8 @@ def activate(request, uidb64, token): messages.success(request, f'Your account is fully setup! Please login.') return redirect('accounts:login') else: - messages.error(request, f"Activation link is invalid. Please double check your link.") - return redirect('accounts:signup') + messages.error(request, f"Activation link is invalid or expired. Please double check your link.") + return redirect('accounts:resend_activation') return redirect('pages:home') @@ -135,6 +135,31 @@ def sign_up(request): return render(request, 'registration/signup.html', context) +def resend_activation(request): + context = {} + if request.method == 'POST': + form = ActivationForm(request.POST) + if form.is_valid(): + + email = form.cleaned_data.get('email') + user = User.objects.filter(email=email).first() + + if user and not user.is_active: + activateEmail(request, user, email) + return redirect('pages:home') + else: + if not user: + messages.error(request, "No account found with this email.") + elif user.is_active: + messages.error(request, "This account is already active.") + else: + context['form'] = form + + if not context.get('form'): + context['form'] = ActivationForm() + return render(request, 'registration/resend_activation.html', context) + + def log_in(request): # Fectch next redirect page after login @@ -173,7 +198,7 @@ def log_in(request): else: return redirect(next) else: - messages.error(request, "Account is not active. Activate your account using the link sent to you by email.") + context['activation_error'] = "Your account is not activated. Please check your email for the activation link" else: messages.error(request, "Wrong Credentials!") else: diff --git a/src/templates/registration/login.html b/src/templates/registration/login.html index b2c29a8d1..efdc519df 100644 --- a/src/templates/registration/login.html +++ b/src/templates/registration/login.html @@ -7,6 +7,11 @@

Login

+ {% if activation_error %} +
+ {{ activation_error }} or click here to send the activation email again +
+ {% endif %}
{% csrf_token %} diff --git a/src/templates/registration/resend_activation.html b/src/templates/registration/resend_activation.html new file mode 100644 index 000000000..9b17edb1c --- /dev/null +++ b/src/templates/registration/resend_activation.html @@ -0,0 +1,33 @@ +{% extends 'base.html' %} +{% load static %} + +{% block content %} +
+

+ Resend Activation +

+
+
Activation link expired?
+

Enter your email in the form below and we'll send you a new activation link for your account.

+
+ + {% csrf_token %} + +
+
+ + +
+
+ + +
+ +
+{% endblock %} \ No newline at end of file