Example #1
0
    def authenticate(self, openid_key, request, provider, email=None):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            user = User.objects.get(pk=assoc.user.pk)
            if user.is_active:
                return user
            else:
                return
        except (UserAssociation.DoesNotExist, User.DoesNotExist):
            #fetch if openid provider provides any simple registration fields
            nickname = None
            if request.openid and request.openid.sreg:
                if email is None:
                    email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
            elif request.openid and request.openid.ax:
                if email is None:
                    email = request.openid.ax.get('email')
                nickname = request.openid.ax.get('nickname')
            if nickname is None:
                nickname = ''.join([
                    random.choice('abcdefghijklmnopqrstuvwxyz')
                    for i in xrange(10)
                ])
            if email is None:
                valid_username = False
                email = '%s@%s.%s.com' % (nickname, provider,
                                          settings.SITE_NAME)
            else:
                valid_username = True
            existing_users = User.objects.filter(username=nickname).count()
            if existing_users > 0:
                index = 0
                username = '******' % (nickname, index)
                while existing_users > 0:
                    username = '******' % (nickname, index)
                    existing_users = User.objects.filter(
                        username=username).count()
                    index += 1
                user = User.objects.create_user(username, email)
            else:
                user = User.objects.create_user(nickname, email)
            user.save()

            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            #Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
Example #2
0
    def authenticate(self, openid_key, request, provider):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            if assoc.user.is_active:
                return assoc.user
            else:
                return
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
            elif request.openid and request.openid.ax:
                if provider in ('Google', 'Yahoo'):
                    email = request.openid.ax.get('http://axschema.org/contact/email')
                    email = email.pop()
                else:
                    email = request.openid.ax.get('email')                      
                    nickname = request.openid.ax.get('nickname')

            if nickname is None :
                if email:
                    nickname = email.split('@')[0]
                else:
                    nickname =  ''.join([random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10)])
            if email is None :
                valid_username = False
                email =  None #'*****@*****.**'%(nickname)
            else:
                valid_username = True
            name_count = User.objects.filter(username__startswith = nickname).count()

            if name_count:
                username = '******'%(nickname, name_count + 1)
                user = User.objects.create_user(username,email or '')
            else:
                user = User.objects.create_user(nickname,email or '')
            user.save()

            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user#AuthUser.objects.get(pk=user.pk)
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            #Create AuthMeta
            auth_meta = AuthMeta(user = user, provider = provider)
            auth_meta.save()
            return user
Example #3
0
    def authenticate(self, openid_key, request, provider):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            print "dfsdfsdfsdfsfsdfsdf"
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
            elif request.openid and request.openid.ax:
                email = request.openid.ax.__dict__.get('data').values()[0][0]
                nickname = email.split('@')[
                    0]  #request.openid.ax.get('nickname')
            if nickname is None:
                nickname = ''.join([
                    random.choice('abcdefghijklmnopqrstuvwxyz')
                    for i in xrange(10)
                ])
            if email is None:
                valid_username = False
                email = '%s@%s.%s.com' % (nickname, provider,
                                          settings.SITE_NAME)
            else:
                valid_username = True
            name_count = User.objects.filter(
                username__startswith=nickname).count()
            if name_count:
                username = '******' % (nickname, name_count + 1)
                user = User.objects.create_user(username, email)
            else:
                user = User.objects.create_user(nickname, email)
            user.save()

            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            #Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
Example #4
0
    def authenticate(self, openid_key, request, provider, user=None):
        try:
            assoc = UserAssociation.objects.get(openid_key = openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
            elif request.openid and request.openid.ax:
                email = request.openid.ax.get('http://axschema.org/contact/email')[0]
                try:
                      nickname = request.openid.ax.get('nickname')#should be replaced by correct schema
                except:
                      pass
            if nickname is None :
                nickname =  ''.join([random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10)])
            
            name_count = User.objects.filter(username__startswith = nickname).count()
            if name_count:
                username = '******'.format(nickname, name_count + 1)
            else:
                username = '******'.format(nickname)
                
            if email is None :
                valid_username = False
                email =  "{0}@socialauth".format(username)
            else:
                valid_username = True

            if not user:
                user = User.objects.create_user(username, email or '')
                user.save()
    
            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()
            
            #Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider, provider_model='OpenidProfile', provider_id=assoc.pk)
            auth_meta.save()
            return user
