def deny_user(request, user_id): """ Deny a registration pending user. Sends out an email letting them know, then deletes the pending user account. Cannot be done for users that are active. """ error = _check_user_approval_permissions(request, user_id) if error: return error try: user = USER_MODEL.objects.get(id=user_id) except USER_MODEL.DoesNotExist: messages.error(request, _('The user account you were looking for does not exist! Their registration was probably already denied.')) return redirect(reverse('cosinnus:user-list')) if user.is_active: messages.warning(request, _('The user account %(username)s (%(email)s) was already approved, so you cannot deny the registration! If this is a problem, you may want to deactivate the user manually from the admin interface.') \ % {'username':full_name_force(user), 'email': user.email}) return redirect(reverse('cosinnus:user-list')) # message user for denied request admins = get_user_model().objects.filter(id__in=CosinnusPortal.get_current().admins) data = get_common_mail_context(request) data.update({ 'user': user, 'admins': admins, }) subj_user = render_to_string('cosinnus/mail/user_registration_denied_subj.txt', data) send_mail_or_fail_threaded(user.email, subj_user, 'cosinnus/mail/user_registration_denied.html', data) messages.success(request, _('You have denied the join request of %(username)s (%(email)s)! An email was sent to let them know.') \ % {'username':full_name_force(user), 'email': user.email}) user.delete() return redirect(reverse('cosinnus:user-list'))
def set_user_email_to_verify(user, new_email, request=None, user_has_just_registered=True): """ Sets the profile variables for a user to confirm a pending email, and sends out an email with a verification URL to the user. @param user_has_just_registered: If this True, a welcome email will be sent. If False, an email change email will be sent. """ # the verification param for the URL consists of <user-id>-<uuid>, where the uuid is saved to the user's profile a_uuid = uuid1() verification_url_param = '%d-%s' % (user.id, a_uuid) user.cosinnus_profile.settings[PROFILE_SETTING_EMAIL_TO_VERIFY] = new_email user.cosinnus_profile.settings[PROFILE_SETTING_EMAIL_VERFICIATION_TOKEN] = a_uuid user.cosinnus_profile.save() # message user for email verification if request: data = get_common_mail_context(request) data.update({ 'user':user, 'user_email':new_email, 'verification_url_param':verification_url_param, 'next': redirect_with_next('', request), }) template = 'cosinnus/mail/user_email_verification%s.html' % ('_onchange' if not user_has_just_registered else '') data.update({ 'content': render_to_string(template, data), }) subj_user = render_to_string('cosinnus/mail/user_email_verification%s_subj.txt' % ('_onchange' if not user_has_just_registered else ''), data) send_mail_or_fail_threaded(new_email, subj_user, None, data)
def approve_user(request, user_id): """ Approves an inactive, registration pending user and sends out an email to let them know """ error = _check_user_approval_permissions(request, user_id) if error: return error try: user = USER_MODEL.objects.get(id=user_id) except USER_MODEL.DoesNotExist: messages.error(request, _('The user account you were looking for does not exist! Their registration was probably already denied.')) return redirect(reverse('cosinnus:user-list')) if user.is_active: messages.success(request, _('The user account was already approved, but thank you anyway!')) return redirect(reverse('cosinnus:user-list')) user.is_active = True user.save() # message user for accepeted request data = get_common_mail_context(request) data.update({ 'user': user, }) template = 'cosinnus/mail/user_registration_approved.html' subj_user = render_to_string('cosinnus/mail/user_registration_approved_subj.txt', data) send_mail_or_fail_threaded(user.email, subj_user, template, data) _send_user_welcome_email_if_enabled(user) messages.success(request, _('Thank you for approving user %(username)s (%(email)s)! An introduction-email was sent out to them and they can now log in to the site.') \ % {'username':full_name_force(user), 'email': user.email}) return redirect(reverse('cosinnus:profile-detail', kwargs={'username': user.username}) + '?force_show=1')
def send_connect_mail(user, provider, request): data = get_common_mail_context(request) data.update({ 'user': user, 'provider': provider }) subj_user = render_to_string('cosinnus_oauth_client/mail/notification_after_oauth_account_connect.txt', data) text = textfield(render_to_string('cosinnus_oauth_client/mail/notification_after_oauth_account_connect.html', data)) send_html_mail_threaded(user, subj_user, text)
def send_welcome_mail(self, user, request): data = get_common_mail_context(request) provider = self.sociallogin.account.provider data.update({'user': user, 'provider': provider}) subj_user = render_to_string( 'cosinnus_oauth_client/mail/welcome_after_oauth_signup_subj.txt', data) text = textfield( render_to_string( 'cosinnus_oauth_client/mail/welcome_after_oauth_signup.html', data)) send_html_mail_threaded(user, subj_user, text)
def _send_summary_mail(self, template, subj_template, data): from cosinnus.core.mail import get_common_mail_context, send_mail_or_fail from cosinnus.utils.context_processors import cosinnus as cosinnus_context receiver = self.request.user if self.request: context = get_common_mail_context(self.request, user=receiver) context.update(cosinnus_context(self.request)) else: context = {} context.update(data) subject = render_to_string(subj_template, context) send_mail_or_fail(receiver.email, subject, template, context)
def approve_user(request, user_id): """ Approves an inactive, registration pending user and sends out an email to let them know """ error = _check_user_approval_permissions(request, user_id) if error: return error try: user = USER_MODEL.objects.get(id=user_id) except USER_MODEL.DoesNotExist: messages.error(request, _('The user account you were looking for does not exist! Their registration was probably already denied.')) return redirect(reverse('cosinnus:user-list')) if user.is_active: messages.success(request, _('The user account was already approved, but thank you anyway!')) return redirect(reverse('cosinnus:user-list')) user.is_active = True user.save() # message user for accepeted request data = get_common_mail_context(request) data.update({ 'user': user, }) template = 'cosinnus/mail/user_registration_approved.html' # if a welcome email text is set in the portal in admin, send that text instead of the default template portal = CosinnusPortal.get_current() welcome_text = getattr(portal, 'welcome_email_text', None) or '' welcome_text = force_text(welcome_text).strip() if welcome_text: template = None data.update({ 'content': portal.welcome_email_text, }) subj_user = render_to_string('cosinnus/mail/user_registration_approved_subj.txt', data) send_mail_or_fail_threaded(user.email, subj_user, template, data) messages.success(request, _('Thank you for approving user %(username)s (%(email)s)! An introduction-email was sent out to them and they can now log in to the site.') \ % {'username':full_name_force(user), 'email': user.email}) return redirect(reverse('cosinnus:user-list'))
def _notify_users_for_reported_objects(report_obj, request=None): template = 'cosinnus/mail/reported_object_submitted.html' subj_template = 'cosinnus/mail/reported_object_submitted_subj.txt' if request: context = get_common_mail_context(request, user=report_obj.creator) context.update(cosinnus_context(request)) else: context = {} target_obj = report_obj.target_object title = getattr(target_obj, 'title', getattr(target_obj, 'name', force_text(target_obj))) report_url = reverse('admin:cosinnus_cosinnusreportedobject_change', args=(report_obj.id, )) portal = None if issubclass(target_obj.__class__, BaseTaggableObjectModel): portal = target_obj.group.portal elif issubclass(target_obj.__class__, CosinnusGroup): portal = target_obj.portal else: portal = CosinnusPortal.get_current() portal_admins = get_user_model().objects.all().exclude( is_active=False).exclude(last_login__exact=None).filter( id__in=portal.admins) for receiver in portal_admins: context.update({ 'receiver': receiver, 'receiver_name': full_name(receiver), 'sender': report_obj.creator, 'sender_name': full_name(report_obj.creator), 'object': report_obj, 'object_name': title, 'report_admin_url': report_url, 'report_text': report_obj.text, 'object_url': report_obj.get_absolute_url(), }) subject = render_to_string(subj_template, context) send_mail_or_fail(receiver.email, subject, template, context)
def form_valid(self, form): ret = super(UserCreateView, self).form_valid(form) user = self.object # sanity check, retrieve the user's profile (will create it if it doesnt exist) profile = user.cosinnus_profile or get_user_profile_model()._default_manager.get_for_user(user) # set current django language during signup as user's profile language lang = get_language() if not profile.language == lang: profile.language = lang profile.save(update_fields=['language']) # set user inactive if this portal needs user approval and send an email to portal admins if CosinnusPortal.get_current().users_need_activation: user.is_active = False user.save() data = get_common_mail_context(self.request) data.update({ 'user': user, }) # message portal admins of request subject = render_to_string('cosinnus/mail/user_register_notification_subj.txt', data) email_portal_admins(subject, 'cosinnus/mail/user_register_notification.html', data) # message user for pending request subj_user = render_to_string('cosinnus/mail/user_registration_pending_subj.txt', data) send_mail_or_fail_threaded(user.email, subj_user, 'cosinnus/mail/user_registration_pending.html', data) messages.success(self.request, self.message_success_inactive % {'user': user.email, 'email': user.email}) # scramble this users email so he cannot log in until he verifies his email, if the portal has this enabled if CosinnusPortal.get_current().email_needs_verification: with transaction.atomic(): # scramble actual email so the user cant log in but can be found in the admin original_user_email = user.email # don't show the scrambled emai later on user.email = '__unverified__%s__%s' % (str(uuid1())[:8], original_user_email) user.save() set_user_email_to_verify(user, original_user_email, self.request) messages.success(self.request, self.message_success_email_verification % {'user': original_user_email, 'email': original_user_email}) if not CosinnusPortal.get_current().users_need_activation and not CosinnusPortal.get_current().email_needs_verification: messages.success(self.request, self.message_success % {'user': user.email}) user.backend = 'cosinnus.backends.EmailAuthBackend' login(self.request, user) # send user registration signal signals.user_registered.send(sender=self, user=user) # check if there was a token group invite associated with the signup invite_token = self.request.POST.get('invite_token', None) if invite_token: invite = get_object_or_None(CosinnusGroupInviteToken, token__iexact=invite_token, portal=CosinnusPortal.get_current()) if not invite: messages.warning(self.request, _('The invite token you have used does not exist!')) elif not invite.is_active: messages.warning(self.request, _('Sorry, but the invite token you have used is not active yet or not active anymore!')) else: success = apply_group_invite_token_for_user(invite, user) if success: messages.success(self.request, _('Token invitations applied. You are now a member of the associated projects/groups!')) else: messages.error(self.request, _('There was an error while processing your invites. Some of your invites may not have been applied.')) if getattr(settings, 'COSINNUS_SHOW_WELCOME_SETTINGS_PAGE', True): # add redirect to the welcome-settings page, with priority so that it is shown as first one profile.add_redirect_on_next_page(redirect_with_next(reverse('cosinnus:welcome-settings'), self.request), message=None, priority=True) return ret