示例#1
0
def referral(referral_id):
    referral = Referral.query.get_or_404(referral_id)
    to_decrypt = Referral.query.filter_by(id=referral_id).with_entities(
        Referral.medicare, Referral.secondary).first()
    d_medicare = Referral.decrypt_data(to_decrypt.medicare)
    d_secondary = Referral.decrypt_data(to_decrypt.secondary)
    submitter = User.query.get(referral.user_id)
    user = User.query.get(current_user.id)
    if referral.source_id == current_user.source_id:
        return render_template(
            'referrals/referral.html',
            title=f"{referral.firstname} {referral.lastname}",
            referral=referral,
            user=user,
            submitter=submitter,
            d_medicare=d_medicare,
            d_secondary=d_secondary)
    elif current_user.role == 'admin':
        return render_template(
            'referrals/referral.html',
            title=f"{referral.firstname} {referral.lastname}",
            referral=referral,
            user=user,
            submitter=submitter,
            d_medicare=d_medicare,
            d_secondary=d_secondary)
    else:
        abort(403)
示例#2
0
def issue_referral_code_for_user(user):
    r = Referral.find_referral_by_uid(user.id)
    if r is None:
        code = generate_referral_code(user.id)
        r = Referral(code=code, user_id=user.id)
        db.session.add(r)
        db.session.flush()

    return r.code
示例#3
0
def is_user_can_join_referral_program(user):
    r = Referral.find_referral_by_uid(user.id)
    # we remove is_valid_email(user.email) temporary
    if r is None:
        return True

    return False
示例#4
0
def reward_user_redeem_code(user_id, code):
    u = User.find_user_with_id(user_id)
    if u is not None and is_valid_email(u.email):
        r = Referral.find_referral_by_uid(u.id)
        if r is not None:
            send_reward_redeem.delay(
                u.email, code,
                '{}prediction?refer={}'.format(g.BASE_URL, r.code))
示例#5
0
def get_referral() -> Optional[Referral]:
    """Get the eventual referral stored in cookie"""
    # whether user arrives via a referral
    referral = None
    if request.cookies:
        ref_code = request.cookies.get(_REFERRAL_COOKIE)
        referral = Referral.get_by(code=ref_code)

    if not referral:
        if "slref" in session:
            ref_code = session["slref"]
            referral = Referral.get_by(code=ref_code)

    if referral:
        LOG.d("referral found %s", referral)

    return referral
示例#6
0
def get_referral() -> Optional[Referral]:
    """Get the eventual referral stored in cookie"""
    # whether user arrives via a referral
    referral = None
    if request.cookies:
        ref_code = request.cookies.get(_REFERRAL_COOKIE)
        referral = Referral.get_by(code=ref_code)

    return referral
示例#7
0
def user_subscribe():
    """
	" 3 use cases:
	" Popup subscribe email will appear after user plays on match_id.
	" Popup subscribe email will appear at the first time.
	" Popup subscribe email will apear when user click on referral link.
	"""
    try:
        data = request.json
        if data is None:
            return response_error(MESSAGE.INVALID_DATA, CODE.INVALID_DATA)

        if 'email' not in data or is_valid_email(data["email"]) is False:
            return response_error(MESSAGE.USER_INVALID_EMAIL,
                                  CODE.USER_INVALID_EMAIL)

        if user_bl.is_email_subscribed(data['email']):
            return response_error(MESSAGE.EMAIL_ALREADY_SUBSCRIBED,
                                  CODE.EMAIL_ALREADY_SUBSCRIBED)

        match = Match.find_match_by_id(data.get('match_id', -1))
        email = data["email"]
        uid = int(request.headers["Uid"])
        referral_code = data.get('referral_code', None)

        user = User.find_user_with_id(uid)
        user.email = email
        user.is_user_disable_popup = 0
        user.is_subscribe = 1

        if referral_code is not None:
            r = Referral.find_referral_by_code(referral_code)
            if r is not None and r.user_id != uid:
                user.invited_by_user = r.user_id

        db.session.flush()

        # issue referral code for user if any
        referral_bl.issue_referral_code_for_user(user)
        db.session.commit()

        # send email
        result, code_1, code_2 = user_bl.claim_redeem_code_for_user(user)
        if result:
            subscribe_email_to_claim_redeem_code.delay(
                email, code_1, code_2, request.headers["Fcm-Token"],
                request.headers["Payload"], uid)
        elif match is not None:
            subscribe_email.delay(email, match.id,
                                  request.headers["Fcm-Token"],
                                  request.headers["Payload"], uid)

        return response_ok(user.to_json())

    except Exception, ex:
        db.session.rollback()
        return response_error(ex.message)
