Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / api / tokens.py @ 7ac2131c

History | View | Annotate | Download (3.2 kB)

1
# Copyright 2011-2013 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
from urlparse import urlunsplit, urlsplit
35

    
36
from django.http import urlencode
37

    
38
from snf_django.lib import api
39

    
40
from astakos.im.models import Service
41

    
42
from .util import user_from_token, rename_meta_key, json_response, xml_response
43

    
44
import logging
45
logger = logging.getLogger(__name__)
46

    
47

    
48
@api.api_method(http_method="GET", token_required=True, user_required=False,
49
                logger=logger)
50
@user_from_token  # Authenticate user!!
51
def get_endpoints(request, token):
52
    if token != api.get_token(request):
53
        raise api.faults.Forbidden()
54

    
55
    belongsTo = request.GET.get('belongsTo')
56
    if belongsTo and belongsTo != request.user.uuid:
57
        raise api.faults.BadRequest()
58

    
59
    marker = request.GET.get('marker', 0)
60
    limit = request.GET.get('limit', 10000)
61

    
62
    endpoints = list(Service.objects.all().order_by('id').\
63
        filter(id__gt=marker)[:limit].\
64
        values('name', 'url', 'api_url', 'id', 'type'))
65
    for e in endpoints:
66
        e['api_url'] = e['api_url'] or e['url']
67
        e['internalURL'] = e['url']
68
        e['region'] = e['name']
69
        rename_meta_key(e, 'api_url', 'adminURL')
70
        rename_meta_key(e, 'url', 'publicURL')
71

    
72
    if endpoints:
73
        parts = list(urlsplit(request.path))
74
        params = {'marker': endpoints[-1]['id'], 'limit': limit}
75
        parts[3] = urlencode(params)
76
        next_page_url = urlunsplit(parts)
77
        endpoint_links = [{'href': next_page_url, 'rel': 'next'}]
78
    else:
79
        endpoint_links = []
80

    
81
    result = {'endpoints': endpoints, 'endpoint_links': endpoint_links}
82
    if request.serialization == 'xml':
83
        return xml_response(result, 'api/endpoints.xml')
84
    else:
85
        return json_response(result)