Revision a24b5bda snf-astakos-app/astakos/api/tokens.py

b/snf-astakos-app/astakos/api/tokens.py
31 31
# interpreted as representing official policies, either expressed
32 32
# or implied, of GRNET S.A.
33 33

  
34
from urlparse import urlunsplit, urlsplit
35 34
from collections import defaultdict
36 35

  
37
from django.http import urlencode
38 36
from django.views.decorators.csrf import csrf_exempt
39 37

  
40 38
from snf_django.lib.api import faults, utils, api_method
41 39

  
42 40
from astakos.im.models import Service, AstakosUser
43
from .util import user_from_token, json_response, xml_response, validate_user
41
from .util import json_response, xml_response, validate_user
44 42

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

  
48 46

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

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

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

  
63
    endpoints = list(Service.objects.all().order_by('id').
64
                     filter(id__gt=marker)[:limit].
65
                     values('name', 'url', 'api_url', 'id', 'type'))
66
    for e in endpoints:
67
        e['publicURL'] = e['admiURL'] = e['internalURL'] = e['api_url']
68
        e['SNF:uiURL'] = e['url']
69
        e['region'] = e['name']
70
        e.pop('api_url')
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)
86

  
87

  
88 47
@csrf_exempt
89 48
@api_method(http_method="POST", token_required=False, user_required=False,
90 49
            logger=logger)

Also available in: Unified diff