Example #1
0
def create_invite(form):
    invitation = Invitation(email=form.email.data,
                            should_be_admin=bool(form.should_be_admin.data))

    existing_user = User.query.filter(User.email == invitation.email).first()
    if existing_user:
        raise Exception(
            "A user with this email address is already registered.")

    # We need the user id to generate the token, so we have to commit
    # opportunistically here.
    db.session.add(invitation)
    db.session.commit()

    try:
        token = invitation.generate_secure_token()
        resp = send_email(
            form.email.data,
            "Invitation to edit the Pan-Dene Comparative Lexicon",
            "auth/email/invite",
            token=token)

        if not (resp.status_code >= 200 and resp.status_code <= 299):
            raise Exception("Got {} from Sendgrid".format(resp.status_code))
    except Exception as e:
        db.session.delete(invitation)
        db.session.commit()
        raise e
    def test_delete(self) -> None:
        db.session.delete = Mock()
        db.session.commit = Mock()

        invitation = Invitation(id=123)
        invitation.delete()

        db.session.delete.assert_called_once_with(invitation)
        db.session.commit.assert_called_once_with()
    def test_save(self) -> None:
        db.session.add = Mock()
        db.session.commit = Mock()

        invitation = Invitation(id=123)
        invitation.save()

        db.session.add.assert_called_once_with(invitation)
        db.session.commit.assert_called_once_with()
    def test_get_all(self, mock_query: Mock) -> None:
        expected = [Invitation(id=123)]

        all = mock_query.return_value.all
        all.return_value = expected

        result = Invitation.get_all()

        all.assert_called_once_with()

        assert result == expected
    def test_get(self, mock_get_all: Mock, app: Flask) -> None:
        mock_get_all.return_value = [
            Invitation(id=12, email='email', is_admin=True),
            Invitation(id=23, email='email2', is_admin=False),
        ]

        app.register_blueprint(invitations.module)

        client = app.test_client()

        response = client.get(
            '/invitations',
            headers=build_authorization_headers(app, is_admin=True),
        )

        mock_get_all.assert_called_once_with()

        assert response.data == (b'[{"id": 12, "email": "email", "is_admin": true}, '
                                 b'{"id": 23, "email": "email2", "is_admin": false}]\n')
        assert response.status_code == HTTPStatus.OK
Example #6
0
def new_invitation():
    request_dict = InvitationSchema.validate_request()
    request_dict['userIntID'] = g.user_id
    request_dict['tenantID'] = g.tenant_uid
    invitation = Invitation()
    invitation_dict = invitation.create(request_dict).to_dict()
    user = User.query.filter(User.id == g.user_id).first_or_404()
    username = user.email
    email_title = current_app.config.get('EMAIL_TITLE')
    site_domain = current_app.config.get('SITE_DOMAIN')
    site_name = current_app.config.get('SITE_NAME')
    send_invite_mail(invitation, username, email_title, site_domain, site_name)
    return jsonify(invitation_dict), 201
    def test_find_by_email(self, mock_query: Mock) -> None:
        expected = Invitation(id=123)

        filter_by = mock_query.return_value.filter_by
        first = filter_by.return_value.first
        first.return_value = expected

        result = Invitation.find_by_email('name-xyz', None)

        filter_by.assert_called_once_with(email='name-xyz')
        first.assert_called_once_with()

        assert result == expected
    def test_find_by_email_with_id(self, mock_query: Mock) -> None:
        expected = Invitation(id=123)

        filter_by = mock_query.return_value.filter_by
        filter = filter_by.return_value.filter
        first = filter.return_value.first
        first.return_value = expected

        result = Invitation.find_by_email('name-xyz', 654)

        filter_by.assert_called_once_with(email='name-xyz')
        filter.assert_called_once_with(_BinaryExpressionMatcher(Invitation.id != 654))
        first.assert_called_once_with()

        assert result == expected
Example #9
0
    def create(self, validated_data):
        user = self.context['request'].user
        invitation = Invitation(inviter=user)
        invitation.save()
        EmailService().send_email(
            "*****@*****.**", "welcome to shooka",
            "hi\n you invited to " + user.company.name +
            "\nclick this link and complete your registration \n "
            "127.0.0.1:3000/register/agent/" + invitation.key)

        validated_data["username"] = validated_data["email"]
        validated_data["invitation"] = invitation
        validated_data["is_active"] = False
        validated_data["company"] = user.company

        return super(AgentSerializer, self).create(validated_data)
Example #10
0
def post(user):
    """send invitation to phone number. confirmation code is deterministic based on team info"""

    data = request.get_json()

    try:
        number = parse(data["phone_number"], "US")
    except NumberParseException:
        message = "The number supplied does not seem to be valid. Please try again."
        print(message)
        return make_response(jsonify({"message": message}), 400)

    number = f"+{number.country_code}{number.national_number}"

    # generate a confirmation code
    team = db.session.query(Team).filter(Team.id == data["team_id"]).one()

    code = encode(team)

    # format message
    message = f"{user.username} invited you to join their team {team.name} on the Bricks app."

    # send message to number with Twilio
    recipient = {"phone_number": number}

    send_message(recipient, message)
    send_message(
        recipient,
        "Download the app here: https://itunes.apple.com/us/app/stack-a-brick/id1456194944#?platform=iphone"
    )
    send_message(recipient, "Use this code to join their team:")
    send_message(recipient, code)
    # add invitation to db
    invitation = Invitation(user=user,
                            team=team,
                            invitee_phone=number,
                            code=code)
    db.session.add(invitation)
    db.session.commit()
    db.session.close()

    message = f"Invitation sent to {number}"
    return make_response(jsonify({"message": message}), 200)
Example #11
0
def new_invitation():
    form = InvitationForm()
    if form.validate_on_submit():
        recipients = form.recipients.data.split(',')
        for recipient in recipients:
            receiver = User.query.filter_by(username=recipient).first()
            invitation = Invitation(
                sender=current_user,
                recipient=receiver,
                invitation_header=form.invitation_header.data,
                invitation_body=form.invitation_body.data,
                invitation_footer=form.invitation_footer.data,
                accepted=True)
            db.session.add(invitation)
            db.session.commit()
        flash('Invitation Created')
        return redirect(url_for('home'))
    return render_template('new_invitation.html',
                           title='New Invitation',
                           form=form)
Example #12
0
  db.session.add(demo_5_mme)
  db.session.add(demo_6_att)
  db.session.add(demo_7_abs)

  five_peace_band = Band(name="Five Peace Band")
  five_peace_band.owner = demo
  five_peace_band.style = jazz

  fpb_owner = UserBand(is_confirmed=True)
  fpb_owner.user = demo
  fpb_owner.band = five_peace_band

  db.session.add(five_peace_band)
  db.session.add(fpb_owner)

  kenny_to_kenny = Invitation(message="")
  kenny_to_kenny.sender = demo
  kenny_to_kenny.recipient = demo_2
  kenny_to_kenny.band = five_peace_band

  fpb_pending = UserBand(is_confirmed=False)
  fpb_pending.user = demo_2
  fpb_pending.band = five_peace_band

  db.session.add(kenny_to_kenny)
  db.session.add(fpb_pending)

  atcq_tribute = Band(name="A Tribe Called Quest Tribute Group")
  atcq_owner = UserBand(is_confirmed=True)
  atcq_tribute.owner = demo_3
  atcq_tribute.style = hiphop