Ejemplo n.º 1
0
def register():
    """Register a new user, and send them a confirmation email."""

    # must pass the survey in order to be able to register
    can_register = request.cookies.get('can_register')
    if not can_register:
        return redirect(403)

    # passed survey
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data,
            password=form.password.data)
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        confirm_link = url_for('account.confirm', token=token, _external=True)
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject='Confirm Your Account',
            template='account/email/confirm',
            user=user,
            confirm_link=confirm_link)
        flash('A confirmation link has been sent to {}.'.format(user.email),
              'warning')
        return redirect(url_for('main.index'))
    return render_template('account/register.html', form=form)
Ejemplo n.º 2
0
def git_save():
    form = GitSaveForm()
    if form.validate_on_submit():
        subtype = request.args.get('subtype', None)
        if _is_git_enabled(subtype):
            if subtype == 'repo_personal':
                try:
                    get_queue().enqueue(save_personal_data_to_git,
                                        current_user.user_name,
                                        form.commit_message.data)
                    flash('User data was stored to git repository.',
                          'form-success')
                except git.GitCommandError as e:
                    flash('Storing data to Git repository failed.' + str(e),
                          'form-error')
            else:
                try:
                    get_queue().enqueue(save_public_content_data_to_git,
                                        current_user.user_name,
                                        form.commit_message.data)
                    flash('Content data was stored to git repository.',
                          'form-success')
                except git.GitCommandError as e:
                    flash(
                        'Storing content data to Git repository failed.' +
                        str(e), 'form-error')
    return redirect(url_for('main_userdata.data_store_content', git_save='1'))
Ejemplo n.º 3
0
def invite_user():
    """Invites a new user to create an account and set their own password."""
    form = InviteUserForm()
    if form.validate_on_submit():
        user = User(
            role=form.role.data,
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data)
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        invite_link = url_for(
            'account.join_from_invite',
            user_id=user.id,
            token=token,
            _external=True)
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject='You Are Invited To Join',
            template='account/email/invite',
            user=user,
            invite_link=invite_link, )
        flash('User {} successfully invited'.format(user.full_name()),
              'form-success')
    return render_template('admin/new_user.html', form=form)
Ejemplo n.º 4
0
def business_connection_create():
    """ Stores the requested search parameters and queues the relevant scrapers  """
    form = NewBusinessConnectionForm()
    if form.validate_on_submit:
        scrapers = ','.join(request.form.getlist('scrapers'))
        connection = BusinessConnection(first_name=request.form['first_name'],
                                        last_name=request.form['last_name'],
                                        user_id=current_user.id,
                                        scrapers_requested=scrapers.lower())

        if request.form['keywords']:
            connection.keywords = request.form['keywords']

        db.session.add(connection)
        db.session.commit()

        scraper_lower = scrapers.lower()
        """ Queue the domain checkers to run in the background if required """
        if ('ac & edu' in scraper_lower) or ('personal' in scraper_lower):
            logging.warning('>>> domain check')
            get_queue().enqueue(check_domains,
                                business_connection_id=connection.id,
                                first_name=connection.first_name,
                                last_name=connection.last_name)
        """ Queue the google scrapers to run in the background if required """
        enqueue_google_scrapers(scraper_lower, connection)
    else:
        flash('Invalid submission - unable to create new business connection')

    return url_for('main.business_connection_profile',
                   business_connection_id=connection.id)
Ejemplo n.º 5
0
def invite_user():
    """Invites a new user to create an account and set their own password."""
    form = InviteUserForm()
    if form.validate_on_submit():
        user = User(
            role=form.role.data,
            user_name=form.user_name.data,
            full_name=form.full_name.data,
            email=form.email.data)
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        invite_link = url_for(
            'account.join_from_invite',
            user_id=user.id,
            token=token,
            _external=True)
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject='You Are Invited To Join',
            template='account/email/invite',
            user=user,
            invite_link=invite_link,
        )
        flash('User {} successfully invited'.format(user.full_name),
              'form-success')
    return render_template('admin/new_user.html', form=form)
Ejemplo n.º 6
0
def register():
    """Register a new user, and send them a confirmation email."""
    form = RegistrationForm()
    if form.validate_on_submit():
        role = Role.objects(default=True, enable=True).first()
        if role is not None:
            role_id = role.pkid
        else:
            role_id = 1
        user = User(
            user_name=form.user_name.data,
            email=form.email.data,
            password_hash=generate_password_hash(form.password.data),
            role_id=role_id
        )
        user.save()
        token = user.generate_confirmation_token()
        confirm_link = url_for('account.confirm', token=token, _external=True)
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject=_('Confirm Your Account'),
            template='account/email/confirm',
            user=user,
            confirm_link=confirm_link)
        flash(_('A confirmation link has been sent to {}.').format(user.email), 'warning')
        return redirect(url_for('main.index'))
    return render_template('auth/register.html', form=form)
