Skip to content

Commit 6024d91

Browse files
author
Matthew Fisher
committed
feat(client): check server version
If the client sends a X-Deis-Version header to the server, a django middleware class will validate and ensure that the versions are the same. If they are not, the request is rejected, and a HttpResponse object is returned with the client and server versions displayed.
1 parent 4765848 commit 6024d91

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

api/middleware.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import json
2+
3+
from django.http import HttpResponse
4+
5+
from deis import __version__
6+
7+
8+
class VersionMiddleware:
9+
10+
def process_request(self, request):
11+
# server and client version must match "x.y"
12+
server_version = __version__.rsplit('.', 1)[0]
13+
try:
14+
if request.META['HTTP_X_DEIS_VERSION'] != server_version:
15+
message = {
16+
'error': 'Client and server versions do not match.\n' +
17+
'Client version: {}\n'.format(server_version) +
18+
'Server version: {}'.format(request.META['HTTP_X_DEIS_VERSION'])
19+
}
20+
return HttpResponse(
21+
json.dumps(message),
22+
content_type='application/json'
23+
)
24+
except KeyError:
25+
pass

deis/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
'django.middleware.csrf.CsrfViewMiddleware',
109109
'django.contrib.auth.middleware.AuthenticationMiddleware',
110110
'django.contrib.messages.middleware.MessageMiddleware',
111+
'api.middleware.VersionMiddleware',
111112
# Uncomment the next line for simple clickjacking protection:
112113
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
113114
)

0 commit comments

Comments
 (0)