예제 #1
0
    def send_invite_email(self):
        from pretalx.mail.models import QueuedMail

        role = _('organiser')
        if not self.is_orga and self.is_reviewer:
            role = _('reviewer')
        elif self.is_orga and self.is_reviewer:
            role = _('organiser and reviewer')
        if self.user:
            invitation_link = build_absolute_uri(
                'orga:event.dashboard',
                event=self.event,
                kwargs={'event': self.event.slug})
            invitation_text = _('''Hi!
You have been added to the {event} team as a {role} - you can access the
organiser area here:

    {invitation_link}

See you there,
The {event} crew''').format(role=role,
                            event=self.event.name,
                            invitation_link=invitation_link)
            invitation_subject = _(
                'You have been granted additional privileges on {event}'
            ).format(event=self.event.name)
            to = self.user.email
        else:
            self.invitation_token = get_random_string(
                allowed_chars=string.ascii_lowercase + string.digits,
                length=20)
            self.save()

            invitation_link = build_absolute_uri(
                'orga:invitation.view',
                event=self.event,
                kwargs={'code': self.invitation_token})
            invitation_text = _('''Hi!
You have been invited to the {event} team as a {role} - Please click here to accept:

    {invitation_link}

See you there,
The {event} crew (minus you)''').format(role=role,
                                        event=self.event.name,
                                        invitation_link=invitation_link)
            invitation_subject = _('You have been invited to the {event} crew'
                                   ).format(event=self.event.name)
            to = self.invitation_email

        return QueuedMail(
            to=to,
            reply_to=self.event.email,
            subject=str(invitation_subject),
            text=str(invitation_text),
            event=self.event,
        )
예제 #2
0
    def reset_password(self, event, user=None):
        from pretalx.common.mail import mail
        self.pw_reset_token = get_random_string(32)
        self.pw_reset_time = now()
        self.save()

        if event:
            mail_text = event.settings.mail_text_reset
            context = {
                'name':
                self.name or '',
                'event':
                event.name,
                'url':
                build_absolute_uri(
                    'cfp:event.recover',
                    event=event,
                    kwargs={
                        'event': event.slug,
                        'token': self.pw_reset_token
                    },
                ),
            }
        else:
            context = {
                'name':
                self.name or '',
                'url':
                build_absolute_uri(
                    'orga:auth.recover',
                    kwargs={'token': self.pw_reset_token},
                ),
            }
            mail_text = _('''Hi {name},

you have requested a new password for your pretalx account.
To reset your password, click on the following link:

  {url}

If this wasn\'t you, you can just ignore this email.

All the best,
the pretalx robot''')

        mail(
            self,
            _('Password recovery'),
            mail_text,
            context,
            event,
            locale=get_language(),
        )
        self.log_action(action='pretalx.user.password.reset',
                        person=user,
                        orga=bool(user))
예제 #3
0
    def send(self):
        from pretalx.mail.models import QueuedMail

        invitation_link = build_absolute_uri("orga:invitation.view",
                                             kwargs={"code": self.token})
        invitation_text = _("""Hi!
You have been invited to the {name} event organiser team - Please click here to accept:

{invitation_link}

See you there,
The {organiser} team""").format(
            name=str(self.team.name),
            invitation_link=invitation_link,
            organiser=str(self.team.organiser.name),
        )
        invitation_subject = _("You have been invited to an organiser team")

        mail = QueuedMail.objects.create(
            to=self.email,
            subject=str(invitation_subject),
            text=str(invitation_text),
        )
        mail.send()
        return mail
예제 #4
0
    def _handle_new_user(self, request, email, permission=None):
        event = request.event
        if not permission:
            invitation_token = get_random_string(allowed_chars=string.ascii_lowercase + string.digits, length=20)
            permission = EventPermission.objects.create(
                event=event,
                invitation_email=email,
                invitation_token=invitation_token,
                is_orga=False,
                is_reviewer=True,
            )
        invitation_link = build_absolute_uri('orga:invitation.view', event=event, kwargs={'code': permission.invitation_token})
        invitation_text = _('''Hi!

You have been invited to the submission review team of {event} - Please click here to accept:

    {invitation_link}

We look forward to have you on the team!,
The {event} orga crew (minus you)''').format(event=event.name, invitation_link=invitation_link)
        invitation_subject = _('You have been invited to the reviewer team of {event}').format(event=request.event.name)
        QueuedMail(
            event=request.event, to=email, reply_to=request.event.email,
            subject=str(invitation_subject), text=str(invitation_text),
        ).send()
        request.event.log_action('pretalx.invite.reviewer.send', person=request.user, orga=True)
        messages.success(
            request,
            _('<{email}> has been invited to your reviewer team - more reviewers help gain perspective, so … yay!').format(email=email)
        )
        return redirect(event.orga_urls.review_settings)
