Esempio n. 1
0
def register():
    """display register page for new users"""
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data
        image_file = registration_form.image_file.data
        gender = registration_form.gender.data
        age = registration_form.age.data
        city = registration_form.city.data

        user_count = (classes.User.query.filter_by(username=username).count() +
                      classes.User.query.filter_by(email=email).count())
        if user_count > 0:
            flash("Error - Existing user : "******" OR " + email)
        else:
            user = classes.User(username, email, password, image_file, gender,
                                age, city)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for("login"))
    return render_template(
        "register.html",
        form=registration_form,
        authenticated_user=current_user.is_authenticated,
    )
Esempio n. 2
0
def register():
    """
    This function uses method request to take user-input data from a regular
    html form (not a FlaskForm object) then inserts the information of a
    new user into the database using SQLAlchemy.
    If data is valid, dedirect to log in page.
    Oherwise, render the sign up form again.
    """
    if request.method == "POST":
        username = request.form['username']
        companyname = request.form['companyname']
        email = request.form['email']
        password = request.form['password']

        user_count = classes.User.query.filter_by(username=username).count() \
            + classes.User.query.filter_by(email=email).count()

        if user_count == 0:
            user = classes.User(username, email, companyname, password)
            db.session.add(user)
            db.session.commit()
            # flash('successfully logged in.')
            return redirect(url_for('signin'))
        else:
            flash('Username or email already exists.')

    return render_template("signup.html")
Esempio n. 3
0
def register():
    """Register page"""
    registration_form = classes.RegistrationForm()
    if current_user.is_authenticated:
        return redirect(url_for("dashboard"))
    if registration_form.validate_on_submit():
        first_name = registration_form.first_name.data
        last_name = registration_form.last_name.data
        email = registration_form.email.data
        phone = registration_form.phone.data
        password = registration_form.password.data

        # Make sure email and phone number are unique
        user_count = (classes.User.query.filter_by(email=email).count() +
                      classes.User.query.filter_by(phone=phone).count())

        if len(phone) != 10:
            flash('Please enter a valid phone number')
        elif user_count != 0:
            flash('User already exists')
        else:
            # User information does not already exist in DB
            user = classes.User(first_name, last_name, email, phone, password)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for("login"))
    return render_template("register.html", form=registration_form)
Esempio n. 4
0
def mobile_register():
    """
    This function uses method post to register user information
    in the data base. This returns a message indicating the if
    the procedure has been successful or not.

    :return: return dictionary with success "1"/"0" if success/failure
    """
    if request.method == "POST":
        username = request.form['username']
        companyname = request.form['companyname']
        email = request.form['email']
        password = request.form['password']

        user_count = classes.User.query.filter_by(username=username).count() \
            + classes.User.query.filter_by(email=email).count()

        if user_count == 0:
            user = classes.User(username, email, companyname, password)
            db.session.add(user)
            db.session.commit()
            # return "1" #
            return json.dumps({"success": "1"})

    # return "0"
    return json.dumps({"success": "0"})
Esempio n. 5
0
def new_user_form():
    """Let a new user to register"""
    if request.method == "POST":
        # when a user fills the new user form
        name = request.form['name']
        username = request.form['username']
        email = request.form['email']
        password = request.form['password']

        # we look to check if the user is already created
        user = classes.User.query.filter_by(email=email).first()

        if user is not None:
            login_user(user)
            flash("Email already has an account associated.")
            return render_template("index_newform.html")
        else:
            # we create the user in the database
            user = classes.User(name, username, email, password)
            db.session.add(user)
            db.session.commit()

        return redirect(url_for("login"))

    return render_template("index_newform.html")
Esempio n. 6
0
    def setUp(self):
        """Initialization for the test cases

        This is executed prior to each test.
        """
        application.config['TESTING'] = True
        application.config['WTF_CSRF_ENABLED'] = False
        application.config['DEBUG'] = False
        self.app = application.test_client()
        # setup plaid client
        self.client = Client(ENV_VARS["PLAID_CLIENT_ID"],
                             ENV_VARS["PLAID_SECRET"],
                             ENV_VARS["PLAID_PUBLIC_KEY"], "sandbox")
        self.public_token = sandbox.PublicToken(self.client)
        db.drop_all()
        db.create_all()

        # Create a test user and test plaid item
        self.test_user = classes.User(first_name="first",
                                      last_name="last",
                                      email="*****@*****.**",
                                      phone="9876543210",
                                      password="******")
        db.session.add(self.test_user)
        db.session.commit()
        self.test_item = classes.PlaidItems(user=self.test_user,
                                            item_id="item",
                                            access_token="token")
        db.session.add(self.test_item)
        db.session.commit()