Example #5
0
    def authenticate(self, openid_key, request, provider):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            # fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get("email")
                nickname = request.openid.sreg.get("nickname")
            elif request.openid and request.openid.ax:
                email = request.openid.ax.get("http://axschema.org/contact/email")[0]
                try:
                    nickname = request.openid.ax.get("nickname")  # should be replaced by correct schema
                except:
                    pass
            if nickname is None:
                nickname = "".join([random.choice("abcdefghijklmnopqrstuvwxyz") for i in xrange(10)])
            if email is None:
                valid_username = False
                email = None  #'*****@*****.**'%(nickname)
            else:
                valid_username = True
            name_count = User.objects.filter(username__startswith=nickname).count()
            if name_count:
                username = "******" % (nickname, name_count + 1)
            try:
                user = User.objects.get(email=email)
            except:
                user = User.objects.create_user(nickname, email or "")
                user.save()

            # create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            # Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
Example #6
0
    def authenticate(self, twitter_access_token, user=None):
        '''authenticates the token by requesting user information from twitter'''
        # twitter = oauthtwitter.OAuthApi(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, twitter_access_token)
        twitter = oauthtwitter.TwitterOAuthClient(
            settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET)
        try:
            userinfo = twitter.get_user_info(twitter_access_token)
        except:
            # If we cannot get the user information, user cannot be authenticated
            raise

        screen_name = userinfo.screen_name
        twitter_id = userinfo.id

        try:
            user_profile = TwitterUserProfile.objects.get(
                screen_name=screen_name)

            # Update Twitter Profile
            user_profile.url = userinfo.url
            user_profile.location = userinfo.location
            user_profile.description = userinfo.description
            user_profile.profile_image_url = userinfo.profile_image_url
            user_profile.save()

            user = user_profile.user
            return user
        except TwitterUserProfile.DoesNotExist:
            # Create new user
            if not user:
                same_name_count = User.objects.filter(
                    username__startswith=screen_name).count()
                if same_name_count:
                    username = '******' % (screen_name, same_name_count + 1)
                else:
                    username = screen_name
                user = User(username=username)
                name_data = userinfo.name.split()
                try:
                    first_name, last_name = name_data[0], ' '.join(
                        name_data[1:])
                except:
                    first_name, last_name = screen_name, ''
                user.first_name, user.last_name = first_name, last_name
                #user.email = screen_name + "@socialauth"
                #user.email = '*****@*****.**'%(userinfo.screen_name)
                user.save()

            user_profile = TwitterUserProfile(user=user,
                                              screen_name=screen_name)
            user_profile.access_token = twitter_access_token
            user_profile.url = userinfo.url
            user_profile.location = userinfo.location
            user_profile.description = userinfo.description
            user_profile.profile_image_url = userinfo.profile_image_url
            user_profile.save()

            auth_meta = AuthMeta(user=user, provider='Twitter').save()

            return user
Example #7
0
    def authenticate(self, linkedin_access_token, user=None):
        linkedin = LinkedIn(LINKEDIN_CONSUMER_KEY, LINKEDIN_CONSUMER_SECRET)
        # get their profile

        profile = (ProfileApi(linkedin).getMyProfile(
            access_token=linkedin_access_token))

        try:
            user_profile = (LinkedInUserProfile.objects.get(
                linkedin_uid=profile.id))
            user = user_profile.user
            return user
        except LinkedInUserProfile.DoesNotExist:
            # Create a new user
            username = '******' % profile.id

            if not user:
                user = User(username=username)
                user.first_name, user.last_name = (profile.firstname,
                                                   profile.lastname)
                user.email = '%s@socialauth' % (username)
                user.save()

            userprofile = LinkedInUserProfile(user=user,
                                              linkedin_uid=profile.id)
            userprofile.save()

            auth_meta = AuthMeta(user=user, provider='LinkedIn').save()
            return user
Example #8
0
    def authenticate(self, request, user=None):
        cookie = facebook.get_user_from_cookie(request.COOKIES,
                                               FACEBOOK_APP_ID,
                                               FACEBOOK_SECRET_KEY)
        if cookie:
            uid = cookie['uid']
            access_token = cookie['access_token']
        else:
            # if cookie does not exist
            # assume logging in normal way
            params = {}
            params["client_id"] = FACEBOOK_APP_ID
            params["client_secret"] = FACEBOOK_SECRET_KEY
            params["redirect_uri"] = '%s://%s%s' % (
                'https' if request.is_secure() else 'http',
                Site.objects.get_current().domain,
                reverse("socialauth_facebook_login_done"))
            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 None

            access_token = res_parse_qs['access_token'][-1]

            graph = facebook.GraphAPI(access_token)
            uid = graph.get_object('me')['id']

        try:
            fb_user = FacebookUserProfile.objects.get(facebook_uid=uid)
            return fb_user.user

        except FacebookUserProfile.DoesNotExist:

            # create new FacebookUserProfile
            graph = facebook.GraphAPI(access_token)
            fb_data = graph.get_object("me")

            if not fb_data:
                return None

            username = uid
            if not user:
                user = User.objects.create(username=username)
                user.first_name = fb_data['first_name']
                user.last_name = fb_data['last_name']
                user.email = username + '@socialauth+facebook'
                user.save()

            fb_profile = FacebookUserProfile(facebook_uid=uid, user=user)
            fb_profile.save()

            auth_meta = AuthMeta(user=user, provider='Facebook').save()

            return user
