diff --git a/src/File/FileRequest.py b/src/File/FileRequest.py index 9f135c33..62f144a7 100644 --- a/src/File/FileRequest.py +++ b/src/File/FileRequest.py @@ -419,26 +419,6 @@ class FileRequest(object): peer.hashfield.replaceFromString(params["hashfield_raw"]) self.response({"ok": "Updated"}) - def actionSiteReload(self, params): - if self.connection.ip not in config.ip_local and self.connection.ip != config.ip_external: - self.response({"error": "Only local host allowed"}) - - site = self.sites.get(params["site"]) - site.content_manager.loadContent(params["inner_path"], add_bad_files=False) - site.storage.verifyFiles(quick_check=True) - site.updateWebsocket() - - self.response({"ok": "Reloaded"}) - - def actionSitePublish(self, params): - if self.connection.ip not in config.ip_local and self.connection.ip != config.ip_external: - self.response({"error": "Only local host allowed"}) - - site = self.sites.get(params["site"]) - num = site.publish(limit=8, inner_path=params.get("inner_path", "content.json"), diffs=params.get("diffs", {})) - - self.response({"ok": "Successfuly published to %s peers" % num}) - # Send a simple Pong! answer def actionPing(self, params): self.response("Pong!") diff --git a/src/Ui/UiWebsocket.py b/src/Ui/UiWebsocket.py index c4f84eda..b698e2ff 100644 --- a/src/Ui/UiWebsocket.py +++ b/src/Ui/UiWebsocket.py @@ -504,6 +504,12 @@ class UiWebsocket(object): if notification: self.response(to, {"error": "Content publish failed."}) + def actionSiteReload(self, to, inner_path): + self.site.content_manager.loadContent(inner_path, add_bad_files=False) + self.site.storage.verifyFiles(quick_check=True) + self.site.updateWebsocket() + return "ok" + # Write a file to disk def actionFileWrite(self, to, inner_path, content_base64, ignore_bad_files=False): valid_signers = self.site.content_manager.getValidSigners(inner_path) diff --git a/src/main.py b/src/main.py index a85ff472..71109ec3 100644 --- a/src/main.py +++ b/src/main.py @@ -154,7 +154,9 @@ class Actions(object): logging.info("Version: %s r%s, Python %s, Gevent: %s" % (config.version, config.rev, sys.version, gevent.__version__)) func = getattr(self, function_name, None) - func(**kwargs) + back = func(**kwargs) + if back: + print back # Default action: Start serving UiServer and FileServer def main(self): @@ -229,14 +231,13 @@ class Actions(object): # Not found in users.json, ask from console import getpass privatekey = getpass.getpass("Private key (input hidden):") - diffs = site.content_manager.getDiffs(inner_path) try: succ = site.content_manager.sign(inner_path=inner_path, privatekey=privatekey, update_changed_files=True, remove_missing_optional=remove_missing_optional) except Exception, err: logging.error("Sign error: %s" % Debug.formatException(err)) succ = False if succ and publish: - self.sitePublish(address, inner_path=inner_path, diffs=diffs) + self.sitePublish(address, inner_path=inner_path) def siteVerify(self, address): import time @@ -364,7 +365,6 @@ class Actions(object): site.announce() print site.needFile(inner_path, update=True) - def sitePublish(self, address, peer_ip=None, peer_port=15441, inner_path="content.json", diffs={}): def siteCmd(self, address, cmd, parameters): import json from Site import SiteManager @@ -384,24 +384,33 @@ class Actions(object): ws = websocket.create_connection("ws://%s:%s/Websocket?wrapper_key=%s" % (config.ui_ip, config.ui_port, site.settings["wrapper_key"])) return ws + def sitePublish(self, address, peer_ip=None, peer_port=15441, inner_path="content.json"): global file_server from Site import Site from Site import SiteManager from File import FileServer # We need fileserver to handle incoming file requests from Peer import Peer - SiteManager.site_manager.load() - + site = SiteManager.site_manager.get(address) logging.info("Loading site...") - site = Site(address, allow_create=False) site.settings["serving"] = True # Serving the site even if its disabled - logging.info("Creating FileServer....") - file_server = FileServer() - site.connection_server = file_server - file_server_thread = gevent.spawn(file_server.start, check_sites=False) # Dont check every site integrity - time.sleep(0.001) + try: + ws = self.getWebsocket(site) + logging.info("Sending siteReload") + self.siteCmd(address, "siteReload", inner_path) + + logging.info("Sending sitePublish") + self.siteCmd(address, "sitePublish", {"inner_path": inner_path, "sign": False}) + logging.info("Done.") + + except Exception as err: + logging.info("Can't connect to local websocket client: %s" % err) + logging.info("Creating FileServer....") + file_server = FileServer() + site.connection_server = file_server + file_server_thread = gevent.spawn(file_server.start, check_sites=False) # Dont check every site integrity + time.sleep(0.001) - if not file_server_thread.ready(): # Started fileserver file_server.openport() if peer_ip: # Announce ip specificed @@ -409,7 +418,7 @@ class Actions(object): else: # Just ask the tracker logging.info("Gathering peers from tracker") site.announce() # Gather peers - published = site.publish(5, inner_path, diffs=diffs) # Push to peers + published = site.publish(5, inner_path) # Push to peers if published > 0: time.sleep(3) logging.info("Serving files (max 60s)...") @@ -417,18 +426,6 @@ class Actions(object): logging.info("Done.") else: logging.info("No peers found, sitePublish command only works if you already have visitors serving your site") - else: - # Already running, notify local client on new content - logging.info("Sending siteReload") - if config.fileserver_ip == "*": - my_peer = Peer("127.0.0.1", config.fileserver_port) - else: - my_peer = Peer(config.fileserver_ip, config.fileserver_port) - - logging.info(my_peer.request("siteReload", {"site": site.address, "inner_path": inner_path})) - logging.info("Sending sitePublish") - logging.info(my_peer.request("sitePublish", {"site": site.address, "inner_path": inner_path, "diffs": diffs})) - logging.info("Done.") # Crypto commands def cryptPrivatekeyToAddress(self, privatekey=None):