Esempio n. 7
0
def register():
    """Registration Page"""
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data

        user = classes.User(username, email, password)
        msg = classes.UserBL.RegisterUserDB(user)

        if msg == "User registered":
            return redirect(url_for('login'))
        else:
            if msg == "Email address already taken":
                flash(msg + ": " + email)
            if msg == "Username already taken":
                flash(msg + ": " + username)

            return render_template(
                'register.html',
                form=registration_form,
                authenticated_user=current_user.is_authenticated)

    return render_template('register.html',
                           form=registration_form,
                           authenticated_user=current_user.is_authenticated)
Esempio n. 8
0
def register():
    """Sign up"""
    if current_user.is_authenticated:
        return '<h1> Error: User already logged in. </h1>'
    form = classes.SurveyForm()
    if form.validate_on_submit():
        username = form.username_entry.data
        password = form.password_entry.data
        first_name = form.first_name_entry.data
        last_name = form.last_name_entry.data
        email = form.email_entry.data
        age = form.age_entry.data

        food = form.food_entry.data
        nightlife = form.nightlife_entry.data
        nature = form.nature_entry.data
        museums = form.museums_entry.data
        landmarks = form.landmarks_entry.data
        music = form.music_entry.data
        performing = form.performing_entry.data

        user_count = classes\
            .User\
            .query\
            .filter_by(username=username)\
            .count() +\
            classes.User.query.filter_by(email=email).count()

        if (user_count > 0):
            return '<h1> Error - Existing user : '******' or ' + email + '</h1>' +\
                '<p> Please <a href="/register">try again.</a></p>'

        else:
            user = classes.User(username=username,
                                email=email,
                                password=password,
                                first_name=first_name,
                                last_name=last_name,
                                age=age,
                                food=food,
                                nightlife=nightlife,
                                museums=museums,
                                nature=nature,
                                landmarks=landmarks,
                                music=music,
                                performing=performing)
            db.session.add(user)
            db.session.commit()
            login_user(user)
            return redirect(url_for('my_account'))
    return render_template('register.html', form=form)
Esempio n. 9
0
def register():
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data
        ##################################
        #### UPDATE THIS (EXERCISE 1) ####
        ##################################
        user = classes.User(username, email, password)
        db.session.add(user)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('register.html', form=registration_form)
Esempio n. 10
0
 def test_invalid_login(self):
     # add user to db
     test_user = classes.User('First', 'Last', '*****@*****.**',
                              '6158172309', 'password')
     db.session.add(test_user)
     db.session.commit()
     with self.app as c:
         email = '*****@*****.**'
         password = '******'
         response = self.app.post('/login',
                                  data=dict(email=email, password=password),
                                  follow_redirects=True)
         is_logged_in = '_user_id' in flask.session
     self.assertFalse(is_logged_in)
Esempio n. 11
0
def register():
    """Handle user registration."""
    if request.method == 'POST':
        print(request.json)
        password = request.json['password']
        email = request.json['email']
        username = email.split('@')[0]

        user_count = classes.User.query.filter_by(email=email).count()
        if user_count > 0:  # email exists
            return '<h1> Error - Existing User:'******'</h1>'
        user = classes.User(username, email, password)
        db.session.add(user)
        db.session.commit()
        return '<h1> Registered : ' + email + '</h1>'
Esempio n. 12
0
 def test_phone_exists_register(self):
     test_user = classes.User('First', 'Last', '*****@*****.**',
                              '6158172309', 'password')
     db.session.add(test_user)
     db.session.commit()
     data = {
         'first_name': 'First',
         'last_name': 'Last',
         'email': '*****@*****.**',
         'phone': '6158172309',
         'password': '******'
     }
     with self.app as c:
         response = self.app.post('/register', data=data)
         self.assertEqual(response.location, None)
Esempio n. 13
0
 def test_email_exists_register(self):
     test_user = classes.User('First', 'Last', '*****@*****.**',
                              '6158172309', 'password')
     db.session.add(test_user)
     db.session.commit()
     data = {
         'first_name': 'First',
         'last_name': 'Last',
         'email': '*****@*****.**',
         'phone': '1234567890',
         'password': '******'
     }
     with self.app as c:
         response = self.app.post('/register', data=data)
         # When location is None then no redirect happens
         self.assertEqual(response.location, None)
Esempio n. 14
0
def test_register():
    """
    Testing the registration for new users (base flow)
    """
    username = "******"
    email = "*****@*****.**"
    password = "******"
    user = classes.User(username, email, password)
    msg = classes.UserBL.RegisterUserDB(user)
    user = classes.UserBL.UserFromDB(username)
    val = True
    assert msg == "User registered"
    assert user.email == email
    assert user.username == username
    assert user.check_password(password) == val

    classes.UserBL.DeleteUserDB(username)
