def activate(self, request): if request.user.is_authenticated(): auth.logout(request) form = ActivateForm(data=request.query_params) if form.is_valid(): user = form.validated_data['email'] user.backend = 'django.contrib.auth.backends.ModelBackend' auth.login(request, user) activate_role = UserValidateEmailRole.objects.filter( user=user).order_by("-datetime")[0] activate_role.confirm() activate_role.save() logger.info('user activated') # create redirect with subdomain inserted redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND + '?first_time=1', form.validated_data['subdomain']) return HttpResponseRedirect(redirect_url) else: qp = request.query_params.copy() qp.pop('token', None) redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND + 'login?' + qp.urlencode(), request.query_params.get('subdomain', 'www')) return HttpResponseRedirect(redirect_url)
def request_reset_password(self, request): serializer = RequestResetPasswordForm(data=request.data) if serializer.is_valid(): user = serializer.validated_data['email'] if user: role = UserRequestResetPasswordRole.create(user) role.save() subdomain = extract_subdomain( request.META['HTTP_ORIGIN']) if request.META.has_key( 'HTTP_ORIGIN') else 'www' redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND + 'password_reset', subdomain) lang = translation.get_language() or settings.LANGUAGE_CODE send_ascribe_email.delay( msg_cls='PasswordResetEmailMessage', to=user.email, token=role.token, redirect_url=redirect_url, lang=lang, ) return Response({'success': True}, status=status.HTTP_200_OK) else: return Response({ 'success': False, 'errors': serializer.errors }, status=status.HTTP_400_BAD_REQUEST)
def email_submit_prize(receiver, piece, subdomain): subject = u'Thanks for submitting to ' template_path = 'emails/' text_content = u"\n".join([""] + [" -%s" % settings.EMAIL_SIGNATURE]) redirect_url = insert_or_change_subdomain(settings.ASCRIBE_URL_FRONTEND, subdomain) if subdomain == 'sluice': subject += u'Sluice_screens ↄc' template_path += 'sluice/email_submit.html' d = Context({ 'receiver': receiver, 'editions': [piece], 'redirect_url': redirect_url, 'subject': subject, }) htmly = get_template(template_path) html_content = htmly.render(d) html_message = inline_css(html_content) elif subdomain == 'portfolioreview': subject += u'Portfolio Review 2016' template_path += 'portfolioreview/email_submit.html' d = Context({ 'receiver': receiver, 'piece': piece, 'subject': subject, 'signup_or_login_link': get_signup_or_login_link(receiver.email, subdomain) }) htmly = get_template(template_path) html_content = htmly.render(d) html_message = inline_css(html_content) send_mail(subject, text_content, receiver.email, html_message=html_message)
def emailOwnerOnDenyLoanPiece(loanee, piece, subdomain): if settings.EMAIL_ENABLED: email_to = piece.user_registered.email subject = "Loan Request Rejected - " + piece.title s = [] s += ["Hello,"] + [""] s += ["The following loan requests have been denied."] + [] s += [ "Ascribe user %s denied loaning " "%s" "." % (loanee.username, piece.title) ] + [""] s += [" -%s" % settings.EMAIL_SIGNATURE] text_content = "\n".join(s) redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND, subdomain) d = Context({ 'owner': piece.user_registered.username, 'piece': piece, 'loanee': loanee.username, 'email': email_to, 'redirect_url': redirect_url }) htmly = get_template('emails/owner_ondenyloan.html') html_content = htmly.render(d) send_mail(subject, text_content, email_to, html_message=html_content)
def email_invite_judge(user, subdomain): wl_settings = WhitelabelSettings.objects.get(subdomain=subdomain) prize_display_name = wl_settings.name subject = u'Invitation to judge for %s' % prize_display_name redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND + 'login', subdomain) email_safe = urllib.quote_plus(user.email.encode("utf-8")) text_content = u"We would like to invite you to be a jury member for %s.\n" % prize_display_name text_content += u"Use this link to log in:\n" text_content += u' %s?&email=%s&subdomain=%s \n\n' % ( redirect_url, email_safe, subdomain) text_content += _('Thank you and enjoy, \n') email_signature = settings.EMAIL_SIGNATURE % { 'ascribe_team': _('The ascribe Team') } text_content += '\n -%s' % email_signature context = Context({ 'username': user.username, 'email': user.email, 'email_safe': email_safe, 'subdomain': subdomain, 'host': redirect_url }) if subdomain == 'sluice': htmly = get_template('emails/sluice/email_invite_judge.html') elif subdomain == 'portfolioreview': htmly = get_template('emails/portfolioreview/email_invite_judge.html') html_content = inline_css(htmly.render(context)) send_mail(subject, text_content, user.email, html_message=html_content)
def redirect_url(self): """ For "whitelabel markets", we want to redirect a receiver of a transfer email (read: a buyer) to ascribe's main wallet instead of the consignment wallet. """ return insert_or_change_subdomain(settings.ASCRIBE_URL_FRONTEND, 'www')
def create(self, request): serializer = self.get_serializer(data=request.data) if serializer.is_valid(): data = serializer.validated_data application = None if hasattr(request.auth, 'token'): application = AccessToken.objects.get( token=request.auth.token).application lang = translation.get_language() or settings.LANGUAGE_CODE # TODO clarify whether we'll need the LANGUAGE_SESSION_KEY at all # if hasattr(request, "session") and request.session.has_key(translation.LANGUAGE_SESSION_KEY): # lang = request.session[translation.LANGUAGE_SESSION_KEY] subdomain = extract_subdomain( request.META['HTTP_ORIGIN']) if request.META.has_key( 'HTTP_ORIGIN') else 'www' token = data['token'] if 'token' in data.keys() else None user = UserEndpoint._createNewUser(data['email'], data['password'], application=application, lang=lang, subdomain=subdomain, token=token) if not token: serializer = self.get_serializer(user) return Response( { 'success': True, self.json_name[:-1]: serializer.data }, status=status.HTTP_201_CREATED) else: user.backend = 'django.contrib.auth.backends.ModelBackend' auth.login(request, user) redirect_url = insert_or_change_subdomain( settings.ASCRIBE_URL_FRONTEND + '?first_time=1', subdomain) return Response({ 'success': True, 'redirect': redirect_url }, status=status.HTTP_201_CREATED) else: return Response({ 'success': False, 'errors': serializer.errors }, status=status.HTTP_400_BAD_REQUEST)
def get_signup_or_login_link(email_to, subdomain): email_safe = urllib.quote_plus(email_to.encode('ascii')) redirect_url = insert_or_change_subdomain(settings.ASCRIBE_URL_FRONTEND, subdomain) try: user = User.objects.get(email=email_to) except User.DoesNotExist: # user has not been created, send to signup without token return '{}?email={}&subdomain={}&redirect=signup'.format(redirect_url, email_safe, subdomain) try: UserNeedsToRegisterRole.objects.get(user=user, type="UserNeedsToRegisterRole") except UserNeedsToRegisterRole.DoesNotExist: # user has signed up, send to login return '{}?email={}&subdomain={}&redirect=login'.format(redirect_url, email_safe, subdomain) else: # user was invited, send to signup with token for implicit email validation # validation only requires the last created token validate_role = UserValidateEmailRole.create(user=user) validate_role.save() return '{}?token={}&email={}&subdomain={}&redirect=signup'.format(redirect_url, validate_role.token, email_safe, subdomain)
def redirect_url(self): return insert_or_change_subdomain(settings.ASCRIBE_URL_FRONTEND, self.subdomain)