Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
at main 77 lines 2.3 kB view raw
1# Included modules 2import json 3import logging 4import time 5 6# ZeroNet Modules 7from .User import User 8from Plugin import PluginManager 9from Config import config 10 11 12@PluginManager.acceptPlugins 13class UserManager(object): 14 def __init__(self): 15 self.users = {} 16 self.log = logging.getLogger("UserManager") 17 18 # Load all user from data/users.json 19 def load(self): 20 if not self.users: 21 self.users = {} 22 23 user_found = [] 24 added = 0 25 s = time.time() 26 # Load new users 27 try: 28 json_path = "%s/users.json" % config.data_dir 29 data = json.load(open(json_path)) 30 except Exception as err: 31 raise Exception("Unable to load %s: %s" % (json_path, err)) 32 33 for master_address, data in list(data.items()): 34 if master_address not in self.users: 35 user = User(master_address, data=data) 36 self.users[master_address] = user 37 added += 1 38 user_found.append(master_address) 39 40 # Remove deleted adresses 41 for master_address in list(self.users.keys()): 42 if master_address not in user_found: 43 del(self.users[master_address]) 44 self.log.debug("Removed user: %s" % master_address) 45 46 if added: 47 self.log.debug("Added %s users in %.3fs" % (added, time.time() - s)) 48 49 # Create new user 50 # Return: User 51 def create(self, master_address=None, master_seed=None): 52 self.list() # Load the users if it's not loaded yet 53 user = User(master_address, master_seed) 54 self.log.debug("Created user: %s" % user.master_address) 55 if user.master_address: # If successfully created 56 self.users[user.master_address] = user 57 user.saveDelayed() 58 return user 59 60 # List all users from data/users.json 61 # Return: {"usermasteraddr": User} 62 def list(self): 63 if self.users == {}: # Not loaded yet 64 self.load() 65 return self.users 66 67 # Get user based on master_address 68 # Return: User or None 69 def get(self, master_address=None): 70 users = self.list() 71 if users: 72 return list(users.values())[0] # Single user mode, always return the first 73 else: 74 return None 75 76 77user_manager = UserManager() # Singleton