예제 #1
0
파일: twitter.py 프로젝트: cstavr/synnefo
def authenticated(
    request,
    template='im/third_party_check_local.html',
    extra_context=None):

    if extra_context is None:
        extra_context = {}

    consumer = oauth.Consumer(settings.TWITTER_TOKEN,
                              settings.TWITTER_SECRET)
    client = oauth.Client(consumer)

    if request.GET.get('denied'):
        return HttpResponseRedirect(reverse('edit_profile'))

    if not 'request_token' in request.session:
        messages.error(request, 'Twitter handshake failed')
        return HttpResponseRedirect(reverse('edit_profile'))

    token = oauth.Token(request.session['request_token']['oauth_token'],
        request.session['request_token']['oauth_token_secret'])
    client = oauth.Client(consumer, token)

    # Step 2. Request the authorized access token from Twitter.
    parts = list(urlsplit(access_token_url))
    params = dict(parse_qsl(parts[3], keep_blank_values=True))
    oauth_verifier = request.GET.get('oauth_verifier')
    params['oauth_verifier'] = oauth_verifier
    parts[3] = urlencode(params)
    parameterized_url = urlunsplit(parts)

    resp, content = client.request(parameterized_url, "GET")

    if resp['status'] != '200':
        try:
            del request.session['request_token']
        except:
            pass
        messages.error(request, 'Invalid Twitter response')
        logger.error("Invalid twitter response %s", resp)
        return HttpResponseRedirect(reverse('edit_profile'))

    access_token = dict(cgi.parse_qsl(content))
    userid = access_token['user_id']
    username = access_token.get('screen_name', userid)
    provider_info = {'screen_name': username}
    affiliation = 'Twitter.com'

    try:
        return handle_third_party_login(request, 'twitter', userid,
                                        provider_info, affiliation)
    except AstakosUser.DoesNotExist, e:
        third_party_key = get_pending_key(request)
        user_info = {'affiliation': affiliation}
        return handle_third_party_signup(request, userid, 'twitter',
                                         third_party_key,
                                         provider_info,
                                         user_info,
                                         template,
                                         extra_context)
예제 #2
0
def authenticated(request,
                  template='im/third_party_check_local.html',
                  extra_context=None):

    if extra_context is None:
        extra_context = {}

    consumer = oauth.Consumer(settings.TWITTER_TOKEN,
                              settings.TWITTER_SECRET)
    client = oauth.Client(consumer)

    if request.GET.get('denied'):
        return HttpResponseRedirect(reverse('edit_profile'))

    if not 'request_token' in request.session:
        messages.error(request, 'Twitter handshake failed')
        return HttpResponseRedirect(reverse('edit_profile'))

    token = oauth.Token(request.session['request_token']['oauth_token'],
                        request.session['request_token']['oauth_token_secret'])
    client = oauth.Client(consumer, token)

    # Step 2. Request the authorized access token from Twitter.
    parts = list(urlsplit(access_token_url))
    params = dict(parse_qsl(parts[3], keep_blank_values=True))
    oauth_verifier = request.GET.get('oauth_verifier')
    params['oauth_verifier'] = oauth_verifier
    parts[3] = urlencode(params)
    parameterized_url = urlunsplit(parts)

    resp, content = client.request(parameterized_url, "GET")

    if resp['status'] != '200':
        try:
            del request.session['request_token']
        except:
            pass
        messages.error(request, 'Invalid Twitter response')
        logger.error("Invalid twitter response %s", resp)
        return HttpResponseRedirect(reverse('edit_profile'))

    access_token = dict(cgi.parse_qsl(content))
    userid = access_token['user_id']
    username = access_token.get('screen_name', userid)
    provider_info = {'screen_name': username}
    affiliation = 'Twitter.com'

    try:
        return handle_third_party_login(request, 'twitter', userid,
                                        provider_info, affiliation)
    except AstakosUser.DoesNotExist, e:
        third_party_key = get_pending_key(request)
        user_info = {'affiliation': affiliation}
        return handle_third_party_signup(request, userid, 'twitter',
                                         third_party_key,
                                         provider_info,
                                         user_info,
                                         template,
                                         extra_context)
예제 #3
0
 def test_extended_list_json(self):
     url = join_urls(self.pithos_path, self.user, 'apples')
     params = {'format': 'json', 'limit': 2, 'prefix': 'photos/animals',
               'delimiter': '/'}
     r = self.get('%s?%s' % (url, urlencode(params)))
     self.assertEqual(r.status_code, 200)
     try:
         objects = json.loads(r.content)
     except:
         self.fail('json format expected')
     self.assertEqual(objects[0]['subdir'], 'photos/animals/cats/')
     self.assertEqual(objects[1]['subdir'], 'photos/animals/dogs/')