Example #9
0
 def authenticate(self, openid_key, request, provider):
     try:
         assoc = UserAssociation.objects.get(openid_key = openid_key)
         return assoc.user
     except UserAssociation.DoesNotExist:
         #fetch if openid provider provides any simple registration fields
         nickname = None
         email = None
         print "dfsdfsdfsdfsfsdfsdf"
         if request.openid and request.openid.sreg:
             email = request.openid.sreg.get('email')
             nickname = request.openid.sreg.get('nickname')
         elif request.openid and request.openid.ax:
             email = request.openid.ax.__dict__.get('data').values()[0][0]
             nickname = email.split('@')[0] #request.openid.ax.get('nickname')
         if nickname is None :
             nickname =  ''.join([random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10)])
         if email is None :
             valid_username = False
             email =  '%s@%s.%s.com'%(nickname, provider, settings.SITE_NAME)
         else:
             valid_username = True
         name_count = User.objects.filter(username__startswith = nickname).count()
         if name_count:
             username = '******'%(nickname, name_count + 1)
             user = User.objects.create_user(username,email)
         else:
             user = User.objects.create_user(nickname,email)
         user.save()
 
         #create openid association
         assoc = UserAssociation()
         assoc.openid_key = openid_key
         assoc.user = user
         if email:
             assoc.email = email
         if nickname:
             assoc.nickname = nickname
         if valid_username:
             assoc.is_username_valid = True
         assoc.save()
         
         #Create AuthMeta
         auth_meta = AuthMeta(user = user, provider = provider)
         auth_meta.save()
         return user
Example #10
0
    def authenticate(self, access_token):
        '''authenticates the token by requesting user information from twitter
        '''
        twitter = oauthtwitter.OAuthApi(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, access_token)

        try:
            userinfo = twitter.GetUserInfo()
        except:
            # If we cannot get the user information, user cannot be authenticated
            raise

        screen_name = userinfo.screen_name
        img_url = userinfo.profile_image_url
        
        try:
            user_profile = TwitterUserProfile.objects.get(screen_name = screen_name)
            if user_profile.user.is_active:
                return user_profile.user
            else:
                return        
        except TwitterUserProfile.DoesNotExist:
            #Create new user
            same_name_count = User.objects.filter(username__startswith = screen_name).count()
            if same_name_count:
                username = '******' % (screen_name, same_name_count + 1)
            else:
                username = screen_name
            username = '******'+username
            
            name_count = AuthUser.objects.filter(username__startswith = username).count()
                
            if name_count:
                username = '******'%(username, name_count + 1)
                            
            user = User(username =  username)
            temp_password = User.objects.make_random_password(length=12)
            user.set_password(temp_password)
            name_data = userinfo.name.split()
            try:
                first_name, last_name = name_data[0], ' '.join(name_data[1:])
            except:
                first_name, last_name =  screen_name, ''
            user.first_name, user.last_name = first_name, last_name
            if img_url:
                img = ContentFile(urlopen(img_url).read())
                name = img_url.split('/')[-1]
                user.picture.save(name, img, False)            
            #user.email = '%s@twitteruser.%s.com'%(userinfo.screen_name, settings.SITE_NAME)
            user.save()
            userprofile = TwitterUserProfile(user = user, screen_name = screen_name)
            userprofile.access_token = access_token.key
            userprofile.url = userinfo.url
            userprofile.location = userinfo.location
            userprofile.description = userinfo.description
            userprofile.profile_image_url = userinfo.profile_image_url
            userprofile.save()
            AuthMeta(user=user, provider='Twitter').save()
            return user
 def authenticate(self, openid_key, request, provider):
     try:
         assoc = UserAssociation.objects.get(openid_key = openid_key)
         return assoc.user
     except UserAssociation.DoesNotExist:
         #fetch if openid provider provides any simple registration fields
         nickname = None
         email = None
         # print 'request.openid: %s' % request.openid
         # print 'request.openid.sreg: %s' % request.openid.sreg
         if request.openid and request.openid.sreg:
             email = request.openid.sreg.get('email')
             nickname = request.openid.sreg.get('nickname')
         if nickname is None :
             nickname =  ''.join([random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10)])
         if email is None :
             email =  '%s@%s.%s.com'%(nickname, provider, settings.SITE_NAME)
         name_count = User.objects.filter(username__startswith = nickname).count()
         # print 'nickname: %s, email: %s, name_count: %s' % (nickname, email, name_count)
         if name_count:
             username = '******'%(nickname, name_count + 1)
             user = User.objects.create_user(username,email)
         else:
             user = User.objects.create_user(nickname,email)
         user.save()
 
         #create openid association
         assoc = UserAssociation()
         assoc.openid_key = openid_key
         assoc.user = user
         if email:
             assoc.email = email
         if nickname:
             assoc.nickname = nickname
         assoc.save()
         
         #Create AuthMeta
         auth_meta = AuthMeta(user = user, provider = provider)
         auth_meta.save()
         
         return user
 def authenticate(self, foursquare_access_token):
     try:
         foursquare_profile = FoursquareUserProfile.objects.get(
             access_token=foursquare_access_token)
         return foursquare_profile.user
     except FoursquareUserProfile.DoesNotExist:
         foursquare_user_count = FoursquareUserProfile.objects.all().count()
         username = "******" + str(foursquare_user_count + 1)
         user = User(username=username)
         user.save()
         foursquare_user = FoursquareUserProfile(
             user=user, access_token=foursquare_access_token)
         foursquare_user.save()
         AuthMeta(user=user, provider='Foursquare').save()
         return foursquare_user.user
