diff --git a/plugins b/plugins index 9cadd0c6..a55d1b02 160000 --- a/plugins +++ b/plugins @@ -1 +1 @@ -Subproject commit 9cadd0c69f5af06739cc34cc79dc650053a9b4bd +Subproject commit a55d1b02488de996c32e515d3ecaf701dd515d46 diff --git a/src/Content/ContentDb.py b/src/Content/ContentDb.py index f0401652..f284581e 100644 --- a/src/Content/ContentDb.py +++ b/src/Content/ContentDb.py @@ -82,7 +82,7 @@ class ContentDb(Db): return schema def initSite(self, site): - self.getSites()[site.address] = site + self.sites[site.address] = site def needSite(self, site): if site.address not in self.site_ids: @@ -97,7 +97,7 @@ class ContentDb(Db): if site_id: self.execute("DELETE FROM site WHERE site_id = :site_id", {"site_id": site_id}) del self.site_ids[site.address] - del self.getSites()[site.address] + del self.sites[site.address] def setContent(self, site, inner_path, content, size=0): self.insertOrUpdate("content", { diff --git a/src/Site/Site.py b/src/Site/Site.py index ace2a65e..46e19169 100644 --- a/src/Site/Site.py +++ b/src/Site/Site.py @@ -290,7 +290,7 @@ class Site(object): if not SiteManager.site_manager.sites: SiteManager.site_manager.sites = {} if not SiteManager.site_manager.sites.get(self.address): - SiteManager.site_manager.getSites()[self.address] = self + SiteManager.site_manager.sites[self.address] = self SiteManager.site_manager.load(False) SiteManager.site_manager.saveDelayed() diff --git a/src/Site/SiteManager.py b/src/Site/SiteManager.py index da199ee8..8175a1f5 100644 --- a/src/Site/SiteManager.py +++ b/src/Site/SiteManager.py @@ -73,7 +73,7 @@ class SiteManager(object): except Exception as err: self.log.debug("Error loading site %s: %s" % (address, err)) continue - self.getSites()[address] = site + self.sites[address] = site self.log.debug("Loaded site %s in %.3fs" % (address, time.time() - s)) added += 1 elif startup: @@ -88,7 +88,7 @@ class SiteManager(object): if cleanup: for address in list(self.sites.keys()): if address not in address_found: - del(self.getSites()[address]) + del(self.sites[address]) self.log.debug("Removed site: %s" % address) # Remove orpan sites from contentdb @@ -106,7 +106,7 @@ class SiteManager(object): if address in content_db.site_ids: del content_db.site_ids[address] if address in content_db.sites: - del content_db.getSites()[address] + del content_db.sites[address] self.loaded = True for address, settings in sites_need: @@ -203,7 +203,7 @@ class SiteManager(object): self.log.debug("Added new site: %s" % address) config.loadTrackersFile() site = Site(address, settings=settings) - self.getSites()[address] = site + self.sites[address] = site if not site.settings["serving"]: # Maybe it was deleted before site.settings["serving"] = True site.saveSettings() @@ -226,7 +226,7 @@ class SiteManager(object): def delete(self, address): self.sites_changed = int(time.time()) self.log.debug("Deleted site: %s" % address) - del(self.getSites()[address]) + del(self.sites[address]) # Delete from sites.json self.save() diff --git a/src/Test/conftest.py b/src/Test/conftest.py index 1a7c68e7..c8739086 100644 --- a/src/Test/conftest.py +++ b/src/Test/conftest.py @@ -219,7 +219,7 @@ def site(request): site = Site("1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT") # Create new Site object to load content.json files if not SiteManager.site_manager.sites: SiteManager.site_manager.sites = {} - SiteManager.site_manager.getSites()["1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"] = site + SiteManager.site_manager.sites["1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"] = site site.settings["serving"] = True return site diff --git a/src/Test/testdata/chart.db-shm b/src/Test/testdata/chart.db-shm new file mode 100644 index 00000000..7c822be1 Binary files /dev/null and b/src/Test/testdata/chart.db-shm differ diff --git a/src/Test/testdata/chart.db-wal b/src/Test/testdata/chart.db-wal new file mode 100644 index 00000000..dbb007b0 Binary files /dev/null and b/src/Test/testdata/chart.db-wal differ diff --git a/src/Test/testdata/content.db-shm b/src/Test/testdata/content.db-shm new file mode 100644 index 00000000..dfcb5880 Binary files /dev/null and b/src/Test/testdata/content.db-shm differ diff --git a/src/Test/testdata/content.db-wal b/src/Test/testdata/content.db-wal new file mode 100644 index 00000000..a7892237 Binary files /dev/null and b/src/Test/testdata/content.db-wal differ diff --git a/src/Test/testdata/filters.json b/src/Test/testdata/filters.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/Test/testdata/filters.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Test/testdata/openssl.cnf b/src/Test/testdata/openssl.cnf new file mode 100644 index 00000000..ff59f6a4 --- /dev/null +++ b/src/Test/testdata/openssl.cnf @@ -0,0 +1,58 @@ +[ req ] +default_bits = 2048 +default_keyfile = server-key.pem +distinguished_name = subject +req_extensions = req_ext +x509_extensions = x509_ext +string_mask = utf8only + +# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description). +# Its sort of a mashup. For example, RFC 4514 does not provide emailAddress. +[ subject ] +countryName = US +stateOrProvinceName = NY +localityName = New York +organizationName = Example, LLC + +# Use a friendly name here because its presented to the user. The server's DNS +# names are placed in Subject Alternate Names. Plus, DNS names here is deprecated +# by both IETF and CA/Browser Forums. If you place a DNS name here, then you +# must include the DNS name in the SAN too (otherwise, Chrome and others that +# strictly follow the CA/Browser Baseline Requirements will fail). +commonName = Example Company + +emailAddress = test@example.com + +# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ... +[ x509_ext ] + +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer + +basicConstraints = CA:FALSE +keyUsage = digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, serverAuth +subjectAltName = @alternate_names + +# RFC 5280, Section 4.2.1.12 makes EKU optional +# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused +# extendedKeyUsage = serverAuth, clientAuth + +# Section req_ext is used when generating a certificate signing request. I.e., openssl req ... +[ req_ext ] + +subjectKeyIdentifier = hash + +basicConstraints = CA:FALSE +keyUsage = digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, serverAuth +subjectAltName = @alternate_names + +# RFC 5280, Section 4.2.1.12 makes EKU optional +# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused +# extendedKeyUsage = serverAuth, clientAuth + +[ alternate_names ] + +DNS.1 = nazwa.pl +DNS.2 = www.nazwa.pl \ No newline at end of file diff --git a/src/Test/testdata/sites.json b/src/Test/testdata/sites.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/Test/testdata/sites.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Test/testdata/trackers.json b/src/Test/testdata/trackers.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/Test/testdata/trackers.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Test/testdata/users.json b/src/Test/testdata/users.json new file mode 100644 index 00000000..fdadced4 --- /dev/null +++ b/src/Test/testdata/users.json @@ -0,0 +1,9 @@ + + { + "15E5rhcAUD69WbiYsYARh4YHJ4sLm2JEyc": { + "certs": {}, + "master_seed": "024bceac1105483d66585d8a60eaf20aa8c3254b0f266e0d626ddb6114e2949a", + "sites": {} + } + } + \ No newline at end of file diff --git a/src/User/User.py b/src/User/User.py index 96695748..dbcfc56f 100644 --- a/src/User/User.py +++ b/src/User/User.py @@ -61,13 +61,13 @@ class User(object): s = time.time() address_id = self.getAddressAuthIndex(address) # Convert site address to int auth_privatekey = CryptBitcoin.hdPrivatekey(self.master_seed, address_id) - self.getSites()[address] = { + self.sites[address] = { "auth_address": CryptBitcoin.privatekeyToAddress(auth_privatekey), "auth_privatekey": auth_privatekey } self.saveDelayed() self.log.debug("Added new site: %s in %.3fs" % (address, time.time() - s)) - return self.getSites()[address] + return self.sites[address] # Get user site data # Return: {"auth_address": "xxx", "auth_privatekey": "xxx"} @@ -76,11 +76,11 @@ class User(object): if not create: return {"auth_address": None, "auth_privatekey": None} # Dont create user yet self.generateAuthAddress(address) - return self.getSites()[address] + return self.sites[address] def deleteSiteData(self, address): if address in self.sites: - del(self.getSites()[address]) + del(self.sites[address]) self.saveDelayed() self.log.debug("Deleted site: %s" % address) @@ -101,9 +101,9 @@ class User(object): raise Exception("Random error: site exist!") # Save to sites self.getSiteData(site_address) - self.getSites()[site_address]["privatekey"] = site_privatekey + self.sites[site_address]["privatekey"] = site_privatekey self.save() - return site_address, bip32_index, self.getSites()[site_address] + return site_address, bip32_index, self.sites[site_address] # Get BIP32 address from site address # Return: BIP32 auth address