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)
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'))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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))
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)
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
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)
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)
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'))
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'
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, )
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)
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)
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)
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)
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)
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"))
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)
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'))
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)
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'))
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'))
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)
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
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)
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)
def test_get_queue_default(self): self.assertEqual(get_queue().name, 'default')
def test_job_default(self): simple.delay(0) self.assertEqual(len(get_queue().jobs), 1) get_worker().work(True)
def test_ctx_job(self): simple.ctx_delay(0) self.assertEqual(len(get_queue().jobs), 1) get_worker().work(True)
def test_job_specified_queue(self): specified.delay(3) self.assertEqual(len(get_queue('low').jobs), 1) get_worker('low').work(True)