Example #13
0
    def authenticate(self, cookies):
        API_KEY = FACEBOOK_API_KEY
        API_SECRET = FACEBOOK_API_SECRET
        REST_SERVER = FACEBOOK_REST_SERVER
        if API_KEY in cookies:
            signature_hash = get_facebook_signature(API_KEY, API_SECRET,
                                                    cookies, True)
            if (signature_hash == cookies[API_KEY]) and (
                    datetime.fromtimestamp(float(
                        cookies[API_KEY + '_expires'])) > datetime.now()):
                user_info_response = get_user_info(API_KEY, API_SECRET,
                                                   cookies)
                username = user_info_response[0]['first_name']
                try:
                    user_profile = FacebookUserProfile.objects.get(
                        user__is_active=True,
                        facebook_uid=user_info_response[0]['uid'])
                    if user_profile.user.is_active:
                        return user_profile.user
                    else:
                        return
                except FacebookUserProfile.DoesNotExist:
                    fb_data = user_info_response[0]
                    name_count = AuthUser.objects.filter(
                        username__istartswith=username).count()
                    if name_count:
                        username = '******' % (username, name_count + 1)
                    #user_email = '%s@facebookuser.%s.com'%(user_info_response[0]['first_name'], settings.SITE_NAME)
                    user = User.objects.create(username=username)
                    user.first_name = fb_data['first_name']
                    user.last_name = fb_data['last_name']
                    user.save()
                    location = str(fb_data['current_location'])
                    fb_profile = FacebookUserProfile(
                        facebook_uid=fb_data['uid'],
                        user=user,
                        profile_image_url=fb_data['pic_small'],
                        location=location)
                    fb_profile.save()
                    AuthMeta(user=user, provider='Facebook').save()
                    return user
            else:
                return None

        else:
            return None
 def authenticate(self, github_access_token, user=None):
     response_qs = parse_qs(github_access_token)
     github_access_token = response_qs['access_token'][0]
     try:
         github_user = GithubUserProfile.objects.get(
             access_token=github_access_token)
         return github_user.user
     except GithubUserProfile.DoesNotExist:
         github_user_count = GithubUserProfile.objects.all().count()
         username = "******" + str(github_user_count + 1)
         user = User(username=username)
         user.save()
         github_user = GithubUserProfile(user=user,
                                         access_token=github_access_token)
         github_user.save()
         AuthMeta(user=user, provider='Github').save()
         return github_user.user
