def get(self):
        session = get_current_session()
        
        if session.is_active():
            session.terminate()
        
        user = users.get_current_user()
        ca_user = CAUser.all().filter("google_user", user).fetch(1)
        
        if ca_user:
            logging.debug('User registered with Google account. Login successfull')
            ca_user = ca_user[0]
        else:
            ca_user = CAUser(google_user=user, type=0)
            ca_user.put()
            
        save_session_info(ca_user)
        
#        template_values = {
#            'session_status': True,
#            'user': session['active_user'],
#            'top_scorers': get_top_scorers(),
#            'top_users': get_top_users_global_ranking(),
#            'last_jackpot': get_last_jackpot()
#        }
#                
#        render_template(self, 'create_step1.html', template_values)
        self.redirect('/list/groups/ranking')
    def get(self):
        session = get_current_session()
        
        if session.is_active():
            session.terminate()
        
        verification_code = self.request.get("code")
        
        args = dict(client_id=FACEBOOK_APP_ID,
                    redirect_uri=self.request.path_url)
        
        if verification_code:
            args["client_secret"] = FACEBOOK_APP_SECRET
            args["code"] = self.request.get("code")
            response = cgi.parse_qs(urllib.urlopen("https://graph.facebook.com/oauth/access_token?" +
                                                   urllib.urlencode(args)).read())
            
            access_token = response["access_token"][-1]

            # Download the user profile and cache a local instance of the
            # basic profile info
            profile = json.load(urllib.urlopen("https://graph.facebook.com/me?" + urllib.urlencode(dict(access_token=access_token))))

            user = CAFacebookUser(key_name=str(profile["id"]),
                                  id=str(profile["id"]),
                                  name=profile["name"],
                                  access_token=access_token)

            ca_user = CAUser.all().filter("facebook_user", user).fetch(1)
            
            if ca_user:
                logging.debug('User registered with Facebook account. Login successfull')
                ca_user = ca_user[0]
            else:
                user.put()
                ca_user = CAUser(facebook_user=user, type=1)
                ca_user.put()
                
            save_session_info(ca_user)
            
#            template_values = {
#                'session_status': True,
#                'user': session.get('active_user'),
#                'top_scorers': get_top_scorers(),
#                'top_users': get_top_users_global_ranking(),
#                'last_jackpot': get_last_jackpot()
#            }
        
            set_cookie(self.response, "fb_user",
                       str(profile["id"]),
                       expires=time.time() + 30 * 86400)
            
#            render_template(self, 'create_step1.html', template_values)

            self.redirect('/list/groups/ranking')
        else:
            self.redirect("https://graph.facebook.com/oauth/authorize?" +
                          urllib.urlencode(args))
 def post(self):
     name = self.request.get('name')
     email = self.request.get('email')
     password = self.request.get('password')
     
     existing_google_user = CAUser.all().filter("google_user !=", None).fetch(10000)
     exists = False
     
     for user in existing_google_user:
         if user.google_user.email() == email:
             exists = True
             break
     
     if not exists:
         existing_user = CANativeUser.all().filter("email =", email).fetch(10000)
         
         if not existing_user:
             user = CANativeUser(name=name, email=email, password=password)
             user.put()
             
             ca_user = CAUser(native_user=user, type=2)
             ca_user.put()
         
             self.redirect('/login')
         else:
             template_values = {
                 'session_status': False,
                 'top_scorers': get_top_scorers(),
                 'top_users': get_top_users_global_ranking(),
                 'last_jackpot': get_last_jackpot(),
                 'error': 'Ya existe un usuario registrado con este correo electrónico. Inténtalo de nuevo'
             }
             
             render_template(self, 'register.html', template_values)
     else:
         template_values = {
             'session_status': False,
             'top_scorers': get_top_scorers(),
             'top_users': get_top_users_global_ranking(),
             'last_jackpot': get_last_jackpot(),
             'error': 'Ya existe un usuario registrado con este correo electrónico. Inténtalo de nuevo'
         }
         
         render_template(self, 'register.html', template_values)
 def get(self):
     update_session_time()
     session = get_current_session()
     check_session_status()
         
     if session.is_active():
         user_key = Key(self.request.get('user'))
         
         new_member = CAUser.get(user_key)
         
         username = []
         
         members = eval(self.request.get('last_members'))
         searched_users = eval(self.request.get('last_search')) 
                         
         if new_member.type == 0:
             username = new_member.google_user.nickname() + " " + new_member.google_user.email()
         elif new_member.type == 1:
             username = new_member.facebook_user.name
         else:
             username = new_member.native_user.name + " " + new_member.native_user.email
                     
         if username:
             searched_users.remove((str(username), str(new_member.key())))
             members.append((str(username), str(new_member.key()), True))
             
         template_values = {
             'session_status': True,
             'user': session['active_user'],
             'searched_users': searched_users,
             'members': members,
             'name': self.request.get('name'),
             'last_search': str(searched_users),
             'last_members': str(members),
             'top_scorers': get_top_scorers(),
             'top_users': get_top_users_global_ranking(),
             'last_jackpot': get_last_jackpot(),
             'selected_football_pool': self.request.get('selected-football-pool')
         }
                 
         render_template(self, 'edit_competition_group.html', template_values)
     else:
         self.redirect('/')