예제 #5
0
    def reset_password(self, event, user=None):
        from pretalx.common.mail import mail

        with transaction.atomic():
            self.pw_reset_token = get_random_string(32)
            self.pw_reset_time = now()
            self.save()
            mail(
                self,
                _('Password recovery'),
                event.settings.mail_text_reset,
                {
                    'name': self.name or '',
                    'event': event.name,
                    'url': build_absolute_uri(
                        'cfp:event.recover',
                        event=event,
                        kwargs={'event': event.slug, 'token': self.pw_reset_token},
                    ),
                },
                event,
                locale=get_language(),
            )
            self.log_action(
                action='pretalx.user.password.reset', person=user, orga=bool(user)
            )
예제 #6
0
    def post(self, request, event):
        email = request.POST.get('email')
        event = request.event
        invitation_token = get_random_string(
            allowed_chars=string.ascii_lowercase + string.digits, length=20)
        invitation_link = build_absolute_uri('orga:invitation.view',
                                             kwargs={'code': invitation_token})
        EventPermission.objects.create(
            event=event,
            invitation_email=email,
            invitation_token=invitation_token,
            is_orga=True,
        )
        invitation_text = _('''Hi!

You have been invited to the orga crew of {event} - Please click here to accept:

    {invitation_link}

See you there,
The {event} orga crew (minus you)''').format(event=event.name,
                                             invitation_link=invitation_link)
        mail_send_task.apply_async(args=(
            [email],
            _('You have been invited to the orga crew of {event}').format(
                event=request.event.name), invitation_text,
            request.event.email, event.pk))
        request.event.log_action('pretalx.event.invite.orga.send',
                                 person=request.user,
                                 orga=True)
        messages.success(
            request,
            _('<{email}> has been invited to your team - more team members help distribute the workload, so … yay!'
              ).format(email=email))
        return redirect(request.event.orga_urls.team_settings)
예제 #7
0
def template_context_from_event(event):
    return {
        'all_submissions_url': build_absolute_uri(
            'cfp:event.user.submissions',
            kwargs={'event': event.slug}
        ),
    }
예제 #8
0
    def send_email(self, event):
        email_hashed = hash_email(self.cleaned_data["email"], event)
        email_signed = event_sign(email_hashed, event)

        # For the email link, sign the hashed email address, so that no one
        # can just randomly create new URLs and pretend to be a user that
        # was validated via email. Credits for the email signing code go
        # to Volker Mische / @vmx
        vote_url = build_absolute_uri(
            "plugins:pretalx_public_voting:talks",
            kwargs={
                "event": event.slug,
                "signed_user": email_signed
            },
        )

        mail_text = _("""Hi,

you have registered to vote for submissions for {event.name}.
Please confirm that this email address is valid by following this link:

    {vote_url}

If you did not register for voting, you can ignore this email.

Thank you for participating in the vote!

The {event.name} organisers
""")
        QueuedMail(
            event=event,
            to=self.cleaned_data["email"],
            subject=_("Public voting registration"),
            text=str(mail_text).format(vote_url=vote_url, event=event),
        ).send()
예제 #9
0
    def send(self, event):
        from pretalx.mail.models import QueuedMail

        invitation_link = build_absolute_uri('orga:invitation.view',
                                             kwargs={'code': self.token})
        invitation_text = _('''Hi!
You have been invited to the {name} event organiser team - Please click here to accept:

{invitation_link}

See you there,
The {event} team''').format(
            name=str(self.team.name),
            invitation_link=invitation_link,
            event=str(event.name) if event else str(self.team.organiser.name),
        )
        invitation_subject = _('You have been invited to an organiser team')

        mail = QueuedMail.objects.create(
            to=self.email,
            event=event,
            subject=str(invitation_subject),
            text=str(invitation_text),
        )
        if event:
            mail.save()
        else:
            mail.send()
        return mail
