Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / delegate.py @ 52fc9c0c

History | View | Annotate | Download (3.1 kB)

1 2e662088 Antony Chazapis
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 0a8bf8fb Antony Chazapis
# 
3 0a8bf8fb Antony Chazapis
# Redistribution and use in source and binary forms, with or
4 0a8bf8fb Antony Chazapis
# without modification, are permitted provided that the following
5 0a8bf8fb Antony Chazapis
# conditions are met:
6 0a8bf8fb Antony Chazapis
# 
7 0a8bf8fb Antony Chazapis
#   1. Redistributions of source code must retain the above
8 0a8bf8fb Antony Chazapis
#      copyright notice, this list of conditions and the following
9 0a8bf8fb Antony Chazapis
#      disclaimer.
10 0a8bf8fb Antony Chazapis
# 
11 0a8bf8fb Antony Chazapis
#   2. Redistributions in binary form must reproduce the above
12 0a8bf8fb Antony Chazapis
#      copyright notice, this list of conditions and the following
13 0a8bf8fb Antony Chazapis
#      disclaimer in the documentation and/or other materials
14 0a8bf8fb Antony Chazapis
#      provided with the distribution.
15 0a8bf8fb Antony Chazapis
# 
16 0a8bf8fb Antony Chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 0a8bf8fb Antony Chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 0a8bf8fb Antony Chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 0a8bf8fb Antony Chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 0a8bf8fb Antony Chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 0a8bf8fb Antony Chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 0a8bf8fb Antony Chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 0a8bf8fb Antony Chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 0a8bf8fb Antony Chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 0a8bf8fb Antony Chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 0a8bf8fb Antony Chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 0a8bf8fb Antony Chazapis
# POSSIBILITY OF SUCH DAMAGE.
28 0a8bf8fb Antony Chazapis
# 
29 0a8bf8fb Antony Chazapis
# The views and conclusions contained in the software and
30 0a8bf8fb Antony Chazapis
# documentation are those of the authors and should not be
31 0a8bf8fb Antony Chazapis
# interpreted as representing official policies, either expressed
32 0a8bf8fb Antony Chazapis
# or implied, of GRNET S.A.
33 0a8bf8fb Antony Chazapis
34 0a8bf8fb Antony Chazapis
import logging
35 0a8bf8fb Antony Chazapis
36 a49baffa Antony Chazapis
from urlparse import urlparse
37 b91bd50a Sofia Papagiannaki
import urllib
38 b91bd50a Sofia Papagiannaki
import urllib2
39 a49baffa Antony Chazapis
40 b91bd50a Sofia Papagiannaki
from django.http import HttpResponseNotFound, HttpResponseRedirect, HttpResponseBadRequest, HttpResponse
41 a903e505 Antony Chazapis
from django.utils.http import urlencode
42 b91bd50a Sofia Papagiannaki
from django.views.decorators.csrf import csrf_exempt
43 a49baffa Antony Chazapis
44 b91bd50a Sofia Papagiannaki
from pithos.api.settings import AUTHENTICATION_URL, AUTHENTICATION_USERS, SERVICE_TOKEN
45 0a8bf8fb Antony Chazapis
46 0a8bf8fb Antony Chazapis
47 0a8bf8fb Antony Chazapis
logger = logging.getLogger(__name__)
48 0a8bf8fb Antony Chazapis
49 b91bd50a Sofia Papagiannaki
def delegate_to_login_service(request):
50 a49baffa Antony Chazapis
    url = AUTHENTICATION_URL
51 a49baffa Antony Chazapis
    users = AUTHENTICATION_USERS
52 a49baffa Antony Chazapis
    if users or not url:
53 4732ed31 Antony Chazapis
        return HttpResponseNotFound()
54 0a8bf8fb Antony Chazapis
    
55 a49baffa Antony Chazapis
    p = urlparse(url)
56 0a8bf8fb Antony Chazapis
    if request.is_secure():
57 4732ed31 Antony Chazapis
        proto = 'https://'
58 0a8bf8fb Antony Chazapis
    else:
59 4732ed31 Antony Chazapis
        proto = 'http://'
60 f1bacd3c Sofia Papagiannaki
    params = dict([(k, v) for k, v in request.GET.items()])
61 a49baffa Antony Chazapis
    uri = proto + p.netloc + '/login?' + urlencode(params)
62 4732ed31 Antony Chazapis
    return HttpResponseRedirect(uri)
63 b91bd50a Sofia Papagiannaki
64 b91bd50a Sofia Papagiannaki
@csrf_exempt
65 b91bd50a Sofia Papagiannaki
def delegate_to_feedback_service(request):
66 b91bd50a Sofia Papagiannaki
    url = AUTHENTICATION_URL
67 b91bd50a Sofia Papagiannaki
    users = AUTHENTICATION_USERS
68 b91bd50a Sofia Papagiannaki
    if users or not url:
69 b91bd50a Sofia Papagiannaki
        return HttpResponseNotFound()
70 b91bd50a Sofia Papagiannaki
    
71 b91bd50a Sofia Papagiannaki
    p = urlparse(url)
72 b91bd50a Sofia Papagiannaki
    if request.is_secure():
73 b91bd50a Sofia Papagiannaki
        proto = 'https://'
74 b91bd50a Sofia Papagiannaki
    else:
75 b91bd50a Sofia Papagiannaki
        proto = 'http://'
76 b91bd50a Sofia Papagiannaki
    
77 b91bd50a Sofia Papagiannaki
    uri = proto + p.netloc + '/im/service/api/v2.0/feedback'
78 b91bd50a Sofia Papagiannaki
    headers = { 'X-Auth-Token' : SERVICE_TOKEN }
79 b91bd50a Sofia Papagiannaki
    values = dict([(k, v) for k, v in request.POST.items()])
80 b91bd50a Sofia Papagiannaki
    data = urllib.urlencode(values)
81 b91bd50a Sofia Papagiannaki
    req = urllib2.Request(uri, data, headers)
82 b91bd50a Sofia Papagiannaki
    try:
83 b91bd50a Sofia Papagiannaki
        urllib2.urlopen(req)
84 b91bd50a Sofia Papagiannaki
    except urllib2.HTTPError, e:
85 dfdf4802 Sofia Papagiannaki
        logger.exception(e)
86 b91bd50a Sofia Papagiannaki
        return HttpResponse(status=e.code)
87 0af13d50 Sofia Papagiannaki
    except urllib2.URLError, e:
88 dfdf4802 Sofia Papagiannaki
        logger.exception(e)
89 dfdf4802 Sofia Papagiannaki
        return HttpResponse(status=e.reason)
90 b91bd50a Sofia Papagiannaki
    return HttpResponse()