Skip to content

Commit 5e2ad8c

Browse files
committed
feat(dev): no cache, security;
- Use cache_bust webasset filter. - Added console logging. - Syntax fixes. - Added extra security to JWT handshakes.
1 parent 7846404 commit 5e2ad8c

File tree

5 files changed

+41
-13
lines changed

5 files changed

+41
-13
lines changed

ckanext/language_domains/assets/scripts/language_login_sender.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,9 @@ window.addEventListener('load', function(){
5454
return;
5555
}
5656

57-
console.log(_event.data);
58-
5957
if( typeof _event.data.login_successful != 'undefined' ){
6058
loginWindow.close();
59+
console.log('Logged into ' + _event.origin + ' - ' + _event.data.login_successful);
6160
if( _index >= _max ){
6261
setTimeout(function(){
6362
window.location.assign(login_redirect);

ckanext/language_domains/assets/scripts/language_logout_sender.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ window.addEventListener('load', function(){
5656

5757
if( typeof _event.data.logout_successful != 'undefined' ){
5858
logoutWindow.close();
59+
console.log('Logged out of ' + _event.origin + ' - ' + _event.data.logout_successful);
5960
if( _index >= _max ){
6061
let tokenFieldName = $('meta[name="csrf_field_name"]').attr('content');
6162
let tokenValue = $('meta[name="' + tokenFieldName + '"]').attr('content');

ckanext/language_domains/assets/webassets.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ css:
22
contents:
33
- styles/language_domains.css
44
output: language_domains/%(version)s_language_domains.css
5+
filters: cache_bust
56

67
js_login_sender:
78
contents:
@@ -10,6 +11,7 @@ js_login_sender:
1011
preload:
1112
- base/main # need ckan JS and jQuery
1213
output: language_domains/%(version)s_language_login_sender.js
14+
filters: cache_bust
1315

1416
js_login_receiver:
1517
contents:
@@ -18,6 +20,7 @@ js_login_receiver:
1820
preload:
1921
- base/main # need ckan JS and jQuery
2022
output: language_domains/%(version)s_language_login_receiver.js
23+
filters: cache_bust
2124

2225
js_logout_sender:
2326
contents:
@@ -26,11 +29,13 @@ js_logout_sender:
2629
preload:
2730
- base/main # need ckan JS and jQuery
2831
output: language_domains/%(version)s_language_logout_sender.js
32+
filters: cache_bust
2933

3034
js_logout_receiver:
3135
contents:
3236
- scripts/language_logout_receiver.js
3337
extra:
3438
preload:
3539
- base/main # need ckan JS and jQuery
36-
output: language_domains/%(version)s_language_logout_receiver.js
40+
output: language_domains/%(version)s_language_logout_receiver.js
41+
filters: cache_bust

ckanext/language_domains/blueprint.py

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ def login_master():
8585
if jwt_secret:
8686
token_data = {
8787
'user_id': g.userobj.id,
88+
'user_agent': request.environ['HTTP_USER_AGENT'],
89+
'user_addr': request.remote_addr,
8890
'exp': datetime.datetime.now(datetime.timezone.utc) +
8991
datetime.timedelta(minutes=10),
9092
"iat": datetime.datetime.now(datetime.timezone.utc)
@@ -177,9 +179,14 @@ def login():
177179

178180
userobj = User.get(token_data.get('user_id'))
179181

180-
if not userobj or userobj.name != post_data['session_user']:
181-
return _finish(404,
182-
{'error': _('User not found'),
182+
if (
183+
not userobj or
184+
userobj.name != post_data['session_user'] or
185+
token_data.get('user_agent') != request.environ['HTTP_USER_AGENT'] or
186+
token_data.get('user_addr') != request.remote_addr
187+
):
188+
return _finish(400,
189+
{'error': _('Unable to verify login session'),
183190
'success': False},
184191
content_type='json')
185192

@@ -232,6 +239,8 @@ def logout_master():
232239
if jwt_secret:
233240
token_data = {
234241
'user_id': g.userobj.id,
242+
'user_agent': request.environ['HTTP_USER_AGENT'],
243+
'user_addr': request.remote_addr,
235244
'exp': datetime.datetime.now(datetime.timezone.utc) +
236245
datetime.timedelta(minutes=10),
237246
"iat": datetime.datetime.now(datetime.timezone.utc)
@@ -279,9 +288,16 @@ def logout_master():
279288

280289
userobj = User.get(token_data.get('user_id'))
281290

282-
if not userobj or userobj.name != post_data['session_user']:
283-
return _finish(404, {'error': _('User not found'),
284-
'success': False}, content_type='json')
291+
if (
292+
not userobj or
293+
userobj.name != post_data['session_user'] or
294+
token_data.get('user_agent') != request.environ['HTTP_USER_AGENT'] or
295+
token_data.get('user_addr') != request.remote_addr
296+
):
297+
return _finish(400,
298+
{'error': _('Unable to verify login session'),
299+
'success': False},
300+
content_type='json')
285301

286302
g.user = None
287303
g.userobj = None
@@ -360,9 +376,16 @@ def logout():
360376

361377
userobj = User.get(token_data.get('user_id'))
362378

363-
if not userobj or userobj.name != post_data['session_user']:
364-
return _finish(404, {'error': _('User not found'),
365-
'success': False}, content_type='json')
379+
if (
380+
not userobj or
381+
userobj.name != post_data['session_user'] or
382+
token_data.get('user_agent') != request.environ['HTTP_USER_AGENT'] or
383+
token_data.get('user_addr') != request.remote_addr
384+
):
385+
return _finish(400,
386+
{'error': _('Unable to verify login session'),
387+
'success': False},
388+
content_type='json')
366389

367390
g.user = None
368391
g.userobj = None

ckanext/language_domains/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,4 @@ def local_url(url_to_amend: str, **kw: Any):
182182
error = 'There is a broken url being created %s' % kw
183183
raise CkanUrlException(error)
184184

185-
return url
185+
return url

0 commit comments

Comments
 (0)