SIGN UP, IT'S EASY AND FREE
diff --git a/common/components/controllers/SignedUpController.jsx b/common/components/controllers/SignedUpController.jsx
index ff756beb2..d703940bc 100644
--- a/common/components/controllers/SignedUpController.jsx
+++ b/common/components/controllers/SignedUpController.jsx
@@ -3,7 +3,6 @@
import React from "react";
import CurrentUser from "../utils/CurrentUser.js";
import cdn, { Images } from "../utils/cdn.js";
-import Headers from "../common/Headers.jsx";
class SignedUpController extends React.Component<{||}> {
constructor(): void {
diff --git a/common/components/controllers/ThankYouController.jsx b/common/components/controllers/ThankYouController.jsx
index c2de22416..58824b6b4 100644
--- a/common/components/controllers/ThankYouController.jsx
+++ b/common/components/controllers/ThankYouController.jsx
@@ -2,7 +2,6 @@
import React from "react";
import cdn, { Images } from "../utils/cdn.js";
-import Headers from "../common/Headers.jsx";
class ThankYouController extends React.Component<{||}> {
constructor(): void {
diff --git a/democracylab/settings.py b/democracylab/settings.py
index 5ba9c8b74..5585bcb82 100644
--- a/democracylab/settings.py
+++ b/democracylab/settings.py
@@ -402,7 +402,7 @@ def read_connection_config(config):
"*.doubleclick.net",
"*.newrelic.com",
"*.nr-data.net",
- "*.hotjar.com",
+ "https://*.hotjar.com",
)
CSP_CONNECT_SRC = (
"'self'",
@@ -412,7 +412,9 @@ def read_connection_config(config):
"*.google-analytics.com",
"*.nr-data.net",
"*.hereapi.com",
- "*.hotjar.com",
+ "https://*.hotjar.com",
+ "https://*.hotjar.io",
+ "wss://*.hotjar.com",
)
CSP_FONT_SRC = (
"'self'",
diff --git a/democracylab_environment_variables.sh b/democracylab_environment_variables.sh
index d04088839..07c6df5ac 100755
--- a/democracylab_environment_variables.sh
+++ b/democracylab_environment_variables.sh
@@ -8,9 +8,6 @@ exit 1
#export AWS_SECRET_ACCESS_KEY=ASK
#export S3_BUCKET=ASK
-# Password for account used to send email
-export EMAIL_HOST_PASSWORD=betterDemocracyViaTechnology
-
# Url prefix to generate links on the back-end
export PROTOCOL_DOMAIN=http://127.0.0.1:8000
@@ -69,7 +66,6 @@ export VOLUNTEER_RENEW_REMINDER_PERIODS='[7,7,-1]'
# export MAILCHIMP_SUBSCRIBE_LIST_ID=SECRET
export S3_BUCKET=democracylab-marlok
-export EMAIL_HOST_PASSWORD=betterDemocracyViaTechnology
# ONLY FOR USE IN PRODUCTION
#export HOTJAR_APPLICATION_ID=1097784
diff --git a/example.env b/example.env
index 2552314c8..7a094fe0e 100644
--- a/example.env
+++ b/example.env
@@ -12,7 +12,6 @@ GOOGLE_RECAPTCHA_SECRET_KEY=change_me_asap
GOOGLE_RECAPTCHA_SITE_KEY=change_me_asap
### Email Configs ###
-EMAIL_HOST_PASSWORD=change_me_asap
ADMIN_EMAIL=change_me_asap
### PayPal Configs ###
@@ -21,4 +20,4 @@ PAYPAL_PAYEE=paypal_email_address_here
### Misc Project Configs ###
DJANGO_SECRET_KEY=change_me_asap
-STATIC_CDN_URL=https://d1agxr2dqkgkuy.cloudfront.net
\ No newline at end of file
+STATIC_CDN_URL=https://d1agxr2dqkgkuy.cloudfront.net
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
+ )
diff --git a/package.json b/package.json
index 3cb6055a6..67c8e8169 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,6 @@
"react-dom": "^16.11.0",
"react-file-drop": "^0.2.8",
"react-google-recaptcha": "^1.1.0",
- "react-helmet": "^5.2.0",
"react-image-crop": "^8.3.0",
"react-markdown": "^7.0.1",
"react-moment": "^0.7.9",
@@ -104,7 +103,9 @@
"async": "^2.6.4",
"terser": "^4.8.1",
"decode-uri-component": "^0.2.2",
- "json5": "^1.0.2"
+ "json5": "^1.0.2",
+ "word-wrap": "1.2.4",
+ "browserify-sign": "^4.2.2"
},
"jest": {
"automock": false,
diff --git a/requirements.txt b/requirements.txt
index b758b326d..af50104cd 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
boto3==1.26.114
botocore==1.29.114
dj-database-url==0.4.1
-Django==4.2
+Django==4.2.3
django-allauth==0.44
django-appconf==1.0.2
django-compressor==2.1.1
@@ -25,9 +25,9 @@ psycopg2-binary==2.9.6
python-dateutil==2.8.2
pytz==2023.3
rcssmin==1.0.6
-redis==3.5.3
+redis==4.3.6
rq==1.10.0
-requests==2.28.2
+requests==2.31.0
rjsmin==1.0.12
s3transfer==0.6.0
simplejson==3.12.0
diff --git a/yarn.lock b/yarn.lock
index 0bbdbb1b0..deb252663 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2197,7 +2197,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
-bn.js@^5.0.0, bn.js@^5.1.1:
+bn.js@^5.0.0, bn.js@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
@@ -2316,7 +2316,7 @@ browserify-des@^1.0.0:
inherits "^2.0.1"
safe-buffer "^5.1.2"
-browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+browserify-rsa@^4.0.0, browserify-rsa@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
@@ -2324,20 +2324,20 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
bn.js "^5.0.0"
randombytes "^2.0.1"
-browserify-sign@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
- integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+browserify-sign@^4.0.0, browserify-sign@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e"
+ integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==
dependencies:
- bn.js "^5.1.1"
- browserify-rsa "^4.0.1"
+ bn.js "^5.2.1"
+ browserify-rsa "^4.1.0"
create-hash "^1.2.0"
create-hmac "^1.1.7"
- elliptic "^6.5.3"
+ elliptic "^6.5.4"
inherits "^2.0.4"
- parse-asn1 "^5.1.5"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
+ parse-asn1 "^5.1.6"
+ readable-stream "^3.6.2"
+ safe-buffer "^5.2.1"
browserify-zlib@^0.2.0:
version "0.2.0"
@@ -6675,7 +6675,7 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+parse-asn1@^5.0.0, parse-asn1@^5.1.6:
version "5.1.6"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
@@ -7272,7 +7272,7 @@ prop-types-extra@^1.1.0:
react-is "^16.3.2"
warning "^4.0.0"
-prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7502,11 +7502,6 @@ react-dom@^16.11.0:
prop-types "^15.6.2"
scheduler "^0.19.1"
-react-fast-compare@^2.0.2:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
- integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
-
react-file-drop@^0.2.8:
version "0.2.8"
resolved "https://registry.yarnpkg.com/react-file-drop/-/react-file-drop-0.2.8.tgz#de1e26cef0f1a5855fa1fb1e0cee32bc03c34466"
@@ -7522,16 +7517,6 @@ react-google-recaptcha@^1.1.0:
prop-types "^15.5.0"
react-async-script "^1.0.0"
-react-helmet@^5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.1.tgz#16a7192fdd09951f8e0fe22ffccbf9bb3e591ffa"
- integrity sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==
- dependencies:
- object-assign "^4.1.1"
- prop-types "^15.5.4"
- react-fast-compare "^2.0.2"
- react-side-effect "^1.1.0"
-
react-image-crop@^8.3.0:
version "8.6.12"
resolved "https://registry.yarnpkg.com/react-image-crop/-/react-image-crop-8.6.12.tgz#fb57e17c3b56ac0a52ba1967c108975b1f132dcd"
@@ -7632,13 +7617,6 @@ react-select@^2.4.2:
react-input-autosize "^2.2.1"
react-transition-group "^2.2.1"
-react-side-effect@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae"
- integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==
- dependencies:
- shallowequal "^1.0.1"
-
react-sortablejs@^6.0.0:
version "6.1.1"
resolved "https://registry.yarnpkg.com/react-sortablejs/-/react-sortablejs-6.1.1.tgz#1c90b6ae79a59490986c7918ebc9aa2eecf965cf"
@@ -7725,6 +7703,15 @@ readable-stream@^3.0.6, readable-stream@^3.6.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readable-stream@^3.6.2:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readdirp@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -8026,7 +8013,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -8127,9 +8114,9 @@ selfsigned@^1.10.8:
node-forge "^0.10.0"
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@7.0.0:
version "7.0.0"
@@ -8137,9 +8124,9 @@ semver@7.0.0:
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
send@0.18.0:
version "0.18.0"
@@ -8235,11 +8222,6 @@ shallow-clone@^3.0.0:
dependencies:
kind-of "^6.0.2"
-shallowequal@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
- integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
-
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -9556,10 +9538,10 @@ which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
dependencies:
isexe "^2.0.0"
-word-wrap@~1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+word-wrap@1.2.4, word-wrap@~1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f"
+ integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==
worker-farm@^1.7.0:
version "1.7.0"