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
|
version 0.2.7, plugin system, multiuser plugin for zeroproxies, reworked imports, cookie parse, stats moved to plugin, usermanager class, dont generate site auth on listing, multiline notifications, allow server side prompt from user, update script keep plugins disabled status
2015-03-24 01:33:09 +01:00
|
|
|
from Plugin import PluginManager
|
2015-05-31 15:52:21 +02:00
|
|
|
from Config import config
|
version 0.2.0, new lib for bitcoin ecc, dont display or track notify errors, dont reload again within 1 sec, null peer ip fix, signingmoved to ContentManager, content.json include support, content.json multisig ready, content.json proper bitcoincore compatible signing, content.json include permissions, multithreaded publish, publish timeout 60s, no exception on invalid bitcoin address, testcase for new lib, bip32 based persite privatekey generation, multiuser ready, simple json database query command, websocket api fileGet, wrapper loading title stuck bugfix
2015-02-09 02:09:02 +01:00
|
|
|
|
|
|
|
|
version 0.2.7, plugin system, multiuser plugin for zeroproxies, reworked imports, cookie parse, stats moved to plugin, usermanager class, dont generate site auth on listing, multiline notifications, allow server side prompt from user, update script keep plugins disabled status
2015-03-24 01:33:09 +01:00
|
|
|
@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):
|
2018-09-21 02:18:29 +02:00
|
|
|
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)
|
2015-07-12 20:36:46 +02:00
|
|
|
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
|