def get_pending_membership_requests(ca_user):
    membership_requests = ca_user.pending_membership_requests
    pending_membership_requests = []

    for membership_request in membership_requests:
        user = CAUser.get(membership_request.users[0])
        username = []

        if user.type == 0:
            username = user.google_user.nickname()
        elif user.type == 1:
            username = user.facebook_user.name
        else:
            username = user.native_user.name

        if username:
            pending_membership_requests.append(
                (str(username), str(membership_request.group.name), str(membership_request.key()))
            )

    return pending_membership_requests
    def post(self):
        update_session_time()
        session = get_current_session()
        check_session_status()
            
        if session.is_active():
            search_user = self.request.get('search_user')
            save = self.request.get('save')
            
            if search_user:
                active_user = session['active_user']
                
                search_term = self.request.get('search')
                search_result = []
                
                if search_term:
                    users = CAUser.all().fetch(10000)
                    logging.debug('Iterando por usuarios')

                    for user in users:
                        if active_user.key() != user.key():
                            username = []
                            
                            logging.debug('tipo de usuario: ' + str(user.type))
                            
                            if user.type == 0:
                                nickname = user.google_user.nickname()
                                email = user.google_user.email()

                                if (search_term.lower() in str(nickname).lower()) or (search_term.lower() in str(email).lower()):
                                    username = nickname + ' ' + email
                            elif user.type == 1:
                                name = user.facebook_user.name

                                if search_term.lower() in str(name).lower():
                                    username = name
                            else:
                                logging.debug('Usuario nativo!')
                                logging.debug('key de usuario: ' + str(user.key()))
                                
                                name = user.native_user.name
                                email = user.native_user.email

                                if (search_term.lower() in str(name).lower()) or (search_term.lower() in str(email).lower()):
                                    username = name + ' ' + email

                            if username:
                                search_result.append((str(username), str(user.key())))
                            
                template_values = {
                    'session_status': True,
                    'user': session['active_user'],
                    'searched_users': search_result,
                    'members': eval(self.request.get('last-members')),
                    'name': self.request.get('name'),
                    'last_search': str(search_result),
                    'last_members': self.request.get('last-members'),
                    'top_scorers': get_top_scorers(),
                    'top_users': get_top_users_global_ranking(),
                    'last_jackpot': get_last_jackpot()
                }
                
                render_template(self, 'create_competition_group.html', template_values)
            elif save:
                active_user = session['active_user']                
                name = self.request.get('name')
               
                new_group = CACompetitonGroup(name=name, privacy=False)
                new_group.put()
                
                active_user.groups.append(new_group.key())
                active_user.put()
                
                active_user_football_pools = CAFootballPool.all().filter("user ="******"privacy =", False).fetch(1000)
                
                for football_pool in active_user_football_pools:
                    if football_pool.payment:
                        members = new_group.members.fetch(10000)
                        
                        group_ranking = CAGroupRanking(football_pool=football_pool, group=new_group, rank=len(members))
                        group_ranking.put()
                
                members = eval(self.request.get('last-members'))
                
                for member in members:
                    member_key = Key(member[1])
                    user = CAUser.get(member_key)
                    
                    users = []
                    users.append(active_user.key())
                    users.append(user.key())
                    
                    request_membership = CARequestGroupMembership(users=users, status=False, group=new_group)
                    request_membership.put()
                    
                #self.redirect('/list/groups/ranking')
                competition_groups = CACompetitonGroup.get(active_user.groups)
                
                template_values = {
                    'session_status': True,
                    'user': session['active_user'],
                    'groups': competition_groups,
                    'pending_membership_requests': get_pending_membership_requests(active_user),
                    'top_scorers': get_top_scorers(),
                    'top_users': get_top_users_global_ranking(),
                    'last_jackpot': get_last_jackpot(),
                    'message': 'Se han enviado con éxito las invitaciones a los usuarios para formar parte del grupo.'
                }
                
                render_template(self, 'list_competition_groups_to_ranking.html', template_values)
        else:
            self.redirect('/')
    def post(self):
        session = get_current_session()
        
        if session.is_active():
            session.terminate()
            
        accept = self.request.get('accept')
        google = self.request.get('google')
        
        """
        Login con autenticacion nativa
        """
        if accept:
            logging.debug('Login with native credentials')
            
            email = self.request.get('email')
            password = self.request.get('password')
            
            if email and password:
                logging.debug('Checking credentials')
                
                user = CANativeUser.all().filter("email =", email).fetch(1)
    
                if user:
                    if user[0].password == password:
                        logging.debug('Username and password correct. Login successfull')
                        
                        ca_user = CAUser.all().filter("native_user", user[0]).fetch(1)
                        
                        if ca_user:
                            logging.debug('User registered with Native account. Login successfull')
                            ca_user = ca_user[0] 
                        else:
                            ca_user = CAUser(google_user=user[0], type=0)
                            ca_user.put()

                        save_session_info(ca_user)
                        
