Projet

Général

Profil

0002-Set-a-request-id-on-all-requests-6922.patch

Benjamin Dauvergne, 09 avril 2015 15:58

Télécharger (3,26 ko)

Voir les différences:

Subject: [PATCH 2/3] Set a request id on all requests (#6922)

The request id is extracted from an header set using the
REQUEST_ID_HEADER setting or generated using the default Python random
number generator.
 src/authentic2/middleware.py | 14 ++++++++++++++
 src/authentic2/settings.py   |  1 +
 2 files changed, 15 insertions(+)
src/authentic2/middleware.py
1 1
import logging
2 2
import datetime
3
import random
4
import struct
3 5
try:
4 6
    import threading
5 7
except ImportError:
6 8
    threading = None
7 9

  
8 10
from django.conf import settings
9 11
from django.contrib import messages
10 12
from django.utils.translation import ugettext as _
......
103 105
                    max_age=None,
104 106
                    domain=app_settings.A2_OPENED_SESSION_COOKIE_DOMAIN)
105 107
        elif app_settings.A2_OPENED_SESSION_COOKIE_NAME in request.COOKIES:
106 108
            response.delete_cookie(
107 109
                    app_settings.A2_OPENED_SESSION_COOKIE_NAME,
108 110
                    domain=app_settings.A2_OPENED_SESSION_COOKIE_DOMAIN)
109 111
        return response
110 112

  
113
class RequestIdMiddleware(object):
114
    def process_request(self, request):
115
        if not hasattr(request, 'request_id'):
116
            request_id_header = getattr(settings, 'REQUEST_ID_HEADER', None)
117
            if request_id_header and request.META.get(request_id_header):
118
                request.request_id = request.META[request_id_header]
119
            else:
120
                # Use Mersennes Twister rng, no need for a cryptographic grade
121
                # rng in this case
122
                random_id = random.getrandbits(32)
123
                request.request_id = struct.pack('I', random_id).encode('hex')
124

  
111 125
class StoreRequestMiddleware(object):
112 126
    collection = {}
113 127

  
114 128
    def process_request(self, request):
115 129
        StoreRequestMiddleware.collection[threading.currentThread()] = request
116 130

  
117 131
    def process_response(self, request, response):
118 132
        StoreRequestMiddleware.collection.pop(threading.currentThread(), None)
src/authentic2/settings.py
49 49
    'django.core.context_processors.request',
50 50
    'django.contrib.messages.context_processors.messages',
51 51
    'django.core.context_processors.static',
52 52
    'authentic2.context_processors.a2_processor',
53 53
    'sekizai.context_processors.sekizai',
54 54
)
55 55

  
56 56
MIDDLEWARE_CLASSES = (
57
    'authentic2.middleware.RequestIdMiddleware',
57 58
    'authentic2.middleware.LoggingCollectorMiddleware',
58 59
    'django.middleware.common.CommonMiddleware',
59 60
    'django.middleware.http.ConditionalGetMiddleware',
60 61
    'django.contrib.sessions.middleware.SessionMiddleware',
61 62
    'django.middleware.csrf.CsrfViewMiddleware',
62 63
    'django.middleware.locale.LocaleMiddleware',
63 64
    'django.contrib.auth.middleware.AuthenticationMiddleware',
64 65
    'django.contrib.messages.middleware.MessageMiddleware',
65
-