Skip to content

Commit a239977

Browse files
authored
SSL Certificate Validation (#1)
* Add `VOUCH_PROXY_VERIFY_SSL` setting to disable SSL cert checking * Add HISTORY.md file for release change documentation * Bump version to 0.1.2
1 parent 21f64df commit a239977

File tree

5 files changed

+51
-6
lines changed

5 files changed

+51
-6
lines changed

HISTORY.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
History
2+
-------
3+
4+
0.1.2 (2021-01-05)
5+
==================
6+
7+
* Add `VOUCH_PROXY_VERIFY_SSL` setting to disable SSL certificate
8+
verification of the Vouch Proxy server.
9+
10+
0.1.1 (2021-01-04)
11+
==================
12+
13+
* Initial Release

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ VOUCH_PROXY_VALIDATE_ENDPOINT = 'https://login.avacado.lol/validate'
4343
### `VOUCH_PROXY_VALIDATE_ENDPOINT`
4444
Location of the Vouch Proxy validation endpoint. You MUST provide this value, or the Middleware will raise an `ImproperlyConfigured` exception.
4545

46+
### `VOUCH_PROXY_VERIFY_SSL`
47+
Default: `True`
48+
49+
Set this to False to ignore verification of the Vouch Proxy SSL certificate.
50+
4651
### `VOUCH_PROXY_COOKIE_NAME`
4752
Default: `VouchCookie`
4853

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.1.1"
1+
__version__ = "0.1.2"

django_vouch_proxy_auth/middleware.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def __init__(self, *args, **kwargs):
1818
self.expiry_time = getattr(settings, 'VOUCH_PROXY_CACHE_TIMEOUT', 300)
1919
self.cache = caches[getattr(settings, 'VOUCH_PROXY_CACHE_BACKEND', 'default')]
2020
self.force_logout_if_no_cookie = getattr(settings, 'VOUCH_PROXY_FORCE_LOGOUT_IF_NO_COOKIE', False)
21+
self.verify_ssl_certificate = getattr(settings, 'VOUCH_PROXY_VERIFY_SSL', True)
2122

2223
super(VouchProxyMiddleware).__init__(*args, **kwargs)
2324

@@ -42,7 +43,9 @@ def process_request(self, request):
4243
cache_key = '{}{}'.format(self.cache_prefix, hashlib.sha256(cookie.encode('ascii')).hexdigest())
4344
username = self.cache.get(cache_key)
4445
if not username:
45-
validate = requests.get(settings.VOUCH_PROXY_VALIDATE_ENDPOINT, cookies={self.cookie_name: cookie})
46+
validate = requests.get(settings.VOUCH_PROXY_VALIDATE_ENDPOINT,
47+
cookies={self.cookie_name: cookie},
48+
verify=self.verify_ssl_certificate)
4649
validate.raise_for_status()
4750

4851
# Vouch cookie is URL-safe Base64 encoded Gzipped data

tests/tests.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@ def test_disabled_paths(self):
112112

113113
self.assertIsNone(m.process_request(request=m_request))
114114

115+
def test_ssl_verification_setting(self):
116+
self.assertTrue(self.middleware.verify_ssl_certificate)
117+
118+
with self.settings(VOUCH_PROXY_VERIFY_SSL=False):
119+
m = VouchProxyMiddleware()
120+
self.assertFalse(m.verify_ssl_certificate)
121+
122+
@patch('django_vouch_proxy_auth.middleware.requests')
123+
def test_ssl_verification_disabled(self, requests_mock):
124+
req = self._build_vouch_cookie_request(self.user.username)
125+
126+
requests_mock.get.status_code.return_value = 200
127+
128+
self.middleware.verify_ssl_certificate = False
129+
130+
self.middleware.process_request(request=req)
131+
requests_mock.get.assert_called_once_with('http://vouch/validate',
132+
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]},
133+
verify=False)
134+
115135
@patch('django_vouch_proxy_auth.middleware.requests')
116136
def test_caching(self, requests_mock):
117137
req = self._build_vouch_cookie_request(self.user.username)
@@ -122,7 +142,8 @@ def test_caching(self, requests_mock):
122142
self.middleware.process_request(request=req)
123143

124144
requests_mock.get.assert_called_once_with('http://vouch/validate',
125-
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]})
145+
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]},
146+
verify=True)
126147

127148
@patch('django_vouch_proxy_auth.middleware.requests')
128149
def test_caching_disabled(self, requests_mock):
@@ -134,12 +155,14 @@ def test_caching_disabled(self, requests_mock):
134155

135156
self.middleware.process_request(request=req)
136157
requests_mock.get.assert_called_once_with('http://vouch/validate',
137-
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]})
158+
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]},
159+
verify=True)
138160
requests_mock.get.reset_mock()
139161

140162
self.middleware.process_request(request=req)
141163
requests_mock.get.assert_called_once_with('http://vouch/validate',
142-
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]})
164+
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]},
165+
verify=True)
143166

144167
@patch('django_vouch_proxy_auth.middleware.requests')
145168
def test_successful_auth(self, requests_mock):
@@ -149,7 +172,8 @@ def test_successful_auth(self, requests_mock):
149172

150173
self.middleware.process_request(request=req)
151174
requests_mock.get.assert_called_once_with('http://vouch/validate',
152-
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]})
175+
cookies={'VouchCookie': req.COOKIES[self.middleware.cookie_name]},
176+
verify=True)
153177

154178
cache_key = '{}{}'.format(self.middleware.cache_prefix,
155179
hashlib.sha256(req.COOKIES[self.middleware.cookie_name].encode('ascii')).hexdigest())

0 commit comments

Comments
 (0)