示例#8
0
def referral_route():
    if request.method == "POST":
        if request.form.get("form-name") == "create":
            code = request.form.get("code")
            if re.fullmatch(_REFERRAL_PATTERN, code) is None:
                flash(
                    "At least 3 characters. Only lowercase letters, "
                    "numbers, dashes (-) and underscores (_) are currently supported.",
                    "error",
                )
                return redirect(url_for("dashboard.referral_route"))

            if Referral.get_by(code=code):
                flash("Code already used", "error")
                return redirect(url_for("dashboard.referral_route"))

            name = request.form.get("name")
            referral = Referral.create(user_id=current_user.id,
                                       code=code,
                                       name=name)
            db.session.commit()
            flash("A new referral code has been created", "success")
            return redirect(
                url_for("dashboard.referral_route", highlight_id=referral.id))
        elif request.form.get("form-name") == "update":
            referral_id = request.form.get("referral-id")
            referral = Referral.get(referral_id)
            if referral and referral.user_id == current_user.id:
                referral.name = request.form.get("name")
                db.session.commit()
                flash("Referral name updated", "success")
                return redirect(
                    url_for("dashboard.referral_route",
                            highlight_id=referral.id))
        elif request.form.get("form-name") == "delete":
            referral_id = request.form.get("referral-id")
            referral = Referral.get(referral_id)
            if referral and referral.user_id == current_user.id:
                Referral.delete(referral.id)
                db.session.commit()
                flash("Referral deleted", "success")
                return redirect(url_for("dashboard.referral_route"))

    # Highlight a referral
    highlight_id = request.args.get("highlight_id")
    if highlight_id:
        highlight_id = int(highlight_id)

    referrals = Referral.query.filter_by(user_id=current_user.id).all()
    # make sure the highlighted referral is the first referral
    highlight_index = None
    for ix, referral in enumerate(referrals):
        if referral.id == highlight_id:
            highlight_index = ix
            break

    if highlight_index:
        referrals.insert(0, referrals.pop(highlight_index))

    return render_template("dashboard/referral.html", **locals())
示例#9
0
    def test_user_subscribe_email_with_referral_code(self):
        self.clear_data_before_test()

        # claim referral code to uid 88
        code = '1ABC'
        r = Referral.find_referral_by_code(code)
        if r is None:
            r = Referral(
                code=code,
                user_id=88
            )
            db.session.add(r)
        else:
            r.user_id = 88
        db.session.commit()


        with self.client:
            Uid = 66
            params = {
                "email": "*****@*****.**",
                "referral_code": code
            }
            response = self.client.post(
                                    '/subscribe',
                                    data=json.dumps(params), 
                                    content_type='application/json',
                                    headers={
                                        "Uid": "{}".format(Uid),
                                        "Fcm-Token": "{}".format(123),
                                        "Payload": "{}".format(123),
                                    })
            data = json.loads(response.data.decode()) 
            self.assertTrue(data['status'] == 1)

            user = User.find_user_with_id(66)
            self.assertEqual(user.invited_by_user, 88)
def join_referral_program():
    """
	" user joins referral program
	"""
    try:
        uid = int(request.headers['Uid'])
        if referral_bl.is_user_can_join_referral_program(
                User.find_user_with_id(uid)):
            r = Referral(code=referral_bl.generate_referral_code(uid),
                         user_id=uid)
            db.session.add(r)
            db.session.commit()

            response = r.to_json()
            response['referral_link'] = '{}prediction?refer={}'.format(
                g.BASE_URL, r.code)

            return response_ok(response)

        return response_error(MESSAGE.REFERRAL_USER_JOINED_ALREADY,
                              CODE.REFERRAL_USER_JOINED_ALREADY)
    except Exception, ex:
        db.session.rollback()
        return response_error(ex.message)
    def test_check_user_join_referral_program(self):
        self.clear_data_before_test()
        code = 'A123'

        with self.client:
            Uid = 88
            response = self.client.get('/referral/check',
                                       headers={
                                           "Uid": "{}".format(Uid),
                                           "Fcm-Token": "{}".format(123),
                                           "Payload": "{}".format(123),
                                       })

            data = json.loads(response.data.decode())
            self.assertTrue(data['status'] == 0)

            # generate referral code for user id 88
            r = Referral.find_referral_by_code(code)
            if r is not None:
                r.user_id = 88
            else:
                r = Referral(code=code, user_id=88)
                db.session.add(r)
            db.session.commit()

            # call again
            response = self.client.get('/referral/check',
                                       headers={
                                           "Uid": "{}".format(Uid),
                                           "Fcm-Token": "{}".format(123),
                                           "Payload": "{}".format(123),
                                       })

            data = json.loads(response.data.decode())
            self.assertTrue(data['status'] == 1)
            self.assertEqual(data['data']['code'], code)