Example #15
0
    def authenticate(self, access_token):
        """ authenticates the token by requesting user information from twitter """
        try:
            api = oauthtwitter.OAuthApi(TWITTER_CONSUMER_KEY,
                                        TWITTER_CONSUMER_SECRET, access_token)
            userinfo = api.GetUserInfo()
        except:
            # If we cannot get the user information, user cannot be authenticated
            raise

        try:
            user_profile = TwitterUserProfile.objects.get(
                screen_name=userinfo.screen_name)
            if user_profile.user.is_active:
                return user_profile.user
            else:
                return
        except TwitterUserProfile.DoesNotExist:
            #Create new user
            username = userinfo.screen_name
            user = new_user(username=username, provider='Twitter')
            name_data = userinfo.name.split()
            try:
                first_name, last_name = name_data[0], ' '.join(name_data[1:])
            except:
                first_name, last_name = userinfo.screen_name, ''
            user.first_name, user.last_name = first_name, last_name
            user.save()
            img_url = userinfo.profile_image_url
            userprofile = TwitterUserProfile(user=user,
                                             screen_name=userinfo.screen_name)
            userprofile.access_token = access_token.key
            userprofile.url = userinfo.url
            userprofile.location = userinfo.location
            userprofile.description = userinfo.description
            userprofile.profile_image_url = userinfo.profile_image_url
            #user.email = '%s@Twitteruser.%s.com'%(userinfo.screen_name, settings.SITE_NAME)
            if img_url:
                img = ContentFile(urlopen(img_url).read())
                name = img_url.split('/')[-1]
                user.picture.save(name, img, False)

            userprofile.save()
            AuthMeta(user=user, provider='Twitter').save()
            return user
Example #16
0
    def authenticate(self, fb_access_token):
        """ authenticates the token by requesting user information from facebook """
        try:
            api = facebook.GraphAPI(fb_access_token)
            userinfo = api.get_object("me")
        except:
            # If we cannot get the user information, user cannot be authenticated
            raise
        # variables not initialise here
        try:
            user_profile = FacebookUserProfile.objects.get(
                fb_uid=userinfo['id'])
            if user_profile.user.is_active:
                return user_profile.user
            else:
                return
        except FacebookUserProfile.DoesNotExist:
            #Create new user
            try:
                username = userinfo['username']
            except KeyError:
                # if username not set on facebook
                username = userinfo['first_name']

            user = new_user(username=username, provider='Facebook')

            user.first_name, user.last_name = userinfo['first_name'], userinfo[
                'last_name']
            #img_url = 'http://graph.facebook.com/me/picture?type=large'+'&fb_access_token='+ access_token
            user.save()
            userprofile = FacebookUserProfile(user=user,
                                              fb_uid=userinfo['id'],
                                              fb_username=username,
                                              location=userinfo['location'])
            userprofile.access_token = fb_access_token
            """if img_url:
                img = ContentFile(urlopen(img_url).read())
                name = img_url.split('/')[-1]
                user.picture.save(name, img, False)"""

        userprofile.save()
        AuthMeta(user=user, provider='Facebook').save()
        return user
Example #17
0
    def authenticate(self, request):

        if not settings.FACEBOOK_API_KEY in request.COOKIES:
            return None

        facebook = Facebook(settings.FACEBOOK_API_KEY,
                            settings.FACEBOOK_SECRET_KEY)

        check = facebook.check_session(request)
        fb_user = facebook.users.getLoggedInUser()

        try:
            profile = FacebookUserProfile.objects.get(facebook_uid=fb_user)
            return profile.user
        except FacebookUserProfile.DoesNotExist:
            fb_data = facebook.users.getInfo([fb_user], [
                'uid', 'first_name', 'last_name', 'pic_small',
                'current_location'
            ])
            if not fb_data:
                return None
            fb_data = fb_data[0]

            username = '******' % fb_data['uid']
            user_email = '%s@facebookuser.%s.com' % (fb_data['first_name'],
                                                     settings.SITE_NAME)
            user = User.objects.create(username=username, email=user_email)
            user.first_name = fb_data['first_name']
            user.last_name = fb_data['last_name']
            user.save()
            location = str(fb_data['current_location'])
            fb_profile = FacebookUserProfile(
                facebook_uid=fb_data['uid'],
                user=user,
                profile_image_url=fb_data['pic_small'],
                location=location)
            fb_profile.save()
            auth_meta = AuthMeta(user=user, provider='Facebook').save()
            return user
        except Exception, e:
            print str(e)
Example #18
0
    def authenticate(self, facebook, request):
        facebook.oauth2_check_session(request)

        facebook.uid = facebook.users.getLoggedInUser()
        user_info = facebook.users.getInfo([facebook.uid], ['first_name', 'last_name', 'pic_square'])[0]

        username = user_info['first_name']
        try:
            user_profile = FacebookUserProfile.objects.get(user__is_active=True, facebook_uid=user_info['uid'])
            if user_profile.user.is_active:
                return user_profile.user
            else:
                return None
        except FacebookUserProfile.DoesNotExist:
            name_count = AuthUser.objects.filter(username__istartswith=username).count()
            if name_count:
                username = '******' % (username, name_count + 1)

            user = User.objects.create(username=username)
            user.first_name = user_info['first_name']
            user.last_name = user_info['last_name']

            img_url = user_info.get('pic_square')
            if img_url:
                img = ContentFile(urlopen(img_url).read())
                name = img_url.split('/')[-1]
                user.picture.save(name, img, False)

            user.save()

            location = '' # TODO: Figure out how to get this from Facebook.  Maybe.

            fb_profile = FacebookUserProfile(facebook_uid=user_info['uid'], user=user,
                    profile_image_url=img_url, location=location)
            fb_profile.save()

            AuthMeta(user=user, provider='Facebook').save()
            return user
