Merge branch 'develop' into feature/nklink
This commit is contained in:
7
rowers/templates/acc_activate_email.html
Normal file
7
rowers/templates/acc_activate_email.html
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{% autoescape off %}
|
||||||
|
Hi {{ user.username }},
|
||||||
|
Please click on the link to confirm your registration,
|
||||||
|
|
||||||
|
http://{{ domain }}{% url 'useractivate' uidb64=uid token=token %}
|
||||||
|
If you think, it's not you, then just ignore this email.
|
||||||
|
{% endautoescape %}
|
||||||
@@ -42,20 +42,38 @@ class NewUserRegistrationTest(TestCase):
|
|||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post('/rowers/register/', form_data, follow=True)
|
response = self.c.post('/rowers/register/', form_data, follow=True)
|
||||||
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
self.assertRedirects(response,
|
# set opt-in
|
||||||
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
user = User.objects.get(username='janderoeiert')
|
||||||
status_code=302,target_status_code=200)
|
user.rower.gdpr_optin = True
|
||||||
|
user.set_password('aapindewei2')
|
||||||
|
user.is_active = True
|
||||||
|
user.save()
|
||||||
|
user.rower.save()
|
||||||
|
|
||||||
|
login = self.c.login(username=user.username,password='aapindewei2')
|
||||||
|
self.assertTrue(login)
|
||||||
|
|
||||||
|
|
||||||
url = '/rowers/me/gdpr-optin-confirm/?next=/rowers/list-workouts/'
|
url = '/rowers/list-workouts/'
|
||||||
|
|
||||||
response = self.c.get(url)
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
expected = '/rowers/me/gdpr-optin/?next=/rowers/list-workouts/'
|
||||||
|
|
||||||
self.assertRedirects(response,
|
self.assertRedirects(response,
|
||||||
expected_url='/rowers/list-workouts/',
|
expected_url=expected,
|
||||||
status_code=302,target_status_code=200,
|
status_code=302,target_status_code=200)
|
||||||
)
|
|
||||||
|
url = '/rowers/me/gdpr-optin-confirm/?next=/rowers/list-workouts/'
|
||||||
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
expected = '/rowers/list-workouts/'
|
||||||
|
self.assertRedirects(response,
|
||||||
|
expected_url=expected,
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
|
||||||
url = '/rowers/exportallworkouts/'
|
url = '/rowers/exportallworkouts/'
|
||||||
|
|
||||||
@@ -74,6 +92,8 @@ class NewUserRegistrationTest(TestCase):
|
|||||||
|
|
||||||
self.assertTrue(response.status_code,200)
|
self.assertTrue(response.status_code,200)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
url = '/rowers/me/delete/'
|
url = '/rowers/me/delete/'
|
||||||
|
|
||||||
form_data = {
|
form_data = {
|
||||||
|
|||||||
12
rowers/tokens.py
Normal file
12
rowers/tokens.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from django.contrib.auth.tokens import PasswordResetTokenGenerator
|
||||||
|
from django.utils import six
|
||||||
|
|
||||||
|
|
||||||
|
class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
|
||||||
|
def _make_hash_value(self, user, timestamp):
|
||||||
|
return (
|
||||||
|
six.text_type(user.pk) + six.text_type(timestamp) +
|
||||||
|
six.text_type(user.is_active)
|
||||||
|
)
|
||||||
|
|
||||||
|
account_activation_token = AccountActivationTokenGenerator()
|
||||||
@@ -731,6 +731,7 @@ urlpatterns = [
|
|||||||
re_path(r'^legal', TemplateView.as_view(template_name='legal.html'),name='legal'),
|
re_path(r'^legal', TemplateView.as_view(template_name='legal.html'),name='legal'),
|
||||||
re_path(r'^register/$',views.rower_register_view,name='rower_register_view'),
|
re_path(r'^register/$',views.rower_register_view,name='rower_register_view'),
|
||||||
re_path(r'^coachregister/$',views.freecoach_register_view,name='freecoach_register_view'),
|
re_path(r'^coachregister/$',views.freecoach_register_view,name='freecoach_register_view'),
|
||||||
|
path('activate/<uidb64>/<token>/',views.useractivate, name='useractivate'),
|
||||||
re_path(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
|
re_path(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
|
||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/workflow/$',views.workout_workflow_view,
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/workflow/$',views.workout_workflow_view,
|
||||||
name='workout_workflow_view'),
|
name='workout_workflow_view'),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from __future__ import print_function
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
from django.core.mail import EmailMessage
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def braintree_webhook_view(request):
|
def braintree_webhook_view(request):
|
||||||
@@ -711,6 +712,59 @@ def downgrade_completed_view(request):
|
|||||||
'rower':r
|
'rower':r
|
||||||
})
|
})
|
||||||
|
|
||||||
|
from django.utils.encoding import force_bytes, force_text
|
||||||
|
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
|
||||||
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
|
from rowers.tokens import account_activation_token
|
||||||
|
# Email activation
|
||||||
|
def useractivate(request, uidb64, token):
|
||||||
|
try:
|
||||||
|
uid = force_text(urlsafe_base64_decode(uidb64))
|
||||||
|
user = User.objects.get(id=uid)
|
||||||
|
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
|
||||||
|
user = None
|
||||||
|
if user is not None and account_activation_token.check_token(user, token):
|
||||||
|
user.is_active = True
|
||||||
|
user.save()
|
||||||
|
# below is old
|
||||||
|
fullemail = user.first_name + " " + user.last_name + " " + "<" + user.email + ">"
|
||||||
|
subject = "Thank you for registering on rowsandall.com"
|
||||||
|
from_address = 'Sander Roosendaal <info@rowsandall.com>'
|
||||||
|
|
||||||
|
d = {'first_name':user.first_name}
|
||||||
|
|
||||||
|
template = 'registeremail.html'
|
||||||
|
if user.rower.rowerplan == 'freecoach':
|
||||||
|
template = 'coachregisteremail.html'
|
||||||
|
|
||||||
|
send_template_email(from_address,[fullemail],
|
||||||
|
subject,'registeremail.html',d)
|
||||||
|
|
||||||
|
|
||||||
|
subject2 = "New User"
|
||||||
|
message2 = "New user registered.\n"
|
||||||
|
message2 += fullemail + "\n"
|
||||||
|
message2 += "User name: "+user.username
|
||||||
|
|
||||||
|
if user.rower.rowerplan == 'freecoach':
|
||||||
|
subject2 = "New Free Coach User"
|
||||||
|
|
||||||
|
|
||||||
|
send_mail(subject2, message2,
|
||||||
|
'Rowsandall Server <info@rowsandall.com>',
|
||||||
|
['roosendaalsander@gmail.com'])
|
||||||
|
|
||||||
|
|
||||||
|
messages.info(request,'Thank you for your email confirmation. Now you can login to your account.')
|
||||||
|
url = '/login/'
|
||||||
|
if user.rower.rowerplan == 'freecoach':
|
||||||
|
url+='?next=/rowers/me/teams'
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
else:
|
||||||
|
return HttpResponse('Activation link is invalid!')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# User registration
|
# User registration
|
||||||
def rower_register_view(request):
|
def rower_register_view(request):
|
||||||
|
|
||||||
@@ -736,6 +790,7 @@ def rower_register_view(request):
|
|||||||
theuser.first_name = first_name
|
theuser.first_name = first_name
|
||||||
theuser.last_name = last_name
|
theuser.last_name = last_name
|
||||||
theuser.email = email
|
theuser.email = email
|
||||||
|
theuser.is_active = False
|
||||||
theuser.save()
|
theuser.save()
|
||||||
|
|
||||||
birthdate = birthdate.replace(tzinfo=None)
|
birthdate = birthdate.replace(tzinfo=None)
|
||||||
@@ -766,26 +821,29 @@ def rower_register_view(request):
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
# Create and send email
|
# Create and send email
|
||||||
fullemail = first_name + " " + last_name + " " + "<" + email + ">"
|
current_site = get_current_site(request)
|
||||||
subject = "Thank you for registering on rowsandall.com"
|
mail_subject = 'Activate your account.'
|
||||||
from_address = 'Sander Roosendaal <info@rowsandall.com>'
|
d = {
|
||||||
|
'user': theuser,
|
||||||
d = {'first_name':theuser.first_name}
|
'domain': current_site.domain,
|
||||||
|
'uid': urlsafe_base64_encode(force_bytes(theuser.id)).decode(),
|
||||||
send_template_email(from_address,[fullemail],
|
'token': account_activation_token.make_token(theuser),
|
||||||
subject,'registeremail.html',d)
|
}
|
||||||
|
to_email = form.cleaned_data.get('email')
|
||||||
|
message = render_to_string('acc_activate_email.html', {
|
||||||
|
'user': theuser,
|
||||||
|
'domain': current_site.domain,
|
||||||
|
'uid': urlsafe_base64_encode(force_bytes(theuser.id)).decode(),
|
||||||
|
'token': account_activation_token.make_token(theuser),
|
||||||
|
})
|
||||||
|
to_email = form.cleaned_data.get('email')
|
||||||
|
email = EmailMessage(
|
||||||
|
mail_subject, message, to=[to_email]
|
||||||
|
)
|
||||||
|
email.send()
|
||||||
|
return HttpResponse('Please confirm your email address to complete the registration')
|
||||||
|
|
||||||
|
|
||||||
subject2 = "New User"
|
|
||||||
message2 = "New user registered.\n"
|
|
||||||
message2 += fullemail + "\n"
|
|
||||||
message2 += "User name: "+username
|
|
||||||
|
|
||||||
send_mail(subject2, message2,
|
|
||||||
'Rowsandall Server <info@rowsandall.com>',
|
|
||||||
['roosendaalsander@gmail.com'])
|
|
||||||
|
|
||||||
theuser = authenticate(username=username,password=password)
|
|
||||||
login(request,theuser)
|
login(request,theuser)
|
||||||
|
|
||||||
return HttpResponseRedirect(nextpage)
|
return HttpResponseRedirect(nextpage)
|
||||||
@@ -842,29 +900,28 @@ def freecoach_register_view(request):
|
|||||||
# create default favorite charts
|
# create default favorite charts
|
||||||
add_defaultfavorites(therower)
|
add_defaultfavorites(therower)
|
||||||
|
|
||||||
|
|
||||||
# Create and send email
|
# Create and send email
|
||||||
fullemail = first_name + " " + last_name + " " + "<" + email + ">"
|
current_site = get_current_site(request)
|
||||||
subject = "Thank you for registering on rowsandall.com"
|
mail_subject = 'Activate your account.'
|
||||||
from_address = 'Sander Roosendaal <info@rowsandall.com>'
|
d = {
|
||||||
|
'user': theuser,
|
||||||
d = {'first_name':theuser.first_name}
|
'domain': current_site.domain,
|
||||||
|
'uid': urlsafe_base64_encode(force_bytes(theuser.id)).decode(),
|
||||||
send_template_email(from_address,[fullemail],
|
'token': account_activation_token.make_token(theuser),
|
||||||
subject,'coachregisteremail.html',d)
|
}
|
||||||
|
to_email = form.cleaned_data.get('email')
|
||||||
|
message = render_to_string('acc_activate_email.html', {
|
||||||
subject2 = "New Free Coach"
|
'user': theuser,
|
||||||
message2 = "New Free Coach registered.\n"
|
'domain': current_site.domain,
|
||||||
message2 += fullemail + "\n"
|
'uid': urlsafe_base64_encode(force_bytes(theuser.id)).decode(),
|
||||||
message2 += "User name: "+username
|
'token': account_activation_token.make_token(theuser),
|
||||||
|
})
|
||||||
send_mail(subject2, message2,
|
to_email = form.cleaned_data.get('email')
|
||||||
'Rowsandall Server <info@rowsandall.com>',
|
email = EmailMessage(
|
||||||
['roosendaalsander@gmail.com'])
|
mail_subject, message, to=[to_email]
|
||||||
|
)
|
||||||
theuser = authenticate(username=username,password=password)
|
email.send()
|
||||||
login(request,theuser)
|
return HttpResponse('Please confirm your email address to complete the registration')
|
||||||
|
|
||||||
return HttpResponseRedirect(nextpage)
|
return HttpResponseRedirect(nextpage)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user