Skip to content

Commit 43fdf28

Browse files
authored
Merge pull request #148 from Xpirix/use_resend_email
Use resend for email sending
2 parents 05215c6 + 50d91df commit 43fdf28

File tree

8 files changed

+505
-405
lines changed

8 files changed

+505
-405
lines changed

docker-compose-production-ssl.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ services:
5757
QGISFEED_DOCKER_DBUSER: ${QGISFEED_DOCKER_DBUSER}
5858
QGISFEED_DOCKER_DBPASSWORD: ${QGISFEED_DOCKER_DBPASSWORD}
5959
QGIS_FEED_PROD_URL: ${QGIS_FEED_PROD_URL}
60-
QGISFEED_FROM_EMAIL: ${QGISFEED_FROM_EMAIL:-automation}
60+
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-automation}
6161
EMAIL_BACKEND: ${EMAIL_BACKEND}
6262
EMAIL_HOST: ${EMAIL_HOST}
6363
EMAIL_PORT: ${EMAIL_PORT}

docker-compose-production.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ services:
5757
QGISFEED_DOCKER_DBUSER: ${QGISFEED_DOCKER_DBUSER}
5858
QGISFEED_DOCKER_DBPASSWORD: ${QGISFEED_DOCKER_DBPASSWORD}
5959
QGIS_FEED_PROD_URL: ${QGIS_FEED_PROD_URL}
60-
QGISFEED_FROM_EMAIL: ${QGISFEED_FROM_EMAIL:-automation}
60+
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-automation}
6161
EMAIL_BACKEND: ${EMAIL_BACKEND}
6262
EMAIL_HOST: ${EMAIL_HOST}
6363
EMAIL_PORT: ${EMAIL_PORT}

docker-compose.dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ services:
2626
QGISFEED_DOCKER_DBUSER: ${QGISFEED_DOCKER_DBUSER}
2727
QGISFEED_DOCKER_DBPASSWORD: ${QGISFEED_DOCKER_DBPASSWORD}
2828
QGIS_FEED_PROD_URL: ${QGIS_FEED_PROD_URL}
29-
QGISFEED_FROM_EMAIL: ${QGISFEED_FROM_EMAIL:-automation}
29+
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-automation}
3030
EMAIL_BACKEND: ${EMAIL_BACKEND}
3131
EMAIL_HOST: ${EMAIL_HOST}
3232
EMAIL_PORT: ${EMAIL_PORT}

env.template

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ QGISFEED_DOCKER_DBUSER=docker
2323
QGISFEED_DOCKER_DBPASSWORD=docker
2424

2525
# Email variables
26-
QGISFEED_FROM_EMAIL=''
2726
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
28-
EMAIL_HOST=''
27+
EMAIL_HOST='smtp.resend.com'
2928
EMAIL_PORT=587
3029
EMAIL_USE_TLS=True
31-
EMAIL_HOST_USER=''
32-
EMAIL_HOST_PASSWORD=''
30+
EMAIL_HOST_USER="resend"
31+
EMAIL_HOST_PASSWORD="" # Your Resend API key
32+
EMAIL_SUBJECT_PREFIX='[QGIS Feed] '
33+
DEFAULT_FROM_EMAIL='no-reply-feed@qgis.org'
3334

3435
# Allowed hosts
3536
QGIS_FEED_PROD_URL='feed.qgis.org'

qgisfeedproject/qgisfeed/admin.py

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# coding=utf-8
2-
""""QGIS Welcome Page Entry admin
2+
""" "QGIS Welcome Page Entry admin
33
44
.. note:: This program is free software; you can redistribute it and/or modify
55
it under the terms of the GNU General Public License as published by
@@ -8,9 +8,9 @@
88
99
"""
1010

11-
__author__ = 'elpaso@itopen.it'
12-
__date__ = '2019-05-07'
13-
__copyright__ = 'Copyright 2019, ItOpen'
11+
__author__ = "elpaso@itopen.it"
12+
__date__ = "2019-05-07"
13+
__copyright__ = "Copyright 2019, ItOpen"
1414

1515

1616
# Register your models here.
@@ -23,21 +23,33 @@
2323
from django.core.mail import send_mail
2424
from django.urls import reverse
2525
from django.utils import timezone
26-
2726
from user_visit.admin import UserVisitAdmin
2827
from user_visit.models import UserVisit
2928

30-
from .models import CharacterLimitConfiguration, QgisFeedEntry, QgisUserVisit, DailyQgisUserVisit
29+
from .models import (
30+
CharacterLimitConfiguration,
31+
DailyQgisUserVisit,
32+
QgisFeedEntry,
33+
QgisUserVisit,
34+
)
3135

3236
# Get an instance of a logger
33-
logger = logging.getLogger('qgisfeed.admin')
37+
logger = logging.getLogger("qgisfeed.admin")
38+
39+
DEFAULT_FROM_EMAIL = getattr(settings, "DEFAULT_FROM_EMAIL", "noreply@qgis.org")
3440

35-
QGISFEED_FROM_EMAIL = getattr(settings, 'QGISFEED_FROM_EMAIL', 'noreply@qgis.org')
3641

3742
class QgisFeedEntryAdmin(admin.GeoModelAdmin):
3843

39-
list_display = ('title', 'author', 'language_filter', 'published',
40-
'publish_from', 'publish_to', 'sorting')
44+
list_display = (
45+
"title",
46+
"author",
47+
"language_filter",
48+
"published",
49+
"publish_from",
50+
"publish_to",
51+
"sorting",
52+
)
4153

4254
def notify(self, author, request, recipients, obj):
4355
"""Send notification emails"""
@@ -46,19 +58,21 @@ def notify(self, author, request, recipients, obj):
4658
Title: %s\r\n
4759
Link: %s\r\n
4860
""" % (
49-
author.username,
50-
obj.title,
51-
request.build_absolute_uri(reverse('admin:qgisfeed_qgisfeedentry_change', args=(obj.pk,)))
52-
)
61+
author.username,
62+
obj.title,
63+
request.build_absolute_uri(
64+
reverse("admin:qgisfeed_qgisfeedentry_change", args=(obj.pk,))
65+
),
66+
)
5367
if settings.DEBUG:
5468
logger.debug("DEBUG is True: email not sent:\n %s" % body)
5569
else:
5670
send_mail(
57-
'A QGIS News Entry was added: %s' % obj.title,
71+
"A QGIS News Entry was added: %s" % obj.title,
5872
body,
59-
QGISFEED_FROM_EMAIL,
73+
DEFAULT_FROM_EMAIL,
6074
recipients,
61-
fail_silently=True
75+
fail_silently=True,
6276
)
6377