Example #19
0
    def authenticate(self, openid_key, request, provider, user=None):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            firstname = None
            lastname = None

            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
                firstname, lastname = (request.openid.sreg.get(
                    'fullname', ' ').split(' ', 1))
            elif request.openid and request.openid.ax:
                email = \
                    (request.openid.ax
                     .getSingle('http://axschema.org/contact/email'))
                if 'google' in provider:
                    ax_schema = OPENID_AX_PROVIDER_MAP['Google']
                    firstname = (request.openid.ax.getSingle(
                        ax_schema['firstname']))
                    lastname = (request.openid.ax.getSingle(
                        ax_schema['lastname']))
                    nickname = email.split('@')[0]
                else:
                    ax_schema = OPENID_AX_PROVIDER_MAP['Default']
                    try:
                        #should be replaced by correct schema
                        nickname = (request.openid.ax.getSingle(
                            ax_schema['nickname']))
                        (firstname, lastname) = (request.openid.ax.getSingle(
                            ax_schema['fullname']).split(' ', 1))
                    except:
                        pass

            if nickname is None:
                nickname = ''.join([
                    random.choice('abcdefghijklmnopqrstuvwxyz')
                    for i in xrange(10)
                ])

            name_count = (User.objects.filter(
                username__startswith=nickname).count())
            if name_count:
                username = '******' % (nickname, name_count + 1)
            else:
                username = '******' % (nickname)

            if email is None:
                valid_username = False
                email = "%s@socialauth" % (username)
            else:
                valid_username = True

            if not user:
                user = User.objects.create_user(username, email)

            user.first_name = firstname
            user.last_name = lastname
            user.save()

            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            #Create AuthMeta
            # auth_meta =
            #             AuthMeta(user=user,
            #                        provider=provider,
            #                        provider_model='OpenidProfile',
            #                        provider_id=assoc.pk)
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
Example #20
0
    def authenticate(self, request, user=None):
        cookie = facebook.get_user_from_cookie(request.COOKIES,
                                               FACEBOOK_APP_ID,
                                               FACEBOOK_SECRET_KEY)
        if cookie:
            uid = cookie['uid']
            access_token = cookie['access_token']
        else:
            # if cookie does not exist
            # assume logging in normal way
            params = {}
            params["client_id"] = FACEBOOK_APP_ID
            params["client_secret"] = FACEBOOK_SECRET_KEY
            params["redirect_uri"] = reverse(
                "socialauth_facebook_login_done")[1:]
            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 None

            parse_data = res_parse_qs['access_token']
            uid = parse_data['uid'][-1]
            access_token = parse_data['access_token'][-1]

        try:
            fb_user = FacebookUserProfile.objects.get(facebook_uid=uid)
            return fb_user.user

        except FacebookUserProfile.DoesNotExist:

            # create new FacebookUserProfile
            graph = facebook.GraphAPI(access_token)
            fb_data = graph.get_object("me")

            if not fb_data:
                return None

            username = uid
            if not user:
                user = User.objects.create(username=username)
                user.first_name = fb_data['first_name']
                user.last_name = fb_data['last_name']
                user.email = fb_data.get('email')
                user.save()

            picture_url = 'http://graph.facebook.com/%s/picture' % uid
            fb_profile = FacebookUserProfile(
                facebook_uid=uid,
                user=user,
                profile_image_url=picture_url,
                profile_image_url_small=picture_url + '?type=small',
                profile_image_url_big=picture_url + '?type=large',
                about_me=fb_data.get('about'),
                url=fb_data.get('website'),
            )
            if 'location' in fb_data:
                fb_profile.location = fb_data['location']['name']

            fb_profile.save()

            auth_meta = AuthMeta(user=user, provider='Facebook').save()

            return user
