def facebook_connect(request, template='socialregistration/facebook.html', extra_context=dict()):
    """
    View to handle connecting existing accounts with facebook
    """
    fb = Facebook(settings.FACEBOOK_API_KEY, settings.FACEBOOK_SECRET_KEY)
    if not fb.check_session(request) \
        or not request.user.is_authenticated():
        extra_context.update(
            dict(error=FB_ERROR)
        )
        return render_to_response(
            template,
            extra_context,
            context_instance=RequestContext(request)
        )

    try:
        profile = FacebookProfile.all().filter('uid=',fb.uid).fetch(1)[0]
    except IndexError:
        fb_profile = fb.users.getInfo(fb.uid, ['name','email','pic_square','username', ])[0]
        profile = FacebookProfile(user=request.user,
            uid=fb.uid,
            username = fb_profile['username'],
            real_name = fb_profile['name'],
            email = fb_profile['email'],
            pic_url = fb_profile['pic_square'],
            )
        profile.save()


    return HttpResponseRedirect(_get_next(request))
Пример #2
0
def facebook_login(request, template='socialregistration/facebook.html',
    extra_context=dict(), account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    
    if request.facebook.uid is None:
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template, extra_context,
            context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)

    if user is None:
        request.session['socialregistration_user'] = User()
        request.session['socialregistration_profile'] = FacebookProfile(uid=request.facebook.uid)
        request.session['next'] = _get_next(request)
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(account_inactive_template, extra_context,
            context_instance=RequestContext(request))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #3
0
def facebook_login(request,
                   template='socialregistration/facebook.html',
                   extra_context=dict()):
    """
    View to handle the Facebook login 
    """
    if not request.facebook.check_session(request):
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)

    if user is None:
        request.session['socialregistration_user'] = User()
        fb_profile = request.facebook.users.getInfo([request.facebook.uid],
                                                    ['name', 'pic_square'])[0]
        request.session['socialregistration_profile'] = FacebookProfile(
            uid=request.facebook.uid, )
        request.session['next'] = _get_next(request)

        return HttpResponseRedirect(reverse('socialregistration_setup'))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #4
0
 def authenticate(self, uid=None):
     try:
         # GAE implementation:
         query = FacebookProfile.all()
         query.filter('uid =', uid).filter('site = ', Site.objects.get_current())
         profile = query.get()
         return profile.user
         #return FacebookProfile.objects.get(
         #    uid=uid,
         #    site=Site.objects.get_current()
         #).user
     except:
         return None
Пример #5
0
    def authenticate(self, uid=None):
        try:
            facebook_profile = FacebookProfile.all()
            facebook_profile.filter('uid = ', uid)
            #facebook_profile.filter('site = ',Site.objects.get_current())
            facebook_profile = facebook_profile.fetch(1)
            auth_user = facebook_profile[0].user

            return auth_user
            #return FacebookProfile.objects.get(
            #    uid=uid,
            #    site=Site.objects.get_current()
            #).user
        except:
            return None
    def authenticate(self, uid=None):
        try:
            facebook_profile = FacebookProfile.all()
            facebook_profile.filter('uid = ',uid)
            #facebook_profile.filter('site = ',Site.objects.get_current())
            facebook_profile = facebook_profile.fetch(1)
            auth_user = facebook_profile[0].user

            return auth_user
            #return FacebookProfile.objects.get(
            #    uid=uid,
            #    site=Site.objects.get_current()
            #).user
        except:
            return None