示例#12
0
def get_channel_statistics(bot, channel_id, db_session):
    """ Get information about channel referral program

    :param channel_id: telegram channel id
    :type channel_id: int
    :param db_session: DB session
    :type db_session: session
    :return: total count of new users, top referrals
    :rtype: tuple
    """
    logger.debug('Getting stats for <channel:{0}>'.format(channel_id))

    new_users = set(Referral.get_new_users(bot, channel_id))
    logger.debug('new users from referral program: {0}'.format(new_users))

    top_users = db_session \
        .query(Referral.inviter_id, Inviter.name, Inviter.first_name, Inviter.last_name) \
        .join(Inviter, Referral.inviter_id == Inviter.inviter_id) \
        .filter(Referral.channel_id == channel_id) \
        .group_by(Referral.inviter_id, Inviter.name, Inviter.first_name, Inviter.last_name) \
        .order_by(Referral.inviter_id.desc())

    top_users_stats = []
    for user_id, username, first_name, last_name in top_users:
        invited_users = [
            id for id, in db_session.query(Referral.receiver_id).filter_by(
                inviter_id=user_id)
        ]
        invited_users = len(set(invited_users) & new_users)
        if invited_users:
            if not username:
                username = '******'.format(first_name, last_name)
            top_users_stats.append((username, invited_users))

    top_users_stats = sorted(top_users_stats,
                             key=lambda data: data[1],
                             reverse=True)

    logger.debug('Top users: {0}'.format(top_users_stats))
    return len(new_users), top_users_stats
def check_referral():
    """
	" check user has joined referral program or not
	"""
    try:
        uid = int(request.headers['Uid'])
        r = Referral.find_referral_by_uid(uid)

        response = {
            "code": None,
            "referral_link": None,
            "referred_users": referral_bl.all_referred_users_by_user(uid)
        }
        if r is None:
            return response_error(response)

        response['code'] = r.code
        response['referral_link'] = '{}prediction?refer={}'.format(
            g.BASE_URL, r.code)
        return response_ok(response)
    except Exception, ex:
        return response_error(ex.message)
示例#14
0
    def show_link(bot, update):
        """ Callback function, that added link to the CHANNEL for inline message.
        Function recieve code from update.callback_query.data and uses it for
        determinate channel.

        :param bot: bot
        :type bot: telegram.Bot
        :param update: update event
        :type update: relegram.Update
        """
        code = update.callback_query.data
        inviter_id = db_session.query(ChannelInviter.inviter_id).filter_by(
            code=code).first()[0]
        # If another user pressed the button (not sender)
        # open the link to the channel
        if inviter_id != update.callback_query.from_user.id:
            channel = db_session.query(ChannelInviter).filter_by(
                code=code).first().channel

            # If user not in referrals
            # (not applyed the refferal link yet) add it to DB
            if db_session.query(Referral).filter_by(
                    receiver_id=update.callback_query.from_user.id,
                    channel_id=channel.channel_id).count() == 0:
                db_session.add(Referral(
                    inviter_id, channel.channel_id,
                    receiver_id=update.callback_query.from_user.id))
                db_session.commit()

            button = InlineKeyboardButton(
                ButtonsLabels.GO_TO, url=Links.BASE.format(channel.username))
            keyboard = create_inline_keyboard([button])
            text = Messages.INLINE_LINK_APPERED.format(channel.username)
            update.callback_query.edit_message_text(text=text,
                                                    parse_mode=ParseMode.HTML,
                                                    reply_markup=keyboard)

        return update.callback_query.answer()