Example #21
0
    def authenticate(self, openid_key, request, provider):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            if assoc.user.is_active:
                return assoc.user
            else:
                return
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
            elif request.openid and request.openid.ax:
                if provider in ('Google', 'Yahoo'):
                    email = request.openid.ax.get(
                        'http://axschema.org/contact/email')
                    email = email.pop()
                else:
                    try:
                        email = request.openid.ax.get('email')
                    except KeyError:
                        pass

                    try:
                        nickname = request.openid.ax.get('nickname')
                    except KeyError:
                        pass

            if nickname is None:
                if email:
                    nickname = email.split('@')[0]
                else:
                    nickname = ''.join([
                        random.choice('abcdefghijklmnopqrstuvwxyz')
                        for i in xrange(10)
                    ])
            if email is None:
                valid_username = False
                email = None  #'*****@*****.**'%(nickname)
            else:
                valid_username = True
            name_count = AuthUser.objects.filter(
                username__startswith=nickname).count()

            if name_count:
                username = '******' % (nickname, name_count + 1)
                user = User.objects.create_user(username, email or '')
            else:
                user = User.objects.create_user(nickname, email or '')
            user.save()

            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user  #AuthUser.objects.get(pk=user.pk)
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            #Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
    def authenticate(self, openid_key, request, provider, user=None):
        logger.info("request.GET: %s", request.GET)
        logger.info("request.POST: %s", request.POST)
        logger.info("------------------------------------------ Authenticating against OpenID")
        logger.info("openid_key: %s", openid_key)
        logger.info("provider: %s", provider)
        try:
            assoc = OpenidProfile.objects.get(openid_key=openid_key)
            logger.info("Found a OpenidProfile")
            logger.info("assoc.openid_key: %s", assoc.openid_key)
            logger.info("assoc.user.username: %s", assoc.user.username)
            logger.info("assoc.nickname: %s", assoc.nickname)
            logger.info("assoc.is_username_valid: %s", assoc.is_username_valid)
            logger.info("assoc.email: %s", assoc.email)
            if assoc.email.endswith("@socialauth") and request.openid.ax is not None:
                assoc.email = request.openid.ax.getSingle("http://axschema.org/contact/email", None)
                logger.info("Updating existing OpenidProfile with correct openid email")
                assoc.save()
            return assoc.user
        except OpenidProfile.DoesNotExist:
            # fetch if openid provider provides any simple registration fields
            logger.info("Creating a OpenidProfile")
            nickname = None
            email = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get("email")
                nickname = request.openid.sreg.get("nickname")
            elif request.openid and request.openid.ax:
                email = request.openid.ax.getSingle("http://axschema.org/contact/email", None)

            if nickname is None:
                nickname = "".join([random.choice("abcdefghijklmnopqrstuvwxyz") for i in xrange(10)])

            name_count = User.objects.filter(username__startswith=nickname).count()
            if name_count:
                username = "******".format(nickname, name_count + 1)
            else:
                username = "******".format(nickname)

            if email is None:
                valid_username = False
                email = "{0}@socialauth".format(username)
            else:
                valid_username = True
            if not user:
                user = User.objects.create_user(username, email or "")
                user.set_unusable_password()
                user.save()

            # create openid association
            assoc = OpenidProfile()
            assoc.openid_key = openid_key
            assoc.user = user
            if provider == "Google":
                assoc.needs_google_crossdomain_merge = True
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            logger.info("assoc.openid_key: %s", assoc.openid_key)
            logger.info("assoc.user.username: %s", assoc.user.username)
            logger.info("assoc.nickname: %s", assoc.nickname)
            logger.info("assoc.is_username_valid: %s", assoc.is_username_valid)
            logger.info("assoc.email: %s", assoc.email)

            # Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider, provider_model="OpenidProfile", provider_id=assoc.pk)
            auth_meta.save()
            return user
    def authenticate(self, openid_key, request, provider, user=None):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            #fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            firstname = None
            lastname = None
            
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get('email')
                nickname = request.openid.sreg.get('nickname')
                firstname, lastname = (request.openid.sreg
                                       .get('fullname', ' ')
                                       .split(' ', 1))
            elif request.openid and request.openid.ax:
                email = \
                    (request.openid.ax
                     .getSingle('http://axschema.org/contact/email'))
                if 'google' in provider:
                    ax_schema = OPENID_AX_PROVIDER_MAP['Google']
                    firstname = (request.openid.ax
                                 .getSingle(ax_schema['firstname']))
                    lastname = (request.openid.ax
                                .getSingle(ax_schema['lastname']))
                    nickname = email.split('@')[0]
                else:
                    ax_schema = OPENID_AX_PROVIDER_MAP['Default']
                    try:
                         #should be replaced by correct schema
                        nickname = (request.openid.ax
                                    .getSingle(ax_schema['nickname']))
                        (firstname, 
                            lastname) = (request.openid.ax
                                         .getSingle(ax_schema['fullname'])
                                         .split(' ', 1))
                    except:
                        pass

            if nickname is None :
                nickname =  ''.join(
                                    [random
                                     .choice('abcdefghijklmnopqrstuvwxyz')
                                     for i in xrange(10)])
            
            name_count = (User.objects
                          .filter(username__startswith=nickname)
                          .count())
            if name_count:
                username = '******' % (nickname, name_count + 1)
            else:
                username = '******' % (nickname)
                
            if email is None :
                valid_username = False
                email =  "%s@socialauth" % (username)
            else:
                valid_username = True
            
            if not user:
                user = User.objects.create_user(username, email)
                
            user.first_name = firstname
            user.last_name = lastname
            user.save()
    
            #create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()
            
            #Create AuthMeta
            # auth_meta = 
            #             AuthMeta(user=user, 
            #                        provider=provider, 
            #                        provider_model='OpenidProfile', 
            #                        provider_id=assoc.pk)
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
    def authenticate(self, openid_key, request, provider, user=None):
        try:
            assoc = UserAssociation.objects.get(openid_key=openid_key)
            return assoc.user
        except UserAssociation.DoesNotExist:
            # fetch if openid provider provides any simple registration fields
            nickname = None
            email = None
            first_name = None
            last_name = None
            if request.openid and request.openid.sreg:
                email = request.openid.sreg.get("email")
                nickname = request.openid.sreg.get("nickname")
                first_name, last_name = request.openid.sreg.get("fullname", "").split(" ", 1)
            elif request.openid and request.openid.ax:
                email = request.openid.ax.get("http://axschema.org/contact/email")[0]
                try:
                    nickname = request.openid.ax.get("nickname")  # should be replaced by correct schema
                except:
                    pass
                try:
                    first_name = request.openid.ax.get("http://axschema.org/namePerson/first").pop()
                except:
                    pass
                try:
                    last_name = request.openid.ax.get("http://axschema.org/namePerson/last").pop()
                except:
                    pass
            if nickname is None:
                nickname = "".join([random.choice("abcdefghijklmnopqrstuvwxyz") for i in xrange(10)])

            name_count = User.objects.filter(username__startswith=nickname).count()
            if name_count:
                username = "******" % (nickname, name_count + 1)
            else:
                username = "******" % (nickname)

            if email is None:
                valid_username = False
                email = "%s@socialauth" % (username)
            else:
                valid_username = True

            if not user:
                user = User.objects.create_user(username, email or "")
                if first_name is not None:
                    user.first_name = first_name
                if last_name is not None:
                    user.last_name = last_name
                user.save()

            # create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            if email:
                assoc.email = email
            if nickname:
                assoc.nickname = nickname
            if valid_username:
                assoc.is_username_valid = True
            assoc.save()

            # Create AuthMeta
            # auth_meta =
            #             AuthMeta(user=user,
            #                        provider=provider,
            #                        provider_model='OpenidProfile',
            #                        provider_id=assoc.pk)
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()
            return user
