MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / User

Class User

src/User/User.py:17–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15
16@PluginManager.acceptPlugins
17class User(object):
18 def __init__(self, master_address=None, master_seed=None, data={}):
19 if master_seed:
20 self.master_seed = master_seed
21 self.master_address = CryptBitcoin.privatekeyToAddress(self.master_seed)
22 elif master_address:
23 self.master_address = master_address
24 self.master_seed = data.get("master_seed")
25 else:
26 self.master_seed = CryptBitcoin.newSeed()
27 self.master_address = CryptBitcoin.privatekeyToAddress(self.master_seed)
28 self.sites = data.get("sites", {})
29 self.certs = data.get("certs", {})
30 self.settings = data.get("settings", {})
31 self.delayed_save_thread = None
32
33 self.log = logging.getLogger("User:%s" % self.master_address)
34
35 # Save to data/users.json
36 @util.Noparallel(queue=True, ignore_class=True)
37 def save(self):
38 s = time.time()
39 users = json.load(open("%s/users.json" % config.data_dir))
40 if self.master_address not in users:
41 users[self.master_address] = {} # Create if not exist
42 user_data = users[self.master_address]
43 if self.master_seed:
44 user_data["master_seed"] = self.master_seed
45 user_data["sites"] = self.sites
46 user_data["certs"] = self.certs
47 user_data["settings"] = self.settings
48 helper.atomicWrite("%s/users.json" % config.data_dir, helper.jsonDumps(users).encode("utf8"))
49 self.log.debug("Saved in %.3fs" % (time.time() - s))
50 self.delayed_save_thread = None
51
52 def saveDelayed(self):
53 if not self.delayed_save_thread:
54 self.delayed_save_thread = gevent.spawn_later(5, self.save)
55
56 def getAddressAuthIndex(self, address):
57 return int(binascii.hexlify(address.encode()), 16)
58
59 @util.Noparallel()
60 def generateAuthAddress(self, address):
61 s = time.time()
62 address_id = self.getAddressAuthIndex(address) # Convert site address to int
63 auth_privatekey = CryptBitcoin.hdPrivatekey(self.master_seed, address_id)
64 self.sites[address] = {
65 "auth_address": CryptBitcoin.privatekeyToAddress(auth_privatekey),
66 "auth_privatekey": auth_privatekey
67 }
68 self.saveDelayed()
69 self.log.debug("Added new site: %s in %.3fs" % (address, time.time() - s))
70 return self.sites[address]
71
72 # Get user site data
73 # Return: {"auth_address": "xxx", "auth_privatekey": "xxx"}
74 def getSiteData(self, address, create=True):

Callers 2

loadMethod · 0.90
createMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected