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:
parent
3b8d49207e
commit
78f97dcbe8
26 changed files with 789 additions and 308 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue