def do_storedataenc(self, arg): "<data> store base58 encoded data." data = base58.decode(arg) def key_callback(data_key): self.writeln("data_key=[{}].".format(mbase32.encode(data_key))) start = datetime.today() yield from multipart.store_data(self.peer.engine, data, key_callback=key_callback) diff = datetime.today() - start self.writeln("multipart.store_data(..) took: {}.".format(diff))
def do_storedataenc(self, arg): "<data> store base58 encoded data." data = base58.decode(arg) def key_callback(data_key): self.writeln("data_key=[{}].".format(mbase32.encode(data_key))) start = datetime.today() yield from multipart.store_data(\ self.peer.engine, data, key_callback=key_callback) diff = datetime.today() - start self.writeln("multipart.store_data(..) took: {}.".format(diff))
def _send_store_data(data, data_rw, privatekey=None, path=None, version=None,\ mime_type=""): try: key_callback = KeyCallback(data_rw) yield from multipart.store_data(\ node.chord_engine, data, privatekey=privatekey, path=path,\ version=version, key_callback=key_callback, mime_type=mime_type) except asyncio.TimeoutError: data_rw.timed_out = True except Exception: log.exception("send_store_data(..)") data_rw.exception = True data_rw.is_done.set()
def _send_store_data(data, data_rw, privatekey=None, path=None, version=None,\ mime_type=""): try: def key_callback(data_key): data_rw.data_key = data_key yield from multipart.store_data(\ node.chord_engine, data, privatekey=privatekey, path=path,\ version=version, key_callback=key_callback, mime_type=mime_type) except asyncio.TimeoutError: data_rw.timed_out = True except: log.exception("send_store_data(..)") data_rw.exception = True data_rw.is_done.set()
def do_storeukeyenc(self, arg): "<KEY> <DATA> <VERSION> <STOREKEY> [PATH] store base58 encoded DATA" " with base58 encoded private KEY." args = arg.split(' ') key = rsakey.RsaKey(privdata=base58.decode(args[0])) data = base58.decode(args[1]) version = int(args[2]) storekey = bool(args[3]) path = args[4] if len(args) > 4 else None def key_callback(data_key): self.writeln("data_key=[{}].".format(mbase32.encode(data_key))) start = datetime.today() yield from multipart.store_data(\ self.peer.engine, data, privatekey=key, path=path,\ version=version, key_callback=key_callback) diff = datetime.today() - start self.writeln("multipart.store_data(..) took: {}.".format(diff))
def _do_POST(self, rpath): log.info("POST; rpath=[{}].".format(rpath)) if rpath != ".upload/upload": yield from maalstroom.dmail.serve_post(self, rpath) return if not self.connection_count: self.send_error("No connected nodes; cannot upload to the"\ " network.") return if log.isEnabledFor(logging.DEBUG): log.debug("headers=[{}].".format(self.handler.headers)) version = None path = None mime_type = None if self.handler.headers["Content-Type"]\ == "application/x-www-form-urlencoded": log.debug("Content-Type=[application/x-www-form-urlencoded].") data = yield from self.read_request() privatekey = None else: if log.isEnabledFor(logging.DEBUG): log.debug("Content-Type=[{}]."\ .format(self.handler.headers["Content-Type"])) data = yield from self.read_request() form = cgi.FieldStorage(\ fp=io.BytesIO(data),\ headers=self.handler.headers,\ environ={\ "REQUEST_METHOD": "POST",\ "CONTENT_TYPE": self.handler.headers["Content-Type"]}) if log.isEnabledFor(logging.DEBUG): log.debug("form=[{}].".format(form)) formelement = form["fileToUpload"] filename = formelement.filename data = formelement.file.read() if log.isEnabledFor(logging.INFO): log.info("filename=[{}].".format(filename)) privatekey = form["privateKey"].value if privatekey and privatekey != "${PRIVATE_KEY}": if log.isEnabledFor(logging.INFO): log.info("privatekey=[{}].".format(privatekey)) privatekey = base58.decode(privatekey) privatekey = rsakey.RsaKey(privdata=privatekey) path = form["path"].value.encode() version = form["version"].value if not version: version = 0 else: version = int(version) mime_type = form["mime_type"].value else: privatekey = None if log.isEnabledFor(logging.DEBUG): log.debug("data=[{}].".format(data)) if not privatekey: assert not version and not path and not mime_type try: key_callback = KeyCallback() yield from multipart.store_data(\ self.node.chord_engine, data, privatekey=privatekey,\ path=path, version=version, key_callback=key_callback,\ mime_type=mime_type) except asyncio.TimeoutError: self.send_error(errcode=408) except Exception as e: log.exception("send_store_data(..)") self.send_exception(e) if key_callback.data_key: enckey = mbase32.encode(key_callback.data_key) if privatekey and path: url = "{}{}/{}"\ .format(\ self.handler.maalstroom_url_prefix_str,\ enckey,\ path.decode("UTF-8")) else: url = "{}{}"\ .format(\ self.handler.maalstroom_url_prefix_str,\ enckey) if privatekey: message = '<a id="key" href="{}">updateable key link</a>'\ .format(url) if key_callback.referred_key: message +=\ '<br/><a id="referred_key" href="{}{}">perma link</a>'\ .format(\ self.handler.maalstroom_url_prefix_str,\ mbase32.encode(key_callback.referred_key)) else: message = '<a id="key" href="{}">perma link</a>'.format(url) self.send_response(200) self.send_header("Content-Type", "text/html") self.send_header("Content-Length", len(message)) self.end_headers() self.write(bytes(message, "UTF-8")) self.finish_response()