示例#15
0
def fake_data():
    LOG.d("create fake data")
    # Remove db if exist
    if os.path.exists("db.sqlite"):
        LOG.d("remove existing db file")
        os.remove("db.sqlite")

    # Create all tables
    db.create_all()

    # Create a user
    user = User.create(
        email="*****@*****.**",
        name="John Wick",
        password="******",
        activated=True,
        is_admin=True,
        enable_otp=False,
        otp_secret="base32secret3232",
        intro_shown=True,
        fido_uuid=None,
    )
    user.include_sender_in_reverse_alias = None
    db.session.commit()

    user.trial_end = None

    LifetimeCoupon.create(code="coupon", nb_used=10, commit=True)

    # Create a subscription for user
    # Subscription.create(
    #     user_id=user.id,
    #     cancel_url="https://checkout.paddle.com/subscription/cancel?user=1234",
    #     update_url="https://checkout.paddle.com/subscription/update?user=1234",
    #     subscription_id="123",
    #     event_time=arrow.now(),
    #     next_bill_date=arrow.now().shift(days=10).date(),
    #     plan=PlanEnum.monthly,
    # )
    # db.session.commit()

    CoinbaseSubscription.create(user_id=user.id,
                                end_at=arrow.now().shift(days=10),
                                commit=True)

    api_key = ApiKey.create(user_id=user.id, name="Chrome")
    api_key.code = "code"

    api_key = ApiKey.create(user_id=user.id, name="Firefox")
    api_key.code = "codeFF"

    pgp_public_key = open(get_abs_path("local_data/public-pgp.asc")).read()
    m1 = Mailbox.create(
        user_id=user.id,
        email="*****@*****.**",
        verified=True,
        pgp_public_key=pgp_public_key,
    )
    m1.pgp_finger_print = load_public_key(pgp_public_key)
    db.session.commit()

    for i in range(3):
        if i % 2 == 0:
            a = Alias.create(email=f"e{i}@{FIRST_ALIAS_DOMAIN}",
                             user_id=user.id,
                             mailbox_id=m1.id)
        else:
            a = Alias.create(
                email=f"e{i}@{FIRST_ALIAS_DOMAIN}",
                user_id=user.id,
                mailbox_id=user.default_mailbox_id,
            )
        db.session.commit()

        if i % 5 == 0:
            if i % 2 == 0:
                AliasMailbox.create(alias_id=a.id,
                                    mailbox_id=user.default_mailbox_id)
            else:
                AliasMailbox.create(alias_id=a.id, mailbox_id=m1.id)
        db.session.commit()

        # some aliases don't have any activity
        # if i % 3 != 0:
        #     contact = Contact.create(
        #         user_id=user.id,
        #         alias_id=a.id,
        #         website_email=f"contact{i}@example.com",
        #         reply_email=f"rep{i}@sl.local",
        #     )
        #     db.session.commit()
        #     for _ in range(3):
        #         EmailLog.create(user_id=user.id, contact_id=contact.id)
        #         db.session.commit()

        # have some disabled alias
        if i % 5 == 0:
            a.enabled = False
            db.session.commit()

    CustomDomain.create(user_id=user.id, domain="ab.cd", verified=True)
    CustomDomain.create(user_id=user.id,
                        domain="very-long-domain.com.net.org",
                        verified=True)
    db.session.commit()

    Directory.create(user_id=user.id, name="abcd")
    Directory.create(user_id=user.id, name="xyzt")
    db.session.commit()

    # Create a client
    client1 = Client.create_new(name="Demo", user_id=user.id)
    client1.oauth_client_id = "client-id"
    client1.oauth_client_secret = "client-secret"
    client1.published = True
    db.session.commit()

    RedirectUri.create(client_id=client1.id, uri="https://ab.com")

    client2 = Client.create_new(name="Demo 2", user_id=user.id)
    client2.oauth_client_id = "client-id2"
    client2.oauth_client_secret = "client-secret2"
    client2.published = True
    db.session.commit()

    ClientUser.create(user_id=user.id, client_id=client1.id, name="Fake Name")

    referral = Referral.create(user_id=user.id,
                               code="REFCODE",
                               name="First referral")
    db.session.commit()

    for i in range(6):
        Notification.create(user_id=user.id,
                            message=f"""Hey hey <b>{i}</b> """ * 10)
    db.session.commit()

    User.create(
        email="*****@*****.**",
        password="******",
        activated=True,
        referral_id=referral.id,
    )
    db.session.commit()
