root / snf-astakos-app / astakos / im / api / service.py @ 42f0a495
History | View | Annotate | Download (3.8 kB)
1 | bd40abfa | Christos Stavrakakis | # Copyright 2011-2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 6b03a847 | Sofia Papagiannaki | #
|
3 | 6b03a847 | Sofia Papagiannaki | # Redistribution and use in source and binary forms, with or
|
4 | 6b03a847 | Sofia Papagiannaki | # without modification, are permitted provided that the following
|
5 | 6b03a847 | Sofia Papagiannaki | # conditions are met:
|
6 | 6b03a847 | Sofia Papagiannaki | #
|
7 | 6b03a847 | Sofia Papagiannaki | # 1. Redistributions of source code must retain the above
|
8 | 6b03a847 | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
9 | 6b03a847 | Sofia Papagiannaki | # disclaimer.
|
10 | 6b03a847 | Sofia Papagiannaki | #
|
11 | 6b03a847 | Sofia Papagiannaki | # 2. Redistributions in binary form must reproduce the above
|
12 | 6b03a847 | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
13 | 6b03a847 | Sofia Papagiannaki | # disclaimer in the documentation and/or other materials
|
14 | 6b03a847 | Sofia Papagiannaki | # provided with the distribution.
|
15 | 6b03a847 | Sofia Papagiannaki | #
|
16 | 6b03a847 | Sofia Papagiannaki | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 6b03a847 | Sofia Papagiannaki | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 6b03a847 | Sofia Papagiannaki | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 6b03a847 | Sofia Papagiannaki | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 6b03a847 | Sofia Papagiannaki | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 6b03a847 | Sofia Papagiannaki | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 6b03a847 | Sofia Papagiannaki | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 6b03a847 | Sofia Papagiannaki | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 6b03a847 | Sofia Papagiannaki | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 6b03a847 | Sofia Papagiannaki | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 6b03a847 | Sofia Papagiannaki | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 6b03a847 | Sofia Papagiannaki | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 6b03a847 | Sofia Papagiannaki | #
|
29 | 6b03a847 | Sofia Papagiannaki | # The views and conclusions contained in the software and
|
30 | 6b03a847 | Sofia Papagiannaki | # documentation are those of the authors and should not be
|
31 | 6b03a847 | Sofia Papagiannaki | # interpreted as representing official policies, either expressed
|
32 | 6b03a847 | Sofia Papagiannaki | # or implied, of GRNET S.A.
|
33 | 6b03a847 | Sofia Papagiannaki | |
34 | 6b03a847 | Sofia Papagiannaki | from time import time, mktime |
35 | ee7a2b87 | Christos Stavrakakis | from functools import wraps |
36 | 6b03a847 | Sofia Papagiannaki | from django.views.decorators.csrf import csrf_exempt |
37 | 6b03a847 | Sofia Papagiannaki | |
38 | ee7a2b87 | Christos Stavrakakis | from . import __get_uuid_displayname_catalogs, __send_feedback
|
39 | ee7a2b87 | Christos Stavrakakis | from snf_django.lib import api |
40 | bd40abfa | Christos Stavrakakis | from snf_django.lib.api import faults |
41 | 890c2065 | Sofia Papagiannaki | from astakos.im.models import Service |
42 | 6b03a847 | Sofia Papagiannaki | |
43 | ee7a2b87 | Christos Stavrakakis | import logging |
44 | 6b03a847 | Sofia Papagiannaki | logger = logging.getLogger(__name__) |
45 | 6b03a847 | Sofia Papagiannaki | |
46 | 5ce3ce4f | Sofia Papagiannaki | |
47 | ee7a2b87 | Christos Stavrakakis | def service_from_token(func): |
48 | ee7a2b87 | Christos Stavrakakis | """Decorator for authenticating service by it's token.
|
49 | 5ce3ce4f | Sofia Papagiannaki |
|
50 | ee7a2b87 | Christos Stavrakakis | Check that a service with the corresponding token exists. Also,
|
51 | ee7a2b87 | Christos Stavrakakis | if service's token has an expiration token, check that it has not
|
52 | ee7a2b87 | Christos Stavrakakis | expired.
|
53 | ee7a2b87 | Christos Stavrakakis |
|
54 | ee7a2b87 | Christos Stavrakakis | """
|
55 | ee7a2b87 | Christos Stavrakakis | @wraps(func)
|
56 | ee7a2b87 | Christos Stavrakakis | def wrapper(request, *args, **kwargs): |
57 | ee7a2b87 | Christos Stavrakakis | try:
|
58 | ee7a2b87 | Christos Stavrakakis | token = request.x_auth_token |
59 | ee7a2b87 | Christos Stavrakakis | except AttributeError: |
60 | ee7a2b87 | Christos Stavrakakis | raise faults.Unauthorized("No authentication token") |
61 | ee7a2b87 | Christos Stavrakakis | |
62 | ee7a2b87 | Christos Stavrakakis | if not token: |
63 | ee7a2b87 | Christos Stavrakakis | raise faults.Unauthorized("Invalid X-Auth-Token") |
64 | ee7a2b87 | Christos Stavrakakis | try:
|
65 | ee7a2b87 | Christos Stavrakakis | service = Service.objects.get(auth_token=token) |
66 | ee7a2b87 | Christos Stavrakakis | except Service.DoesNotExist:
|
67 | ee7a2b87 | Christos Stavrakakis | raise faults.Unauthorized("Invalid X-Auth-Token") |
68 | ee7a2b87 | Christos Stavrakakis | |
69 | ee7a2b87 | Christos Stavrakakis | # Check if the token has expired
|
70 | ee7a2b87 | Christos Stavrakakis | expiration_date = service.auth_token_expires |
71 | ee7a2b87 | Christos Stavrakakis | if expiration_date:
|
72 | ee7a2b87 | Christos Stavrakakis | expires_at = mktime(expiration_date.timetuple()) |
73 | ee7a2b87 | Christos Stavrakakis | if time() > expires_at:
|
74 | ee7a2b87 | Christos Stavrakakis | raise faults.Unauthorized("Authentication expired") |
75 | ee7a2b87 | Christos Stavrakakis | |
76 | befa5997 | Giorgos Korfiatis | request.service_instance = service |
77 | ee7a2b87 | Christos Stavrakakis | return func(request, *args, **kwargs)
|
78 | ee7a2b87 | Christos Stavrakakis | return wrapper
|
79 | 5ce3ce4f | Sofia Papagiannaki | |
80 | 6b03a847 | Sofia Papagiannaki | |
81 | 890c2065 | Sofia Papagiannaki | @csrf_exempt
|
82 | ee7a2b87 | Christos Stavrakakis | @api.api_method(http_method='POST', token_required=True, user_required=False, |
83 | ee7a2b87 | Christos Stavrakakis | logger=logger) |
84 | ee7a2b87 | Christos Stavrakakis | @service_from_token # Authenticate service !! |
85 | 890c2065 | Sofia Papagiannaki | def get_uuid_displayname_catalogs(request): |
86 | 6b03a847 | Sofia Papagiannaki | # Normal Response Codes: 200
|
87 | 6b03a847 | Sofia Papagiannaki | # Error Response Codes: internalServerError (500)
|
88 | 6b03a847 | Sofia Papagiannaki | # badRequest (400)
|
89 | 6b03a847 | Sofia Papagiannaki | # unauthorised (401)
|
90 | 19246578 | Sofia Papagiannaki | return __get_uuid_displayname_catalogs(request, user_call=False) |
91 | 5ce3ce4f | Sofia Papagiannaki | |
92 | bd40abfa | Christos Stavrakakis | |
93 | 6b03a847 | Sofia Papagiannaki | @csrf_exempt
|
94 | ee7a2b87 | Christos Stavrakakis | @api.api_method(http_method='POST', token_required=True, user_required=False, |
95 | ee7a2b87 | Christos Stavrakakis | logger=logger) |
96 | ee7a2b87 | Christos Stavrakakis | @service_from_token # Authenticate service !! |
97 | 6b03a847 | Sofia Papagiannaki | def send_feedback(request, email_template_name='im/feedback_mail.txt'): |
98 | 6b03a847 | Sofia Papagiannaki | # Normal Response Codes: 200
|
99 | 6b03a847 | Sofia Papagiannaki | # Error Response Codes: internalServerError (500)
|
100 | 6b03a847 | Sofia Papagiannaki | # badRequest (400)
|
101 | 6b03a847 | Sofia Papagiannaki | # unauthorised (401)
|
102 | 890c2065 | Sofia Papagiannaki | return __send_feedback(request, email_template_name) |