Esempio n. 15
0
def register():
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data

        user_count = classes.User.query.filter_by(username=username).count()
        +classes.User.query.filter_by(email=email).count()
        if (user_count > 0):
            flash('Error - Existing user : '******' OR ' + email)

        else:
            user = classes.User(username, email, password)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for('login'))
    return render_template('register.html', form=registration_form)
Esempio n. 16
0
def register():
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data

        user_count = classes.User.query.filter_by(username=username).count() \
                     + classes.User.query.filter_by(email=email).count()
        if (user_count > 0):
            #### UPDATE THIS #####
            return '<h1>Error - Existing user : '******' OR ' + email + '</h1>'
        else:
            user = classes.User(username, email, password)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for('index'))
    return render_template('register.html', form=registration_form)
def register():
    if current_user.is_authenticated:
        return redirect(url_for('index'))

    else:
        registration_form = classes.RegistrationForm()
        next_page = 'register'

        if registration_form.validate_on_submit():
            username = registration_form.username.data
            password = registration_form.password.data
            confirm_password = registration_form.confirm_password.data
            email = registration_form.email.data
            user = classes.User(username, email, password)
            db.session.add(user)
            db.session.commit()
            login_user(user)
            return redirect(url_for('index'))

        return render_template('index.html',
                               form=registration_form,
                               registration_form=registration_form,
                               next_page=next_page)
Esempio n. 18
0
def register():
    """
    Create a new user in the database (username, email, pw) if does not
    already exist. If succesful, render questionnaire page.
    """
    registration_form = classes.RegistrationForm()
    if registration_form.validate_on_submit():
        username = registration_form.username.data
        password = registration_form.password.data
        email = registration_form.email.data

        user_count = classes.User.query.filter_by(username=username).count()
        email_count = classes.User.query.filter_by(email=email).count()
        if user_count > 0:
            flash(f'Username \'{username}\' already taken.')
        elif email_count > 0:
            flash(f'Email \'{email}\' already registered.')
        else:
            user = classes.User(username, email, password)
            db.session.add(user)
            db.session.commit()
            login_user(user)
            return redirect(url_for('questionnaire'))
    return render_template('register.html', form=registration_form)
