Esempio n. 1
0
 def test_saving_and_retreiving_messages(self):
     invitation = Invitation()
     invitation.save()
 
     first_message = Message()
     first_message.text = 'The first (ever) message'
     first_message.invitation = invitation
     first_message.save()
     
     second_message = Message()
     second_message.text = 'Message the second'
     second_message.invitation = invitation
     second_message.save()
     
     saved_invitation = Invitation.objects.first()
     self.assertEqual(saved_invitation, invitation)
     
     saved_messages = Message.objects.all()
     self.assertEqual(saved_messages.count(), 2)
     
     first_saved_message = saved_messages[0]
     second_saved_message = saved_messages[1]
     
     self.assertEqual(first_saved_message.text, 'The first (ever) message')
     self.assertEqual(first_saved_message.invitation, invitation)
     self.assertEqual(second_saved_message.text, 'Message the second')   
     self.assertEqual(second_saved_message.invitation, invitation)
Esempio n. 2
0
def bulkCreateInvites(data: List[InvitationRow], cohort = None)->List[Invitation]:
    res = {"messages":[],"data":{"updated":0,"added":0}}
    for entry in data:
        try:
            User.objects.get(username = entry.email)
        except User.DoesNotExist:
            pass
        else:
            res["messages"].append(f"User {entry.email} already exists")
            continue

        try:
            invitation = Invitation.objects.get(email=entry.email)
        except Invitation.DoesNotExist:
            invitation = Invitation(
                    email = entry.email
                )
            invitation.save()
            res["data"]["added"]+=1
        else:
            res["data"]["updated"]+=1

        invitation.metadata = {"position":entry.position,"affiliation":entry.affiliation}
            
        countries = []
        for cname in entry.countries:
            try:
                c = Country.objects.get(name=cname)
            except Country.DoesNotExist:
                res["messages"].append(f"Did not find country {cname} while creating invite for {entry.email}")
            else:
                countries.append(c)

        invitation.countries.set(countries)
    return res 
    def test_dispatch_and_register(self):
        """
        Long-form test that tests creating and sending an invite, and then
        registering a user by following the referral link in the invitation email.
        """
        countries = [
            Country(gwno=i, name=str(i), shape={}, simpleshape={})
            for i in range(5)
        ]
        for c in countries:
            c.save()

        i = Invitation(email="*****@*****.**")
        i.save()
        i.countries.set(countries)
        dispatchInvitation(i)

        m = mail.outbox[0]

        # Mailed flag
        self.assertTrue(i.mailed)

        # Email has proper title
        self.assertEqual(m.subject, settings.DEFAULT_EMAIL_TITLE)

        # Email contains ref. key
        self.assertIsNotNone(re.search(i.refkey, m.body))

        r = self.client.get(i.invitationLink(), follow=True)
        location, *_ = r.redirect_chain[-1]

        soup = BeautifulSoup(r.content, features="html.parser")

        regform = soup.find("form")
        usernameInput = regform.find("input", attrs={"name": "username"})

        # Email is in the username form
        self.assertEqual(usernameInput["value"], i.email)

        url = regform.action if regform.action else location
        method = regform.method if regform.method else "POST"

        getattr(self.client,
                method.lower())(url, {
                    "username": usernameInput["value"],
                    "password1": hashlib.md5(b"1234").hexdigest(),
                    "password2": hashlib.md5(b"1234").hexdigest()
                })

        # User was created
        try:
            u = User.objects.get(email=i.email)
        except User.DoesNotExist:
            self.fail("User was not created")

        # Make sure all countries were added
        self.assertEqual({c.pk
                          for c in countries},
                         {c.pk
                          for c in u.profile.countries.all()})
Esempio n. 4
0
def dispatchInvitation(invitation: Invitation) -> bool:
    """
    Sends an email to an invitee
    """
    try:
        assert not invitation.mailed and not invitation.fulfilled
    except AssertionError:
        logger.warning(f"Invitation for {invitation.email} was not sent: "
                       "Already fulfilled!")
        return False

    if invitation.refkey is None:
        invitation.refkey = referralKeygen(invitation.email)
        invitation.save()

    if invitation.customemail and invitation.customsig:
        et = EmailTemplate(
            subject=settings.DEFAULT_EMAIL_TITLE,
            headline="Conflict Cartographer",
            message=invitation.customemail,
            signature=invitation.customsig,
        )
    else:
        try:
            et = EmailTemplate.objects.get(active=True, email_type="inv")
        except EmailTemplate.DoesNotExist:
            et = EmailTemplate.objects.create(
                active=True,
                subject=settings.DEFAULT_EMAIL_TITLE,
                email_type="inv")

    html = renderEmailTemplate(et, {"link": invitation.invitationLink()})
    plaintext = re.sub("\[[^\)]+", invitation.invitationLink(), et.message)

    call = {
        "subject": et.subject,
        "message": plaintext,
        "html_message": html,
        "from_email": settings.EMAIL_FROM_ADDRESS,
        "recipient_list": [invitation.email]
    }

    try:
        mail.send_mail(**call)
    except ConnectionRefusedError:
        logger.error("Failed to send email to %s, connection refused!",
                     invitation.email)
        return False
    else:
        logger.info("Sent email to %s", invitation.email)
        invitation.mailed = True
        invitation.save()
        return True
Esempio n. 5
0
def invitations_save(request):
	if request.method == 'POST':
		datos = json.loads(request.body.decode())

		invitacion = Invitation(username=request.user,invitacion=datos['data']['invitacion'])
		print(datos['data']['invitados'][0]['email'])
		invitacion.save()

		contenido = "Tu amigo "+request.user.first_name+" "+request.user.last_name+" te ha invitado a jugar la quiniela del mundial"
		contenido+= "en http://www.futbolgamb.com no dejes de entrar y divertirte tratando de asertar los resultados de los partidos y compitiendo contra otros"
		correos = []	

		for email in datos['data']['invitados']:
			correos.append(email['email'])

		send_mail('Invitaciones para futbolgamb', contenido, '*****@*****.**',correos, fail_silently=False)
		#return Response(position)
		#jsonResponse = serializers.serialize("json", position)
		return HttpResponse(json.dumps({"success" : "true"}), content_type="application/json",status=200)
Esempio n. 6
0
def sendMail(email, user):
    if isValidEmail(email):
        if user.profile.remaining_invitations <= 0:
            return False
        token = uuid.uuid1().hex
        link = settings.WEB_URL + "/register?email=" + email + "&token=" + token + "&id=" + str(
            user.id)
        message = u'¡Nuestro usuario ' + user.first_name + u' ' + user.last_name + u' quiere trocar contigo! ¡Únete a esta gran comunidad que recicla e intercambia sin dinero! \n \n Sólo ingresa a \n' + link
        subject = user.first_name + u' te invitó Trueque'
        #        send_mail( subject, message, settings.EMAIL_HOST_USER, [email], fail_silently=False)
        print message
        inv = Invitation(id_sender=user,
                         email=email,
                         token=token,
                         pending=True)
        inv.save()
        profile = user.profile
        profile.remaining_invitations = profile.remaining_invitations - 1
        puntos = Point.objects.get(action="invitation_sent")
        profile.quds = profile.quds + puntos.qty
        profile.save()
        return True