def login(): """Renders the login page""" if request.method == 'GET': return render_template('auth/login') email = request.form.get('email') password = request.form.get('password') redirect_url = request.args.get('redirect', None) if redirect_url is None: redirect_url = url_for('home') try: authenticate_user(email, password) except UserNotFoundError: logging.info('User not found') return render_template('auth/login', error="That user doesn't exist") except UserAuthenticationFailedError: return render_template( 'auth/login', error="Incorrect Password", email=email) logging.info('Wrong password') return redirect(redirect_url)
def normalize_request(options): """Normalize request After this, the user should be created and logged in, they should have a stripe id associated with them and if a token was passed as credit_card then it should be converted into a stripe card id. TODO: update existing user if additional information is provided """ credit_card = options.get('credit_card') country = options.get('country') state = options.get('state') coupon_code = options.get('coupon_code') domain = options.get('domain') options['amount'] = 50 if country in REGIONS and state in REGIONS[country]: options['state'] = REGIONS[country][state] def is_token(value): """Determines whether the passed argument is a stripe token or not""" if value is None: return False return (value[:3] == 'tok') if 'user' in options: user = options['user'] else: user = get_current_user() if not user: # user is not logged in, let's see if the email is attached to an # account email = options.get('email') password = options.get('password') name = options.get('name') user = get_user(email) if user: # account exists - try to authenticate try: authenticate_user(email, password) except UserAuthenticationFailedError: return do_error('Password is incorrect') else: # this is a new account user = create_user(email, password, name=name) session['user'] = user.key.id() if not user.name: name = options.get('name') user.name = name if not user.stripe_id: # User doesn't have a stripe customer ID customer = stripe.Customer.create( description=name, email=email ) user.stripe_id = customer.id if is_token(credit_card): card = customer.cards.create(card=credit_card) credit_card = card.id else: # User has a stripe ID customer = stripe.Customer.retrieve(user.stripe_id) if is_token(credit_card): # this is a new card card = customer.cards.create(card=credit_card) credit_card = card.id user.put() if 'csr' not in options: # We need to generate the CSR keypair = get_keypair(False) csr = CertificationRequest(keypair=keypair) # Set fields domain = options.get('domain') organization = options.get('organization') state = options.get('state') country = options.get('country') phone_number = options.get('phone_number') email = user.email csr.set_subject_field('common_name', domain) csr.set_subject_field('organization', organization) csr.set_subject_field('state', state) csr.set_subject_field('country', country) csr.set_subject_field('telephone', phone_number) csr.set_subject_field('email_address', email) options['csr'] = csr.export() options['keypair'] = keypair.exportKey() options['credit_card'] = credit_card options['user'] = user if request.args.get('promotion') == 'academic': options['academic'] = True if options.get('promotion', '') == 'academic': options['academic'] = True return options