Esempio n. 19
0
    def test_insertion(self):
        """Test if new records can be correctly inserted to each table

        Tables include user, plaid_items, accounts, transaction,
        savings_history and habits.
        """
        # add a new user to user table
        test_user = classes.User(first_name="first",
                                 last_name="last",
                                 email="*****@*****.**",
                                 phone="9876543210",
                                 password="******")
        db.session.add(test_user)
        db.session.commit()

        # test if the new user is correctly inserted
        user = classes.User.query.first()
        self.assertEqual(user.first_name, "first", msg="check first name")
        self.assertEqual(user.last_name, "last", msg="check last name")
        self.assertEqual(user.email, "*****@*****.**", msg="check email")
        self.assertEqual(user.phone, "9876543210", msg="check phone number")
        self.assertEqual(user.coins, 0, msg="check coin balance")
        self.assertTrue(user.check_password, msg="check password")

        # add a new plaid item to plaid_items table
        test_item = classes.PlaidItems(user=user,
                                       item_id="%item$",
                                       access_token="$token&")
        db.session.add(test_item)
        db.session.commit()

        # test if the new plaid item is correctly inserted
        item = classes.PlaidItems.query.first()
        self.assertEqual(item.user_id, user.id, msg="check user id")
        self.assertEqual(item.item_id, "%item$", msg="check item id")
        self.assertEqual(item.access_token,
                         "$token&",
                         msg="check access token")

        # add a new account to accounts table
        test_account = classes.Accounts(user=user,
                                        plaid_id=item.id,
                                        account_plaid_id="test-account",
                                        account_name="test-bank",
                                        account_type="test-type",
                                        account_subtype="test-subtype")
        db.session.add(test_account)
        db.session.commit()

        # test if the new account is correctly inserted
        account = classes.Accounts.query.first()
        self.assertEqual(account.user_id, user.id, msg="check user id")
        self.assertEqual(account.plaid_id, item.id, msg="check plaid item id")
        self.assertEqual(account.account_plaid_id,
                         "test-account",
                         msg="check account plaid id")
        self.assertEqual(account.account_name,
                         "test-bank",
                         msg="check account name")
        self.assertEqual(account.account_type,
                         "test-type",
                         msg="check account type")
        self.assertEqual(account.account_subtype,
                         "test-subtype",
                         msg="check account subtype")

        # add a new transaction to transaction table
        test_trans = classes.Transaction(
            user=user,
            account_id=account.id,
            trans_amount=123.45,
            category_id=12345678,
            is_preferred_saving="Yes",
            trans_date=datetime.strptime("2020-01-01", "%Y-%m-%d"),
            post_date=datetime.strptime("2020-01-02", "%Y-%m-%d"),
            merchant_category="Food",
            merchant_address="23 Street",
            merchant_city="San Francisco",
            merchant_state="CA",
            merchant_country="US",
            merchant_postal_code="94102",
            merchant_longitude="34.12",
            merchant_latitude="102.45")
        db.session.add(test_trans)
        db.session.commit()

        # test if the new transaction is correctly inserted
        trans = classes.Transaction.query.first()
        self.assertEqual(trans.user_id, user.id, msg="check user id")
        self.assertEqual(trans.account_id, account.id, msg="check account id")
        self.assertEqual(str(trans.trans_amount),
                         "123.45",
                         msg="check transaction amount")
        self.assertEqual(trans.category_id, 12345678, msg="check category id")
        self.assertEqual(trans.is_preferred_saving,
                         "Yes",
                         msg="check if it is a preferred saving category")
        self.assertEqual(datetime.strftime(trans.trans_date, "%Y-%m-%d"),
                         "2020-01-01",
                         msg="check transaction date")
        self.assertEqual(datetime.strftime(trans.post_date, "%Y-%m-%d"),
                         "2020-01-02",
                         msg="check post date")
        self.assertEqual(trans.merchant_category,
                         "Food",
                         msg="check merchant category")
        self.assertEqual(trans.merchant_address,
                         "23 Street",
                         msg="check merchant address")
        self.assertEqual(trans.merchant_city,
                         "San Francisco",
                         msg="check merchant city")
        self.assertEqual(trans.merchant_state,
                         "CA",
                         msg="check merchant state")
        self.assertEqual(trans.merchant_country,
                         "US",
                         msg="check merchant country")
        self.assertEqual(trans.merchant_postal_code,
                         "94102",
                         msg="check merchant postal code")
        self.assertEqual(trans.merchant_longitude,
                         "34.12",
                         msg="check merchant longitude")
        self.assertEqual(trans.merchant_latitude,
                         "102.45",
                         msg="check merchant latitude")

        # add a new saving history to savings_history table
        test_saving = classes.SavingsHistory(
            user=user,
            savings_amount="3.21",
            total_savings="5.67",
            predicted_savings="10.89",
            transfer_date=datetime.strptime("2020-02-01", "%Y-%m-%d"),
            update_date=datetime.strptime("2020-02-02", "%Y-%m-%d"))
        db.session.add(test_saving)
        db.session.commit()

        # test if the new saving history is correctly inserted
        saving = classes.SavingsHistory.query.first()
        self.assertEqual(saving.user_id, user.id, msg="check user id")
        self.assertEqual(str(saving.savings_amount),
                         "3.21",
                         msg="check savings amount")
        self.assertEqual(str(saving.total_savings),
                         "5.67",
                         msg="check total savings")
        self.assertEqual(str(saving.predicted_savings),
                         "10.89",
                         msg="check predicted savings")
        self.assertEqual(datetime.strftime(saving.transfer_date, "%Y-%m-%d"),
                         "2020-02-01",
                         msg="check transfer date")
        self.assertEqual(datetime.strftime(saving.update_date, "%Y-%m-%d"),
                         "2020-02-02",
                         msg="check update date")

        # add a new habit to habits table
        test_habit = classes.Habits(user=user,
                                    habit_name="coffee",
                                    habit_category="test-category",
                                    time_minute=25,
                                    time_hour=10,
                                    time_day_of_week="weekday")
        db.session.add(test_habit)
        db.session.commit()

        # test if the new habit is correctly inserted
        habit = classes.Habits.query.first()
        self.assertEqual(habit.user_id, user.id, msg="check user id")
        self.assertEqual(habit.habit_name, "coffee", msg="check habit name")
        self.assertEqual(habit.habit_category,
                         "test-category",
                         msg="check habit category")
        self.assertEqual(habit.time_minute, 25, msg="check habit minute")
        self.assertEqual(habit.time_hour, 10, msg="check habit hour")
        self.assertEqual(habit.time_day_of_week,
                         "weekday",
                         msg="check habit day of week")

        # add a new coin transaction to coin table
        test_coin = classes.Coin(user=user,
                                 coin_amount=5,
                                 log_date=datetime.strptime(
                                     "2020-03-10", "%Y-%m-%d"),
                                 description="login")
        db.session.add(test_coin)
        db.session.commit()

        # test if the new coin transaction is correctly inserted
        coin = classes.Coin.query.first()
        self.assertEqual(coin.user_id, user.id, msg="check user id")
        self.assertEqual(coin.coin_amount, 5, msg="check coin amount")
        self.assertEqual(datetime.strftime(coin.log_date, "%Y-%m-%d"),
                         "2020-03-10",
                         msg="check coin log date")
        self.assertEqual(coin.description,
                         "login",
                         msg="check coin description")