Exemple #1
0
    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', {})