Ejemplo n.º 7
0
def change_email_request():
    """Respond to existing user's request to change their email."""
    form = ChangeEmailForm()
    if form.validate_on_submit():
        if current_user.verify_password(form.password.data):
            new_email = form.email.data
            token = current_user.generate_email_change_token(new_email)
            change_email_link = url_for("account.change_email",
                                        token=token,
                                        _external=True)
            user = current_user._get_current_object()
            user.__dict__.pop("storage_files")
            get_queue().enqueue(
                send_email,
                recipient=new_email,
                subject="Confirm Your New Email",
                template="account/email/change_email",
                # current_user is a LocalProxy, we want the underlying user
                # object
                user=user,
                change_email_link=change_email_link,
            )
            flash("A confirmation link has been sent to {}.".format(new_email),
                  "warning")
            return redirect(url_for("main.index"))
        else:
            flash("Invalid email or password.", "form-error")
    return render_template("account/manage.html", form=form)
Ejemplo n.º 8
0
def reset_password_request():
    """Respond to existing user's request to reset their password."""
    if not current_user.is_anonymous:
        return redirect(url_for("main.index"))
    form = RequestResetPasswordForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            token = user.generate_password_reset_token()
            reset_link = url_for("account.reset_password",
                                 token=token,
                                 _external=True)
            user.__dict__.pop("storage_files")
            get_queue().enqueue(
                send_email,
                recipient=user.email,
                subject="Reset Your Password",
                template="account/email/reset_password",
                user=user,
                reset_link=reset_link,
                next=request.args.get("next"),
            )
        flash(
            "A password reset link has been sent to {}.".format(
                form.email.data),
            "warning",
        )
        return redirect(url_for("account.login"))
    return render_template("account/reset_password.html", form=form)
Ejemplo n.º 9
0
def reset_password_request():
    """Respond to existing user's request to reset their password."""
    if not current_user.is_anonymous:
        return redirect(url_for('frontend.index'))
    form = RequestResetPasswordForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            token = user.generate_password_reset_token()
            reset_link = url_for('account.reset_password',
                                 token=token,
                                 _external=True)
            get_queue().enqueue(send_email,
                                recipient=user.email,
                                subject='Reset Your Password',
                                template='email/reset_password',
                                sender=current_app.config['MAIL_USERNAME'],
                                user=user,
                                reset_link=reset_link,
                                next=request.args.get('next'))
        flash(
            'A password reset link has been sent to {}.'.format(
                form.email.data), 'warning')
        return redirect(url_for('account.login'))
    return render_template('account/reset_password.html', form=form)
Ejemplo n.º 10
0
def invite_user():
    """Invites a new user to create an account and set their own password."""
    form = InviteUserForm()
    if form.validate_on_submit():
        user = User(
            role=form.role.data,
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data,
        )
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        invite_link = url_for(
            "account.join_from_invite", user_id=user.id, token=token, _external=True
        )
        user.__dict__.pop("storage_files")
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject="You Are Invited To Join",
            template="account/email/invite",
            user=user,
            invite_link=invite_link,
        )
        flash("User {} successfully invited".format(user.full_name()), "form-success")
    return render_template("admin/new_user.html", form=form)
Ejemplo n.º 11
0
def new_club():
    """Create a new club."""
    form = NewClubForm()
    if form.validate_on_submit():
        club = Club(name=form.name.data,
                    img_link=form.img_link.data,
                    website=form.website.data,
                    description=form.desc.data,
                    recruitment_info=form.recruitment_info.data,
                    is_confirmed=current_user.is_admin(),
                    categories=form.categories.data)
        db.session.add(club)
        db.session.commit()
        link = url_for('club.change_club_details',
                       club_id=club.id,
                       _external=True)
        if (current_user.is_admin() == False):
            for r in Role.query.filter_by(name='Administrator').all():
                for a in r.users:
                    get_queue().enqueue(
                        send_email,
                        recipient=a.email,
                        subject='A new club was suggested by {}'.format(
                            current_user.first_name),
                        template='club/email/suggested_club',
                        club=club,
                        link=link)
        action = 'created' if current_user.is_admin() else 'suggested'
        flash('Club {} successfully {}'.format(club.name, action),
              'form-success')
    return render_template('club/new_club.html', form=form)
