Exemplo n.º 1
0
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'))
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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')
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
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'))
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    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