def get(self, verifytoken): tokenEntity = EnkiModelTokenVerify.get_by_token_type( xstr(verifytoken), 'emailsubscriptionconfirm') if tokenEntity: newsletter = tokenEntity.state unsubscribe_token = EnkiModelEmailSubscriptions.add_newsletter( tokenEntity.email, newsletter) self.add_infomessage(MSG.SUCCESS(), MSG.EMAIL_SUBSCRIBED(newsletter)) # send welcome email with unsubscribe link link = enki.libutil.get_local_url('emailunsubscribe', { 'unsubscribetoken': unsubscribe_token, 'newsletter': newsletter }) self.send_email( tokenEntity.email, MSG.SEND_EMAIL_EMAIL_NEWSLETTER_WELCOME_SUBJECT(newsletter), MSG.SEND_EMAIL_EMAIL_NEWSLETTER_WELCOME_BODY(newsletter, link)) self.add_infomessage( MSG.INFORMATION(), MSG.EMAIL_NEWSLETTER_WELCOME_EMAIL_SENT(newsletter)) self.redirect(enki.libutil.get_local_url('home')) tokenEntity.key.delete() else: self.add_infomessage(MSG.INFORMATION(), MSG.EMAIL_SUBSCRIPTION_FAILED()) self.redirect(enki.libutil.get_local_url('emailsubscriptions'))
def get( self ): token = self.session.get( 'tokenregisterauth' ) tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register' ) if tokenEntity: provider_name, provider_uid = tokenEntity.auth_ids_provider.partition( ':' )[ ::2 ] provider_email = tokenEntity.email provider_authhandler = '' for handler in settings.HANDLERS: if handler.get_provider_name() == provider_name: provider_authhandler = handler # only display the email/pw login if the user has a password email_user_has_pw = enki.libuser.user_has_password_by_email( provider_email ) # list of email user's auth providers authhandlers = [] user = enki.libuser.get_EnkiUser( provider_email ) for user_provider_uid in user.auth_ids_provider: for handler in settings.HANDLERS: if ( handler.get_provider_name() in user_provider_uid ) and ( handler not in authhandlers ): authhandlers.append( handler ) break self.render_tmpl( 'registeroauthwithexistingemail.html', active_menu = 'login', token = tokenEntity, email = provider_email, email_user_has_pw = email_user_has_pw, provider_name = provider_name, provider_uid = str( provider_uid ), provider_authhandler = provider_authhandler, authhandlers = authhandlers, ) else: self.abort( 404 )
def post( self, **kwargs ): self.check_CSRF(), token = kwargs[ 'verifytoken' ] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register' ) if tokenEntity: email = tokenEntity.email password = self.request.get( 'password' ) result = enki.libuser.validate_password( password ) link = enki.libutil.get_local_url( 'registerconfirm', { 'verifytoken': token } ) if result == enki.libutil.ENKILIB_OK: result = self.create_user_from_email_pw( email, password ) if result == enki.libutil.ENKILIB_OK: self.add_infomessage( 'success', MSG.SUCCESS( ), MSG.ACCOUNT_CREATED()) self.log_in_with_email( email, password ) self.redirect_to_relevant_page() elif result == enki.handlerbase.ERROR_USER_NOT_CREATED: error_message = MSG.FAIL_REGISTRATION() self.render_tmpl( 'register.html', active_menu = 'register', email = email, error = error_message ) else: error_message = '' if result == enki.libuser.ERROR_PASSWORD_BLANK: error_message = MSG.MISSING_PW() elif result == enki.libuser.ERROR_PASSWORD_TOO_SHORT : length = len( password ) error_message = " ".join( [ MSG.PW_TOO_SHORT( length ), MSG.PW_ENSURE_MIN_LENGTH( self.app.config.get( 'enki' ).get( 'user' ).get( 'PASSWORD_LENGTH_MIN' ))]) self.render_tmpl( 'registerconfirm.html', active_menu = 'register', email = email, url = link, error = error_message ) else: self.abort( 404 )
def post( self, **kwargs ): self.check_CSRF() token = kwargs[ 'verifytoken' ] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'passwordchange' ) if tokenEntity: email = tokenEntity.email user = enki.libuser.get_EnkiUser( email ) if user: password = self.request.get( 'password' ) result = enki.libuser.set_password( user, password ) if result == enki.libutil.ENKILIB_OK: enki.libuser.delete_verifytoken_by_email( email, 'passwordchange' ) self.log_in_with_id( user.key.id(), password ) self.add_infomessage( 'success', MSG.SUCCESS( ), MSG.PASSWORD_SET()) self.redirect( enki.libutil.get_local_url( 'profile' ) ) return else: error_message = '' if result == enki.libuser.ERROR_PASSWORD_BLANK : error_message = MSG.MISSING_PW() elif result == enki.libuser.ERROR_PASSWORD_TOO_SHORT : length = len( password ) error_message = " ".join( [ MSG.PW_TOO_SHORT( length ), MSG.PW_ENSURE_MIN_LENGTH( self.app.config.get( 'enki' ).get( 'user' ).get( 'PASSWORD_LENGTH_MIN' ) ) ] ) self.render_tmpl( 'passwordrecoverconfirm.html', error = error_message ) else: self.abort( 401 ) else: self.abort( 404 )
def check_and_delete_preventmultipost_token( token ): # prevent accidental multiple posting result = False verify_token = EnkiModelTokenVerify.get_by_token_type( token, 'preventmultipost' ) if verify_token: verify_token.key.delete() result = True return result
def check_and_delete_preventmultipost_token(token): # prevent accidental multiple posting result = False verify_token = EnkiModelTokenVerify.get_by_token_type( token, 'preventmultipost') if verify_token: verify_token.key.delete() result = True return result
def get( self, **kwargs ): token = kwargs[ 'verifytoken' ] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'emailchange' ) if tokenEntity: self.email_change( tokenEntity ) self.add_infomessage( 'success', MSG.SUCCESS( ), MSG.EMAIL_SET()) self.redirect( enki.libutil.get_local_url( 'profile' ) ) else: self.abort( 404 )
def get(self, **kwargs): token = kwargs['verifytoken'] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'emailchange') if tokenEntity: self.email_change(tokenEntity) self.add_infomessage('success', MSG.SUCCESS(), MSG.EMAIL_SET()) self.redirect(enki.libutil.get_local_url('profile')) else: self.abort(404)
def get( self, **kwargs ): token = kwargs[ 'verifytoken' ] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register' ) if tokenEntity: email = tokenEntity.email link = enki.libutil.get_local_url( 'registerconfirm', { 'verifytoken': token } ) self.render_tmpl( 'registerconfirm.html', active_menu = 'register', email = email, url = link ) else: self.abort( 404 )
def get( self ): token = self.session.get( 'tokenregisterauth' ) tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register' ) if tokenEntity: provider_name, provider_uid = tokenEntity.auth_ids_provider.partition( ':' )[ ::2 ] self.render_tmpl( 'registeroauthconfirm.html', active_menu = 'register', token = tokenEntity, provider_name = provider_name, provider_uid = str( provider_uid )) else: self.abort( 404 )
def get(self): token = self.session.get('tokenregisterauth') tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: provider_name, provider_uid = tokenEntity.auth_ids_provider.partition( ':')[::2] self.render_tmpl('registeroauthconfirm.html', active_menu='register', token=tokenEntity, provider_name=provider_name, provider_uid=str(provider_uid)) else: self.abort(404)
def get(self, **kwargs): token = kwargs['verifytoken'] tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: email = tokenEntity.email link = enki.libutil.get_local_url('registerconfirm', {'verifytoken': token}) self.render_tmpl('registerconfirm.html', active_menu='register', email=email, url=link) else: self.abort(404)
def post(self): self.cleanup_item() self.log_out() self.check_CSRF() token = self.session.get('tokenregisterauth') tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: submit_type = self.request.get('submittype') # Log in with email and password if submit_type == 'login': email = tokenEntity.email tokenEntity.key.delete() password = self.request.get('password') if self.log_in_with_email(email, password): self.add_infomessage('success', MSG.SUCCESS(), MSG.LOGGED_IN()) self.redirect_to_relevant_page() else: error_message = MSG.WRONG_EMAIL_OR_PW() backoff_timer = self.get_backoff_timer(email) if backoff_timer != 0: error_message = MSG.TIMEOUT( enki.libutil.format_timedelta(backoff_timer)) self.render_tmpl('login.html', active_menu='login', authhandlers=settings.HANDLERS, email=email, error=error_message) elif submit_type == 'recoverpass': email = tokenEntity.email tokenEntity.key.delete() self.redirect( enki.libutil.get_local_url('passwordrecover', {'email': email})) # Create a new account using the OAuth provider but without the email elif submit_type == 'register': email = tokenEntity.email tokenEntity.email = '' tokenEntity.put() self.add_infomessage( 'info', MSG.INFORMATION(), MSG.REGISTRATION_INFO_EMAIL_CANNOT_USE(email)) self.redirect( enki.libutil.get_local_url('registeroauthconfirm')) else: tokenEntity.key.delete() self.add_infomessage('info', MSG.INFORMATION(), MSG.LOGIN_FAILED()) self.redirect(enki.libutil.get_local_url('home')) else: self.abort(404)
def post(self): secret = xstr(self.request.get('secret')) if secret == settings.SECRET_FASTSPRING or enki.libutil.is_debug( ) or settings.ENKI_EMULATE_STORE: licence_key_bundle = xstr(self.request.get('licence_key')) purchase_price = xstr(self.request.get('purchase_price')) order_id = xstr(self.request.get('order_id')) product_name = xstr(self.request.get('product_name')) purchaser_email = xstr(self.request.get('purchaser_email')) shop_name = xstr(self.request.get('shop_name')) quantity = xint(self.request.get('quantity')) if secret == settings.SECRET_FASTSPRING: is_test = self.request.get('is_test') if is_test.capitalize() == 'True': order_type = 'test' else: order_type = 'purchase' else: order_type = xstr(self.request.get('order_type')) purchaser_user_id = None token_purchasebyuser = xstr(self.request.get('referrer')) if token_purchasebyuser: token = EnkiModelTokenVerify.get_by_token_type( token_purchasebyuser, 'purchasebyuser') if token: purchaser_user_id = token.user_id token.key.delete() licence_keys = licence_key_bundle.replace('-', '').split() for licence_key in licence_keys: item = EnkiModelProductKey(licence_key=licence_key, purchase_price=purchase_price, order_id=order_id, product_name=product_name, purchaser_email=purchaser_email, shop_name=shop_name, quantity=quantity, purchaser_user_id=purchaser_user_id, order_type=order_type) item.put() return
def post( self ): self.cleanup_item() self.log_out() self.check_CSRF() token = self.session.get('tokenregisterauth') tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: submit_type = self.request.get( 'submittype' ) # Log in with email and password if submit_type == 'login': email = tokenEntity.email tokenEntity.key.delete() password = self.request.get( 'password' ) if self.log_in_with_email( email, password ): self.add_infomessage( 'success', MSG.SUCCESS(), MSG.LOGGED_IN()) self.redirect_to_relevant_page() else: error_message = MSG.WRONG_EMAIL_OR_PW() backoff_timer = self.get_backoff_timer( email ) if backoff_timer != 0: error_message = MSG.TIMEOUT( enki.libutil.format_timedelta( backoff_timer )) self.render_tmpl( 'login.html', active_menu = 'login', authhandlers = settings.HANDLERS, email = email, error = error_message ) elif submit_type == 'recoverpass': email = tokenEntity.email tokenEntity.key.delete() self.redirect( enki.libutil.get_local_url( 'passwordrecover', { 'email': email })) # Create a new account using the OAuth provider but without the email elif submit_type == 'register': email = tokenEntity.email tokenEntity.email = '' tokenEntity.put() self.add_infomessage( 'info', MSG.INFORMATION() , MSG.REGISTRATION_INFO_EMAIL_CANNOT_USE( email )) self.redirect( enki.libutil.get_local_url( 'registeroauthconfirm' )) else: tokenEntity.key.delete() self.add_infomessage( 'info', MSG.INFORMATION(), MSG.LOGIN_FAILED()) self.redirect( enki.libutil.get_local_url( 'home' )) else: self.abort(404)
def post(self, **kwargs): self.check_CSRF(), token = kwargs['verifytoken'] tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: email = tokenEntity.email password = self.request.get('password') result = enki.libuser.validate_password(password) link = enki.libutil.get_local_url('registerconfirm', {'verifytoken': token}) if result == enki.libutil.ENKILIB_OK: result = self.create_user_from_email_pw(email, password) if result == enki.libutil.ENKILIB_OK: self.add_infomessage('success', MSG.SUCCESS(), MSG.ACCOUNT_CREATED()) self.log_in_with_email(email, password) self.redirect_to_relevant_page() elif result == enki.handlerbase.ERROR_USER_NOT_CREATED: error_message = MSG.FAIL_REGISTRATION() self.render_tmpl('register.html', active_menu='register', email=email, error=error_message) else: error_message = '' if result == enki.libuser.ERROR_PASSWORD_BLANK: error_message = MSG.MISSING_PW() elif result == enki.libuser.ERROR_PASSWORD_TOO_SHORT: length = len(password) error_message = " ".join([ MSG.PW_TOO_SHORT(length), MSG.PW_ENSURE_MIN_LENGTH( self.app.config.get('enki').get('user').get( 'PASSWORD_LENGTH_MIN')) ]) self.render_tmpl('registerconfirm.html', active_menu='register', email=email, url=link, error=error_message) else: self.abort(404)
def post( self ): secret = xstr( self.request.get( 'secret' )) if secret == settings.SECRET_FASTSPRING or enki.libutil.is_debug( ) or settings.ENKI_EMULATE_STORE: licence_key_bundle = xstr( self.request.get( 'licence_key' )) purchase_price = xstr( self.request.get( 'purchase_price' )) order_id = xstr(self.request.get( 'order_id' )) product_name = xstr( self.request.get( 'product_name' )) purchaser_email = xstr( self.request.get( 'purchaser_email' )) shop_name = xstr( self.request.get( 'shop_name' )) quantity = xint( self.request.get( 'quantity' )) purchaser_user_id = None token_purchasebyuser = xstr( self.request.get( 'referrer' )) if token_purchasebyuser: token = EnkiModelTokenVerify.get_by_token_type( token_purchasebyuser, 'purchasebyuser' ) if token: purchaser_user_id = token.user_id token.key.delete() is_test = self.request.get( 'is_test' ) if is_test: order_type = 'test' if enki.libutil.is_debug() or settings.ENKI_EMULATE_STORE: order_type = 'emulated' licence_keys = licence_key_bundle.replace( '-', '' ).split() for licence_key in licence_keys: item = EnkiModelProductKey( licence_key = licence_key, purchase_price = purchase_price, order_id = order_id, product_name = product_name, purchaser_email = purchaser_email, shop_name = shop_name, quantity = quantity, purchaser_user_id = purchaser_user_id, order_type = order_type ) item.put() return
def get(self): token = self.session.get('tokenregisterauth') tokenEntity = EnkiModelTokenVerify.get_by_token_type(token, 'register') if tokenEntity: provider_name, provider_uid = tokenEntity.auth_ids_provider.partition( ':')[::2] provider_email = tokenEntity.email provider_authhandler = '' for handler in settings.HANDLERS: if handler.get_provider_name() == provider_name: provider_authhandler = handler # only display the email/pw login if the user has a password email_user_has_pw = enki.libuser.user_has_password_by_email( provider_email) # list of email user's auth providers authhandlers = [] user = enki.libuser.get_EnkiUser(provider_email) for user_provider_uid in user.auth_ids_provider: for handler in settings.HANDLERS: if (handler.get_provider_name() in user_provider_uid) and (handler not in authhandlers): authhandlers.append(handler) break self.render_tmpl( 'registeroauthwithexistingemail.html', active_menu='login', token=tokenEntity, email=provider_email, email_user_has_pw=email_user_has_pw, provider_name=provider_name, provider_uid=str(provider_uid), provider_authhandler=provider_authhandler, authhandlers=authhandlers, ) else: self.abort(404)
def post(self, **kwargs): self.check_CSRF() token = kwargs['verifytoken'] tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'passwordchange') if tokenEntity: email = tokenEntity.email user = enki.libuser.get_EnkiUser(email) if user: password = self.request.get('password') result = enki.libuser.set_password(user, password) if result == enki.libutil.ENKILIB_OK: enki.libuser.delete_verifytoken_by_email( email, 'passwordchange') self.log_in_with_id(user.key.id(), password) self.add_infomessage('success', MSG.SUCCESS(), MSG.PASSWORD_SET()) self.redirect(enki.libutil.get_local_url('profile')) return else: error_message = '' if result == enki.libuser.ERROR_PASSWORD_BLANK: error_message = MSG.MISSING_PW() elif result == enki.libuser.ERROR_PASSWORD_TOO_SHORT: length = len(password) error_message = " ".join([ MSG.PW_TOO_SHORT(length), MSG.PW_ENSURE_MIN_LENGTH( self.app.config.get('enki').get('user').get( 'PASSWORD_LENGTH_MIN')) ]) self.render_tmpl('passwordrecoverconfirm.html', error=error_message) else: self.abort(401) else: self.abort(404)
def post(self): if not settings.SECRET_FASTSPRING or enki.libutil.is_debug( ) or settings.ENKI_EMULATE_STORE: self.check_CSRF() product = xstr(self.request.get('product')) quantity = xint(self.request.get('quantity')) purchase_price = xstr(self.request.get('purchase_price')) purchaser_email = xstr(self.request.get('purchaser_email')) licence_keys = 'not generated' user_id = '' emulator_order_id = 'EMULATED_' + webapp2_extras.security.generate_random_string( length=10, pool=webapp2_extras.security.DIGITS) url = enki.libutil.get_local_url('genlicencefastspring') form_fields = { 'secret': 'pretendsecret', 'quantity': str(quantity) } form_data = urllib.urlencode(form_fields) result = urlfetch.fetch(url=url, payload=form_data, method=urlfetch.POST) if result.status_code == 200: licence_keys = result.content.replace('-', '') referrer = xstr(self.request.get('referrer')) token = EnkiModelTokenVerify.get_by_token_type( referrer, 'purchasebyuser') if token: user_id = token.user_id licence_key_display = [] for item in licence_keys.split(): item_dash = enki.libstore.insert_dashes_5_10(item) licence_key_display.append(item_dash) self.add_infomessage( 'info', MSG.INFORMATION(), '<h3>FastSpring Store Emulator - Step 1</h3>' + '<h4>Emulated purchase details</h4>' + '<ul>' + '<li><EnkiModelProductKey> #{FastSpring variable} = <em><emulated value></em></li>' + '<li>product_name #{orderItem.productName} = <em>' + product + '</em></li>' + '<li>order_id #{order.id} = <em>' + emulator_order_id + '</em></li>' + '<li>quantity #{orderItem.quantity} = <em>' + xstr(quantity) + '</em></li>' + '<li>purchase_price #{orderItem.totalUSD} = <em>' + purchase_price + '</em></li>' + '<li>purchaser_email #{order.customer.email} = <em>' + purchaser_email + '</em></li>' + '<li>shop_name = <em>Emulator_FastSpring</em></li>' + '<li>licence_key #{orderItem.fulfillment.licence.licences.list} = <br><em><b>' + '<br>'.join(licence_key_display) + '</b></em></li>' + '</ul>' '<h4>Internal data - generated if the purchaser was logged in when they bought the product</h4>' + '<ul>' + '<li>EnkiModelTokenVerify.user_id = purchaser user_id = <em>' + (xstr(user_id) if user_id else 'None') + '</em></li>' + '<li>EnkiModelTokenVerify.type purchasebyuser referrer #{order.referrer} = <em>' + (xstr(referrer) if referrer else 'None') + '</em></li>' + '</ul>') url = enki.libutil.get_local_url('ordercompletefastspring') form_fields = { 'licence_key': licence_keys, 'purchase_price': purchase_price, 'order_id': emulator_order_id, 'product_name': product, 'purchaser_email': purchaser_email, 'shop_name': 'Emulator_FastSpring', 'quantity': quantity, 'referrer': referrer, 'is_test': True } form_data = urllib.urlencode(form_fields) result = urlfetch.fetch(url=url, payload=form_data, method=urlfetch.POST) if result.status_code == 200: message_view_library = '' if self.is_logged_in(): message_view_library = '<p><a href="/profile" class="alert-link">View and activate licence keys</a>.</p>' self.add_infomessage( 'info', MSG.INFORMATION(), '<h3>FastSpring Store Emulator - Step 2</h3><p>Purchase records created<p>' + message_view_library) else: self.add_infomessage( 'warning', MSG.WARNING(), '<h3>FastSpring Store Emulator - Step 2 FAILED: Purchase records not created</h3>' ) self.redirect_to_relevant_page()
def post(self): choice = self.request.get('choice') # Step 1 if choice == 'create' or choice == 'cancel': token = self.session.get('tokenregisterauth') tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register') authId = tokenEntity.auth_ids_provider provider_name, provider_uid = authId.partition(':')[::2] auth_email = tokenEntity.email if tokenEntity.email else None if choice == 'create': if auth_email: # If the email is given by the provider, it is verified. Get or ceate the account and log the user in. user = self.get_or_create_user_from_authid( authId, auth_email) if user: # login the user through auth self.log_in_session_token_create(user) self.add_infomessage('success', MSG.SUCCESS(), MSG.LOGGED_IN()) else: # user creation failed (timeout etc.) self.add_infomessage( 'warning', MSG.WARNING(), MSG.AUTH_LOGIN_FAILED(provider_name)) self.redirect_to_relevant_page() tokenEntity.key.delete() self.session.pop('tokenregisterauth') else: # If the email isn't given by the provider, use the manually entered email. self.check_CSRF() email = self.request.get('email') user = self.get_or_create_user_from_authid(authId) self.log_in_session_token_create(user) error_message = '' success = False result = enki.libuser.validate_email(email) if result == enki.libutil.ENKILIB_OK: result = self.email_change_request( email ) # send an email for verification. Since it's not verified at this point, create the account without the email. self.add_infomessage( 'info', MSG.INFORMATION(), MSG.REGISTER_AUTH_ADD_EMAIL_INFO_EMAIL_SENT(email)) if result == enki.handlerbase.ERROR_EMAIL_IN_USE: self.add_debugmessage( 'Comment - whether the email is available or not, the feedback through the UI is identical to prevent email checking.' ) success = True tokenEntity.key.delete() self.session.pop('tokenregisterauth') elif result == enki.libuser.ERROR_EMAIL_FORMAT_INVALID: error_message = MSG.WRONG_EMAIL_FORMAT() elif result == enki.libuser.ERROR_EMAIL_MISSING: error_message = MSG.MISSING_EMAIL() self.render_tmpl('registeroauthconfirm.html', active_menu='register', token=tokenEntity, provider_name=provider_name, provider_uid=str(provider_uid), error=error_message, success=success) elif choice == 'cancel': self.add_infomessage('info', MSG.INFORMATION(), MSG.REGISTRATION_ABORT()) self.redirect_to_relevant_page() tokenEntity.key.delete() self.session.pop('tokenregisterauth') # Step 2 (those choices will only be presented to the user if they successfully added an email manually). elif choice == 'continue': self.redirect_to_relevant_page() elif choice == 'profile': url = enki.libutil.get_local_url('profile') self.session['sessionrefpath'] = url self.redirect(url)
def post( self ): choice = self.request.get( 'choice' ) # Step 1 if choice == 'create' or choice == 'cancel': token = self.session.get( 'tokenregisterauth' ) tokenEntity = EnkiModelTokenVerify.get_by_token_type( token, 'register' ) authId = tokenEntity.auth_ids_provider provider_name, provider_uid = authId.partition( ':' )[ ::2 ] auth_email = tokenEntity.email if tokenEntity.email else None if choice == 'create': if auth_email: # If the email is given by the provider, it is verified. Get or ceate the account and log the user in. user = self.get_or_create_user_from_authid( authId, auth_email ) if user: # login the user through auth self.log_in_session_token_create( user ) self.add_infomessage( 'success', MSG.SUCCESS(), MSG.LOGGED_IN()) else: # user creation failed (timeout etc.) self.add_infomessage( 'warning', MSG.WARNING(), MSG.AUTH_LOGIN_FAILED( provider_name )) self.redirect_to_relevant_page() tokenEntity.key.delete() self.session.pop( 'tokenregisterauth' ) else: # If the email isn't given by the provider, use the manually entered email. self.check_CSRF() email = self.request.get( 'email' ) user = self.get_or_create_user_from_authid( authId ) self.log_in_session_token_create( user ) error_message = '' success = False result = enki.libuser.validate_email( email ) if result == enki.libutil.ENKILIB_OK: result = self.email_change_request( email ) # send an email for verification. Since it's not verified at this point, create the account without the email. self.add_infomessage( 'info', MSG.INFORMATION(), MSG.REGISTER_AUTH_ADD_EMAIL_INFO_EMAIL_SENT( email )) if result == enki.handlerbase.ERROR_EMAIL_IN_USE: self.add_debugmessage( 'Comment - whether the email is available or not, the feedback through the UI is identical to prevent email checking.' ) success = True tokenEntity.key.delete() self.session.pop( 'tokenregisterauth' ) elif result == enki.libuser.ERROR_EMAIL_FORMAT_INVALID: error_message = MSG.WRONG_EMAIL_FORMAT() elif result == enki.libuser.ERROR_EMAIL_MISSING: error_message = MSG.MISSING_EMAIL() self.render_tmpl( 'registeroauthconfirm.html', active_menu = 'register', token = tokenEntity, provider_name = provider_name, provider_uid = str( provider_uid ), error = error_message, success = success ) elif choice == 'cancel': self.add_infomessage( 'info', MSG.INFORMATION(), MSG.REGISTRATION_ABORT()) self.redirect_to_relevant_page() tokenEntity.key.delete() self.session.pop( 'tokenregisterauth' ) # Step 2 (those choices will only be presented to the user if they successfully added an email manually). elif choice == 'continue': self.redirect_to_relevant_page() elif choice == 'profile': url = enki.libutil.get_local_url( 'profile' ) self.session[ 'sessionrefpath' ] = url self.redirect( url )
def post( self ): if not settings.SECRET_FASTSPRING or enki.libutil.is_debug( ) or settings.ENKI_EMULATE_STORE: self.check_CSRF() product = xstr( self.request.get( 'product' )) quantity = xint( self.request.get('quantity')) purchase_price = xstr( self.request.get( 'purchase_price' )) purchaser_email = xstr( self.request.get( 'purchaser_email' )) licence_keys = 'not generated' user_id = '' emulator_order_id = 'EMULATED_' + webapp2_extras.security.generate_random_string( length = 10, pool = webapp2_extras.security.DIGITS ) url = enki.libutil.get_local_url( 'genlicencefastspring' ) form_fields = { 'secret': 'pretendsecret', 'quantity': str( quantity ) } form_data = urllib.urlencode( form_fields ) result = urlfetch.fetch( url = url, payload = form_data, method = urlfetch.POST ) if result.status_code == 200: licence_keys = result.content.replace( '-', '' ) referrer = xstr( self.request.get( 'referrer' )) token = EnkiModelTokenVerify.get_by_token_type( referrer, 'purchasebyuser' ) if token: user_id = token.user_id licence_key_display = [] for item in licence_keys.split(): item_dash = enki.libstore.insert_dashes_5_10( item ) licence_key_display.append( item_dash ) self.add_infomessage( 'info', MSG.INFORMATION(),'<h3>FastSpring Store Emulator - Step 1</h3>'+ '<h4>Emulated purchase details</h4>' + '<ul>' + '<li><EnkiModelProductKey> #{FastSpring variable} = <em><emulated value></em></li>' + '<li>product_name #{orderItem.productName} = <em>' + product + '</em></li>' + '<li>order_id #{order.id} = <em>' + emulator_order_id + '</em></li>' + '<li>quantity #{orderItem.quantity} = <em>' + xstr( quantity ) + '</em></li>' + '<li>purchase_price #{orderItem.totalUSD} = <em>' + purchase_price + '</em></li>' + '<li>purchaser_email #{order.customer.email} = <em>' + purchaser_email + '</em></li>' + '<li>shop_name = <em>Emulator_FastSpring</em></li>' + '<li>licence_key #{orderItem.fulfillment.licence.licences.list} = <br><em><b>' + '<br>'.join( licence_key_display ) + '</b></em></li>' + '</ul>' '<h4>Internal data - generated if the purchaser was logged in when they bought the product</h4>' + '<ul>' + '<li>EnkiModelTokenVerify.user_id = purchaser user_id = <em>' + ( xstr( user_id ) if user_id else 'None' ) + '</em></li>' + '<li>EnkiModelTokenVerify.type purchasebyuser referrer #{order.referrer} = <em>' + ( xstr( referrer ) if referrer else 'None' ) + '</em></li>' + '</ul>' ) url = enki.libutil.get_local_url( 'ordercompletefastspring' ) form_fields = { 'licence_key' : licence_keys, 'purchase_price' : purchase_price, 'order_id' : emulator_order_id, 'product_name' : product, 'purchaser_email' : purchaser_email, 'shop_name' : 'Emulator_FastSpring', 'quantity' : quantity , 'referrer' : referrer, 'is_test' : True } form_data = urllib.urlencode( form_fields ) result = urlfetch.fetch( url = url, payload = form_data, method = urlfetch.POST ) if result.status_code == 200: message_view_library = '' if self.is_logged_in(): message_view_library = '<p><a href="/profile" class="alert-link">View and activate licence keys</a>.</p>' self.add_infomessage( 'info', MSG.INFORMATION(),'<h3>FastSpring Store Emulator - Step 2</h3><p>Purchase records created<p>' + message_view_library ) else: self.add_infomessage( 'warning', MSG.WARNING(),'<h3>FastSpring Store Emulator - Step 2 FAILED: Purchase records not created</h3>' ) self.redirect_to_relevant_page()