Ejemplo n.º 12
0
def anon_login():
    website_settings = MSettings.query.first()
    if request.method == 'POST':
        email = request.form.get('email')
        if not email:
            flash("Please provide a valid email", "error")
            return render_template("marketplace/buyer/anon_auth.html",
                                   website_settings=website_settings)
        user = User.query.filter_by(email=email).first()
        if user:
            flash(
                "There is a user with this email, please go to the login page instead",
                "error")
            return render_template("marketplace/buyer/anon_auth.html",
                                   website_settings=website_settings)
        orders_count = MOrder.query.filter_by(email=email).count()
        if orders_count == 0:
            flash(
                "There is a no orders associated with this email on our database, please insert an email you made "
                "orders with", "error")
            return render_template("marketplace/buyer/anon_auth.html",
                                   website_settings=website_settings)
        token = create_access_token(identity=request.form.get('email'),
                                    expires_delta=datetime.timedelta(hours=24))
        get_queue().enqueue(send_email,
                            recipient=email,
                            subject='You Have a new notification on Mediville',
                            template='account/email/anon_auth',
                            link=url_for('marketplace.anon_auth',
                                         token=token,
                                         _external=True),
                            user=None)
        flash("Auth link were sent to {}".format(email), "success")
    return render_template("marketplace/buyer/anon_auth.html",
                           website_settings=website_settings)
Ejemplo n.º 13
0
def new_user():
    """Create a new user."""
    form = NewUserForm()
    password = form.password.data
    if form.validate_on_submit():
        user = User(role=form.role.data,
                    first_name=form.first_name.data,
                    last_name=form.last_name.data,
                    email=form.email.data,
                    password=form.password.data)
        db.session.add(user)
        db.session.commit()
        invite_link = url_for('account.login', _external=True)
        invite_by = User.query.filter(User.id == current_user.id).first()
        get_queue().enqueue(send_email,
                            recipient=user.email,
                            subject='You Are Invited To Join',
                            template='account/email/created_account',
                            user=user.id,
                            invite_link=invite_link,
                            invite_by=invite_by,
                            password=password)
        flash('User {} successfully created'.format(user.full_name),
              'form-success')
    return render_template('admin/new_user.html', form=form)
Ejemplo n.º 14
0
def change_email_request():
    """Respond to existing user's request to change their email."""
    form = ChangeEmailForm()
    if form.validate_on_submit():
        if current_user.verify_password(form.password.data):
            new_email = form.email.data
            token = current_user.generate_email_change_token(new_email)
            change_email_link = url_for('account.change_email',
                                        token=token,
                                        _external=True)
            get_queue().enqueue(
                send_email,
                recipient=new_email,
                subject=gettext('Confirm Your New Email'),
                template='account/email/change_email',
                # current_user is a LocalProxy, we want the underlying user
                # object
                user=current_user._get_current_object(),
                change_email_link=change_email_link)
            flash(
                gettext(
                    'A confirmation link has been sent to {}.'.format(
                        new_email), 'warning'))
            return redirect(url_for('main.index'))
        else:
            flash(gettext('Invalid email or password.'), 'form-error')
    return render_template('account/change_email.html', form=form)
Ejemplo n.º 15
0
def tick():
    days = ['M','T','W','R','F','S','U']
    eastern = timezone('US/Eastern')
    day = days[datetime.now(eastern).weekday()]
    with app.app_context():
        print(app.config['EMAIL_SENDER'])
        try:
            for p in Plan.query.all():
                users = p.plan_users.all()
                notifs = []
                for c in p.plan_components:
                    table = c.fk_table
                    id = c.fk_id
                    resource = db.session.query(db.Model.metadata.tables[table]).filter_by(id=id).first()
                    arr_days = ast.literal_eval(resource.days)
                    for d in arr_days:
                        if d == day:
                            notifs.append('Name {}, Description: {}'.format(resource.name, resource.description))
                            print('added resource {}'.format(resource.name))
                if len(notifs) > 0:
                    for u in users:
                        get_queue().enqueue(
                            send_email,
                            recipient=u.email,
                            subject='Transplant App Reminder',
                            template='account/email/reminder',
                            user=u,
                            notifs=notifs)
                        print('Send email to {}'.format(u.email))
        except Exception as e:
            print("Error {}".format(e))
Ejemplo n.º 16
0
def register():
    """Register a new user, and send them a confirmation email."""
    form = RegistrationUserForm()
    if form.validate_on_submit():
        user = User(first_name=form.first_name.data,
                    last_name=form.last_name.data,
                    email=form.email.data,
                    password=form.password.data)
        db.session.add(user)
        db.session.commit()
        professor = Professor(user_id=user.id,
                              first_name=form.first_name.data,
                              last_name=form.last_name.data,
                              university=form.university.data)
        db.session.add(professor)
        db.session.commit()
        token = user.generate_confirmation_token()
        confirm_link = url_for('account.confirm', token=token, _external=True)
        get_queue().enqueue(send_email,
                            recipient=user.email,
                            subject='Confirm Your Account',
                            template='account/email/confirm',
                            user=user,
                            confirm_link=confirm_link)
        flash('A confirmation link has been sent to {}.'.format(user.email),
              'warning')
        return redirect(url_for('main.index'))
    return render_template('professor/signup.html', form=form)