예제 #4
0
파일: client.py 프로젝트: alatteri/informer
    def get(self, path, data={}, **extra):
        "Request a response from the server using GET."
        r = {
            'CONTENT_LENGTH':  None,
            'CONTENT_TYPE':    'text/html; charset=utf-8',
            'PATH_INFO':       path,
            'QUERY_STRING':    urlencode(data),
            'REQUEST_METHOD': 'GET',
        }
        r.update(extra)

        return self.request(**r)
예제 #5
0
    def setUp(self):
        super(IpnHandlerViewTestCase, self).setUp()
        self.view_url = reverse('ipn_handler')
        self.order = factories.create_order(5)

        ipn_data = json.loads(utils.load_fixture("refund_ipn.json"))
        ipn_data["pay_key"] = self.order.payment.pay_key
        self.ipn_data = urlencode(ipn_data)

        self.notifier_patcher = mock.patch('apps.purchase.models.notifier')
        self.notifier_patcher.start()
        self.addCleanup(self.notifier_patcher.stop)
예제 #6
0
    def get(self, path, data={}, **extra):
        "Request a response from the server using GET."
        r = {
            'CONTENT_LENGTH':  None,
            'CONTENT_TYPE':    'text/html; charset=utf-8',
            'PATH_INFO':       path,
            'QUERY_STRING':    urlencode(data),
            'REQUEST_METHOD': 'GET',
        }
        r.update(extra)

        return self.request(**r)
예제 #7
0
    def test_extended_list_xml(self):
        url = join_urls(self.pithos_path, self.user, 'apples')
        params = {'format': 'xml', 'limit': 4, 'prefix': 'photos',
                  'delimiter': '/'}
        r = self.get('%s?%s' % (url, urlencode(params)))
        self.assertEqual(r.status_code, 200)
        try:
            xml = minidom.parseString(r.content)
        except:
            self.fail('xml format expected')
        self.assert_extended(xml, 'xml', 'object', size=4)
        dirs = xml.getElementsByTagName('subdir')
        self.assertEqual(len(dirs), 2)
        self.assertEqual(dirs[0].attributes['name'].value, 'photos/animals/')
        self.assertEqual(dirs[1].attributes['name'].value, 'photos/plants/')

        objects = xml.getElementsByTagName('name')
        self.assertEqual(len(objects), 1)
        self.assertEqual(objects[0].childNodes[0].data, 'photos/me.jpg')
예제 #8
0
파일: views.py 프로젝트: plounze/kitsune
def browserid_verify(request):
    next = request.REQUEST.get('next')
    redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/')
    redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/')

    form = BrowserIDForm(data=request.POST)

    if form.is_valid():
        verifier = BrowserIDBackend().get_verifier()
        result = verifier.verify(form.cleaned_data['assertion'],
                                 get_audience(request))
        if result:
            if request.user.is_authenticated(
            ) and request.user.email != result.email:
                # User is already signed and wants to change their email.
                request.user.email = result.email
                request.user.save()
                return redirect(reverse('users.edit_profile'))
            else:
                # Verified so log in
                email = result.email
                user = User.objects.filter(email=email)
                contributor = 'contributor' in request.POST

                if len(user) == 0:
                    # Add the email to the session and redirect to signup
                    request.session['browserid-email'] = email
                    signup_url = reverse('users.browserid_signup')
                    return redirect('%s?%s' %
                                    (signup_url, urlencode({'next': next})))
                else:
                    user = user[0]
                    user.backend = 'django_browserid.auth.BrowserIDBackend'

                    if contributor:
                        add_to_contributors(request, user)

                    auth.login(request, user)
                    return redirect(redirect_to)

    return redirect(redirect_to_failure)
예제 #9
0
def browserid_verify(request):
    next = request.REQUEST.get('next')
    redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/')
    redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/')

    form = BrowserIDForm(data=request.POST)

    if form.is_valid():
        verifier = BrowserIDBackend().get_verifier()
        result = verifier.verify(form.cleaned_data['assertion'], get_audience(request))
        if result:
            if request.user.is_authenticated() and request.user.email != result.email:
                # User is already signed and wants to change their email.
                request.user.email = result.email
                request.user.save()
                return redirect(reverse('users.edit_profile'))
            else:
                # Verified so log in
                email = result.email
                user = User.objects.filter(email=email)
                contributor = 'contributor' in request.POST

                if len(user) == 0:
                    # Add the email to the session and redirect to signup
                    request.session['browserid-email'] = email
                    signup_url = reverse('users.browserid_signup')
                    return redirect('%s?%s' % (signup_url,
                                               urlencode({'next': next})))
                else:
                    user = user[0]
                    user.backend = 'django_browserid.auth.BrowserIDBackend'

                    if contributor:
                        add_to_contributors(request, user)

                    auth.login(request, user)
                    return redirect(redirect_to)

    return redirect(redirect_to_failure)
