Skip to content

Commit 07e7dfe

Browse files
committed
Merge branch 'main' into rel
2 parents 914194d + e2dde0f commit 07e7dfe

File tree

8 files changed

+136
-62
lines changed

8 files changed

+136
-62
lines changed

CHANGELOG.rst

+15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@ CHANGELOG
66
.. This is included by docs/developer/changelog.rst
77
88
9+
Version v5.18.0
10+
---------------
11+
12+
The main change here was a small fix to 2FA rolled out in 5.17.0
13+
which caused that feature to not be enabled yet.
14+
Specifically, 2FA requires emails to be "verified".
15+
16+
:Date: April 16, 2025
17+
18+
* @ericholscher: Only show "Month to date overview" when there is an overview (#1007)
19+
* @dependabot[bot]: Bump django from 5.0.12 to 5.0.14 in /requirements (#1006)
20+
* @davidfischer: User email verification (#1004)
21+
* @dependabot[bot]: Bump django from 5.0.11 to 5.0.13 in /requirements (#995)
22+
23+
924
Version v5.17.0
1025
---------------
1126

adserver/auth/apps.py

+11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,18 @@
33
from django.apps import AppConfig
44

55

6+
def pw_reset_callback(sender, request, user, **kwargs):
7+
"""Mark the email verified after a PW reset (includes invite)"""
8+
for email in user.emailaddress_set.filter(email=user.email):
9+
email.set_verified()
10+
11+
612
class AdServerAuthConfig(AppConfig):
713
name = "adserver.auth"
814
label = "adserver_auth"
915
verbose_name = "Ad Server Auth"
16+
17+
def ready(self):
18+
from allauth.account.signals import password_reset # noqa
19+
20+
password_reset.connect(pw_reset_callback)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from django.db import migrations
2+
from django.contrib.auth import get_user_model
3+
4+
5+
def forwards(apps, schema_editor):
6+
"""Mark all existing users verified."""
7+
User = get_user_model()
8+
9+
for user in User.objects.all():
10+
for email in user.emailaddress_set.filter(email=user.email):
11+
email.set_verified()
12+
13+
14+
class Migration(migrations.Migration):
15+
16+
dependencies = [
17+
('adserver_auth', '0009_user_advertiser_publisher_roles'),
18+
]
19+
20+
operations = [
21+
migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop)
22+
]

adserver/templates/adserver/publisher/overview.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
{% block content_container %}
2424
<section>
2525
<h1>{% blocktrans with month=start_date|date:"F" %}{{ month }} {{ publisher }} overview{% endblocktrans %}</h1>
26-
<p><small>Month to date overview for {{ publisher }}.</small></p>
2726

2827
{% if publisher_new %}
2928
{# Publisher onboarding workflow #}
@@ -70,6 +69,7 @@ <h3>{% trans 'Welcome back.' %}</h3>
7069
</div>
7170
</div>
7271
{% else %}
72+
<p><small>Month to date overview for {{ publisher }}.</small></p>
7373
<div class="row">
7474
<div class="col min-vh-75">
7575
{% metabase_dashboard_embed metabase_publisher_dashboard publisher_slug=publisher.slug start_date=start_date end_date=end_date %}

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ethical-ad-server",
3-
"version": "5.17.0",
3+
"version": "5.18.0",
44
"description": "",
55
"main": "index.js",
66
"engines": {

requirements/base.txt

+11-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ celery[redis]==5.5.0rc1
3232
# via -r base.in
3333
certifi==2025.1.31
3434
# via requests
35+
cffi==1.17.1
36+
# via cryptography
3537
charset-normalizer==3.4.1
3638
# via requests
3739
click==8.1.8
@@ -48,9 +50,11 @@ click-repl==0.3.0
4850
# via celery
4951
crispy-bootstrap4==2024.10
5052
# via -r base.in
53+
cryptography==44.0.2
54+
# via fido2
5155
dj-stripe==2.8.4
5256
# via -r base.in
53-
django==5.0.12
57+
django==5.0.14
5458
# via
5559
# -r base.in
5660
# crispy-bootstrap4
@@ -89,6 +93,8 @@ djangorestframework==3.15.2
8993
# via -r base.in
9094
djangorestframework-jsonp==1.0.2
9195
# via -r base.in
96+
fido2==1.2.0
97+
# via django-allauth
9298
frozenlist==1.5.0
9399
# via
94100
# aiohttp
@@ -119,12 +125,16 @@ propcache==0.3.0
119125
# via
120126
# aiohttp
121127
# yarl
128+
pycparser==2.22
129+
# via cffi
122130
pyjwt==2.10.1
123131
# via -r base.in
124132
python-dateutil==2.9.0.post0
125133
# via celery
126134
pytz==2025.1
127135
# via -r base.in
136+
qrcode==8.1
137+
# via django-allauth
128138
redis==5.2.1
129139
# via celery
130140
requests==2.32.3

requirements/development.txt

+40-30
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,19 @@ attrs==25.1.0
3838
babel==2.17.0
3939
# via sphinx
4040
beautifulsoup4==4.13.3
41-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/testing.in
41+
# via -r testing.in
4242
billiard==4.2.1
4343
# via celery
4444
bleach==6.2.0
45-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
45+
# via -r base.in
4646
cattrs==24.1.2
4747
# via requests-cache
4848
celery[redis]==5.5.0rc1
49-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
49+
# via -r base.in
5050
certifi==2025.1.31
5151
# via requests
52+
cffi==1.17.1
53+
# via cryptography
5254
cfgv==3.4.0
5355
# via pre-commit
5456
charset-normalizer==3.4.1
@@ -73,18 +75,20 @@ coverage==7.6.12
7375
# -r development.in
7476
# django-coverage-plugin
7577
crispy-bootstrap4==2024.10
76-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
78+
# via -r base.in
79+
cryptography==44.0.2
80+
# via fido2
7781
decorator==5.2.1
7882
# via
7983
# ipdb
8084
# ipython
8185
distlib==0.3.9
8286
# via virtualenv
8387
dj-stripe==2.8.4
84-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
85-
django==5.0.12
88+
# via -r base.in
89+
django==5.0.14
8690
# via
87-
# -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
91+
# -r base.in
8892
# crispy-bootstrap4
8993
# dj-stripe
9094
# django-allauth
@@ -97,39 +101,39 @@ django==5.0.12
97101
# djangorestframework
98102
# jsonfield
99103
django-allauth[mfa]==65.4.1
100-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
104+
# via -r base.in
101105
django-cors-headers==4.7.0
102-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
106+
# via -r base.in
103107
django-countries==7.6.1
104-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
108+
# via -r base.in
105109
django-coverage-plugin==3.1.0
106110
# via -r development.in
107111
django-crispy-forms==2.3
108112
# via
109-
# -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
113+
# -r base.in
110114
# crispy-bootstrap4
111115
django-debug-toolbar==3.8.1
112116
# via -r development.in
113117
django-dynamic-fixture==4.0.1
114118
# via -r development.in
115119
django-enforce-host==1.1.0
116-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
120+
# via -r base.in
117121
django-environ==0.12.0
118-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
122+
# via -r base.in
119123
django-extensions==3.2.3
120-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
124+
# via -r base.in
121125
django-ratelimit==3.0.1
122-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
126+
# via -r base.in
123127
django-simple-history==3.8.0
124-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
128+
# via -r base.in
125129
django-slack==5.19.0
126-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
130+
# via -r base.in
127131
django-upgrade==1.23.1
128132
# via -r development.in
129133
djangorestframework==3.15.2
130-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
134+
# via -r base.in
131135
djangorestframework-jsonp==1.0.2
132-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
136+
# via -r base.in
133137
docutils==0.19
134138
# via
135139
# sphinx
@@ -142,6 +146,8 @@ exceptiongroup==1.2.2
142146
# pytest
143147
executing==2.2.0
144148
# via stack-data
149+
fido2==1.2.0
150+
# via django-allauth
145151
filelock==3.17.0
146152
# via
147153
# tox
@@ -151,7 +157,7 @@ frozenlist==1.5.0
151157
# aiohttp
152158
# aiosignal
153159
geoip2==5.0.1
154-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
160+
# via -r base.in
155161
h11==0.14.0
156162
# via uvicorn
157163
identify==2.6.8
@@ -166,7 +172,7 @@ imagesize==1.4.1
166172
iniconfig==2.0.0
167173
# via pytest
168174
ip2proxy==3.5.1
169-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
175+
# via -r base.in
170176
ipdb==0.13.13
171177
# via -r development.in
172178
ipython==8.32.0
@@ -178,7 +184,7 @@ jedi==0.19.2
178184
jinja2==3.1.5
179185
# via sphinx
180186
jsonfield==3.1.0
181-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
187+
# via -r base.in
182188
kombu==5.4.2
183189
# via celery
184190
markupsafe==3.0.2
@@ -203,7 +209,7 @@ parso==0.8.4
203209
pexpect==4.9.0
204210
# via ipython
205211
pillow==11.1.0
206-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
212+
# via -r base.in
207213
platformdirs==4.3.6
208214
# via
209215
# requests-cache
@@ -228,12 +234,14 @@ pure-eval==0.2.3
228234
# via stack-data
229235
py==1.11.0
230236
# via tox
237+
pycparser==2.22
238+
# via cffi
231239
pygments==2.19.1
232240
# via
233241
# ipython
234242
# sphinx
235243
pyjwt==2.10.1
236-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
244+
# via -r base.in
237245
pytest==8.3.4
238246
# via
239247
# -r development.in
@@ -243,11 +251,13 @@ pytest-django==4.10.0
243251
python-dateutil==2.9.0.post0
244252
# via celery
245253
pytz==2025.1
246-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
254+
# via -r base.in
247255
pyyaml==6.0.2
248256
# via
249257
# pre-commit
250258
# responses
259+
qrcode==8.1
260+
# via django-allauth
251261
redis==5.2.1
252262
# via celery
253263
requests==2.32.3
@@ -313,7 +323,7 @@ starlette==0.46.0
313323
# via sphinx-autobuild
314324
stripe==4.2.0
315325
# via
316-
# -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
326+
# -r base.in
317327
# dj-stripe
318328
tokenize-rt==6.1.0
319329
# via django-upgrade
@@ -323,7 +333,7 @@ tomli==2.2.1
323333
# pytest
324334
# tox
325335
tox==3.28.0
326-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/testing.in
336+
# via -r testing.in
327337
traitlets==5.14.3
328338
# via
329339
# ipython
@@ -353,9 +363,9 @@ urllib3==2.3.0
353363
# requests-cache
354364
# responses
355365
user-agents==2.2.0
356-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
366+
# via -r base.in
357367
uuid-utils==0.10.0
358-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
368+
# via -r base.in
359369
uvicorn==0.34.0
360370
# via sphinx-autobuild
361371
vine==5.1.0
@@ -376,6 +386,6 @@ webencodings==0.5.1
376386
websockets==15.0
377387
# via sphinx-autobuild
378388
whitenoise==6.9.0
379-
# via -r /home/david/ReadTheDocs/ethical-ad-server/requirements/base.in
389+
# via -r base.in
380390
yarl==1.18.3
381391
# via aiohttp

0 commit comments

Comments
 (0)