ZeroNet/src/User/UserManager.py

72 lines
2.1 KiB
Python
Raw Normal View History

2015-06-17 23:37:53 +02:00
# Included modules
import json
import logging
2018-04-12 19:22:06 +02:00
import time
2015-06-17 23:37:53 +02:00
# ZeroNet Modules
2019-03-15 21:06:59 +01:00
from .User import User
from Plugin import PluginManager
from Config import config
@PluginManager.acceptPlugins
class UserManager(object):
2015-06-17 23:37:53 +02:00
def __init__(self):
self.users = {}
2018-04-12 19:22:06 +02:00
self.log = logging.getLogger("UserManager")
2015-06-17 23:37:53 +02:00
# Load all user from data/users.json
def load(self):
if not self.users:
self.users = {}
user_found = []
added = 0
2018-04-12 19:22:06 +02:00
s = time.time()
2015-06-17 23:37:53 +02:00
# Load new users
2019-03-15 21:06:59 +01:00
for master_address, data in list(json.load(open("%s/users.json" % config.data_dir)).items()):
2015-06-17 23:37:53 +02:00
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
2019-03-15 21:06:59 +01:00
for master_address in list(self.users.keys()):
2015-06-17 23:37:53 +02:00
if master_address not in user_found:
del(self.users[master_address])
2018-04-12 19:22:06 +02:00
self.log.debug("Removed user: %s" % master_address)
2015-06-17 23:37:53 +02:00
if added:
2018-04-12 19:22:06 +02:00
self.log.debug("Added %s users in %.3fs" % (added, time.time() - s))
2015-06-17 23:37:53 +02:00
# 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
2015-06-17 23:37:53 +02:00
user = User(master_address, master_seed)
2018-04-12 19:22:06 +02:00
self.log.debug("Created user: %s" % user.master_address)
if user.master_address: # If successfully created
2015-06-17 23:37:53 +02:00
self.users[user.master_address] = user
2018-04-12 19:25:13 +02:00
user.saveDelayed()
2015-06-17 23:37:53 +02:00
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:
2019-03-15 21:06:59 +01:00
return list(users.values())[0] # Single user mode, always return the first
2015-06-17 23:37:53 +02:00
else:
return None
user_manager = UserManager() # Singleton