mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-29 17:28:53 +00:00
introduce and use LeaseInfo.is_cancel_secret
This commit is contained in:
parent
8b976b441e
commit
b5f882ffa6
@ -209,7 +209,7 @@ class ShareFile(object):
|
|||||||
leases = list(self.get_leases())
|
leases = list(self.get_leases())
|
||||||
num_leases_removed = 0
|
num_leases_removed = 0
|
||||||
for i,lease in enumerate(leases):
|
for i,lease in enumerate(leases):
|
||||||
if timing_safe_compare(lease.cancel_secret, cancel_secret):
|
if lease.is_cancel_secret(cancel_secret):
|
||||||
leases[i] = None
|
leases[i] = None
|
||||||
num_leases_removed += 1
|
num_leases_removed += 1
|
||||||
if not num_leases_removed:
|
if not num_leases_removed:
|
||||||
|
@ -80,6 +80,16 @@ class LeaseInfo(object):
|
|||||||
"""
|
"""
|
||||||
return timing_safe_compare(self.renew_secret, candidate_secret)
|
return timing_safe_compare(self.renew_secret, candidate_secret)
|
||||||
|
|
||||||
|
def is_cancel_secret(self, candidate_secret):
|
||||||
|
# type: (bytes) -> bool
|
||||||
|
"""
|
||||||
|
Check a string to see if it is the correct cancel secret.
|
||||||
|
|
||||||
|
:return: ``True`` if it is the correct cancel secret, ``False``
|
||||||
|
otherwise.
|
||||||
|
"""
|
||||||
|
return timing_safe_compare(self.cancel_secret, candidate_secret)
|
||||||
|
|
||||||
def get_grant_renew_time_time(self):
|
def get_grant_renew_time_time(self):
|
||||||
# hack, based upon fixed 31day expiration period
|
# hack, based upon fixed 31day expiration period
|
||||||
return self._expiration_time - 31*24*60*60
|
return self._expiration_time - 31*24*60*60
|
||||||
|
@ -371,7 +371,7 @@ class MutableShareFile(object):
|
|||||||
with open(self.home, 'rb+') as f:
|
with open(self.home, 'rb+') as f:
|
||||||
for (leasenum,lease) in self._enumerate_leases(f):
|
for (leasenum,lease) in self._enumerate_leases(f):
|
||||||
accepting_nodeids.add(lease.nodeid)
|
accepting_nodeids.add(lease.nodeid)
|
||||||
if timing_safe_compare(lease.cancel_secret, cancel_secret):
|
if lease.is_cancel_secret(cancel_secret):
|
||||||
self._write_lease_record(f, leasenum, blank_lease)
|
self._write_lease_record(f, leasenum, blank_lease)
|
||||||
modified += 1
|
modified += 1
|
||||||
else:
|
else:
|
||||||
|
@ -3047,3 +3047,22 @@ class ShareFileTests(unittest.TestCase):
|
|||||||
sf.add_lease(lease)
|
sf.add_lease(lease)
|
||||||
(loaded_lease,) = sf.get_leases()
|
(loaded_lease,) = sf.get_leases()
|
||||||
self.assertTrue(loaded_lease.is_renew_secret(renew_secret))
|
self.assertTrue(loaded_lease.is_renew_secret(renew_secret))
|
||||||
|
|
||||||
|
def test_cancel_secret(self):
|
||||||
|
"""
|
||||||
|
A lease loaded from a share file can have its cancel secret verified.
|
||||||
|
"""
|
||||||
|
renew_secret = b"r" * 32
|
||||||
|
cancel_secret = b"c" * 32
|
||||||
|
expiration_time = 2 ** 31
|
||||||
|
|
||||||
|
sf = self.get_sharefile()
|
||||||
|
lease = LeaseInfo(
|
||||||
|
owner_num=0,
|
||||||
|
renew_secret=renew_secret,
|
||||||
|
cancel_secret=cancel_secret,
|
||||||
|
expiration_time=expiration_time,
|
||||||
|
)
|
||||||
|
sf.add_lease(lease)
|
||||||
|
(loaded_lease,) = sf.get_leases()
|
||||||
|
self.assertTrue(loaded_lease.is_cancel_secret(cancel_secret))
|
||||||
|
Loading…
Reference in New Issue
Block a user