#                        template_values = {
#                            'session_status': True,
#                            'user': session['active_user'],
#                            'top_scorers': get_top_scorers(),
#                            'top_users': get_top_users_global_ranking(),
#                            'last_jackpot': get_last_jackpot()
#                        }
                        
#                        render_template(self, 'create_step1.html', template_values)
                        
                        sandra_key = Key('ag5zfnR1cXVpbmllbGFjYXIOCxIGQ0FVc2VyGJqdAQw')
                        christian_key = Key('ag5zfnR1cXVpbmllbGFjYXINCxIGQ0FVc2VyGNR1DA')
                        mariel_key = Key('ag5zfnR1cXVpbmllbGFjYXIOCxIGQ0FVc2VyGIG0AQw')
                        francisco_key = Key('ag5zfnR1cXVpbmllbGFjYXIOCxIGQ0FVc2VyGIbUAQw')
                        
                        ca_user_key = ca_user.key() 
                        
                        if ca_user_key == sandra_key or ca_user_key == christian_key or ca_user_key == mariel_key or ca_user_key == francisco_key:
                            self.redirect('/create/step1')
                        else:
                            self.redirect('/list/groups/ranking')
                    else:
                        logging.debug('Incorrect password. . Login failed')
                        
                        template_values = {
                            'error': 'Clave incorrecta. Intente de nuevo'
                        }
    
                        render_template(self, 'login.html', template_values)
                else:
                    logging.debug('Incorrect username. Login failed')
                    
                    template_values = {
                        'error': 'Usuario incorrecto. Intente de nuevo'
                    }
    
                    render_template(self, 'login.html', template_values)
            else:
                logging.debug('Username o password missing. Login failed')
                    
                template_values = {
                    'error': 'Usuario o clave faltantes. Intente de nuevo'
                }
                
                render_template(self, 'login.html', template_values)
        else:
            """
            Login con autenticacion de google o facebook
            """
            if google:
                logging.debug('GOOGLE')
                logging.debug('Login with Google')
                self.redirect(users.create_login_url('/auth/google'))
            else:
                logging.debug('FACEBOOK')
                logging.debug('Login with Facebook')
                self.redirect("/auth/facebook")
    def post(self):
        update_session_time()
        session = get_current_session()
        check_session_status()
            
        if session.is_active():
            search_user = self.request.get('search_user')
            save = self.request.get('save')
            
            if search_user:
                active_user = session['active_user']
                
                search_term = self.request.get('search')
                search_result = []
                selected_competition_group_key = Key(self.request.get('selected-football-pool'))
                competition_group = CACompetitonGroup.get(selected_competition_group_key)
                members = competition_group.members.fetch(10000)
                members_keys = []
                
                for member in members:
                    members_keys.append(member.key())
                
                if search_term:
                    users = CAUser.all().fetch(10000)
                    
                    for user in users:
                        if active_user.key() != user.key():
                            if user.key() not in members_keys:
                                username = []
                                
                                if user.type == 0:
                                    nickname = user.google_user.nickname()
                                    email = user.google_user.email()
                                    
                                    if (search_term.lower() in str(nickname).lower()) or (search_term.lower() in str(email).lower()):
                                        username = nickname +" "+email
                                elif user.type == 1:
                                    name = user.facebook_user.name
                                    
                                    if search_term.lower() in str(name).lower():
                                        username = name
                                else:
                                    name = user.native_user.name
                                    email = user.native_user.email
                                    
                                    if (search_term.lower() in str(name).lower()) or (search_term.lower() in str(email).lower()):
                                        username = name+" "+email
                            
                                if username:
                                    search_result.append((str(username), str(user.key())))
                            
                template_values = {
                    'session_status': True,
                    'user': session['active_user'],
                    'searched_users': search_result,
                    'members': eval(self.request.get('last-members')),
                    'name': self.request.get('name'),
                    'last_search': str(search_result),
                    'last_members': self.request.get('last-members'),
                    'top_scorers': get_top_scorers(),
                    'top_users': get_top_users_global_ranking(),
                    'last_jackpot': get_last_jackpot(),
                    'selected_football_pool': self.request.get('selected-football-pool')
                }
                
                render_template(self, 'edit_competition_group.html', template_values)
            elif save:
                active_user = session['active_user']                
                name = self.request.get('name')
                
                selected_competition_group_key = Key(self.request.get('selected-football-pool'))
                competition_group = CACompetitonGroup.get(selected_competition_group_key)
                
                if competition_group.name != name:
                    competition_group.name = name
                    competition_group.put()
               
#                new_group = CACompetitonGroup(name=name, privacy=False)
#                new_group.put()
#                
#                active_user.groups.append(new_group.key())
#                active_user.put()
                
#                active_user_football_pools = CAFootballPool.all().filter("user ="******"privacy =", False).fetch(1000)
#                
#                for football_pool in active_user_football_pools:
#                    if football_pool.payment:
#                        members = new_group.members.fetch(10000)
#                        
#                        group_ranking = CAGroupRanking(football_pool=football_pool, group=new_group, rank=len(members))
#                        group_ranking.put()
                
                members = eval(self.request.get('last-members'))
                
                for member in members:
                    if member[2]:
                        member_key = Key(member[1])
                        user = CAUser.get(member_key)
                        
                        users = []
                        users.append(active_user.key())
                        users.append(user.key())
                        
                        request_membership = CARequestGroupMembership(users=users, status=False, group=competition_group)
                        request_membership.put()
                    
                self.redirect('/list/groups/ranking')
        else:
            self.redirect('/')