Ejemplo n.º 17
0
def create_transaction():
    token: str = request.form.get('token')
    amount: int = int(request.form.get('amount'))
    currency: str = request.form.get('currency')

    if not token:
        return jsonify(error='Token is blank'), 422
    if not amount:
        return jsonify(error='Amount is blank'), 422
    if not currency:
        return jsonify(error='Currency is blank'), 422
    if not re.match(r'^[A-Z]{3}$', currency):
        return jsonify(error='Invalid currency code'), 422

    try:
        payload = jwt.decode(token, current_app.config['JWT_SECRET'])
    except jwt.InvalidTokenError as exc:
        return jsonify(error=str(exc)), 422
    else:
        if payload['can_transact']:
            get_queue().enqueue(
                '__main__.record_transaction',
                user_id=payload['user_id'],
                amount=amount,
                currency=currency,
            )
            return jsonify(
                user_id=payload['user_id'],
                amount=amount,
                currency=currency,
            )
        else:
            return jsonify(error='User cannot transact'), 403
Ejemplo n.º 18
0
def new():
    """Room Request page."""
    editable_html_obj = EditableHTML.get_editable_html('form_instructions')
    editable_html_obj_email = EditableHTML.get_editable_html(
        'email_confirmation')
    email = editable_html_obj_email.value
    form = RoomRequestForm(request.form)
    if form.validate_on_submit():
        try:
            room_request = get_room_request_from_form(form)
            db.session.add(room_request)
            db.session.commit()
            greeting = "<p>Dear " + room_request.last_name + " Family,</p>\n\n"
            info = (
                '''<p>Thank you for contacting us to request a room at the Philadelphia Ronald McDonald House.
            You have requested an arrival date of ''' +
                room_request.patient_check_in.strftime("%m/%d/%Y") +
                " and a departure date of " +
                room_request.patient_check_out.strftime("%m/%d/%Y") +
                ".</p>\n\n")
            email = greeting + info + email
            get_queue().enqueue(send_custom_email,
                                recipient=room_request.email,
                                subject='PRMH Room Request Submitted',
                                custom_html=email)
            return render_template('room_request/success.html')
        except IntegrityError:
            db.session.rollback()
            flash('Unable to save changes. Please try again.', 'form-error')

    return render_template('room_request/new.html',
                           form=form,
                           editable_html_obj=editable_html_obj)
Ejemplo n.º 19
0
def register():
    """Register a new user, and send them a confirmation email."""
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data,
            password=form.password.data,
            vcpu_limit=form.vcpu_limit.data,
            memory_limit=form.memory_limit.data,
        )
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        confirm_link = url_for("account.confirm", token=token, _external=True)
        user.__dict__.pop("storage_files")
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject="Confirm Your Account",
            template="account/email/confirm",
            user=user,
            confirm_link=confirm_link,
        )
        flash("A confirmation link has been sent to {}.".format(user.email),
              "warning")
        return redirect(url_for("main.index"))
    return render_template("account/register.html", form=form)
Ejemplo n.º 20
0
def delete_report(report_id):
    """Delete a report"""

    report = Incident.query.filter_by(id=report_id).first()

    if report.picture_deletehash:
        # Asynchronously delete the report's image
        get_queue().enqueue(
            delete_image,
            deletehash=report.picture_deletehash,
            imgur_client_id=current_app.config['IMGUR_CLIENT_ID'],
            imgur_client_secret=current_app.config['IMGUR_CLIENT_SECRET'],
        )
    # report_user_id = report.user_id

    db.session.delete(report)
    db.session.commit()
    flash('Successfully deleted report.', 'success')

    # TODO - address edge case where an admin clicks on their own report from
    # reports/all endpoint, should redirect back to /all. use cookies
    # if report_user_id == current_user.id:
    #     return redirect(url_for('reports.view_my_reports'))
    # else:
    return redirect(url_for('reports.view_reports'))
Ejemplo n.º 21
0
def business_connection_extract():
	""" Queues the profile extraction request  """
	search_result = BusinessConnectionSearchResult.query.filter_by(id=request.form['result_id']).first()
	if search_result is None:
		abort(404)
     #enqueue process to perform profile extraction
	get_queue().enqueue(perform_profile_extraction, search_result=search_result, user_id=current_user.id)
	return 'Success'
