Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (3.8 kB)

1 2e662088 Antony Chazapis
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 2715ade4 Sofia Papagiannaki
#
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 2715ade4 Sofia Papagiannaki
#
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 2715ade4 Sofia Papagiannaki
#
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 2715ade4 Sofia Papagiannaki
#
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 2715ade4 Sofia Papagiannaki
#
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 d7c850a0 Sofia Papagiannaki
import urlparse
37 a49baffa Antony Chazapis
38 0308f3a7 Sofia Papagiannaki
from django.http import (
39 479c3051 Ilias Tsitsimpis
    HttpResponseNotFound, HttpResponseRedirect, HttpResponse)
40 a903e505 Antony Chazapis
from django.utils.http import urlencode
41 b91bd50a Sofia Papagiannaki
from django.views.decorators.csrf import csrf_exempt
42 d7c850a0 Sofia Papagiannaki
from django.utils import simplejson as json
43 a49baffa Antony Chazapis
44 79b5d61b Sofia Papagiannaki
from pithos.api.settings import ASTAKOS_URL
45 0a8bf8fb Antony Chazapis
46 d7c850a0 Sofia Papagiannaki
from astakosclient import AstakosClient
47 d7c850a0 Sofia Papagiannaki
from astakosclient.errors import AstakosClientException
48 0a8bf8fb Antony Chazapis
49 0a8bf8fb Antony Chazapis
logger = logging.getLogger(__name__)
50 0a8bf8fb Antony Chazapis
51 d7c850a0 Sofia Papagiannaki
USER_CATALOG_URL = "/astakos/api/user_catalogs"
52 d7c850a0 Sofia Papagiannaki
USER_FEEDBACK_URL = "/astakos/api/feedback"
53 d7c850a0 Sofia Papagiannaki
USER_LOGIN_URL = urlparse.urljoin(ASTAKOS_URL, "login")
54 d7c850a0 Sofia Papagiannaki
55 2715ade4 Sofia Papagiannaki
56 b91bd50a Sofia Papagiannaki
def delegate_to_login_service(request):
57 890c2065 Sofia Papagiannaki
    url = USER_LOGIN_URL
58 8df4fae6 Christos Stavrakakis
    if not url:
59 4732ed31 Antony Chazapis
        return HttpResponseNotFound()
60 2715ade4 Sofia Papagiannaki
61 d7c850a0 Sofia Papagiannaki
    p = urlparse.urlparse(url)
62 0a8bf8fb Antony Chazapis
    if request.is_secure():
63 4732ed31 Antony Chazapis
        proto = 'https://'
64 0a8bf8fb Antony Chazapis
    else:
65 4732ed31 Antony Chazapis
        proto = 'http://'
66 f1bacd3c Sofia Papagiannaki
    params = dict([(k, v) for k, v in request.GET.items()])
67 890c2065 Sofia Papagiannaki
    uri = proto + p.netloc + p.path + '?' + urlencode(params)
68 4732ed31 Antony Chazapis
    return HttpResponseRedirect(uri)
69 b91bd50a Sofia Papagiannaki
70 2715ade4 Sofia Papagiannaki
71 890c2065 Sofia Papagiannaki
@csrf_exempt
72 890c2065 Sofia Papagiannaki
def delegate_to_feedback_service(request):
73 890c2065 Sofia Papagiannaki
    token = request.META.get('HTTP_X_AUTH_TOKEN')
74 d7c850a0 Sofia Papagiannaki
    body = request.raw_post_data
75 d7c850a0 Sofia Papagiannaki
    method = request.method
76 d7c850a0 Sofia Papagiannaki
    astakos = AstakosClient(ASTAKOS_URL, retry=2, use_pool=True, logger=logger)
77 d7c850a0 Sofia Papagiannaki
    try:
78 d7c850a0 Sofia Papagiannaki
        data = astakos._call_astakos(token, USER_FEEDBACK_URL, None, body,
79 d7c850a0 Sofia Papagiannaki
                                     method)
80 d7c850a0 Sofia Papagiannaki
        status = 200
81 d7c850a0 Sofia Papagiannaki
    except AstakosClientException, e:
82 d7c850a0 Sofia Papagiannaki
        status = e.status
83 d7c850a0 Sofia Papagiannaki
        details = json.loads(e.details)
84 d7c850a0 Sofia Papagiannaki
        _, d = details.popitem()
85 d7c850a0 Sofia Papagiannaki
        data = d.get('message')
86 d7c850a0 Sofia Papagiannaki
    return HttpResponse(data, status=status)
87 890c2065 Sofia Papagiannaki
88 479c3051 Ilias Tsitsimpis
89 890c2065 Sofia Papagiannaki
@csrf_exempt
90 890c2065 Sofia Papagiannaki
def delegate_to_user_catalogs_service(request):
91 890c2065 Sofia Papagiannaki
    token = request.META.get('HTTP_X_AUTH_TOKEN')
92 d7c850a0 Sofia Papagiannaki
    headers = {'content-type': 'application/json'}
93 d7c850a0 Sofia Papagiannaki
    body = request.raw_post_data
94 d7c850a0 Sofia Papagiannaki
    method = request.method
95 d7c850a0 Sofia Papagiannaki
    astakos = AstakosClient(ASTAKOS_URL, retry=2, use_pool=True, logger=logger)
96 d7c850a0 Sofia Papagiannaki
    try:
97 d7c850a0 Sofia Papagiannaki
        data = astakos._call_astakos(token, USER_CATALOG_URL, headers, body,
98 d7c850a0 Sofia Papagiannaki
                                     method)
99 d7c850a0 Sofia Papagiannaki
        data = json.dumps(data)
100 d7c850a0 Sofia Papagiannaki
        status = 200
101 d7c850a0 Sofia Papagiannaki
    except AstakosClientException, e:
102 d7c850a0 Sofia Papagiannaki
        status = e.status
103 d7c850a0 Sofia Papagiannaki
        details = json.loads(e.details)
104 d7c850a0 Sofia Papagiannaki
        _, d = details.popitem()
105 d7c850a0 Sofia Papagiannaki
        data = d.get('message')
106 d7c850a0 Sofia Papagiannaki
    return HttpResponse(data, status=status)