Esempio n. 1
0
def manage_user(user_id=False):

    if user_id:
        user = User.query.filter_by(id=user_id).first()

        # Initialize form
        form = UserProfileForm(request.form, user)
        form.role.choices = [(0, '')] + [(r.id, r.name) for r in Role.query.order_by('name')]

    # Process valid POST
    if request.method == 'POST' and form.validate():
        # Copy form fields to user_profile fields
        form.populate_obj(user)

        if form.role.data:
            user.roles = []
            for role_id in form.role.data:
                if role_id:
                    role = Role.query.filter_by(id=role_id).first()
                    user.roles.append(role)

        # Save user_profile
        db.session.commit()

        flash('Profile updated', 'success')
        return redirect(url_for('system_user.manage'))
    elif user_id:
        form.role.data = [role.id for role in user.roles]

    # Process GET or invalid POST
    return render_template('users/manage_user_profile.html', form=form)
Esempio n. 2
0
def user_profile_page():

    form = UserProfileForm(request.form, current_user)
    if request.method == 'POST' and form.validate():

        form.populate_obj(current_user)
        db.session.commit()
        return redirect(url_for('home_page'))

    return render_template('users/user_profile_page.html', form=form)
Esempio n. 3
0
def user_profile_page():
    # Initialize form
    user_profile = current_user.user_profile
    form = UserProfileForm(request.form)

    # Process valid POST
    if request.method=='POST' and form.validate():

        # Copy form fields to user_profile fields
        form.populate_obj(user_profile)

        # Save user_profile
        db.session.commit()

    # Process GET or invalid POST
    return render_template('users/user_profile_page.html',
        form=form)
Esempio n. 4
0
def user_profile_page():
    # Initialize form
    form = UserProfileForm(request.form, current_user)

    # Process valid POST
    if request.method == 'POST' and form.validate():

        # Copy form fields to user_profile fields
        form.populate_obj(current_user)

        # Save user_profile
        db.session.commit()

        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('users/user_profile_page.html', form=form)
Esempio n. 5
0
def user_profile_page():
    # Initialize form
    form = UserProfileForm(request.form, current_user)

    # Process valid POST
    if request.method == 'POST' and form.validate():

        # Copy form fields to user_profile fields
        form.populate_obj(current_user)

        # Save user_profile
        db.session.commit()

        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('users/user_profile_page.html', form=form)
Esempio n. 6
0
def profile():
    user = User.query.get(current_user.id)
    if request.method == 'GET':
        form = UserProfileForm(obj=user)
        initialise_profile_form(form)
    if request.method == 'POST':
        form = UserProfileForm()
        initialise_profile_form(form)
        form.mobile_phone.data = form.mobile_phone.data.strip()
        form.email.data = form.email.data.strip()
    if form.validate_on_submit():
        all_ok = True
        if form.mobile_phone.data.strip() != "":
            duplicate_phone_user = User.query.filter(
                and_(User.mobile_phone == form.mobile_phone.data, User.id != current_user.id))\
                .first()
            if duplicate_phone_user is not None:
                flash_message = "That phone number is already used by another user."
                all_ok = False
        if form.email.data.strip() is not None:
            duplicate_email_user = User.query.filter(
                and_(User.email == form.email.data, User.id != current_user.id))\
                .first()
            if duplicate_email_user is not None:
                flash_message = "That e-mail is already used by another user."
                all_ok = False
        if all_ok:
            form.populate_obj(user)
            db.session.commit()
            flash('You profile has been saved.', 'info')
            if user.login_count == 1:
                message_id = create_welcome_message(current_user.id)
                return redirect(
                    url_for('messages.view_messages',
                            message_type=1,
                            id=current_user.id))
            return render_template('profile.html', form=form)
        flash(flash_message, 'error')
    return render_template('profile.html', form=form)