Ejemplo n.º 22
0
def send_rejection_email(user):
	get_queue().enqueue(
        send_email,
        recipient=user.email,
        subject='Update to Immigrant Defense Project Application',
        template='account/email/rejection_email.html',
        user=user,
    )
Ejemplo n.º 23
0
def suggest(resource_id):
    """Create a suggestion for a resource."""
    basic_form = SuggestionBasicForm()
    if resource_id is None:
        name = None
        resource = None
    else:
        resource = Resource.query.get(resource_id)
        if resource is None:
            abort(404)
        name = resource.name
        basic_form.name.data = resource.name
        basic_form.address.data = resource.address
    advanced_form = SuggestionAdvancedForm()
    descriptors = Descriptor.query.all()
    for descriptor in descriptors:
        if descriptor.values:  # Fields for option descriptors.
            choices = [(str(i), v) for i, v in enumerate(descriptor.values)]
            setattr(SuggestionAdvancedForm,
                    descriptor.name,
                    SelectField(choices=choices))
        else:  # Fields for text descriptors
            setattr(SuggestionAdvancedForm, descriptor.name, TextAreaField())
    if basic_form.validate_on_submit():
        suggestion = Suggestion(
            resource_id=resource_id,
            suggestion_text=basic_form.suggestion_text.data,
            contact_name=basic_form.contact_name.data,
            contact_email=basic_form.contact_email.data,
            contact_phone_number=basic_form.contact_phone_number.data,
            resource_name=basic_form.name.data,
            resource_address=basic_form.address.data,
            submission_time=datetime.now(pytz.timezone('US/Eastern'))
        )
        db.session.add(suggestion)
        try:
            db.session.commit()
            app = create_app(os.getenv('FLASK_CONFIG') or 'default')
            contact_email = app.config['ADMIN_EMAIL']
            get_queue().enqueue(
                send_email,
                recipient=contact_email,
                subject='New Suggestion',
                template='suggestion/email/suggestion',
                name=basic_form.contact_name.data,
                email=basic_form.contact_email.data,
                phone=basic_form.contact_phone_number.data,
                message=basic_form.suggestion_text.data,
                resource_name=basic_form.name.data,
                resource_address=basic_form.address.data,
            )
            flash('Thanks for the suggestion!', 'success')
            return redirect(url_for('main.index'))
        except IntegrityError:
            db.session.rollback()
            flash('Database error occurred. Please try again.', 'error')
    return render_template('suggestion/suggest.html', name=name, basic_form=basic_form,
                            advanced_form=advanced_form)
Ejemplo n.º 24
0
def register():
    """Register a new user, and send them a confirmation email."""
    settings = LandingSetting.query.all()
    form = RegistrationForm()
    #choices = [('0', "No Recruiter")]+[('{}'.format(user.id), user.full_name) for user in User.query.filter_by(profession='Recruiter').all()]
    #form.recruiter.choices = choices
    #form.recruiter.process_data(form.recruiter.data)
    # print(form.recruiter.data, form.recruiter.choices, form.profession.data)
    if request.method == 'GET':
        return render_template('account/test_register.html',
                               form=form,
                               settings=settings)
    else:
        if form.validate_on_submit():
            # print(recruiter_id)
            user_instance = User(
                first_name=form.first_name.data,
                last_name=form.last_name.data,
                email=form.email.data,
                #profession=profession,
                password=form.password.data)
            db.session.add(user_instance)
            db.session.commit()
            db.session.refresh(user_instance)
            MOrder.query.filter_by(email=user_instance.email).update(
                {'buyer_id': user_instance.id}, synchronize_session='evaluate')
            ##            if request.files['photo']:
            ##                image_filename = images.save(request.files['photo'])
            ##                image_url = images.url(image_filename)
            ##                picture_photo = Photo(
            ##                    image_filename=image_filename,
            ##                    image_url=image_url,
            ##                    user_id=user_instance.id,
            ##                )
            ##                db.session.add(picture_photo)
            db.session.commit()
            token = user_instance.generate_confirmation_token()
            confirm_link = url_for('account.confirm',
                                   token=token,
                                   _external=True)
            get_queue().enqueue(send_email,
                                recipient=user_instance.email,
                                subject='Confirm Your Account',
                                template='account/email/confirm',
                                user=user_instance.id,
                                confirm_link=confirm_link)
            flash(
                'A confirmation link has been sent to {}.'.format(
                    user_instance.email), 'warning')
            if current_user.is_anonymous:
                return redirect(url_for('account.login'))
        else:
            flash('Error! Data was not added.', 'error')
        return render_template('account/test_register.html',
                               form=form,
                               settings=settings)