예제 #10
0
    def reset_password(self, event, user=None, mail_text=None, orga=False):
        from pretalx.mail.models import QueuedMail

        self.pw_reset_token = get_random_string(32)
        self.pw_reset_time = now()
        self.save()

        if event:
            path = "orga:event.auth.recover" if orga else "cfp:event.recover"
            url = build_absolute_uri(
                path,
                kwargs={
                    "token": self.pw_reset_token,
                    "event": event.slug
                },
            )
        else:
            url = build_absolute_uri("orga:auth.recover",
                                     kwargs={"token": self.pw_reset_token})
        context = {
            "name": self.name or "",
            "url": url,
        }
        if not mail_text:
            mail_text = _("""Hi {name},

you have requested a new password for your pretalx account.
To reset your password, click on the following link:

  {url}

If this wasn\'t you, you can just ignore this email.

All the best,
the pretalx robot""")

        with override(self.locale):
            mail = QueuedMail.objects.create(
                subject=_("Password recovery"),
                text=str(mail_text).format(**context),
                locale=self.locale,
            )
            mail.to_users.add(self)
            mail.send()
        self.log_action(action="pretalx.user.password.reset",
                        person=user,
                        orga=bool(user))
예제 #11
0
    def post(self, request, event):
        email = request.POST.get('email')
        event = request.event

        kwargs = {
            'event': event,
            'invitation_email': email,
            'is_orga': True,
        }

        permission = EventPermission.objects.filter(user__isnull=True,
                                                    **kwargs).first()
        if not permission:
            invitation_token = get_random_string(
                allowed_chars=string.ascii_lowercase + string.digits,
                length=20)
            permission = EventPermission.objects.create(
                event=event,
                invitation_email=email,
                invitation_token=invitation_token,
                is_orga=True,
            )
            messages.success(
                request,
                _('<{email}> has been invited to your team - more team members help distribute the workload, so … yay!'
                  ).format(email=email))
        else:
            invitation_token = permission.invitation_token
            messages.info(
                request,
                _('<{email}> had already been invited – we\'ve resent the invitation instead :)'
                  ).format(email=email),
            )
        invitation_link = build_absolute_uri('orga:invitation.view',
                                             kwargs={'code': invitation_token})
        invitation_text = _('''Hi!

You have been invited to the orga crew of {event} - Please click here to accept:

    {invitation_link}

See you there,
The {event} orga crew (minus you)''').format(event=event.name,
                                             invitation_link=invitation_link)
        invitation_subject = _(
            'You have been invited to the orga crew of {event}').format(
                event=request.event.name)
        QueuedMail(event=event,
                   to=email,
                   reply_to=request.event.email,
                   subject=str(invitation_subject),
                   text=str(invitation_text)).send()
        request.event.log_action('pretalx.event.invite.orga.send',
                                 person=request.user,
                                 orga=True)
        return redirect(request.event.orga_urls.team_settings)
예제 #12
0
def template_context_from_submission(submission):
    ctx = template_context_from_event(submission.event)
    ctx.update({
        'confirmation_link':
        build_absolute_uri('cfp:event.user.submission.confirm',
                           kwargs={
                               'event': submission.event.slug,
                               'id': submission.pk
                           }),
        'event_name':
        submission.event.name,
        'submission_title':
        submission.title,
        'submission_url':
        build_absolute_uri('cfp:event.user.submission.edit',
                           kwargs={
                               'event': submission.event.slug,
                               'id': submission.pk
                           }),
    })
    return ctx
예제 #13
0
def footer_link_pages(sender, request=None, **kwargs):
    return [{
        "label":
        page.title,
        "link":
        build_absolute_uri(
            "plugins:pretalx_pages:show",
            event=sender,
            kwargs={
                "event": sender.slug,
                "slug": page.slug
            },
        ),
    } for page in Page.objects.filter(event=sender, link_in_footer=True)]
예제 #14
0
def template_context_from_submission(submission):
    ctx = template_context_from_event(submission.event)
    ctx.update({
        'confirmation_link': build_absolute_uri(
            'cfp:event.user.submission.confirm',
            kwargs={'event': submission.event.slug, 'code': submission.code}
        ),
        'event_name': submission.event.name,
        'submission_title': submission.title,
        'submission_url': submission.urls.user_base.full(scheme='https', hostname=settings.SITE_NETLOC),
        'speakers': submission.display_speaker_names,
        'orga_url': submission.orga_urls.base.full(scheme='https', hostname=settings.SITE_NETLOC),
    })
    return ctx
