diff options
| author | hc <hc@email.ch> | 2024-11-20 12:51:33 +0800 |
|---|---|---|
| committer | hc <hc@email.ch> | 2024-11-20 12:51:33 +0800 |
| commit | 853b82126baa1e8e408a10f91053c52626ffad29 (patch) | |
| tree | 2fc1de9695810681ba654aab3c2a4867aacc1ac7 /tfa.py | |
| parent | b1f88b682624e85b4b743343dfaaeed113b69413 (diff) | |
working
Diffstat (limited to 'tfa.py')
| -rw-r--r-- | tfa.py | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -0,0 +1,71 @@ +import time +from typing import Dict, List +import random +import string + +class customstore: + def __init__(self, ttl=300, maxsize=200): + self.store: Dict[str, List] = {} # key -> [expiry_time, verified_status] + self.ttl = ttl + #self.maxsize = maxsize, now dont need this + + def create(self): + self.clean() + keylength = 4 + key_added = False + while not key_added: + current_time = int(time.time()) + key = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(keylength)) + if key not in self.store: + self.store[key] = [current_time + self.ttl, False] + key_added = True + return key + + def authenticate(self, key): + current_time = int(time.time()) + if key in self.store and current_time <= self.store[key][0]: + self.store[key][1] = True + return True + else: + return False + + def check(self, key): + current_time = int(time.time()) + if key in self.store and current_time <= self.store[key][0] and self.store[key][1] == True: + return True + else: + return False + + def clean(self): + current_time = int(time.time()) + expired_keys = [k for k, [expiry_time, _] in self.store.items() if current_time > expiry_time] + for key in expired_keys: + self.store.pop(key, None) + return + +if __name__ == "__main__": + s1 = customstore(ttl=7) + + # Create and verify first key + k = s1.create() + print("Store state:", s1.store) + print("Created key:", k) + print("First verification:", "yeppy" if s1.authenticate(k) else "nopey") + print("Second verification:", "yeppy" if s1.check(k) else "nopey") + # Wait and try again + time.sleep(5) + k2 = s1.create() + print("\nStore state after 5 seconds:", s1.store) + print("First key:", k) + print("First key verification:", "yeppy" if s1.check(k) else "nopey") + + # Wait and try again + time.sleep(5) + print("\nStore state after 5 seconds:", s1.store) + print("First key:", k) + print("First key verification:", "yeppy" if s1.check(k) else "nopey") + k = s1.create() + print("Store state:", s1.store) + print("Created key:", k) + print("First verification:", "yeppy" if s1.authenticate(k) else "nopey") + print("Second verification:", "yeppy" if s1.check(k) else "nopey") |
