def authenticate(self, token=None, request=None):
     args = {
         'client_id': settings.FACEBOOK_APP_ID,
         'client_secret': settings.FACEBOOK_APP_SECRET,
         'redirect_uri': request.build_absolute_uri(reverse('facebook.views.authenticate_view')),
         'code': token,
     }
     
     target = urllib.urlopen('https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(args)).read()
     response = cgi.parse_qs(target)
     access_token = response['access_token'][-1]
     user_json = urllib.urlopen('https://graph.facebook.com/me?' + urllib.urlencode(dict(access_token=access_token)))
     fb_profile = simplejson.load(user_json)
     
     try:
         fb_user = FacebookUser.objects.get(facebook_id=str(fb_profile['id']))
     except FacebookUser.DoesNotExist:
         if request.user.is_authenticated():
             fb_user = FacebookUser(user=request.user, facebook_id=fb_profile['id'])
         else:
             request.session['fb_profile'] = fb_profile
             return None
     
     fb_user.access_token = access_token
     fb_user.save()
     
     return fb_user.user
Ejemplo n.º 2
0
def _create_or_update_facebook_user(profile, access_token, expires):
    """Creates or updates a facebook user profile in local database.
    """
    user_is_created = False
    try:
        fb_user = FacebookUser.objects.get(fb_id=profile['id'])
    except FacebookUser.DoesNotExist:
        user = User.objects.create( \
            first_name=profile['first_name'],
            last_name=profile['last_name'],
            username='******' + profile['id']
        )
        user_is_created = True

    if user_is_created:
        fb_user = FacebookUser()
        fb_user.fb_id = profile['id']
        fb_user.user = user
    else:
        fb_user.user.first_name = profile['first_name']
        fb_user.last_name = profile['last_name']

    fb_user.fb_username = profile['username']
    fb_user.access_token = access_token
    fb_user.expiry_at = datetime.datetime.now() + \
        datetime.timedelta(seconds=int(expires))
    fb_user.save()

    return fb_user
Ejemplo n.º 3
0
def _create_or_update_facebook_user(profile, access_token, expires):
    """Creates or updates a facebook user profile in local database.
    """
    user_is_created = False
    try:
        fb_user = FacebookUser.objects.get(fb_id=profile['id'])
    except FacebookUser.DoesNotExist:
        user = User.objects.create( \
            first_name=profile['first_name'],
            last_name=profile['last_name'],
            username='******' + profile['id']
        )
        user_is_created = True
        
    if user_is_created:
        fb_user = FacebookUser()
        fb_user.fb_id = profile['id']
        fb_user.user = user
    else:
        fb_user.user.first_name = profile['first_name']
        fb_user.last_name = profile['last_name']
        
    fb_user.fb_username = profile['username']
    fb_user.access_token = access_token
    fb_user.expiry_at = datetime.datetime.now() + \
        datetime.timedelta(seconds=int(expires))    
    fb_user.save()
    
    return fb_user
Ejemplo n.º 4
0
def register_view(request):
    try:
        fb_profile = request.session['fb_profile']
    except KeyError:
        return HttpResponseRedirect('/')
    
    if request.method == 'POST':
        user = User.objects.create_user(request.POST['username'], request.POST['email'])
        fb_user = FacebookUser(user=user, facebook_id=fb_profile['id'])
        fb_user.save()
        del request.session['fb_profile']
        return HttpResponseRedirect(reverse('facebook.views.authenticate_view') + '?ignorereferer=1')
    else:
        return render_to_response('member/register-facebook.html', context_instance=RequestContext(request))
Ejemplo n.º 5
0
def connect(request, redirect_field_name=REDIRECT_FIELD_NAME, app_name=None):
    """ Connects the Facebook Account to the current logged-in user. """
    fb_app = get_app_dict(app_name)
    graph = get_graph(request, app_name=app_name)
    redirect_to = request.REQUEST.get(redirect_field_name,
                                      fb_app['REDIRECT-URL'])

    if request.user.is_authenticated():
        try:
            me = graph.get_object("me")
        except facebook.GraphAPIError as e:
            return redirect('fb_login')

        # if the user has already a facebook connection, abort and show
        # error message
        if hasattr(request.user, 'user'):
            logger.debug('The logged in user is already connected.')
            # check if the django user and FB user match:
            if graph.user_id <> request.user.user.id:
                logger.debug(
                    'User %s already connected with Facebook account %s' %
                    (request.user.get_full_name, request.user.user._name))
                auth_views.logout(request, next_page=reverse('fb_app'))
            # Otherwise redirect
            return redirect(redirect_to)
        else:
            # The User has no Facebook account attached. Connect him.
            try:
                # if that facebook user already exists, abort and show error message
                fb_user = FacebookUser.objects.get(id=graph.user_id)
            except FacebookUser.DoesNotExist:
                fb_user = FacebookUser(id=graph.user_id)
                fb_user.get_from_facebook(graph=graph, save=True)
            else:
                if isinstance(fb_user.user, User):
                    auth_views.logout(request, next_page=reverse('fb_login'))
                else:
                    fb_user.user = request.user
                    fb_user.save()
            finally:
                return redirect(redirect_to)

    else:
        # The user is not logged in
        # -> redirect to login page
        return redirect('fb_login')
    def authenticate(self, token=None, request=None):
        args = {
            'client_id': settings.FACEBOOK_APP_ID,
            'client_secret': settings.FACEBOOK_APP_SECRET,
            'redirect_uri': request.build_absolute_uri(reverse('facebook.views.authenticate_view')),
            'code': token,
        }
        
        target = urllib.urlopen('https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(args)).read()
        response = cgi.parse_qs(target)
        access_token = response['access_token'][-1]
        profile_json = urllib.urlopen('https://graph.facebook.com/me?' + urllib.urlencode(dict(access_token=access_token)))
        fb_profile = simplejson.load(profile_json)
                
        try:
            fb_user = FacebookUser.objects.get(facebook_id=str(fb_profile['id']))
        except FacebookUser.DoesNotExist:
            fb_user = FacebookUser(facebook_id=str(fb_profile['id']))

    
        fb_user.access_token = access_token
        fb_user.profile_json = str(profile_json)
                
        if not fb_user.user_id:
            try:
                fb_user.user = User.objects.get(username='******' % fb_user.facebook_id,)
            except User.DoesNotExist:
                fb_user.user, created = User.objects.get_or_create(
                    username='******' % fb_user.facebook_id,
                    first_name=fb_profile['first_name'],
                    last_name=fb_profile['last_name'],
                    email=fb_profile['email'],
                )

        fb_user.save()
        
        return fb_user.user
Ejemplo n.º 7
0
    def authenticate(self, graph=None):
        if not graph:
            raise AttributeError, 'Authentication Backend needs a valid graph.'

        # check if the access token is valid:
        try:
            me = graph.request('me')
        except facebook.GraphAPIError as e:
            logger.debug('Could not authenticate User: %s ' % e)
            return None

        try:
            facebook_user = FacebookUser.objects.get(id=int(me['id']))
        except FacebookUser.DoesNotExist:
            facebook_user = FacebookUser(id=int(me['id']))
            facebook_user.get_from_facebook(graph=graph, save=True)
        else:
            try:
                if isinstance(facebook_user.user,
                              User) and facebook_user.user.is_authenticated():
                    return facebook_user.user
            except User.DoesNotExist:
                pass
        #we use the Facebook id as username because 'me.name' is not unique enough.
        user = get_or_create_user(
            me['id'], {
                'email': me.get('email', u''),
                'first_name': me.get('first_name', u''),
                'last_name': me.get('last_name', u''),
                'password': UNUSABLE_PASSWORD,
                'date_joined': datetime.now()
            })
        facebook_user.user = user
        facebook_user.save()

        return user
Ejemplo n.º 8
0
Archivo: api.py Proyecto: Gauravwagh/PB
def create_generic(response):
    try:
        fb_api_user_obj = FacebookUser.objects.get(user_id = response['id'])  
       
        if fb_api_user_obj.person:
            fb_api_user_obj.access_token = response['access_token'] 
            response = { 'new_user' : 'false','user_id':response['id']}
            fb_api_user_obj.save()
        else:
            if fb_api_user_obj.username:
                username = fb_api_user_obj.username
            else:
                username = response['first_name'] + response['last_name']           
            response = { 'new_user' : True , 
                        'username' : username, 
                        'email' : fb_api_user_obj.email, 
                        'location' : fb_api_user_obj.location,
                        'user_id' : fb_api_user_obj.user_id }
    except: 
             
        user = FacebookUser(user_id = response['id'])   # create a account        
        try:
            user.name = response['name']
        except:
            pass        
        try:
            username = response['username']
            user.username = username
        except:
            try:
                username = response['first_name'] + response['last_name']
            except:
                pass        
        try:
            user.first_name = response['first_name']
        except:
            pass        
        try:
            user.middle_name = response['middle_name']
        except:
            pass        
        try:
            user.last_name = response['last_name']
        except:
            user.link = response['link']        
        try:
            user.verified = response['verified']
        except:
            pass        
        try:
            user.email= response['email']
        except:
            pass        
        try:
            sex = response['gender']
            if sex == 'male':
                user.gender = 'M'
            elif sex == 'female':
                user.gender = 'F'
        except:
            pass                   
        try:
                
            birthday_in_datetime = datetime.strptime(response['birthday'], '%m/%d/%Y')
            birthday_as_string = birthday_in_datetime.strftime('%Y-%m-%d')
            user.birthday = datetime.strptime(birthday_as_string, '%Y-%m-%d').date()
        except:
            pass                                
        try:
            user.location = response['location']
        except:
            pass        
        user.access_token = response['access_token']   
        user.save()
        #registration_form = get_account('form', type="registration", username = username)
        #HTML = render_to_string("fb_api/forms/register.html", {'form': registration_form, 'user_id' : user.user_id}, context_instance = RequestContext(request)) 
       
        response = { 'new_user' : 'true' , 
                    'username' : username, 
                    'email' : response['email'], 
                    'location' : user.location,
                    'user_id' : response['id'] }   
    return  response