From b9ed6eb0750dd30cf431670481bf6ff8cd86ad83 Mon Sep 17 00:00:00 2001 From: "ashwin.sp" Date: Mon, 11 Sep 2023 21:10:09 -0500 Subject: [PATCH 1/3] Override default authentication_error method and fixed the url prefix --- .pre-commit-config.yaml | 2 +- Dockerfile | 2 +- oauth2/adapter.py | 62 ++++++++++++++++++++++++++++------------- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8852cb598..496e55726 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ default_language_version: - python: python3.8 + python: python3.11 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 diff --git a/Dockerfile b/Dockerfile index 509fd580b..3ea243ca7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ RUN npm rebuild node-sass COPY . /code/ # Url prefix to generate links on the back-end -ENV PROTOCOL_DOMAIN "http://127.0.0.1:8000" +ENV PROTOCOL_DOMAIN "http://0.0.0.0:8000" #Contact Us email address, used for Contact Form ENV CONTACT_EMAIL "hello@democracylab.org" diff --git a/oauth2/adapter.py b/oauth2/adapter.py index 812272af0..e15799df6 100644 --- a/oauth2/adapter.py +++ b/oauth2/adapter.py @@ -16,6 +16,10 @@ from django.utils import timezone import simplejson as json +from django.urls import reverse +from allauth.exceptions import ImmediateHttpResponse +from django.http import HttpResponseRedirect + class MissingOAuthFieldError(ReportableError): """Exception raised when required fields are not returned from OAuth @@ -26,25 +30,42 @@ class MissingOAuthFieldError(ReportableError): """ def __init__(self, message, provider, missing_fields): - super().__init__(message, {'provider': provider, 'missing_fields': missing_fields}) + super().__init__( + message, {"provider": provider, "missing_fields": missing_fields} + ) + class MyAccountAdapter(DefaultAccountAdapter): def get_login_redirect_url(self, request): - if 'prev_page' in request.session: - prev_page = request.session['prev_page'] - prev_page_args = request.session['prev_page_args'] - del request.session['prev_page'] - del request.session['prev_page_args'] - redirect_url = '/' if prev_page.strip('/') == '' else section_url(prev_page, prev_page_args) + if "prev_page" in request.session: + prev_page = request.session["prev_page"] + prev_page_args = request.session["prev_page_args"] + del request.session["prev_page"] + del request.session["prev_page_args"] + redirect_url = ( + "/" + if prev_page.strip("/") == "" + else section_url(prev_page, prev_page_args) + ) else: redirect_url = section_url(FrontEndSection.Home) return redirect_url + class SocialAccountAdapter(DefaultSocialAccountAdapter): + def authentication_error( + self, request, provider_id, error=None, exception=None, extra_context=None + ): + print("Reached error properly !!!") + raise ImmediateHttpResponse(HttpResponseRedirect(reverse("login_view"))) def new_user(self, request, sociallogin): - email = sociallogin.account.get_provider().extract_common_fields( - sociallogin.account.extra_data).get('email').lower() + email = ( + sociallogin.account.get_provider() + .extract_common_fields(sociallogin.account.extra_data) + .get("email") + .lower() + ) assert email # This account may actually belong to an existing user user = User.objects.filter(username=email).first() @@ -66,20 +87,19 @@ def pre_social_login(self, request, sociallogin): """ # standardizing fields across different providers provider = sociallogin.account.get_provider() - data = provider.extract_common_fields( - sociallogin.account.extra_data) + data = provider.extract_common_fields(sociallogin.account.extra_data) - full_name = data.get('name') - first_name = data.get('first_name') - last_name = data.get('last_name') + full_name = data.get("name") + first_name = data.get("first_name") + last_name = data.get("last_name") if full_name or (first_name and last_name): sociallogin.user.first_name = first_name or full_name.split()[0] - sociallogin.user.last_name = last_name or ' '.join(full_name.split()[1:]) + sociallogin.user.last_name = last_name or " ".join(full_name.split()[1:]) # Set username to lowercase email sociallogin.user.username = sociallogin.user.email.lower() - password = sociallogin.account.extra_data.get('password') + password = sociallogin.account.extra_data.get("password") if password: sociallogin.user.password = password @@ -94,7 +114,11 @@ def pre_social_login(self, request, sociallogin): def set_avatar_at_login(sender, sociallogin, **kwargs): owner = sociallogin.user.contributor user_avatar_url = sociallogin.account.get_provider().get_avatar_url(sociallogin) - + if user_avatar_url: - file_json = copy_external_thumbnail_to_s3(user_avatar_url, sociallogin.account.provider, owner) - ProjectFile.replace_single_file(owner, FileCategory(file_json['file_category']), file_json) + file_json = copy_external_thumbnail_to_s3( + user_avatar_url, sociallogin.account.provider, owner + ) + ProjectFile.replace_single_file( + owner, FileCategory(file_json["file_category"]), file_json + ) From bdde650bf375b338375c037c674eb95f9a913215 Mon Sep 17 00:00:00 2001 From: "ashwin.sp" Date: Mon, 11 Sep 2023 21:10:09 -0500 Subject: [PATCH 2/3] Override default authentication_error method and fixed the url prefix --- .pre-commit-config.yaml | 2 +- Dockerfile | 2 +- oauth2/adapter.py | 62 ++++++++++++++++++++++++++++------------- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8852cb598..496e55726 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ default_language_version: - python: python3.8 + python: python3.11 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 diff --git a/Dockerfile b/Dockerfile index 509fd580b..3ea243ca7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ RUN npm rebuild node-sass COPY . /code/ # Url prefix to generate links on the back-end -ENV PROTOCOL_DOMAIN "http://127.0.0.1:8000" +ENV PROTOCOL_DOMAIN "http://0.0.0.0:8000" #Contact Us email address, used for Contact Form ENV CONTACT_EMAIL "hello@democracylab.org" diff --git a/oauth2/adapter.py b/oauth2/adapter.py index 812272af0..e15799df6 100644 --- a/oauth2/adapter.py +++ b/oauth2/adapter.py @@ -16,6 +16,10 @@ from django.utils import timezone import simplejson as json +from django.urls import reverse +from allauth.exceptions import ImmediateHttpResponse +from django.http import HttpResponseRedirect + class MissingOAuthFieldError(ReportableError): """Exception raised when required fields are not returned from OAuth @@ -26,25 +30,42 @@ class MissingOAuthFieldError(ReportableError): """ def __init__(self, message, provider, missing_fields): - super().__init__(message, {'provider': provider, 'missing_fields': missing_fields}) + super().__init__( + message, {"provider": provider, "missing_fields": missing_fields} + ) + class MyAccountAdapter(DefaultAccountAdapter): def get_login_redirect_url(self, request): - if 'prev_page' in request.session: - prev_page = request.session['prev_page'] - prev_page_args = request.session['prev_page_args'] - del request.session['prev_page'] - del request.session['prev_page_args'] - redirect_url = '/' if prev_page.strip('/') == '' else section_url(prev_page, prev_page_args) + if "prev_page" in request.session: + prev_page = request.session["prev_page"] + prev_page_args = request.session["prev_page_args"] + del request.session["prev_page"] + del request.session["prev_page_args"] + redirect_url = ( + "/" + if prev_page.strip("/") == "" + else section_url(prev_page, prev_page_args) + ) else: redirect_url = section_url(FrontEndSection.Home) return redirect_url + class SocialAccountAdapter(DefaultSocialAccountAdapter): + def authentication_error( + self, request, provider_id, error=None, exception=None, extra_context=None + ): + print("Reached error properly !!!") + raise ImmediateHttpResponse(HttpResponseRedirect(reverse("login_view"))) def new_user(self, request, sociallogin): - email = sociallogin.account.get_provider().extract_common_fields( - sociallogin.account.extra_data).get('email').lower() + email = ( + sociallogin.account.get_provider() + .extract_common_fields(sociallogin.account.extra_data) + .get("email") + .lower() + ) assert email # This account may actually belong to an existing user user = User.objects.filter(username=email).first() @@ -66,20 +87,19 @@ def pre_social_login(self, request, sociallogin): """ # standardizing fields across different providers provider = sociallogin.account.get_provider() - data = provider.extract_common_fields( - sociallogin.account.extra_data) + data = provider.extract_common_fields(sociallogin.account.extra_data) - full_name = data.get('name') - first_name = data.get('first_name') - last_name = data.get('last_name') + full_name = data.get("name") + first_name = data.get("first_name") + last_name = data.get("last_name") if full_name or (first_name and last_name): sociallogin.user.first_name = first_name or full_name.split()[0] - sociallogin.user.last_name = last_name or ' '.join(full_name.split()[1:]) + sociallogin.user.last_name = last_name or " ".join(full_name.split()[1:]) # Set username to lowercase email sociallogin.user.username = sociallogin.user.email.lower() - password = sociallogin.account.extra_data.get('password') + password = sociallogin.account.extra_data.get("password") if password: sociallogin.user.password = password @@ -94,7 +114,11 @@ def pre_social_login(self, request, sociallogin): def set_avatar_at_login(sender, sociallogin, **kwargs): owner = sociallogin.user.contributor user_avatar_url = sociallogin.account.get_provider().get_avatar_url(sociallogin) - + if user_avatar_url: - file_json = copy_external_thumbnail_to_s3(user_avatar_url, sociallogin.account.provider, owner) - ProjectFile.replace_single_file(owner, FileCategory(file_json['file_category']), file_json) + file_json = copy_external_thumbnail_to_s3( + user_avatar_url, sociallogin.account.provider, owner + ) + ProjectFile.replace_single_file( + owner, FileCategory(file_json["file_category"]), file_json + ) From 78af03dea5622622f2832971e3ca635468890d85 Mon Sep 17 00:00:00 2001 From: "ashwin.sp" Date: Thu, 4 Apr 2024 12:59:16 -0400 Subject: [PATCH 3/3] Reversed not needed changes --- .pre-commit-config.yaml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 496e55726..8852cb598 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ default_language_version: - python: python3.11 + python: python3.8 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 diff --git a/Dockerfile b/Dockerfile index 3ea243ca7..509fd580b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ RUN npm rebuild node-sass COPY . /code/ # Url prefix to generate links on the back-end -ENV PROTOCOL_DOMAIN "http://0.0.0.0:8000" +ENV PROTOCOL_DOMAIN "http://127.0.0.1:8000" #Contact Us email address, used for Contact Form ENV CONTACT_EMAIL "hello@democracylab.org"