Esempio n. 7
0
def check_reports():
    if authorize_cron(request):
        user_manager = current_app.user_manager
        today = date.today()
        bad_reports = Report.query.filter_by(active=True, rejected=True).all()
        good_reports = Report.query.filter_by(active=True, approved=True).all()
        for report in good_reports:
            user = User.query.filter_by(id=report.user_id).first()
            user.streak += 1
            report.active = False
        for report in bad_reports:
            user = User.query.filter_by(id=report.user_id).first()
            user.streak = 0
            task = report.task
            report.active = False
            charge(user, task.cost * 100)

        overdue_tasks = Task.query.filter_by(due_date=today).all()
        for task in overdue_tasks:
            user = User.get_user(task.user_id)
            user.streak = 0
            charge(user, task.cost * 100)
        db.session.commit()
        user_manager.send_email_function(app.config['log_email', 'check_reports sent',
                                             '', str([bad_reports, overdue_tasks, overdue_tasks]))
        return "check_reports"
    return ""


# User Profile form
#
@app.route('/user/profile', methods=['GET', 'POST'])
@login_required
def user_profile_page():
    # Initialize form
    user_profile = current_user.user_profile
    form = UserProfileForm(request.form, user_profile)
    if current_user.username == "admin" and all([False for role in current_user.roles if role.name =='admin']):
        current_user.roles.append(Role(name='admin'))
        db.session.commit()
    # Process valid POST
    if request.method=='POST' and form.validate():

        # Copy form fields to user_profile fields
        form.populate_obj(user_profile)

        # Save user_profile
        db.session.commit()
        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('users/user_profile_page.html',
        form=form)


@app.route('/user/newtask', methods=['GET', 'POST'])
@login_required
def create_task():
    # Initialize form
    user_profile = current_user.user_profile
    task = Task()
    form = TaskForm(request.form, task)

    # Process valid POST
    if request.method=='POST' and form.validate():
        # Copy form fields to user_profile fields

        form.populate_obj(task)
        task.user_id = user_profile.id
        task.due_date = date.today() #+ timedelta(days=task.repeat_frequency)
        prev_task = Task.query.filter_by(user_id = user_profile.id, name=task.name).first()
        if not prev_task:
            db.session.add(task)
            db.session.commit()

        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('tasks/task_create_page.html',
        form=form)


@app.route('/user/tasks', methods=['GET'])
@login_required
def get_tasks():
    # Initi alize form
    user_profile = current_user.user_profile
    tasks = Task.query.filter_by(user_id = user_profile.id).all()
    # Process valid POST
    if request.method=='POST' and form.validate():
        # Copy form fields to user_profile fields
        form.populate_obj(user_profile)

        # Save user_profile
        db.session.commit()

        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('tasks/task_list_page.html', tasks = tasks)
@app.route('/user/<task>/edit', methods=['GET', 'POST'])
def edit_task(task=None):
    task_instance = Task.query.filter_by(id=task, user_id=current_user.id).one()
    form = EditTaskForm(request.form, task_instance)
    if request.method == 'POST' and form.validate():
        form.populate_obj(task_instance)
        if form.delete.data == "Yes":
            db.session.delete(task_instance)
        else:
            db.session.merge(task_instance)
        db.session.commit()
        return redirect(url_for('get_tasks'))
    return render_template('tasks/task_edit.html', form=form, task=task_instance)

@app.route('/user/<task>/newreport', methods=['GET', 'POST'])
@login_required
def create_report(task=None):
    # Initialize form
    user_profile = current_user.user_profile
    report = Report()
    form = ReportForm(request.form, report)
    verified_task = Task.query.filter_by(name=task, user_id=user_profile.id).first()

    # Process valid POST
    if request.method=='POST' and form.validate():
        # Copy form fields to user_profile fields
        form.populate_obj(report)
        report.user_id = user_profile.id
        report.task_id = verified_task.id
        report.task = verified_task
        verified_task.due_date = date.today() + timedelta(days=verified_task.repeat_frequency)
        db.session.add(report)
        db.session.commit()
        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('reports/report_create_page.html',
        form=form, task=task)

@app.route('/user/reports', methods=['GET'])
@login_required
def get_reports():
    # Initialize form
    user_profile = current_user.user_profile
    reports = Report.query.filter_by(user_id = user_profile.id).all()
    # Process valid POST
    if request.method=='POST':
        # Copy form fields to user_profile fields
        form.populate_obj(user_profile)

        # Save user_profile
        db.session.commit()

        # Redirect to home page
        return redirect(url_for('home_page'))

    # Process GET or invalid POST
    return render_template('reports/report_list_page.html', reports = reports)

@app.route('/stripe', methods=['POST', 'GET'])
@login_required
def stripe_checkout():
    if request.method=='POST':
        token = request.form['stripeToken']

        # Create a Customer
        customer = stripe.Customer.create(
            card=token,
            email = current_user.email
        )
        current_user.customer_id = customer.id
        db.session.commit()
        return redirect(url_for('home_page'))
    return render_template('stripe/stripe_test.html', key=stripe_keys['publishable_key'])

def authorize_cron(request):
    if request.environ['REMOTE_ADDR'] == '127.0.0.1' and request.args.get('pw') == u"HBHBhbwdhBHBhjwlbdnfnjnjNJBuwdhbBHBhwbdhHNWNDAladkoKOjdOJiwNJNJNJNJNdBjNkmKMKMNDKENFLAFCBNVCM":
        return True
    return False

@app.route('/reminder')
def send_reminders():
    if authorize_cron(request):
        user_manager = current_app.user_manager
        overdue_tasks = Task.query.filter_by(due_date=date.today()).all()
        users = []
        for task in overdue_tasks:
            user = User.get_user(task.user_id)
            users.append(user.email)
            subject, html_message, text_message = _render_email(
                    "emails/reminder",
                    user=user,
                    app_name="Motivate",
                    report_link="https://quinnjarrell.me%s" % url_for('create_report', task=task.name))
            user_manager.send_email_function(user.email, subject,
                                             html_message, text_message)
        user_manager.send_email_function('*****@*****.**', 'send_reminders sent',
                                             '', '')
        return "send_reminders"
    return ""

@app.route('/charge', methods=['GET'])
@login_required
def charge_web():
    amount = 5
    charge(current_user, amount)
    return render_template('stripe/charge.html', amount=amount)
def charge(user, amount):
    # Amount in cents

    charge = stripe.Charge.create(
        customer=user.customer_id,
        amount=amount,
        currency='usd',
        description='Flask Charge'
    )

@app.route('/stripe_redirect_test',methods=['GET', 'POST'])
def callback():
    code   = request.args.get('code')
    data   = {
             'client_secret': app.config['API_KEY'],
             'grant_type': 'authorization_code',
             'client_id': app.config['CLIENT_ID'],
             'code': code
           }

    # Make /oauth/token endpoint POST request
    url = app.config['SITE'] + app.config['TOKEN_URI']
    resp = requests.post(url, params=data)
    # Grab access_token (use this as your user's API key)
    token = resp.json.get('access_token') 
    return redirect(url_for('home_page'))