Example #25
0
def openid_done(request, provider=None):
    """
    When the request reaches here, the user has completed the Openid
    authentication flow. He has authorised us to login via Openid, so
    request.openid is populated.
    After coming here, we want to check if we are seeing this openid first time.
    If we are, we will create a new Django user for this Openid, else login the
    existing openid.
    """
    if not provider:
        provider = request.session.get("openid_provider", "")
    if request.openid:
        email = None
        nickname = None
        password = None
        # fetch if openid provider provides any simple registration fields
        if request.openid.sreg:
            if request.openid.sreg.has_key("email"):
                email = request.openid.sreg["email"]
            if request.openid.sreg.has_key("nickname"):
                nickname = request.openid.sreg["nickname"]
        # check for already existing associations
        openid_key = escape(str(request.openid))
        userassociation = UserAssociation.objects.filter(openid_key=openid_key)
        if userassociation:
            user = userassociation[0].user
            nickname = user.username
            email = user.email
        else:
            if nickname is None:
                nickname = "".join([random.choice("abcdefghijklmnopqrstuvwxyz") for i in xrange(10)])
            if email is None:
                from django.conf import settings

                email = "%s@%s.%s.com" % (nickname, settings.SITE_NAME, provider)
            user = User.objects.create_user(nickname, email)
            user.save()

            # create openid association
            assoc = UserAssociation()
            assoc.openid_key = openid_key
            assoc.user = user
            assoc.save()

            # Create AuthMeta
            auth_meta = AuthMeta(user=user, provider=provider)
            auth_meta.save()

        # authenticate and login
        user = authenticate(openid_key=openid_key)
        if user:
            login(request, user)
        if "openid_next" in request.session:

            openid_next = request.session.get("openid_next")

            if len(openid_next.strip()) > 0:

                return HttpResponseRedirect(openid_next)
        redirect_url = reverse("socialauth_signin_complete")
        return HttpResponseRedirect(redirect_url)