示例#16
0
def fake_data():
    LOG.d("create fake data")
    # Remove db if exist
    if os.path.exists("db.sqlite"):
        LOG.d("remove existing db file")
        os.remove("db.sqlite")

    # Create all tables
    db.create_all()

    # Create a user
    user = User.create(
        email="*****@*****.**",
        name="John Wick",
        password="******",
        activated=True,
        is_admin=True,
        # enable_otp=True,
        otp_secret="base32secret3232",
        intro_shown=True,
        fido_uuid=None,
    )
    user.trial_end = None
    db.session.commit()

    # add a profile picture
    file_path = "profile_pic.svg"
    s3.upload_from_bytesio(
        file_path,
        open(os.path.join(ROOT_DIR, "static", "default-icon.svg"), "rb"),
        content_type="image/svg",
    )
    file = File.create(user_id=user.id, path=file_path, commit=True)
    user.profile_picture_id = file.id
    db.session.commit()

    # create a bounced email
    alias = Alias.create_new_random(user)
    db.session.commit()

    bounce_email_file_path = "bounce.eml"
    s3.upload_email_from_bytesio(
        bounce_email_file_path,
        open(os.path.join(ROOT_DIR, "local_data", "email_tests", "2.eml"), "rb"),
        "download.eml",
    )
    refused_email = RefusedEmail.create(
        path=bounce_email_file_path,
        full_report_path=bounce_email_file_path,
        user_id=user.id,
        commit=True,
    )

    contact = Contact.create(
        user_id=user.id,
        alias_id=alias.id,
        website_email="*****@*****.**",
        reply_email="*****@*****.**",
        commit=True,
    )
    EmailLog.create(
        user_id=user.id,
        contact_id=contact.id,
        refused_email_id=refused_email.id,
        bounced=True,
        commit=True,
    )

    LifetimeCoupon.create(code="coupon", nb_used=10, commit=True)

    # Create a subscription for user
    Subscription.create(
        user_id=user.id,
        cancel_url="https://checkout.paddle.com/subscription/cancel?user=1234",
        update_url="https://checkout.paddle.com/subscription/update?user=1234",
        subscription_id="123",
        event_time=arrow.now(),
        next_bill_date=arrow.now().shift(days=10).date(),
        plan=PlanEnum.monthly,
        commit=True,
    )

    CoinbaseSubscription.create(
        user_id=user.id, end_at=arrow.now().shift(days=10), commit=True
    )

    api_key = ApiKey.create(user_id=user.id, name="Chrome")
    api_key.code = "code"

    api_key = ApiKey.create(user_id=user.id, name="Firefox")
    api_key.code = "codeFF"

    pgp_public_key = open(get_abs_path("local_data/public-pgp.asc")).read()
    m1 = Mailbox.create(
        user_id=user.id,
        email="*****@*****.**",
        verified=True,
        pgp_public_key=pgp_public_key,
    )
    m1.pgp_finger_print = load_public_key(pgp_public_key)
    db.session.commit()

    for i in range(3):
        if i % 2 == 0:
            a = Alias.create(
                email=f"e{i}@{FIRST_ALIAS_DOMAIN}", user_id=user.id, mailbox_id=m1.id
            )
        else:
            a = Alias.create(
                email=f"e{i}@{FIRST_ALIAS_DOMAIN}",
                user_id=user.id,
                mailbox_id=user.default_mailbox_id,
            )
        db.session.commit()

        if i % 5 == 0:
            if i % 2 == 0:
                AliasMailbox.create(alias_id=a.id, mailbox_id=user.default_mailbox_id)
            else:
                AliasMailbox.create(alias_id=a.id, mailbox_id=m1.id)
        db.session.commit()

        # some aliases don't have any activity
        # if i % 3 != 0:
        #     contact = Contact.create(
        #         user_id=user.id,
        #         alias_id=a.id,
        #         website_email=f"contact{i}@example.com",
        #         reply_email=f"rep{i}@sl.local",
        #     )
        #     db.session.commit()
        #     for _ in range(3):
        #         EmailLog.create(user_id=user.id, contact_id=contact.id)
        #         db.session.commit()

        # have some disabled alias
        if i % 5 == 0:
            a.enabled = False
            db.session.commit()

    CustomDomain.create(user_id=user.id, domain="ab.cd", verified=True)
    CustomDomain.create(
        user_id=user.id, domain="very-long-domain.com.net.org", verified=True
    )
    db.session.commit()

    Directory.create(user_id=user.id, name="abcd")
    Directory.create(user_id=user.id, name="xyzt")
    db.session.commit()

    # Create a client
    client1 = Client.create_new(name="Demo", user_id=user.id)
    client1.oauth_client_id = "client-id"
    client1.oauth_client_secret = "client-secret"
    client1.published = True
    db.session.commit()

    RedirectUri.create(client_id=client1.id, uri="https://ab.com")

    client2 = Client.create_new(name="Demo 2", user_id=user.id)
    client2.oauth_client_id = "client-id2"
    client2.oauth_client_secret = "client-secret2"
    client2.published = True
    db.session.commit()

    ClientUser.create(user_id=user.id, client_id=client1.id, name="Fake Name")

    referral = Referral.create(user_id=user.id, code="REFCODE", name="First referral")
    db.session.commit()

    for i in range(6):
        Notification.create(user_id=user.id, message=f"""Hey hey <b>{i}</b> """ * 10)
    db.session.commit()

    user2 = User.create(
        email="*****@*****.**",
        password="******",
        activated=True,
        referral_id=referral.id,
    )
    Mailbox.create(user_id=user2.id, email="*****@*****.**", verified=True)
    db.session.commit()

    ManualSubscription.create(
        user_id=user2.id, end_at=arrow.now().shift(years=1, days=1), commit=True
    )