6478
def save_model(self, request, obj, form, change):
@@ -73,11 +87,15 @@ def save_model(self, request, obj, form, change):
7387
obj.save()
7488

7589
if not change and not request.user.is_superuser:
76-
recipients = [u.email for u in User.objects.filter(is_superuser=True, is_active=True, email__isnull=False).exclude(email='')]
90+
recipients = [
91+
u.email
92+
for u in User.objects.filter(
93+
is_superuser=True, is_active=True, email__isnull=False
94+
).exclude(email="")
95+
]
7796
if recipients:
7897
self.notify(request.user, request, recipients, obj)
7998

80-
8199
def get_form(self, request, obj=None, **kwargs):
82100
"""Hide published from not admin users"""
83101

@@ -88,34 +106,27 @@ def get_form(self, request, obj=None, **kwargs):
88106

89107

90108
class QgisUserVisitAdmin(admin.StackedInline):
91-
readonly_fields = ('qgis_version', 'location', 'platform')
109+
readonly_fields = ("qgis_version", "location", "platform")
92110
can_delete = False
93111
model = QgisUserVisit
94112

95113

96114
class CharacterLimitConfigurationAdmin(admin.ModelAdmin):
97-
list_display = ('field_name', 'max_characters')
115+
list_display = ("field_name", "max_characters")
98116
model = CharacterLimitConfiguration
99117

100118

101119
class DailyQgisUserVisitAdmin(admin.ModelAdmin):
102-
list_display = (
103-
'date',
104-
)
120+
list_display = ("date",)
105121

106122
def has_add_permission(self, request):
107123
return False
108124

109125

110126
class UpdatedUserVisitAdmin(UserVisitAdmin):
111-
inlines = [
112-
QgisUserVisitAdmin
113-
]
127+
inlines = [QgisUserVisitAdmin]
114128
list_display = ("timestamp", "qgis_version", "country", "platform")
115-
search_fields = (
116-
"qgisuservisit__qgis_version",
117-
"qgisuservisit__location"
118-
)
129+
search_fields = ("qgisuservisit__qgis_version", "qgisuservisit__location")
119130
readonly_fields = (
120131
"timestamp",
121132
"hash",
@@ -124,30 +135,33 @@ class UpdatedUserVisitAdmin(UserVisitAdmin):
124135
"ua_string",
125136
"created_at",
126137
)
127-
exclude = ['user', 'remote_addr']
138+
exclude = ["user", "remote_addr"]
128139

129140
def qgis_version(self, obj):
130-
qgis_version = ''
141+
qgis_version = ""
131142
if obj.qgisuservisit:
132143
qgis_version = obj.qgisuservisit.qgis_version
133144
if not qgis_version:
134-
qgis_version = '-'
145+
qgis_version = "-"
135146
return qgis_version
136-
147+
137148
def country(self, obj):
138-
country = '-'
149+
country = "-"
139150
if obj.qgisuservisit:
140-
if obj.qgisuservisit.location and 'country_name' in obj.qgisuservisit.location:
141-
country = obj.qgisuservisit.location['country_name']
151+
if (
152+
obj.qgisuservisit.location
153+
and "country_name" in obj.qgisuservisit.location
154+
):
155+
country = obj.qgisuservisit.location["country_name"]
142156
return country
143157

144158
def platform(sel, obj):
145-
platfrom_string = 'Unknown'
159+
platfrom_string = "Unknown"
146160
if obj.qgisuservisit:
147161
platfrom_string = obj.qgisuservisit.platform
148162
return platfrom_string
149163

150-
qgis_version.short_description = 'QGIS Version'
164+
qgis_version.short_description = "QGIS Version"
151165

152166

153167
admin.site.register(QgisFeedEntry, QgisFeedEntryAdmin)

0 commit comments

Comments
 (0)