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
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 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'), '']
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
def get_success_url(self): return redirect_with_next(reverse('login'), self.request)
def get_login_redirect_url(self, request): return redirect_with_next(reverse('cosinnus:user-dashboard'), self.request)