示例#17
0
def update_referral(referral_id):
    referral = Referral.query.get_or_404(referral_id)
    user = User.query.get(current_user.id)
    if referral.source_id != user.source_id and current_user.role != 'admin':
        abort(403)
    form = ReferralForm()
    if form.validate_on_submit():
        referral.firstname = form.firstname.data
        referral.lastname = form.lastname.data
        referral.phone = form.phone.data
        referral.email = form.email.data
        referral.dob = form.dob.data
        referral.poa_address1 = form.poa_address1.data
        referral.city = form.city.data
        referral.state = form.state.data
        referral.zip_code = form.zip_code.data
        referral.medicare = Referral.encrypt_data(form.medicare.data)
        referral.secondary = Referral.encrypt_data(form.secondary.data)
        referral.discharge_date = form.discharge_date.data
        referral.notes = form.notes.data
        referral.disc_slp = form.disc_slp.data
        referral.disc_ot = form.disc_ot.data
        referral.disc_pt = form.disc_pt.data
        referral.treat_oral = form.treat_oral.data
        referral.treat_speech = form.treat_speech.data
        referral.reat_cognitive = form.treat_cognitive.data
        referral.treat_caregiver = form.treat_caregiver.data
        referral.treat_dementia = form.treat_dementia.data
        referral.treat_adl = form.treat_adl.data
        referral.treat_safety = form.treat_safety.data
        referral.treat_upper_extremity = form.treat_upper_extremity.data
        referral.treat_ther_exercise = form.treat_ther_exercise.data
        referral.treat_balance = form.treat_balance.data
        referral.treat_ther_activity = form.treat_ther_activity.data
        referral.treat_coordination = form.treat_coordination.data
        referral.treat_transfer = form.treat_transfer.data
        referral.treat_range = form.treat_range.data
        referral.treat_massage = form.treat_massage.data
        referral.treat_pain = form.treat_pain.data
        referral.treat_wheelchair = form.treat_wheelchair.data
        referral.treat_lower_extremity = form.treat_lower_extremity.data
        referral.treat_cane = form.treat_cane.data
        referral.treat_postural = form.treat_postural.data
        referral.treat_gait = form.treat_gait.data
        referral.treat_other = form.treat_other.data
        referral.treat_other_desc = form.treat_other_desc.data
        referral.med_type = form.med_type.data
        referral.med_firstname = form.med_firstname.data
        referral.med_lastname = form.med_lastname.data
        referral.med_npi = form.med_npi.data
        referral.med_phone = form.med_phone.data
        referral.med_fax = form.med_fax.data
        referral.med_email = form.med_email.data
        referral.med_address1 = form.med_address1.data
        referral.med_address2 = form.med_address2.data
        referral.med_city = form.med_city.data
        referral.med_state = form.med_state.data
        referral.med_zip_code = form.med_zip_code.data
        db.session.commit()
        flash('The Referral was updated successfully.', 'success')
        return redirect(url_for('referrals.referral', referral_id=referral_id))
    elif request.method == 'GET':
        form.firstname.data = referral.firstname
        form.lastname.data = referral.lastname
        form.phone.data = referral.phone
        form.email.data = referral.email
        form.dob.data = referral.dob
        form.poa_address1.data = referral.poa_address1
        form.city.data = referral.city
        form.state.data = referral.state
        form.zip_code.data = referral.zip_code
        form.medicare.data = Referral.decrypt_data(referral.medicare)
        form.secondary.data = Referral.decrypt_data(referral.secondary)
        form.discharge_date.data = referral.discharge_date
        form.notes.data = referral.notes
        form.disc_slp.data = referral.disc_slp
        form.disc_ot.data = referral.disc_ot
        form.disc_pt.data = referral.disc_pt
        form.treat_oral.data = referral.treat_oral
        form.treat_speech.data = referral.treat_speech
        form.treat_cognitive.data = referral.treat_cognitive
        form.treat_caregiver.data = referral.treat_caregiver
        form.treat_dementia.data = referral.treat_dementia
        form.treat_adl.data = referral.treat_adl
        form.treat_safety.data = referral.treat_safety
        form.treat_upper_extremity.data = referral.treat_upper_extremity
        form.treat_ther_exercise.data = referral.treat_ther_exercise
        form.treat_balance.data = referral.treat_balance
        form.treat_ther_activity.data = referral.treat_ther_activity
        form.treat_coordination.data = referral.treat_coordination
        form.treat_transfer.data = referral.treat_transfer
        form.treat_range.data = referral.treat_range
        form.treat_massage.data = referral.treat_massage
        form.treat_pain.data = referral.treat_pain
        form.treat_wheelchair.data = referral.treat_wheelchair
        form.treat_lower_extremity.data = referral.treat_lower_extremity
        form.treat_cane.data = referral.treat_cane
        form.treat_postural.data = referral.treat_postural
        form.treat_gait.data = referral.treat_gait
        form.treat_other.data = referral.treat_other
        form.treat_other_desc.data = referral.treat_other_desc
        form.med_type.data = referral.med_type
        form.med_firstname.data = referral.med_firstname
        form.med_lastname.data = referral.med_lastname
        form.med_npi.data = referral.med_npi
        form.med_phone.data = referral.med_phone
        form.med_fax.data = referral.med_fax
        form.med_email.data = referral.med_email
        form.med_address1.data = referral.med_address1
        form.med_address2.data = referral.med_address2
        form.med_city.data = referral.med_city
        form.med_state.data = referral.med_state
        form.med_zip_code.data = referral.med_zip_code
    return render_template('referrals/crud_referral.html',
                           title='Update Referral',
                           form=form)
 def clear_data_before_test(self):
     r = Referral.find_referral_by_uid(88)
     if r is not None:
         db.session.delete(r)
         db.session.commit()
