def post(self): # posted a filled out reg form # create the user, # and send an email verification including token to the new user email = self.request.get('email').lower() name = self.request.get('name') password = self.request.get('password') last_name = self.request.get('lastname') unique_properties = ['email_address'] logging.info("register,POST email=%s"%email) user_data = self.user_model.create_user( email, unique_properties, email_address=email, name=name, password_raw=password, last_name=last_name, verified=False) if not user_data[0]: # user_data is a tuple logging.warning("register,POST Duplicate %s"%email) self.render_template( 'signup.html', {"message": "That userId is already registered", }) return user = user_data[1] user_id = user.get_id() token = self.user_model.create_signup_token(user_id) invite_token = self.request.params['invite_token'] if \ 'invite' in self.request.params \ else "none" inviter = Invite.checkInviteToken(invite_token) if inviter: passwordVerificationHandler.handle_verification(self,user_id,token,"v",invite_token) else: verification_url = self.uri_for('verification', type='v', user_id=user_id, signup_token=token, _full=True) verification_url += "&invite_token=" + str(invite_token) logging.info("register,POST emailing") mail_wrapper.send_mail( sender=config['system_email'], to=[email, '*****@*****.**'], subject="Rayv Registration", body='Click on this link to verify your address and ' 'complete the sign-up process \n'+ verification_url ) logging.info('Verification email sent to %s [%s] [%s]'%(email,verification_url, invite_token)) params = { 'email':email, 'password':password } self.render_template('signup-verify.html', params)
def handle_verification(cls, handler, user_id,signup_token,verification_type,invite_token): # it should be something more concise like # self.auth.get_user_by_token(user_id, signup_token) # unfortunately the auth interface does not (yet) allow to manipulate # signup tokens concisely user, ts = handler.user_model.get_by_auth_token(int(user_id), signup_token, 'signup') if not user: logging.info( 'Could not find any userId with id "%s" signup token "%s"', user_id, signup_token) handler.display_message("Not found - if you've already followed this link there is no need to do it again") return # store userId data in the session handler.auth.set_session(handler.auth.store.user_to_dict(user), remember=True) if verification_type == 'v': # remove signup token, # we don't want users to come back with an old link handler.user_model.delete_signup_token(handler.user_id, signup_token) if not user.verified: user.verified = True user.put() try: if invite_token and invite_token != 'none': inv = Invite.checkInviteToken(invite_token) Friends.addFriends(inv, handler.user_id) Invite.delInviteToken(invite_token) logging.info("passwordVerificationHandler complete "+user.email_address) except: logging_ext.error( "Failed to add friend: passwordVerificationHandler GET", exc_info=True) handler.render_template('signup-complete.html') elif verification_type == 'p': # supply userId to the page params = { 'userId': user, 'token': signup_token } handler.render_template('resetpassword.html', params) else: logging.info('verification type not supported') handler.abort(404)
def post(self): logging.info('SignupHandler: In') email = self.request.get('email').lower() username = email user = self.user_model.get_by_auth_id(username) if user and user.blocked: logging.info('SignupHandler: Blocked user ' + username) return self.display_message('Unable to sign up') name = self.request.get('name') password = self.request.get('password') last_name = self.request.get('lastname') unique_properties = ['email_address'] logging.info('SignupHandler: Create User ' + email) user_data = self.user_model.create_user(username, unique_properties, email_address=email, name=name, password_raw=password, last_name=last_name, verified=False) if not user_data[0]: #user_data is a tuple logging.warning('SignupHandler: ERROR dup for ' + email) self.display_message( 'Unable to create account for %s.\n That email is already registered' % (username)) return user = user_data[1] user_id = user.get_id() user.screen_name = self.request.get('screenname') if not user.screen_name: user.screen_name = name.title() + last_name.upper()[0] logging.info('SignupHandler: Put...') user.put() logging.info('SignupHandler: Put done') token = self.user_model.create_signup_token(user_id) invite_token = self.request.params.get('invite_token') inviter = Invite.checkInviteToken(invite_token) if inviter: #invited self.render_template('signup-complete.html') else: if not invite_token: invite_token = 'none' verification_url = self.uri_for('verification', type='v', user_id=user_id, signup_token=token, invite_token=invite_token, _full=True) msg = 'Click on this link to confirm your address and complete the sign-up process \n'+\ verification_url logging.info('SignupHandler: Send msg %s, token %s' % (verification_url, token)) mail_wrapper.send_mail(sender=settings.config['system_email'], to=[email, '*****@*****.**'], subject="Welcome to Taste 5", body=msg) #self.display_message(msg.format(url=verification_url)) logging.info('SignupHandler: Sent') params = {'email': email, 'password': password} self.render_template('signup-verify.html', params)