예제 #15
0
def create_user_as_orga(email, submission=None):
    if not email:
        return

    nick = email.split('@')[0].lower()
    while User.objects.filter(nick__iexact=nick).exists():
        nick += random.choice([
            '_1', '_2', '_11', '_42', '_the_first', '_the_third', '_speaker',
            '_third_of_their_name', '_', '123', nick
        ])

    user = User.objects.create_user(
        nick=nick,
        password=get_random_string(32),
        email=email.lower(),
        pw_reset_token=get_random_string(32),
        pw_reset_time=now() + timedelta(days=7),
    )
    SpeakerProfile.objects.get_or_create(user=user, event=submission.event)
    with override(submission.content_locale):
        invitation_link = build_absolute_uri('cfp:event.recover',
                                             kwargs={
                                                 'event':
                                                 submission.event.slug,
                                                 'token': user.pw_reset_token
                                             })
        invitation_text = _('''Hi!

You have been set as the speaker of a submission to the Call for Participation
of {event}, titled »{title}«. An account has been created for you – please follow
this link to set your account password.

{invitation_link}

Afterwards, you can edit your user profile and see the state of your submission.

The {event} orga crew''').format(event=submission.event.name,
                                 title=submission.title,
                                 invitation_link=invitation_link)
        QueuedMail.objects.create(
            event=submission.event,
            to=user.email,
            reply_to=submission.event.email,
            subject=str(
                _('You have been added to a submission for {event}').format(
                    event=submission.event.name)),
            text=invitation_text,
        )
    return user
예제 #16
0
파일: auth.py 프로젝트: bogdanap/pretalx
    def form_valid(self, form):
        user = form.cleaned_data['user']

        if not user:
            messages.success(self.request, phrases.cfp.auth_password_reset)
            return redirect(
                reverse('cfp:event.login',
                        kwargs={'event': self.request.event.slug}))

        if user.pw_reset_time and (
                now() - user.pw_reset_time).total_seconds() < 3600 * 24:
            messages.error(self.request, phrases.cfp.auth_already_requested)
            return redirect(
                reverse('cfp:event.reset',
                        kwargs={'event': self.request.event.slug}))

        try:
            user.pw_reset_token = get_random_string(32)
            user.pw_reset_time = now()
            user.save()
            mail(user,
                 _('Password recovery'),
                 self.request.event.settings.mail_text_reset, {
                     'name':
                     user.name or user.nick,
                     'event':
                     self.request.event.name,
                     'url':
                     build_absolute_uri('cfp:event.recover',
                                        event=self.request.event,
                                        kwargs={
                                            'event': self.request.event.slug,
                                            'token': user.pw_reset_token,
                                        })
                 },
                 self.request.event,
                 locale=get_language())
        except SendMailException:
            messages.error(self.request, phrases.base.error_sending_mail)
            return self.get(self.request, *self.args, **self.kwargs)

        messages.success(self.request, phrases.cfp.auth_password_reset)
        user.log_action('pretalx.user.password.reset')

        return redirect(
            reverse('cfp:event.login',
                    kwargs={'event': self.request.event.slug}))
예제 #17
0
def create_user_as_orga(email, submission=None, name=None):
    form = OrgaSpeakerForm({"name": name, "email": email})
    form.is_valid()

    user = User.objects.create_user(
        password=get_random_string(32),
        email=form.cleaned_data["email"].lower().strip(),
        name=form.cleaned_data.get("name").strip(),
        pw_reset_token=get_random_string(32),
        pw_reset_time=now() + dt.timedelta(days=7),
    )
    SpeakerProfile.objects.get_or_create(user=user, event=submission.event)
    with override(submission.content_locale):
        invitation_link = build_absolute_uri(
            "cfp:event.recover",
            kwargs={"event": submission.event.slug, "token": user.pw_reset_token},
        )
        invitation_text = _(
            """Hi!

You have been set as the speaker of a proposal to the Call for Participation
of {event}, titled “{title}”. An account has been created for you – please follow
this link to set your account password.

{invitation_link}

Afterwards, you can edit your user profile and see the state of your proposal.

The {event} orga crew"""
        ).format(
            event=submission.event.name,
            title=submission.title,
            invitation_link=invitation_link,
        )
        mail = QueuedMail.objects.create(
            event=submission.event,
            reply_to=submission.event.email,
            subject=str(
                _("You have been added to a proposal for {event}").format(
                    event=submission.event.name
                )
            ),
            text=invitation_text,
        )
        mail.to_users.add(user)
    return user