示例#19
0
def fake_data():
    LOG.d("create fake data")

    # Create a user
    user = User.create(
        email="*****@*****.**",
        name="John Wick",
        password="******",
        activated=True,
        is_admin=True,
        # enable_otp=True,
        otp_secret="base32secret3232",
        intro_shown=True,
        fido_uuid=None,
    )
    user.trial_end = None
    Session.commit()

    # add a profile picture
    file_path = "profile_pic.svg"
    s3.upload_from_bytesio(
        file_path,
        open(os.path.join(ROOT_DIR, "static", "default-icon.svg"), "rb"),
        content_type="image/svg",
    )
    file = File.create(user_id=user.id, path=file_path, commit=True)
    user.profile_picture_id = file.id
    Session.commit()

    # create a bounced email
    alias = Alias.create_new_random(user)
    Session.commit()

    bounce_email_file_path = "bounce.eml"
    s3.upload_email_from_bytesio(
        bounce_email_file_path,
        open(os.path.join(ROOT_DIR, "local_data", "email_tests", "2.eml"),
             "rb"),
        "download.eml",
    )
    refused_email = RefusedEmail.create(
        path=bounce_email_file_path,
        full_report_path=bounce_email_file_path,
        user_id=user.id,
        commit=True,
    )

    contact = Contact.create(
        user_id=user.id,
        alias_id=alias.id,
        website_email="*****@*****.**",
        reply_email="*****@*****.**",
        commit=True,
    )
    EmailLog.create(
        user_id=user.id,
        contact_id=contact.id,
        alias_id=contact.alias_id,
        refused_email_id=refused_email.id,
        bounced=True,
        commit=True,
    )

    LifetimeCoupon.create(code="lifetime-coupon", nb_used=10, commit=True)
    Coupon.create(code="coupon", commit=True)

    # Create a subscription for user
    Subscription.create(
        user_id=user.id,
        cancel_url="https://checkout.paddle.com/subscription/cancel?user=1234",
        update_url="https://checkout.paddle.com/subscription/update?user=1234",
        subscription_id="123",
        event_time=arrow.now(),
        next_bill_date=arrow.now().shift(days=10).date(),
        plan=PlanEnum.monthly,
        commit=True,
    )

    CoinbaseSubscription.create(user_id=user.id,
                                end_at=arrow.now().shift(days=10),
                                commit=True)

    api_key = ApiKey.create(user_id=user.id, name="Chrome")
    api_key.code = "code"

    api_key = ApiKey.create(user_id=user.id, name="Firefox")
    api_key.code = "codeFF"

    pgp_public_key = open(get_abs_path("local_data/public-pgp.asc")).read()
    m1 = Mailbox.create(
        user_id=user.id,
        email="*****@*****.**",
        verified=True,
        pgp_public_key=pgp_public_key,
    )
    m1.pgp_finger_print = load_public_key(pgp_public_key)
    Session.commit()

    # [email protected] is in a LOT of data breaches
    Alias.create(email="*****@*****.**",
                 user_id=user.id,
                 mailbox_id=m1.id)

    for i in range(3):
        if i % 2 == 0:
            a = Alias.create(email=f"e{i}@{FIRST_ALIAS_DOMAIN}",
                             user_id=user.id,
                             mailbox_id=m1.id)
        else:
            a = Alias.create(
                email=f"e{i}@{FIRST_ALIAS_DOMAIN}",
                user_id=user.id,
                mailbox_id=user.default_mailbox_id,
            )
        Session.commit()

        if i % 5 == 0:
            if i % 2 == 0:
                AliasMailbox.create(alias_id=a.id,
                                    mailbox_id=user.default_mailbox_id)
            else:
                AliasMailbox.create(alias_id=a.id, mailbox_id=m1.id)
        Session.commit()

        # some aliases don't have any activity
        # if i % 3 != 0:
        #     contact = Contact.create(
        #         user_id=user.id,
        #         alias_id=a.id,
        #         website_email=f"contact{i}@example.com",
        #         reply_email=f"rep{i}@sl.local",
        #     )
        #     Session.commit()
        #     for _ in range(3):
        #         EmailLog.create(user_id=user.id, contact_id=contact.id, alias_id=contact.alias_id)
        #         Session.commit()

        # have some disabled alias
        if i % 5 == 0:
            a.enabled = False
            Session.commit()

    custom_domain1 = CustomDomain.create(user_id=user.id,
                                         domain="ab.cd",
                                         verified=True)
    Session.commit()

    Alias.create(
        user_id=user.id,
        email="*****@*****.**",
        mailbox_id=user.default_mailbox_id,
        custom_domain_id=custom_domain1.id,
        commit=True,
    )

    Alias.create(
        user_id=user.id,
        email="*****@*****.**",
        mailbox_id=user.default_mailbox_id,
        custom_domain_id=custom_domain1.id,
        commit=True,
    )

    Directory.create(user_id=user.id, name="abcd")
    Directory.create(user_id=user.id, name="xyzt")
    Session.commit()

    # Create a client
    client1 = Client.create_new(name="Demo", user_id=user.id)
    client1.oauth_client_id = "client-id"
    client1.oauth_client_secret = "client-secret"
    Session.commit()

    RedirectUri.create(client_id=client1.id,
                       uri="https://your-website.com/oauth-callback")

    client2 = Client.create_new(name="Demo 2", user_id=user.id)
    client2.oauth_client_id = "client-id2"
    client2.oauth_client_secret = "client-secret2"
    Session.commit()

    ClientUser.create(user_id=user.id, client_id=client1.id, name="Fake Name")

    referral = Referral.create(user_id=user.id,
                               code="Website",
                               name="First referral")
    Referral.create(user_id=user.id, code="Podcast", name="First referral")
    Payout.create(user_id=user.id,
                  amount=1000,
                  number_upgraded_account=100,
                  payment_method="BTC")
    Payout.create(
        user_id=user.id,
        amount=5000,
        number_upgraded_account=200,
        payment_method="PayPal",
    )
    Session.commit()

    for i in range(6):
        Notification.create(user_id=user.id,
                            message=f"""Hey hey <b>{i}</b> """ * 10)
    Session.commit()

    user2 = User.create(
        email="*****@*****.**",
        password="******",
        activated=True,
        referral_id=referral.id,
    )
    Mailbox.create(user_id=user2.id,
                   email="*****@*****.**",
                   verified=True)
    Session.commit()

    ManualSubscription.create(
        user_id=user2.id,
        end_at=arrow.now().shift(years=1, days=1),
        comment="Local manual",
        commit=True,
    )

    SLDomain.create(domain="premium.com", premium_only=True, commit=True)

    hibp1 = Hibp.create(name="first breach",
                        description="breach description",
                        commit=True)
    hibp2 = Hibp.create(name="second breach",
                        description="breach description",
                        commit=True)
    breached_alias1 = Alias.create(email="*****@*****.**",
                                   user_id=user.id,
                                   mailbox_id=m1.id,
                                   commit=True)
    breached_alias2 = Alias.create(email="*****@*****.**",
                                   user_id=user.id,
                                   mailbox_id=m1.id,
                                   commit=True)
    AliasHibp.create(hibp_id=hibp1.id, alias_id=breached_alias1.id)
    AliasHibp.create(hibp_id=hibp2.id, alias_id=breached_alias2.id)

    # old domain will have ownership_verified=True
    CustomDomain.create(user_id=user.id,
                        domain="old.com",
                        verified=True,
                        ownership_verified=True)
