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

This commit is contained in:
HelloZeroNet 2015-03-24 01:33:09 +01:00
parent 3b8d49207e
commit 78f97dcbe8
26 changed files with 789 additions and 308 deletions

View file

@ -1,9 +1,14 @@
import logging, json, time
from Crypt import CryptBitcoin
from Plugin import PluginManager
class User:
def __init__(self, master_address=None):
if master_address:
@PluginManager.acceptPlugins
class User(object):
def __init__(self, master_address=None, master_seed=None):
if master_seed:
self.master_seed = master_seed
self.master_address = CryptBitcoin.privatekeyToAddress(self.master_seed)
elif master_address:
self.master_address = master_address
self.master_seed = None
else:
@ -27,8 +32,9 @@ class User:
# Get user site data
# Return: {"auth_address": "xxx", "auth_privatekey": "xxx"}
def getSiteData(self, address):
def getSiteData(self, address, create=True):
if not address in self.sites: # Genreate new BIP32 child key based on site address
if not create: return {"auth_address": None, "auth_privatekey": None} # Dont create user yet
s = time.time()
address_id = int(address.encode("hex"), 16) # Convert site address to int
auth_privatekey = CryptBitcoin.hdPrivatekey(self.master_seed, address_id)
@ -43,17 +49,15 @@ class User:
# Get BIP32 address from site address
# Return: BIP32 auth address
def getAuthAddress(self, address):
return self.getSiteData(address)["auth_address"]
def getAuthAddress(self, address, create=True):
return self.getSiteData(address, create)["auth_address"]
def getAuthPrivatekey(self, address):
return self.getSiteData(address)["auth_privatekey"]
def getAuthPrivatekey(self, address, create=True):
return self.getSiteData(address, create)["auth_privatekey"]
# Set user attributes from dict
def setData(self, data):
for key, val in data.items():
setattr(self, key, val)

View file

@ -1,66 +1,79 @@
import json, logging, os
from User import User
users = None
# Load all user from data/users.json
def load():
global users
if not users: users = {}
user_found = []
added = 0
# Load new users
for master_address, data in json.load(open("data/users.json")).items():
if master_address not in users:
user = User(master_address)
user.setData(data)
users[master_address] = user
added += 1
user_found.append(master_address)
# Remove deleted adresses
for master_address in users.keys():
if master_address not in user_found:
del(users[master_address])
logging.debug("Removed user: %s" % master_address)
if added: logging.debug("UserManager added %s users" % added)
from Plugin import PluginManager
# Create new user
# Return: User
def create():
user = User()
logging.debug("Created user: %s" % user.master_address)
users[user.master_address] = user
user.save()
return user
@PluginManager.acceptPlugins
class UserManager(object):
def __init__(self):
self.users = {}
# List all users from data/users.json
# Return: {"usermasteraddr": User}
def list():
if users == None: # Not loaded yet
load()
return users
# Load all user from data/users.json
def load(self):
if not self.users: self.users = {}
user_found = []
added = 0
# Load new users
for master_address, data in json.load(open("data/users.json")).items():
if master_address not in self.users:
user = User(master_address)
user.setData(data)
self.users[master_address] = user
added += 1
user_found.append(master_address)
# Remove deleted adresses
for master_address in self.users.keys():
if master_address not in user_found:
del(self.users[master_address])
logging.debug("Removed user: %s" % master_address)
if added: logging.debug("UserManager added %s users" % added)
# Get current authed user
# Return: User
def getCurrent():
users = list()
if users:
return users.values()[0]
else:
return create()
# Create new user
# Return: User
def create(self, master_address=None, master_seed=None):
user = User(master_address, master_seed)
logging.debug("Created user: %s" % user.master_address)
if user.master_address: # If successfully created
self.users[user.master_address] = user
user.save()
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 users.values()[0] # Single user mode, always return the first
else:
return None
user_manager = UserManager() # Singletone
# Debug: Reload User.py
def reload():
return False # Disabled
"""import imp
global users, User
def reloadModule():
return "Not used"
import imp
global User, UserManager, user_manager
User = imp.load_source("User", "src/User/User.py").User # Reload source
users.clear() # Remove all items
load()"""
#module = imp.load_source("UserManager", "src/User/UserManager.py") # Reload module
#UserManager = module.UserManager
#user_manager = module.user_manager
# Reload users
user_manager = UserManager()
user_manager.load()