Ejemplo n.º 25
0
def send_test_mail():
    form = TestEmailForm()
    if form.validate_on_submit():
        get_queue().enqueue(
            send_email,
            recipient=current_user.email,
            subject='TEST MAIL',
            template='account/email/test_mail',
            user=current_user._get_current_object())
        flash("A test email has been sent to '{}'".format(current_user.email), 'info')
    return render_template('account/manage.html', form=form)
Ejemplo n.º 26
0
def confirm_request():
    """Respond to new user's request to confirm their account."""
    token = current_user.generate_confirmation_token()
    confirm_link = url_for('account.confirm', token=token, _external=True)
    get_queue().enqueue(
        send_email,
        recipient=current_user.email,
        subject='Confirm Your Account',
        template='account/email/confirm',
        # current_user is a LocalProxy, we want the underlying user object
        user=current_user._get_current_object(),
        confirm_link=confirm_link)
Ejemplo n.º 27
0
def register():
    """Register a new user, and send them a confirmation email."""
    form = RegistrationForm()
    if form.validate_on_submit():
        # add youngtip using Frest backend
        url = backend_url + 'users'
        data = {
            'email': form.email.data,
            'username': form.nickname.data,
            'password': form.password.data
        }
        try:
            h = httplib2.Http(".cache")
            (resp, content) = h.request(url,
                                        "POST",
                                        body=urllib.parse.urlencode(data),
                                        headers=backend_headers)
            r = loads(content)
            logger.info(r)

            if resp.status in (404, 405) or resp.status < 200:
                raise httplib2.ServerNotFoundError('restful api uri not found')
            else:
                if r['status'] == 'fail':
                    flash(r['field'] + ' ' + r['message'], 'form-error')
                else:
                    # for send mail
                    user = User(id=r['id'], username=form.nickname.data)

                    confirm_token = user.generate_confirmation_token()
                    confirm_link = url_for('account.confirm',
                                           token=confirm_token,
                                           _external=True)
                    # TODO: RQ
                    get_queue().enqueue(send_email,
                                        recipient=form.email.data,
                                        subject='Confirm Your Account',
                                        template='account/email/confirm',
                                        user=user,
                                        confirm_link=confirm_link)

                    flash(
                        'A confirmation link has been sent to {}.'.format(
                            form.email.data), 'warning')
                    return redirect(url_for('main.index'))

        # except requests.exceptions.RequestException as e:
        except Exception as e:
            logger.error(e)
            flash('oops...' + '{' + str(e) + '}', 'form-error')

    return render_template('account/register.html', form=form)
Ejemplo n.º 28
0
def join_from_invite(user_id, token):
    """
    Confirm new user's account with provided token and prompt them to set
    a password.
    """
    if current_user is not None and current_user.is_authenticated:
        flash("You are already logged in.", "error")
        return redirect(url_for("main.index"))

    new_user = User.query.get(user_id)
    if new_user is None:
        return redirect(404)

    if new_user.password_hash is not None:
        flash("You have already joined.", "error")
        return redirect(url_for("main.index"))

    if new_user.confirm_account(token):
        form = CreatePasswordForm()
        if form.validate_on_submit():
            new_user.password = form.password.data
            db.session.add(new_user)
            db.session.commit()
            flash(
                "Your password has been set. After you log in, you can "
                'go to the "Your Account" page to review your account '
                "information and settings.",
                "success",
            )
            return redirect(url_for("account.login"))
        return render_template("account/join_invite.html", form=form)
    else:
        flash(
            "The confirmation link is invalid or has expired. Another "
            "invite email with a new link has been sent to you.",
            "error",
        )
        token = new_user.generate_confirmation_token()
        invite_link = url_for("account.join_from_invite",
                              user_id=user_id,
                              token=token,
                              _external=True)
        new_user.__dict__.pop("storage_files")
        get_queue().enqueue(
            send_email,
            recipient=new_user.email,
            subject="You Are Invited To Join",
            template="account/email/invite",
            user=new_user,
            invite_link=invite_link,
        )
    return redirect(url_for("main.index"))