示例#20
0
def new_referral():
    form = ReferralForm()
    if request.method == 'POST':
        user = User.query.get(current_user.id)
        referral = Referral(
            firstname=form.firstname.data,
            lastname=form.lastname.data,
            phone=form.phone.data,
            email=form.email.data,
            dob=form.dob.data,
            poa_address1=form.poa_address1.data,
            city=form.city.data,
            state=form.state.data,
            zip_code=form.zip_code.data,
            medicare=Referral.encrypt_data(form.medicare.data),
            secondary=Referral.encrypt_data(form.secondary.data),
            discharge_date=form.discharge_date.data,
            notes=form.notes.data,
            disc_slp=form.disc_slp.data,
            disc_ot=form.disc_ot.data,
            disc_pt=form.disc_pt.data,
            treat_oral=form.treat_oral.data,
            treat_speech=form.treat_speech.data,
            treat_cognitive=form.treat_cognitive.data,
            treat_caregiver=form.treat_caregiver.data,
            treat_dementia=form.treat_dementia.data,
            treat_adl=form.treat_adl.data,
            treat_safety=form.treat_safety.data,
            treat_upper_extremity=form.treat_upper_extremity.data,
            treat_ther_exercise=form.treat_ther_exercise.data,
            treat_balance=form.treat_balance.data,
            treat_ther_activity=form.treat_ther_activity.data,
            treat_coordination=form.treat_coordination.data,
            treat_transfer=form.treat_transfer.data,
            treat_range=form.treat_range.data,
            treat_massage=form.treat_massage.data,
            treat_pain=form.treat_pain.data,
            treat_wheelchair=form.treat_wheelchair.data,
            treat_lower_extremity=form.treat_lower_extremity.data,
            treat_cane=form.treat_cane.data,
            treat_postural=form.treat_postural.data,
            treat_gait=form.treat_gait.data,
            treat_other=form.treat_other.data,
            treat_other_desc=form.treat_other_desc.data,
            med_type=form.med_type.data,
            med_firstname=form.med_firstname.data,
            med_lastname=form.med_lastname.data,
            med_npi=form.med_npi.data,
            med_phone=form.med_phone.data,
            med_fax=form.med_fax.data,
            med_email=form.med_email.data,
            med_address1=form.med_address1.data,
            med_address2=form.med_address2.data,
            med_city=form.med_city.data,
            med_state=form.med_state.data,
            med_zip_code=form.med_zip_code.data,
            user_id=user.id,
            source_id=user.source_id)
        db.session.add(referral)
        db.session.commit()
        referral = Referral.query.get(referral.id)
        send_new_referral_email(referral, user)
        flash('The Referral was submitted successfully.', 'success')
        return redirect(url_for('referrals.list_referrals'))
    return render_template('referrals/crud_referral.html',
                           title='Create Referral',
                           form=form)