Skip to content

Commit

Permalink
Attempt to ensure lock status gets updated, for #77
Browse files Browse the repository at this point in the history
  • Loading branch information
anjackson committed Jun 14, 2023
1 parent 4aa8406 commit e6d9ed9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from setuptools.command.test import test as TestCommand
import glob

__version__ = '1.1'
__version__ = '2.6.9'


class PyTest(TestCommand):
Expand Down
31 changes: 25 additions & 6 deletions ukwa_pywb/ukwa_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,17 +284,17 @@ def _init_routes(self):
def lock_ping_reset(self, environ):
referrer = environ.get('HTTP_REFERER')
if not referrer:
return WbResponse.json_response({'status': 'missing-referrer'})
return WbResponse.json_response({'error': 'missing-referrer'}, status='400 Bad Request')

full_prefix = self.rewriterapp.get_full_prefix(environ)

if not referrer.startswith(full_prefix):
return WbResponse.json_response({'status': 'no-prefix-match', 'full-prefix': full_prefix })
return WbResponse.json_response({'error': 'no-prefix-match', 'full-prefix': full_prefix }, status='400 Bad Request')

referrer = referrer[len(full_prefix):]
m = self.REFER_WB_URL_RX.match(referrer)
if not m:
return WbResponse.json_response({'status': 'no-referrer-match', 'full-prefix': full_prefix, 'referrer': referrer})
return WbResponse.json_response({'error': 'no-referrer-match', 'full-prefix': full_prefix, 'referrer': referrer}, status="400 Bad Request")

wb_url = WbUrl(m.group(3))

Expand All @@ -310,7 +310,7 @@ def lock_ping_reset(self, environ):
else:
status = 'lock-not-extended'

return WbResponse.json_response({'status': status})
return WbResponse.json_response({'msg': status, 'session': session, 'lock_key': lock_key})

@authorize
def lock_clear_url(self, environ, url):
Expand Down Expand Up @@ -370,13 +370,32 @@ def lock_listing(self, environ):
lock_view = BaseInsertView(self.rewriterapp.jinja_env, 'locks.html')

session = environ[SESSION_KEY]
redis: StrictRedis = session.redis

# List all locks:
locks = set()
for lock_key in redis.scan_iter('lock:*'):
locks.add(lock_key)

# List all sessions:
sessions = {}

for sesh_key in session.redis.scan_iter(SESH_LIST.format('*')):
for sesh_key in redis.scan_iter(SESH_LIST.format('*')):
sesh = sesh_key.split(':')[1]

sessions[sesh] = [key[5:] for key in session.redis.smembers(sesh_key)]
sessions[sesh] = []
dropped_locks = []
for lock_key in redis.smembers(sesh_key):
if lock_key in locks:
sessions[sesh].append(lock_key[5:])
else:
sessions[sesh].append(lock_key[5:] + ' (expired)')
dropped_locks.append(lock_key)

# Remove session references to locks if the locks have expired:
if len(dropped_locks) > 0:
# Use the 'splat' operator to pass the list as a series of values:
redis.srem(sesh_key, *dropped_locks)

content = lock_view.render_to_string(environ,
current=session.sid,
Expand Down

0 comments on commit e6d9ed9

Please sign in to comment.