Ejemplo n.º 29
0
def reset_password_request():
    """Respond to existing user's request to reset their password."""
    form = RequestResetPasswordForm()

    if form.validate_on_submit():
        # TODOO: call to restful
        url = backend_url + 'auth'
        data = {'email': form.email.data}
        try:
            h = httplib2.Http(".cache")
            (resp, content) = h.request(url,
                                        "PUT",
                                        body=urllib.parse.urlencode(data),
                                        headers=backend_headers)
            r = loads(content)
            logger.info(r)

            if resp.status in (404, 405) or resp.status < 200:
                raise httplib2.ServerNotFoundError('restful api uri not found')
            else:
                if r['status'] == 'fail':
                    flash(r['message'], 'form-error')
                else:
                    # for send mail
                    user = User(id=r['data']['id'],
                                username=r['data']['username'])

                    token = user.generate_password_reset_token()  # reset token
                    reset_link = url_for('account.reset_password',
                                         token=token,
                                         _external=True)

                    get_queue().enqueue(
                        send_email,
                        recipient=form.email.data,
                        subject='Reset Your Password',
                        template='account/email/reset_password',
                        user=user,
                        reset_link=reset_link,
                        next=request.args.get('next'))

                    flash(
                        'A password reset link has been sent to {}.'.format(
                            form.email.data), 'warning')
                    return redirect(url_for('account.login'))

        except Exception as e:
            logger.error(e)
            flash('oops...' + '{' + str(e) + '}', 'form-error')
    return render_template('account/reset_password.html', form=form)
Ejemplo n.º 30
0
def confirm_request():
    """Respond to new user's request to confirm their account."""
    token = current_user.generate_confirmation_token()
    confirm_link = url_for('account.confirm', token=token, _external=True)
    get_queue().enqueue(
        send_email,
        recipient=current_user.email,
        subject='Confirm Your Account',
        template='account/email/confirm',
        # current_user is a LocalProxy, we want the underlying user object
        user=current_user._get_current_object(),
        confirm_link=confirm_link)
    flash('새로운 확인 메일이 {}로 전송되었습니다.'.format(current_user.email), 'warning')
    return redirect(url_for('main.index'))
Ejemplo n.º 31
0
def interested():
    """Creates a new candidate from the intake form"""
    form = IntakeForm()
    if form.validate_on_submit():
        demographic = Demographic(
            race=form.demographic.race.data,
            gender=form.demographic.gender.data,
            age=form.demographic.age.data,
            sexual_orientation=form.demographic.sexual_orientation.data,
            soc_class=form.demographic.soc_class.data
        )
        notes = 'Interest form submitted at {}\n\nAddress: {}\nPronouns: {}\nAbility Status: {}\nHow long in Philadelphia: {}\nWhat neighborhood: {}\nAnything else: {}'.format(time.strftime("%Y-%m-%d %H:%M"), form.address.data, form.pronouns.data, form.ability.data, form.how_long_philly.data, form.what_neighborhood.data, form.notes.data)
        candidate = Candidate(
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data,
            phone_number=form.phone_number.data,
            term=Term.query.order_by(Term.end_date.desc()).first(),
            source=form.how_did_you_hear.data,
            staff_contact='',
            notes=notes,
            demographic=demographic,
            demographic_id=demographic.id,
            status=Status.PENDING,
            amount_donated=0
        )
        db.session.add(demographic)
        db.session.add(candidate)
        db.session.commit()

        admins = []
        for u in User.query.all():
            if u.is_admin():
                admins.append(u)

        # Notify admins via email
        for a in admins:
            get_queue().enqueue(
                send_email,
                recipient=a.email,
                subject='New Giving Project Candidate',
                template='admin/email/new_candidate',
                user=a,
                candidate=candidate,
                add_method='Interest form')

        flash('Thank you {}! We will contact you shortly.'.format(candidate.first_name),
              'form-success')
    return render_template('main/intake_form.html', form=form)
Ejemplo n.º 32
0
def confirm_request():
    """Respond to new user's request to confirm their account."""
    token = current_user.generate_confirmation_token()
    confirm_link = url_for('account.confirm', token=token, _external=True)
    get_queue().enqueue(
        send_email,
        recipient=current_user.email,
        subject='Confirm Your Account',
        template='account/email/confirm',
        # current_user is a LocalProxy, we want the underlying user object
        user=current_user._get_current_object(),
        confirm_link=confirm_link)
    flash('A new confirmation link has been sent to {}.'.format(
        current_user.email), 'warning')
    return redirect(url_for('main.index'))