예제 #10
0
파일: views.py 프로젝트: raveenb/TakeNote
def oauth_login(request):
    print 'dropbox.views.oauth_login'
    # Step 0. Get the current hostname and port for the callback
    if request.META['SERVER_PORT'] == 443:
        current_server = "https://" + request.META['HTTP_HOST']
    else:
        current_server = "http://" + request.META['HTTP_HOST']
    oauth_callback = current_server + "/login/authenticated"

    # Step 1. Get a request token from Provider.
    sess = session.DropboxSession(settings.DROPBOX_KEY, settings.DROPBOX_SECRET, settings.DROPBOX_ACCESS)
    request_token = sess.obtain_request_token()
    url = sess.build_authorize_url(request_token)

    # Step 2. Store the request token in a session for later use.
    request.session['dropbox_request_token'] = request_token
    request.session['dropbox_session'] = sess

    # Step 3. Redirect the user to the authentication URL.
    param = urlencode({'oauth_callback': oauth_callback})
    url = url + '&' + param
    print url
    return HttpResponseRedirect(url)
예제 #11
0
파일: views.py 프로젝트: kreiser/kitsune
def browserid_verify(request):
    next = request.REQUEST.get("next")
    redirect_to = next or getattr(settings, "LOGIN_REDIRECT_URL", "/")
    redirect_to_failure = getattr(settings, "LOGIN_REDIRECT_URL_FAILURE", "/")

    form = BrowserIDForm(data=request.POST)

    if form.is_valid():
        result = verify(form.cleaned_data["assertion"], get_audience(request))
        if result:
            if request.user.is_authenticated():
                # User is already signed in so they must want an email change
                request.user.email = result["email"]
                request.user.save()
                return redirect(reverse("users.edit_profile"))
            else:
                # Verified so log in
                email = result["email"]
                user = User.objects.filter(email=email)
                contributor = "contributor" in request.POST

                if len(user) == 0:
                    # Add the email to the session and redirect to signup
                    request.session["browserid-email"] = email
                    signup_url = reverse("users.browserid_signup")
                    return redirect("%s?%s" % (signup_url, urlencode({"next": next})))
                else:
                    user = user[0]
                    user.backend = "django_browserid.auth.BrowserIDBackend"

                    if contributor:
                        add_to_contributors(request, user)

                    auth.login(request, user)
                    return redirect(redirect_to)

    return redirect(redirect_to_failure)
예제 #12
0
파일: util.py 프로젝트: apyrgio/synnefo
        user.renew_token(
            flush_sessions=True,
            current_key=request.session.session_key
        )
        try:
            user.save()
        except ValidationError, e:
            return HttpResponseBadRequest(e)

    next = restrict_next(next, domain=settings.COOKIE_DOMAIN)

    if settings.FORCE_PROFILE_UPDATE and \
            not user.is_verified and not user.is_superuser:
        params = ''
        if next:
            params = '?' + urlencode({'next': next})
        next = reverse('edit_profile') + params

    response = HttpResponse()

    # authenticate before login
    user = authenticate(email=user.email, auth_token=user.auth_token)
    login(request, user)
    request.session.set_expiry(user.auth_token_expires)

    if not next:
        next = settings.LOGIN_SUCCESS_URL

    response['Location'] = next
    response.status_code = 302
    return response
예제 #13
0
    renew = renew or user.token_expired()
    if renew:
        user.renew_token(flush_sessions=True,
                         current_key=request.session.session_key)
        try:
            user.save()
        except ValidationError, e:
            return HttpResponseBadRequest(e)

    next = restrict_next(next, domain=settings.COOKIE_DOMAIN)

    if settings.FORCE_PROFILE_UPDATE and \
            not user.is_verified and not user.is_superuser:
        params = ''
        if next:
            params = '?' + urlencode({'next': next})
        next = reverse('edit_profile') + params

    response = HttpResponse()

    # authenticate before login
    user = authenticate(email=user.email, auth_token=user.auth_token)
    login(request, user)
    request.session.set_expiry(user.auth_token_expires)

    if not next:
        next = settings.LOGIN_SUCCESS_URL

    response['Location'] = next
    response.status_code = 302
    return response
예제 #14
0
 def get_absolute_url(self):
     return "?".join(
         (reverse("todo-day"), urlencode(tuple((i, str(getattr(self.date, i))) for i in ("year", "month", "day"))))
     )
예제 #15
0
 def test_valid_response(self, mock_validate):
     mock_validate.return_value = True
     response = self.do_post(urlencode({"pay_key": "someignoredvalue"}))
     self.assertEqual(response.status_code, 200)
예제 #16
0
 def setUp(self):
     super(IpnDataParseTestCase, self).setUp()
     data = json.loads(utils.load_fixture("refund_ipn.json"))
     # Use a querydict as that is what the client object will parse
     # and there are some subtleties to them
     self.data = QueryDict(urlencode(data))