Пример #7
0
def facebook_login(
        request,
        template='socialregistration/facebook.html',
        extra_context=None,
        account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    extra_context = extra_context or {}

    if request.facebook.uid is None:
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)
    fb_data = request.facebook.graph.get_object('me')
    fb_uid = request.facebook.uid

    if user is None:
        try:
            user = User.objects.get(email=fb_data['email'])
            FacebookProfile.objects.create(uid=fb_uid, user=user)
            user = authenticate(uid=fb_uid)
        except User.DoesNotExist:
            user = User()
            profile = FacebookProfile(uid=request.facebook.uid)
            user = setup_user(fb_data, user, profile)
            request.session['socialregistration_user'] = user
            request.session['socialregistration_profile'] = profile
            request.session['next'] = _get_next(request)
            return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(account_inactive_template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #8
0
def _get_facebook_app(request):
    if "access_token" in request.session:
        graph = facebook.GraphAPI(request.session["access_token"])
        user = graph.get_object("me")

        sys_user = authenticate(uid=user["id"])
        if sys_user is None:
            request.session['socialregistration_user'] = User()
            request.session['socialregistration_profile'] = FacebookProfile(
                uid=user["id"])
            request.session['socialregistration_client'] = request.facebook
            request.session[
                'next'] = "http://apps.facebook.com/" + settings.FACEBOOK_APP_ID + "/"
            return graph, user, None

        login(request, sys_user)

        return graph, user, sys_user

    return None, None, None
Пример #9
0
 def authenticate(self, uid=None):
     return FacebookProfile.all().filter('uid =', uid).get()
def facebook_login(request, template='socialregistration/facebook.html', extra_context=dict(), account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    fb = Facebook(settings.FACEBOOK_API_KEY, settings.FACEBOOK_SECRET_KEY)
    if not fb.check_session(request):

        facebook_url = "http://www.facebook.com/login.php?"

        extra_context.update(
            dict(error=FB_ERROR)
        )

        args = {
            "api_key": settings.FACEBOOK_API_KEY,
            "v": "1.0",
            "fbconnect": "true",
            "display": "page",
            "next":request.build_absolute_uri( _get_next(request)),
            "return_session": "true",
        }


        #if extended_permissions:
        #    if isinstance(extended_permissions, basestring):
        #        extended_permissions = [extended_permissions]
        #    args["req_perms"] = ",".join(extended_permissions)
        #self.redirect("http://www.facebook.com/login.php?" +
        #              urllib.urlencode(args))

        facebook_url = facebook_url + urllib.urlencode(args) 

        return HttpResponseRedirect(facebook_url)



        return render_to_response(
            template, extra_context, context_instance=RequestContext(request)
        )

    user = authenticate(uid=str(fb.uid))

    if user is None:
        user = authenticate(uid=fb.uid)
        fb_profile = fb.users.getInfo(fb.uid, ['name','email','pic_square','username', ])[0]
        request.session['social_suggested_username'] = fb_profile['username']
        request.session['socialregistration_profile'] = FacebookProfile(
            uid=fb.uid,
            username = fb_profile['username'],
            real_name = fb_profile['name'],
            email = fb_profile['email'],
            pic_url = fb_profile['pic_square'],
        )
        request.session['socialregistration_user'] = User(username=''.join(fb_profile['name'].split(' ')[:2]))
        request.session['next'] = _get_next(request)
 
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(
            account_inactive_template,
            extra_context,
            context_instance=RequestContext(request)
        )

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #11
0
def facebook_connect(request,
                     template='socialregistration/facebook.html',
                     extra_context=dict()):
    """
    View to handle graph connecting

    Authorize and create user if none

    """
    try:
        access_token = request.facebook.access_token
    except:
        # if cookie does not exist
        # assume logging in normal way
        params = {}
        params["client_id"] = settings.FACEBOOK_APP_ID
        params["client_secret"] = settings.FACEBOOK_SECRET_KEY
        params["redirect_uri"] = request.build_absolute_uri(
            reverse("facebook_connect"))
        params["code"] = request.GET.get('code', '')

        url = "https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(
            params)
        from cgi import parse_qs
        userdata = urllib.urlopen(url).read()
        res_parse_qs = parse_qs(userdata)

        # Could be a bot query
        if not res_parse_qs.has_key('access_token'):
            return render_to_response(template,
                                      extra_context,
                                      context_instance=RequestContext(request))

        access_token = res_parse_qs['access_token'][-1]
    else:
        uid = request.facebook.uid

    graph = facebook.GraphAPI(access_token)
    user_info = graph.get_object('me')

    if request.user.is_authenticated():
        # Handling already logged in users connecting their accounts
        try:
            profile = FacebookProfile.objects.get(uid=user_info['id'])
        except FacebookProfile.DoesNotExist:  # There can only be one profile!
            profile = FacebookProfile.objects.create(
                user=request.user,
                uid=user_info['id'],
                username=user_info['name'],
                access_token=access_token)

            _connect(request.user, profile, request.facebook)
        else:
            profile.access_token = access_token
            profile.save()

        return HttpResponseRedirect(_get_next(request))

    user = authenticate(uid=user_info['id'])

    if user is None:
        profile = FacebookProfile(uid=user_info['id'],
                                  username=user_info['name'],
                                  access_token=access_token)
        user = User()
        request.session['socialregistration_profile'] = profile
        request.session['socialregistration_user'] = user
        # Client is not pickleable with the request on it
        request.session['socialregistration_client'] = request.facebook
        request.session['next'] = _get_next(request)
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    _login(request, user, FacebookProfile.objects.get(user=user),
           request.facebook)

    return HttpResponseRedirect(_get_next(request))
Пример #12
0
def create_default_facebook_profile(request):
    '''
    Called by both facebook_login (if connecting through the website) and synchronise_facebook_profile (if using facebook.require_add in events_fb)
    This is the place to send emails!
    '''

    #
    # Create User
    #
    new_user = User( username = str(uuid.uuid4())[:30] )

    # basic user created, now get some information about him
    fb_profile = request.facebook.users.getInfo([request.facebook.uid], ['first_name', 'last_name', 'pic_square', 'profile_url', 'current_location', 'email'])[0]

    new_user.first_name = fb_profile['first_name']
    new_user.last_name = fb_profile['last_name']
    new_user.email = fb_profile['email']

    new_user.put()

    #
    # Create Profile
    #
    try:
        zip = int(fb_profile['current_location']['zip'])
    except:
        zip = 0
        
    try:
        current_location_city = fb_profile['current_location']['city']
        current_location_state = fb_profile['current_location']['state']
        current_location_country = fb_profile['current_location']['country']
    except:
        current_location_city = None
        current_location_state = None
        current_location_country = None

    new_profile = FacebookProfile(
        user = new_user,
        uid = str(request.facebook.uid),
        pic_square = fb_profile['pic_square'],
        profile_url = fb_profile['profile_url'],
        current_location_city = current_location_city,
        current_location_state = current_location_state,
        current_location_country = current_location_country,
        current_location_zip = zip,
        site = Site.objects.get_current(),
        )

    new_profile.put()
    
    logging.debug("Created user: %s"%new_profile.user)

    if getattr(settings, 'SOCIAL_SEND_EMAIL_ON_NEW_PROFILE', False):
        if not new_user.email:
            logging.debug("Not sending email - user hasn't specified email")
        else:
            logging.debug("Sending email to: %s" % new_user.email)
            
            try:
                from django.core.mail import send_mail
                subject = render_to_string('socialregistration/new_profile_email_subject.txt',
                                               { 'site': new_profile.site })
                # Email subject *must not* contain newlines
                subject = ''.join(subject.splitlines())

                message = render_to_string('socialregistration/new_profile_email.txt',
                                           { 'user': new_user,
                                             'profile': new_profile })

                send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_user.email])

            except NotImplementedError:
                logging.error("Failed to send email to %s; subject: %s" %(new_user.email, subject))

    return new_profile
