diff --git a/geonode/people/forms.py b/geonode/people/forms/__init__.py similarity index 86% rename from geonode/people/forms.py rename to geonode/people/forms/__init__.py index 9fbdf4ae638..2fa95de7bfb 100644 --- a/geonode/people/forms.py +++ b/geonode/people/forms/__init__.py @@ -24,23 +24,10 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm from django.utils.translation import gettext_lazy as _ -try: - from captcha.fields import ReCaptchaField -except ImportError: - from django_recaptcha.fields import ReCaptchaField - # Ported in from django-registration attrs_dict = {"class": "required"} -class AllauthReCaptchaSignupForm(forms.Form): - captcha = ReCaptchaField(label=False) - - def signup(self, request, user): - """Required, or else it thorws deprecation warnings""" - pass - - class ProfileCreationForm(UserCreationForm): class Meta: model = get_user_model() diff --git a/geonode/people/forms/recaptcha.py b/geonode/people/forms/recaptcha.py new file mode 100644 index 00000000000..c774f93de5b --- /dev/null +++ b/geonode/people/forms/recaptcha.py @@ -0,0 +1,41 @@ +######################################################################### +# +# Copyright (C) 2019 Open Source Geospatial Foundation - all rights reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +from django import forms +from allauth.account.forms import LoginForm + +try: + from captcha.fields import ReCaptchaField +except ImportError: + from django_recaptcha.fields import ReCaptchaField + + +class AllauthReCaptchaSignupForm(forms.Form): + captcha = ReCaptchaField(label=False) + + def signup(self, request, user): + """Required, or else it thorws deprecation warnings""" + pass + + +class AllauthRecaptchaLoginForm(LoginForm): + captcha = ReCaptchaField(label=False) + + def login(self, *args, **kwargs): + return super(AllauthRecaptchaLoginForm, self).login(*args, **kwargs) diff --git a/geonode/people/templates/people/account_login.html b/geonode/people/templates/people/account_login.html new file mode 100644 index 00000000000..b37273684f4 --- /dev/null +++ b/geonode/people/templates/people/account_login.html @@ -0,0 +1,14 @@ +{% extends "account/login.html" %} +{% comment %} Inherited from Django AllAuth default login form {% endcomment %} + +{% block extra_script %} + +{% endblock extra_script %} diff --git a/geonode/people/views.py b/geonode/people/views.py index 3abfae18fcf..a17e142b5bc 100644 --- a/geonode/people/views.py +++ b/geonode/people/views.py @@ -16,7 +16,7 @@ # along with this program. If not, see . # ######################################################################### -from allauth.account.views import SignupView +from allauth.account.views import SignupView, LoginView from django.contrib.auth import get_user_model from django.contrib.auth.decorators import login_required from django.contrib import messages @@ -55,6 +55,10 @@ def get_context_data(self, **kwargs): form.field_order = [f for f in form.fields.keys() if f != "captcha"] + ["captcha"] form.order_fields(form.field_order) return ret + + +class CustomLoginView(LoginView): + template_name = 'people/account_login.html' @login_required diff --git a/geonode/settings.py b/geonode/settings.py index 119844bbe02..40fc95db7c6 100644 --- a/geonode/settings.py +++ b/geonode/settings.py @@ -1401,8 +1401,14 @@ if "django_recaptcha" not in INSTALLED_APPS: INSTALLED_APPS += ("django_recaptcha",) ACCOUNT_SIGNUP_FORM_CLASS = os.getenv( - "ACCOUNT_SIGNUP_FORM_CLASS", "geonode.people.forms.AllauthReCaptchaSignupForm" + "ACCOUNT_SIGNUP_FORM_CLASS", "geonode.people.forms.recaptcha.AllauthReCaptchaSignupForm" ) + + # https://docs.allauth.org/en/dev/account/configuration.html + ACCOUNT_FORMS = dict( + login='geonode.people.forms.recaptcha.AllauthRecaptchaLoginForm' + ) + """ In order to generate reCaptcha keys, please see: - https://pypi.org/project/django-recaptcha/#installation diff --git a/geonode/urls.py b/geonode/urls.py index 99b1e5ebaf9..0138be1f259 100644 --- a/geonode/urls.py +++ b/geonode/urls.py @@ -42,7 +42,7 @@ from geonode.utils import check_ogc_backend from geonode.base import register_url_event from geonode.messaging.urls import urlpatterns as msg_urls -from .people.views import CustomSignupView +from .people.views import CustomSignupView, CustomLoginView from oauth2_provider.urls import app_name as oauth2_app_name, base_urlpatterns, oidc_urlpatterns admin.autodiscover() @@ -92,6 +92,7 @@ re_path(r"^h_keywords_api$", views.h_keywords, name="h_keywords_api"), # Social views re_path(r"^account/signup/", CustomSignupView.as_view(), name="account_signup"), + re_path(r"^account/login/", CustomLoginView.as_view(), name="account_login"), re_path(r"^account/", include("allauth.urls")), re_path(r"^invitations/", include("geonode.invitations.urls", namespace="geonode.invitations")), re_path(r"^people/", include("geonode.people.urls")),