예제 #18
0
def create_user_as_orga(email, submission=None, name=None):
    if not email:
        return None

    user = User.objects.create_user(
        password=get_random_string(32),
        email=email.lower(),
        name=name,
        pw_reset_token=get_random_string(32),
        pw_reset_time=now() + timedelta(days=7),
    )
    SpeakerProfile.objects.get_or_create(user=user, event=submission.event)
    with override(submission.content_locale):
        invitation_link = build_absolute_uri(
            'cfp:event.recover',
            kwargs={'event': submission.event.slug, 'token': user.pw_reset_token},
        )
        invitation_text = _(
            '''Hi!

You have been set as the speaker of a submission to the Call for Participation
of {event}, titled »{title}«. An account has been created for you – please follow
this link to set your account password.

{invitation_link}

Afterwards, you can edit your user profile and see the state of your submission.

The {event} orga crew'''
        ).format(
            event=submission.event.name,
            title=submission.title,
            invitation_link=invitation_link,
        )
        QueuedMail.objects.create(
            event=submission.event,
            to=user.email,
            reply_to=submission.event.email,
            subject=str(
                _('You have been added to a submission for {event}').format(
                    event=submission.event.name
                )
            ),
            text=invitation_text,
        )
    return user
예제 #19
0
    def form_valid(self, form):
        user = form.cleaned_data['user']

        if user.pw_reset_time and (now() - user.pw_reset_time).total_seconds() < 3600 * 24:
            messages.error(self.request, _('You already requested a new password within the last 24 hours.'))
            return redirect(reverse('cfp:event.reset', kwargs={
                'event': self.request.event.slug
            }))

        try:
            user.pw_reset_token = get_random_string(32)
            user.pw_reset_time = now()
            user.save()
            mail(
                user,
                _('Password recovery'),
                self.request.event.settings.mail_text_reset,
                {
                    'name': user.name or user.nick,
                    'event': self.request.event.name,
                    'url': build_absolute_uri(
                        'cfp:event.recover', kwargs={
                            'event': self.request.event.slug,
                            'token': user.pw_reset_token,
                        }
                    )
                },
                self.request.event,
                locale=get_language()
            )
        except SendMailException:
            messages.error(self.request, _('There was an error sending the mail. Please try again later.'))
            return self.get(self.request, *self.args, **self.kwargs)

        messages.success(self.request, _('We will send you an e-mail containing further instructions. If you don\'t '
                                         'see the email within the next minutes, check your spam inbox!'))
        user.log_action('pretalx.user.password.reset')

        return redirect(reverse('cfp:event.login', kwargs={
            'event': self.request.event.slug
        }))
예제 #20
0
 def reset_password(self, event):
     from pretalx.common.mail import mail
     with transaction.atomic():
         self.pw_reset_token = get_random_string(32)
         self.pw_reset_time = now()
         self.save()
         mail(self,
              _('Password recovery'),
              event.settings.mail_text_reset, {
                  'name':
                  self.name or self.nick,
                  'event':
                  event.name,
                  'url':
                  build_absolute_uri('cfp:event.recover',
                                     event=event,
                                     kwargs={
                                         'event': event.slug,
                                         'token': self.pw_reset_token,
                                     })
              },
              event,
              locale=get_language())
예제 #21
0
    def reset_password(self, event, user=None):
        from pretalx.mail.models import QueuedMail

        self.pw_reset_token = get_random_string(32)
        self.pw_reset_time = now()
        self.save()

        context = {
            'name': self.name or '',
            'url': build_absolute_uri(
                'orga:auth.recover', kwargs={'token': self.pw_reset_token}
            ),
        }
        mail_text = _(
            '''Hi {name},

you have requested a new password for your pretalx account.
To reset your password, click on the following link:

  {url}

If this wasn\'t you, you can just ignore this email.

All the best,
the pretalx robot'''
        )

        with override(get_language()):
            mail = QueuedMail.objects.create(
                subject=_('Password recovery'),
                text=str(mail_text).format(**context),
            )
            mail.to_users.add(self)
            mail.send()
        self.log_action(
            action='pretalx.user.password.reset', person=user, orga=bool(user)
        )