Пример #13
0
from django.conf import settings
from django.contrib.comments.managers import CommentManager
from django.core.cache import cache

from music.models import Track, Artist
from tagging.fields import TagField
from notification import models as notification

from actstream.models import Follow
from actstream import action
from socialregistration.models import TwitterProfile, FacebookProfile

TwitterProfile.add_to_class('access_token', models.TextField(help_text='only useful if your app wants to tweet while the browser is not authenticated via twitter', null=True, blank=True))
TwitterProfile.add_to_class('token_secret', models.TextField(help_text='only useful if your app wants to tweet while the browser is not authenticated via twitter', null=True, blank=True))
TwitterProfile.add_to_class('avatar_url', models.TextField(null=True, blank=True))
FacebookProfile.add_to_class('avatar_url', models.TextField(null=True, blank=True))
TwitterProfile.add_to_class('nick', models.TextField(null=True, blank=True))
FacebookProfile.add_to_class('nick', models.TextField(null=True, blank=True))
TwitterProfile.add_to_class('url', models.TextField(null=True, blank=True))
FacebookProfile.add_to_class('url', models.TextField(null=True, blank=True))

def new_user_unicode(self):
    return '%s %s' % (self.first_name, self.last_name)
User.__unicode__ = new_user_unicode

def new_user_get_absolute_url(self):
    return urlresolvers.reverse('user_details', args=(self.username,))
User.get_absolute_url = new_user_get_absolute_url

def twitter_url(sender, instance, **kwargs):
    if instance.nick: