77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
# Included modules
|
|
import json
|
|
import logging
|
|
import time
|
|
|
|
# ZeroNet Modules
|
|
from .User import User
|
|
from Plugin import PluginManager
|
|
from Config import config
|
|
|
|
|
|
@PluginManager.acceptPlugins
|
|
class UserManager(object):
|
|
def __init__(self):
|
|
self.users = {}
|
|
self.log = logging.getLogger("UserManager")
|
|
|
|
# Load all user from data/users.json
|
|
def load(self):
|
|
if not self.users:
|
|
self.users = {}
|
|
|
|
user_found = []
|
|
added = 0
|
|
s = time.time()
|
|
# Load new users
|
|
try:
|
|
json_path = "%s/users.json" % config.data_dir
|
|
data = json.load(open(json_path))
|
|
except Exception as err:
|
|
raise Exception("Unable to load %s: %s" % (json_path, err))
|
|
|
|
for master_address, data in list(data.items()):
|
|
if master_address not in self.users:
|
|
user = User(master_address, data=data)
|
|
self.users[master_address] = user
|
|
added += 1
|
|
user_found.append(master_address)
|
|
|
|
# Remove deleted adresses
|
|
for master_address in list(self.users.keys()):
|
|
if master_address not in user_found:
|
|
del(self.users[master_address])
|
|
self.log.debug("Removed user: %s" % master_address)
|
|
|
|
if added:
|
|
self.log.debug("Added %s users in %.3fs" % (added, time.time() - s))
|
|
|
|
# Create new user
|
|
# Return: User
|
|
def create(self, master_address=None, master_seed=None):
|
|
self.list() # Load the users if it's not loaded yet
|
|
user = User(master_address, master_seed)
|
|
self.log.debug("Created user: %s" % user.master_address)
|
|
if user.master_address: # If successfully created
|
|
self.users[user.master_address] = user
|
|
user.saveDelayed()
|
|
return user
|
|
|
|
# List all users from data/users.json
|
|
# Return: {"usermasteraddr": User}
|
|
def list(self):
|
|
if self.users == {}: # Not loaded yet
|
|
self.load()
|
|
return self.users
|
|
|
|
# Get user based on master_address
|
|
# Return: User or None
|
|
def get(self, master_address=None):
|
|
users = self.list()
|
|
if users:
|
|
return list(users.values())[0] # Single user mode, always return the first
|
|
else:
|
|
return None
|
|
|
|
|
|
user_manager = UserManager() # Singleton
|