Beispiel #1
0
def callback(req):
    token = req.session.get('token', None)
    if not token:
        return render('callback.html', {
            'token': True
        })
    token = oauth.OAuthToken.from_string(token)
    if token.key != req.GET.get('oauth_token', 'no-token'):
        return render('callback.html', {
            'mismatch': True
        })
    token = get_authorized_token(token)
    obj = is_authorized(token)
    if obj is None:
        return render('callback.html', {
            'username': True
        })
    user = None
    try:
        user = User.objects.get(username=obj['screen_name'])
    except:
        user = User(username=obj['screen_name'])
    user.save()
    profile = None
    try:
        profile = user.get_profile()
    except:
        profile = UserProfile(user=user)
    profile.oauth_token = token.key
    profile.oauth_token_secret = token.secret
    profile.followers = obj['followers_count']
    profile.image = obj['profile_image_url']
    try:
        profile.location = obj['location']
    except:
        pass
    try:
        profile.lang = obj['lang']
    except:
        pass
    try:
        profile.time_zone = obj['time_zone']
    except:
        pass
    profile.save()
    from django.contrib.auth import login, load_backend
    if not hasattr(user, 'backend'):
        for backend in settings.AUTHENTICATION_BACKENDS:
            if user == load_backend(backend).get_user(user.pk):
                user.backend = backend
                break
    if hasattr(user, 'backend'):
        login(req, user)
    del req.session['token']
    return redirect('/info/')
Beispiel #2
0
def oauth_authenticated(request):
    print 'dropbox.views.oauth_authenticated'
    # Step 1. Use the request token in the session to build a new client.
    # Step 2. Request the authorized access token from Provider.
    sess = request.session['dropbox_session']
    access_token = sess.obtain_access_token(request.session['dropbox_request_token'])
    print access_token
    pprint.pprint(access_token)
    print "Access Token:"
    print "    - oauth_token        = %s" % access_token.key
    print "    - oauth_token_secret = %s" % access_token.secret
    print
    dropbox_client = client.DropboxClient(sess)
    profile = dropbox_client.account_info()
    print profile

    try:
        user = User.objects.get(username = profile['uid'])
    except User.DoesNotExist:
        print 'Info: dropbox.views.oauth_authenticated - User DoesNotExist, creating one'
        user = User.objects.create_user(profile['uid'], profile['email'], 'password') # this is dangerous
        user.first_name = profile['display_name']
        user.last_name = ""
        user.save()
        # Save our permanent token and secret for later.
        print 'dropbox.views.authenticate - creating user profile'
        userprofile = UserProfile()
        userprofile.user = user
        userprofile.oauth_token = access_token.key
        userprofile.oauth_secret = access_token.secret
        userprofile.access_token = access_token
        userprofile.save()

    # Authenticate the user and log them in using Django's pre-built
    # functions for these things.
    user = authenticate(username = profile['uid'], password = '******')
    if user is not None:
        login(request, user)
        print 'dropbox.views.authenticate - user logged in'
        request.session['dropbox_client'] = dropbox_client  
    else:
        print 'Error: dropbox.views.oauth_authenticate - user not authenticated'
    return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)