def post(self): signed_request = utility.parse_signed_request( self.request.get('signed_request'), FACEBOOK_APP_SECRET) if signed_request: if signed_request.has_key('user_id'): # if user is Authorized and has user id, then capture new information # and update if they exist if not put them into datastore. self.session['oauth_token'] = signed_request['oauth_token'] self.session['member_id'] = signed_request['user_id'] member_id = signed_request['user_id'] member = Member.gql("WHERE id = :member_id", member_id=member_id).get() render_parameters = {} # if not member add member. graph = facebook.GraphAPI(signed_request['oauth_token']) me = graph.get_object("me") member = self.current_member() if not member: member = Member(key_name=me['id']) member.id = me['id'] member.username = me['username'] member.first_name = me['first_name'] member.last_name = me['last_name'] member.name = me['name'] member.email = db.Email( me['email'] ) # It might be null if user did not provide an email member.country = Country.country_name( signed_request['user']['country']) member.put() if member.aiesec_email: #Already an AIESECer! #Get current member and see if she already has a home_entity render_parameters = {'member': member} if member.home_committee: # Member already has a home_entity param = self.render_parameters() param[ "body_function"] = "committee_body('{0}');".format( member.home_committee.key()) self.show_page("base", param) else: # Member is not in a commmittee param = self.render_parameters() param["body_function"] = "entity_welcome_body();" self.show_page("base", param) else: #Member is not verified to be an AIESECer yet # 1 - First method, to see if user email is an aiesec.net email if (member.email.find("@aiesec.net") > -1): render_parameters['aiesec_email_found'] = member.email # 2 - Second method of getting aiesec email, user authorize the app to access # if user is already signed in then get his email if users.get_current_user(): current_user = users.get_current_user() url_linktext = '' current_email = str(current_user.email()) if current_email.find("@aiesec.net") > -1: #keep the email in a login_aiesec_email and pass to form render_parameters[ 'login_aiesec_email'] = current_email else: #Ask for logout url_linktext = 'Logout from ' + current_email url = users.create_logout_url(self.request.uri) render_parameters['url'] = url render_parameters['url_linktext'] = url_linktext else: url = users.create_login_url(self.request.uri) render_parameters['url'] = url url_linktext = 'Login to aiesec.net account' render_parameters['url_linktext'] = url_linktext # 3 - Third method: Sending verification code if member.temp_email_code: if member.temp_email_code.find("@aiesec.net"): render_parameters[ 'code_sent_email'] = member.temp_email_code.split( ';')[0] render_parameters['member'] = member self.show_page(r"register/welcome", render_parameters) else: #if user is not signed in the application he will be prompted to sign in self.show_page(r'register/login', {})