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'))
Exemple #2
0
	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 )
Exemple #3
0
	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 )
Exemple #4
0
	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 )
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
	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 )
Exemple #8
0
 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)
Exemple #9
0
	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 )
Exemple #10
0
	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 )
Exemple #11
0
 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)
Exemple #12
0
 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)
Exemple #13
0
 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)
Exemple #14
0
    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
Exemple #15
0
	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)
Exemple #16
0
 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)
Exemple #17
0
	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
Exemple #18
0
 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)
Exemple #19
0
 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)
Exemple #20
0
    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>&lt;EnkiModelProductKey&gt; #{FastSpring variable} = <em>&lt;emulated value&gt;</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()
Exemple #21
0
 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)
Exemple #22
0
	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 )
Exemple #23
0
	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>&lt;EnkiModelProductKey&gt; #{FastSpring variable} = <em>&lt;emulated value&gt;</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()