Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
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