Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / delegate.py @ d7c850a0

History | View | Annotate | Download (3.8 kB)

1
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
import logging
35

    
36
import urlparse
37

    
38
from django.http import (
39
    HttpResponseNotFound, HttpResponseRedirect, HttpResponse)
40
from django.utils.http import urlencode
41
from django.views.decorators.csrf import csrf_exempt
42
from django.utils import simplejson as json
43

    
44
from pithos.api.settings import ASTAKOS_URL
45

    
46
from astakosclient import AstakosClient
47
from astakosclient.errors import AstakosClientException
48

    
49
logger = logging.getLogger(__name__)
50

    
51
USER_CATALOG_URL = "/astakos/api/user_catalogs"
52
USER_FEEDBACK_URL = "/astakos/api/feedback"
53
USER_LOGIN_URL = urlparse.urljoin(ASTAKOS_URL, "login")
54

    
55

    
56
def delegate_to_login_service(request):
57
    url = USER_LOGIN_URL
58
    if not url:
59
        return HttpResponseNotFound()
60

    
61
    p = urlparse.urlparse(url)
62
    if request.is_secure():
63
        proto = 'https://'
64
    else:
65
        proto = 'http://'
66
    params = dict([(k, v) for k, v in request.GET.items()])
67
    uri = proto + p.netloc + p.path + '?' + urlencode(params)
68
    return HttpResponseRedirect(uri)
69

    
70

    
71
@csrf_exempt
72
def delegate_to_feedback_service(request):
73
    token = request.META.get('HTTP_X_AUTH_TOKEN')
74
    body = request.raw_post_data
75
    method = request.method
76
    astakos = AstakosClient(ASTAKOS_URL, retry=2, use_pool=True, logger=logger)
77
    try:
78
        data = astakos._call_astakos(token, USER_FEEDBACK_URL, None, body,
79
                                     method)
80
        status = 200
81
    except AstakosClientException, e:
82
        status = e.status
83
        details = json.loads(e.details)
84
        _, d = details.popitem()
85
        data = d.get('message')
86
    return HttpResponse(data, status=status)
87

    
88

    
89
@csrf_exempt
90
def delegate_to_user_catalogs_service(request):
91
    token = request.META.get('HTTP_X_AUTH_TOKEN')
92
    headers = {'content-type': 'application/json'}
93
    body = request.raw_post_data
94
    method = request.method
95
    astakos = AstakosClient(ASTAKOS_URL, retry=2, use_pool=True, logger=logger)
96
    try:
97
        data = astakos._call_astakos(token, USER_CATALOG_URL, headers, body,
98
                                     method)
99
        data = json.dumps(data)
100
        status = 200
101
    except AstakosClientException, e:
102
        status = e.status
103
        details = json.loads(e.details)
104
        _, d = details.popitem()
105
        data = d.get('message')
106
    return HttpResponse(data, status=status)