Example #1
0
    def set_base_profile_data(self, profile, request):
        # set language
        lang = get_language()
        profile.language = lang
        profile.save(update_fields=['language'])

        copy_profile = self.cleaned_data.get('copy_profile')
        welcome_page = '{}?copy_profile={}'.format(reverse('welcome_oauth'),
                                                   copy_profile)
        profile.add_redirect_on_next_page(redirect_with_next(
            welcome_page, request),
                                          message=None,
                                          priority=True)

        # set visibility
        if settings.COSINNUS_USER_DEFAULT_VISIBLE_WHEN_CREATED:
            media_tag = profile.media_tag
            media_tag.visibility = BaseTagObject.VISIBILITY_ALL
            media_tag.save()

        # set the newsletter opt-in
        if settings.COSINNUS_USERPROFILE_ENABLE_NEWSLETTER_OPT_IN:
            profile.settings['newsletter_opt_in'] = self.cleaned_data.get(
                'newsletter_opt_in')

        profile.settings[PROFILE_SETTING_COSINUS_OAUTH_LOGIN] = True

        profile.save()
        return profile
Example #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)
Example #3
0
    def create_account(self, data, groups):

        username = self.get_unique_workshop_name(data[0])
        first_name = data[1]
        last_name = data[2]

        try:
            name_string = '"{}":"{}"'.format(
                PROFILE_SETTING_WORKSHOP_PARTICIPANT_NAME, username)
            profile = UserProfile.objects.get(settings__contains=name_string)
            user = profile.user
            user.first_name = first_name
            user.last_name = last_name
            user.save()
            self.create_or_update_memberships(user, data, groups)
            return data + [user.email, '']
        except ObjectDoesNotExist:
            random_email = '{}@wechange.de'.format(get_random_string())
            pwd = get_random_string()
            user = create_base_user(random_email,
                                    password=pwd,
                                    first_name=first_name,
                                    last_name=last_name)

            if user:
                profile = get_user_profile_model(
                )._default_manager.get_for_user(user)
                profile.settings[
                    PROFILE_SETTING_WORKSHOP_PARTICIPANT_NAME] = username
                profile.settings[PROFILE_SETTING_WORKSHOP_PARTICIPANT] = True
                profile.add_redirect_on_next_page(redirect_with_next(
                    group_aware_reverse('cosinnus:group-dashboard',
                                        kwargs={'group': self.group}),
                    self.request),
                                                  message=None,
                                                  priority=True)
                profile.save()

                unique_email = 'User{}.C{}@wechange.de'.format(
                    str(user.id), str(self.group.id))
                user.email = unique_email
                user.is_active = False
                user.save()

                self.create_or_update_memberships(user, data, groups)
                return data + [unique_email, pwd]
            else:
                return data + [_('User was not created'), '']
Example #4
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
Example #5
0
 def get_success_url(self):
     return redirect_with_next(reverse('login'), self.request)
Example #6
0
 def get_login_redirect_url(self, request):
     return redirect_with_next(reverse('cosinnus:user-dashboard'),
                               self.request)