Ejemplo n.º 33
0
def join_from_invite(user_id, token):
    """
    Confirm new user's account with provided token and prompt them to set
    a password.
    """
    if current_user is not None and current_user.is_authenticated:
        flash('You are already logged in.', 'error')
        return redirect(url_for('main.index'))

    new_user = User.query.get(user_id)
    if new_user is None:
        return redirect(404)

    if new_user.password_hash is not None:
        flash('You have already joined.', 'error')
        return redirect(url_for('main.index'))

    if new_user.confirm_account(token):
        form = CreatePasswordForm()
        if form.validate_on_submit():
            new_user.password = form.password.data
            db.session.add(new_user)
            db.session.commit()
            flash('Your password has been set. After you log in, you can '
                  'go to the "Your Account" page to review your account '
                  'information and settings.', 'success')
            return redirect(url_for('account.login'))
        return render_template('account/join_invite.html', form=form)
    else:
        flash('The confirmation link is invalid or has expired. Another '
              'invite email with a new link has been sent to you.', 'error')
        token = new_user.generate_confirmation_token()
        invite_link = url_for(
            'account.join_from_invite',
            user_id=user_id,
            token=token,
            _external=True)
        get_queue().enqueue(
            send_email,
            recipient=new_user.email,
            subject='You Are Invited To Join',
            template='account/email/invite',
            user=new_user,
            invite_link=invite_link)
    return redirect(url_for('main.index'))
Ejemplo n.º 34
0
def reset_password_request():
    """Respond to existing user's request to reset their password."""
    if not current_user.is_anonymous:
        return redirect(url_for('main.index'))
    form = RequestResetPasswordForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            token = user.generate_password_reset_token()
            reset_link = url_for(
                'account.reset_password', token=token, _external=True)
            get_queue().enqueue(
                send_email,
                recipient=user.email,
                subject='Reset Your Password',
                template='account/email/reset_password',
                user=user,
                reset_link=reset_link,
                next=request.args.get('next'))
        flash('A password reset link has been sent to {}.'
              .format(form.email.data), 'warning')
        return redirect(url_for('account.login'))
    return render_template('account/reset_password.html', form=form)
Ejemplo n.º 35
0
def enqueue_job(func, *args,
                description=None, course_id=None, user_id=None, timeout=300,
                result_kind='string', **kwargs):
    if not description:
        raise ValueError('Description required to start background job')
    if not course_id:
        raise ValueError('Course ID required to start background job')
    if not user_id:
        user_id = current_user.id
    job = Job(
        status='queued',
        course_id=course_id,
        user_id=user_id,
        name=func.__name__,
        description=description,
        result_kind=result_kind
    )
    db.session.add(job)
    db.session.commit()

    try:
        get_queue().enqueue_call(
            func=func,
            args=args,
            kwargs=kwargs,
            job_id=str(job.id),
            timeout=timeout
        )
    except redis.exceptions.ConnectionError as e:
        job.failed = True
        job.status = 'finished'
        job.log = 'Could not connect to Redis: ' + str(e)
        db.session.add(job)
        db.session.commit()

    return job
Ejemplo n.º 36
0
def register():
    """Register a new user, and send them a confirmation email."""
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            email=form.email.data,
            password=form.password.data)
        db.session.add(user)
        db.session.commit()
        token = user.generate_confirmation_token()
        confirm_link = url_for('account.confirm', token=token, _external=True)
        get_queue().enqueue(
            send_email,
            recipient=user.email,
            subject='Confirm Your Account',
            template='account/email/confirm',
            user=user,
            confirm_link=confirm_link)
        flash('A confirmation link has been sent to {}.'.format(user.email),
              'warning')
        return redirect(url_for('main.index'))
    return render_template('account/register.html', form=form)
Ejemplo n.º 37
0
def change_email_request():
    """Respond to existing user's request to change their email."""
    form = ChangeEmailForm()
    if form.validate_on_submit():
        if current_user.verify_password(form.password.data):
            new_email = form.email.data
            token = current_user.generate_email_change_token(new_email)
            change_email_link = url_for(
                'account.change_email', token=token, _external=True)
            get_queue().enqueue(
                send_email,
                recipient=new_email,
                subject='Confirm Your New Email',
                template='account/email/change_email',
                # current_user is a LocalProxy, we want the underlying user
                # object
                user=current_user._get_current_object(),
                change_email_link=change_email_link)
            flash('A confirmation link has been sent to {}.'.format(new_email),
                  'warning')
            return redirect(url_for('main.index'))
        else:
            flash('Invalid email or password.', 'form-error')
    return render_template('account/manage.html', form=form)
Ejemplo n.º 38
0
 def test_get_queue_default(self):
     self.assertEqual(get_queue().name, 'default')
Ejemplo n.º 39
0
 def test_job_default(self):
     simple.delay(0)
     self.assertEqual(len(get_queue().jobs), 1)
     get_worker().work(True)
Ejemplo n.º 40
0
 def test_ctx_job(self):
     simple.ctx_delay(0)
     self.assertEqual(len(get_queue().jobs), 1)
     get_worker().work(True)
Ejemplo n.º 41
0
 def test_job_specified_queue(self):
     specified.delay(3)
     self.assertEqual(len(get_queue('low').jobs), 1)
     get_worker('low').work(True)