summaryrefslogtreecommitdiff
path: root/tfa.py
diff options
context:
space:
mode:
authorhc <hc@email.ch>2024-11-20 12:51:33 +0800
committerhc <hc@email.ch>2024-11-20 12:51:33 +0800
commit853b82126baa1e8e408a10f91053c52626ffad29 (patch)
tree2fc1de9695810681ba654aab3c2a4867aacc1ac7 /tfa.py
parentb1f88b682624e85b4b743343dfaaeed113b69413 (diff)
working
Diffstat (limited to 'tfa.py')
-rw-r--r--tfa.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/tfa.py b/tfa.py
new file mode 100644
index 0000000..2cd37f4
--- /dev/null
+++ b/tfa.py
@@ -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")