Exemplo n.º 1
0
def sendFile(request, filename, tb_path, ctype):
    """Send file to user.

    Send file to user using producers and consumers system.

    :param: filename (string)
    :param: filepath (string)
    :param: ctype (string) the value for content-type HTTP header

    """
    request.setHeader(b'content-type', ctype)
    request.setHeader(
        b'content-disposition', 'attachment; filename=%s' %
        filename
    )

    fp = FilePath(tb_path).child(filename).open()

    d = FileSender().beginFileTransfer(fp, request)

    def cbFinished(ignored):
        fp.close()
        request.finish()

    d.addErrback(err).addCallback(cbFinished)
Exemplo n.º 2
0
    def render_GET(self, request):
        log.debug("request from %s: %s" % (self.userid, request.args))
        if "f" in request.args:
            fn = request.args["f"][0]
            info = self.fileserver.storage.get(fn, False)
            if info:
                filename, mime, md5sum = info
                log.debug("sending file type %s, path %s, md5sum %s" % (mime, filename, md5sum))
                genfilename = util.generate_filename(mime)
                request.setHeader("content-type", mime)
                request.setHeader("content-length", os.path.getsize(filename))
                request.setHeader("content-disposition", 'attachment; filename="%s"' % (genfilename))
                request.setHeader("x-md5sum", md5sum)

                # stream file to the client
                fp = open(filename, "rb")
                d = FileSender().beginFileTransfer(fp, request)

                def finished(ignored):
                    fp.close()
                    request.finish()

                d.addErrback(log.error).addCallback(finished)
                return server.NOT_DONE_YET

            # file not found in extra storage
            else:
                return self._quick_response(request, 404, "not found")

        return self._quick_response(request, 400, "bad request")
Exemplo n.º 3
0
    def render_GET(self, request):
        if 'camid' in request.args:
            videoID = request.args.get('camid')[0]
            myCachedFileName = os.path.join(self._CacheLocation,
                                            str(videoID) + ".webvtt")
            request.responseHeaders.setRawHeaders(
                "server", ["Bliknet Streamer HTTP Server"])
            request.responseHeaders.setRawHeaders("Content-Type",
                                                  ["text/vtt;charset=utf-8"])
            request.responseHeaders.setRawHeaders(
                "Access-Control-Allow-Origin", ["*"])
            request.responseHeaders.setRawHeaders(
                "Content-Length", [os.path.getsize(myCachedFileName)])
            try:
                fp = open(myCachedFileName, 'rb')
                d = FileSender().beginFileTransfer(fp, request)

                def cbFinished(ignored):
                    fp.close()
                    request.finish()

                d.addErrback(err).addCallback(cbFinished)
                return NOT_DONE_YET
            except:
                exception = str(traceback.format_exc())
                self.NodeControl.log.error("Error opening: % s, error: %s ." %
                                           (myCachedFileName, exception))
                return None
Exemplo n.º 4
0
    def render_GET(self, request):
        log.debug("request from %s: %s" % (self.userid, request.args))
        if 'f' in request.args:
            fn = request.args['f'][0]
            info = self.fileserver.storage.get(fn, False)
            if info:
                filename, mime, md5sum = info
                log.debug("sending file type %s, path %s, md5sum %s" % (mime, filename, md5sum))
                genfilename = util.generate_filename(mime)
                request.setHeader('content-type', mime)
                request.setHeader('content-length', os.path.getsize(filename))
                request.setHeader('content-disposition', 'attachment; filename="%s"' % (genfilename))
                request.setHeader('x-md5sum', md5sum)

                # stream file to the client
                fp = open(filename, 'rb')
                d = FileSender().beginFileTransfer(fp, request)
                def finished(ignored):
                    fp.close()
                    request.finish()
                d.addErrback(log.error).addCallback(finished)
                return server.NOT_DONE_YET

            # file not found in extra storage
            else:
                return self._quick_response(request, 404, 'not found')

        return self._quick_response(request, 400, 'bad request')
Exemplo n.º 5
0
    def sendFile(self, dataObj):
        pycb.log(logging.INFO, "===== def sendFile of cbRequest.py")
        try:
            #etag = dataObj.get_md5()
            etag = pycb.config.bucket.get_md5()
            pycb.log(logging.INFO, "=====## md5(etag) is %s"%etag)
            if etag == None:
                etag = self.etag
            if etag == None:
                etag = self.calcMd5Sum(dataObj)
                dataObj.set_md5(etag)
            self.setHeader(self.request, 'ETag', '"%s"' % (etag))
            self.setResponseCode(self.request, 200, 'OK')

            fp = dataObj
            d = FileSender().beginFileTransfer(fp, self.request)
            def cbFinished(ignored):
                pycb.log(logging.INFO, "===== def cbFinished of cbRequest.py")
                fp.close()
                self.request.finish()
            d.addErrback(err).addCallback(cbFinished)

        except cbException, (ex):
            ex.sendErrorResponse(self.request, self.requestId)
            traceback.print_exc(file=sys.stdout)
            pycb.log(logging.ERROR, "Error sending file %s" % (str(ex)), traceback)
Exemplo n.º 6
0
    def sendFile(self, dataObj):
        try:
            etag = dataObj.get_md5()
            if etag == None:
                etag = self.etag
            if etag == None:
                etag = self.calcMd5Sum(dataObj)
                dataObj.set_md5(etag)
            self.setHeader(self.request, 'ETag', '"%s"' % (etag))
            self.setResponseCode(self.request, 200, 'OK')

            fp = dataObj
            d = FileSender().beginFileTransfer(fp, self.request)

            def cbFinished(ignored):
                fp.close()
                self.request.finish()

            d.addErrback(err).addCallback(cbFinished)

        except cbException, (ex):
            ex.sendErrorResponse(self.request, self.requestId)
            traceback.print_exc(file=sys.stdout)
            pycb.log(logging.ERROR, "Error sending file %s" % (str(ex)),
                     traceback)
Exemplo n.º 7
0
    def render_GET(self, request):
        #log.debug("request from %s: %s" % (self.userid, request.args))
        if 'f' in request.args:
            fn = request.args['f'][0]
            info = self.fileserver.storage.get_extra(fn, self.userid)
            if info:
                (filename, mime, md5sum) = info
                log.debug("sending file type %s, path %s, md5sum %s" % (mime, filename, md5sum))
                genfilename = utils.generate_filename(mime)
                request.setHeader('content-type', mime)
                request.setHeader('content-length', os.path.getsize(filename))
                request.setHeader('content-disposition', 'attachment; filename="%s"' % (genfilename))
                request.setHeader('x-md5sum', md5sum)

                # stream file to the client
                fp = open(filename, 'rb')
                d = FileSender().beginFileTransfer(fp, request)
                def finished(ignored):
                    fp.close()
                    request.finish()
                d.addErrback(err).addCallback(finished)
                return server.NOT_DONE_YET

            # file not found in extra storage
            else:
                return self.not_found(request)

        return self.bad_request(request)
Exemplo n.º 8
0
    def render_POST(self, request):
        # Read POST into a temporary file
        tmpfile = tempfile.TemporaryFile()
        while True:
            data = request.content.read(512 * 1024)
            if not data:
                break
            tmpfile.write(data)

        tmpfile.seek(0)

        # Decrypt it
        decrypted = self.server.key_manager.decrypt_file(tmpfile)

        request.setHeader("content-type", "text/plain")

        # Make sure we know the client
        if not self.server.key_manager.is_gpg_key_in_ring(decrypted.key_id):
            print("WARNING: Unknown client (Key ID: %s)" % (decrypted.key_id))
            request.setResponseCode(511)
            return "ERROR: I'm sorry sir, I don't know any Mr. %s" % (str(
                decrypted.key_id))

        tmpfile.close()

        # JSON parse
        op = json.loads(decrypted.data)

        # Operations
        if op['op'] == 'ping':
            return self.server.key_manager.crypt("PONG", decrypted.key_id)

        elif op['op'] == 'get channel list':
            channels = self.server.channel_manager.get_local_channels()
            channels_json = json.dumps(channels)
            channels_crypted = self.server.key_manager.crypt(
                channels_json, decrypted.key_id)
            return channels_crypted

        elif op['op'] == 'get file list':
            files = self.server.channel_manager.get_local_files(op['channels'])
            files_json = json.dumps(files)
            return self.server.key_manager.crypt(files_json, decrypted.key_id)

        elif op['op'] == 'download file':
            f = self.server.channel_manager.get_filestream(
                op['channel'], op['file'])
            p = self.server.key_manager.crypt_file_popen(f, decrypted.key_id)
            d = FileSender().beginFileTransfer(p.stdout, request)

            def cbFinished(ignored):
                p.kill()
                p.wait()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
Exemplo n.º 9
0
    def _output_content(self, value, request):
        open_file = BytesIO(value)

        log_me('_output_content', open_file)

        d = FileSender().beginFileTransfer(open_file, request)

        d.addCallback(self._output_content_success, open_file, request)
        d.addErrback(self._get_image_content_failure, request)

        return server.NOT_DONE_YET
Exemplo n.º 10
0
    def render_POST(self, request):
        # Read POST into a temporary file
        tmpfile = tempfile.TemporaryFile()
        while True:
            data = request.content.read(512 * 1024)
            if not data:
                break
            tmpfile.write(data)

        tmpfile.seek(0)

        # Decrypt it
        decrypted = self.server.key_manager.decrypt_file(tmpfile)

        request.setHeader("content-type", "text/plain")

        # Make sure we know the client
        if not self.server.key_manager.is_gpg_key_in_ring(decrypted.key_id):
            print("WARNING: Unknown client (Key ID: %s)" % (decrypted.key_id))
            request.setResponseCode(511)
            return "ERROR: I'm sorry sir, I don't know any Mr. %s" % (str(decrypted.key_id))

        tmpfile.close()

        # JSON parse
        op = json.loads(decrypted.data)

        # Operations
        if op["op"] == "ping":
            return self.server.key_manager.crypt("PONG", decrypted.key_id)

        elif op["op"] == "get channel list":
            channels = self.server.channel_manager.get_local_channels()
            channels_json = json.dumps(channels)
            channels_crypted = self.server.key_manager.crypt(channels_json, decrypted.key_id)
            return channels_crypted

        elif op["op"] == "get file list":
            files = self.server.channel_manager.get_local_files(op["channels"])
            files_json = json.dumps(files)
            return self.server.key_manager.crypt(files_json, decrypted.key_id)

        elif op["op"] == "download file":
            f = self.server.channel_manager.get_filestream(op["channel"], op["file"])
            p = self.server.key_manager.crypt_file_popen(f, decrypted.key_id)
            d = FileSender().beginFileTransfer(p.stdout, request)

            def cbFinished(ignored):
                p.kill()
                p.wait()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
Exemplo n.º 11
0
	def render(self,request):
		self.isLeaf = False
		#print request
		#print dir(request)
		print request.path
		
		if (request.path.split('.')[-1] == 'mkv'):
		
			print request.path.split('.')[-1]
			request.setHeader('Content-Type',"application/x-mpegurl")
			
			if (self.converter.checkStatus(request.path)):
				self.converter.start('../../Torrents',request.path)
				
			#f = open('playlist.m3u8','rb')
			#print f.read()
			#f.close()
			#f = open('playlist.m3u8','rb')
			#def cbFinished(ignored):
			#f.close()
			#request.finish()
			playlist = self.converter.getPlaylist()
			print playlist
			return playlist
			
			#d = FileSender().beginFileTransfer(f,request)
			#d.addErrback(err).addCallback(cbFinished)
			
			#return NOT_DONE_YET
			
		elif(request.path.split('.')[-1] == 'ts'):
		
			request.setHeader('Content-Type','video/MP2T')
			print (request.path + '<--------')
			self.converter.updateRecentSeg(request.path)
			f = open(request.path[1:],'rb')
			
			def cbFinished(ignored):
				f.close()
				request.finish()
			
			d = FileSender().beginFileTransfer(f,request)
			d.addErrback(err).addCallback(cbFinished)
			return NOT_DONE_YET
			
		else:
		
			print ('travelled well')
			print self.path
			request.setHeader('Content-Type','video/octet-stream')
			self.isLeaf = False
			return static.File.render(self,request)
			"""f = open(self.path+request.path,'rb')
Exemplo n.º 12
0
    def render_GET(self, request):
        # key - path to media file in base64
        path = base64.b64decode(request.args[b'key'][0]).decode('utf-8')

        fp = open('/root/media/{}'.format(path), 'rb')
        d = FileSender().beginFileTransfer(fp, request)

        def cbFinished(ignored):
            fp.close()
            request.finish()

        d.addErrback(err).addCallback(cbFinished)
        return NOT_DONE_YET
Exemplo n.º 13
0
    def render_POST(self, request):
        # Read POST into a temporary file
        tmpfile = tempfile.TemporaryFile()
        while True:
            data = request.content.read(512 * 1024)
            if not data:
                break
            tmpfile.write(data)

        tmpfile.seek(0)

        # Decrypt it
        decrypted = self.server.key_manager.decrypt_file(tmpfile)
        request.setHeader("content-type", "text/plain")

        # JSON parse
        op = json.loads(decrypted.data)

        print op

        # Operations
        if op['op'] == 'ping':
            return self.server.key_manager.crypt("PONG", decrypted.key_id)

        elif op['op'] == 'get channel list':
            channels = self.server.channel_manager.get_local_channels()
            channels_json = json.dumps(channels)
            return self.server.key_manager.crypt(channels_json,
                                                 decrypted.key_id)

        elif op['op'] == 'get file list':
            files = self.server.channel_manager.get_local_files(op['channels'])
            files_json = json.dumps(files)
            return self.server.key_manager.crypt(files_json, decrypted.key_id)

        elif op['op'] == 'download file':
            f = self.server.channel_manager.get_filestream(
                op['channel'], op['file'])
            p = self.server.key_manager.crypt_file_popen(f, decrypted.key_id)
            d = FileSender().beginFileTransfer(p.stdout, request)

            def cbFinished(ignored):
                p.kill()
                p.wait()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
def sendOpenFile(request, openFile):
    '''Use FileSender to asynchronously send an open file

    [JBY] From: http://stackoverflow.com/questions/1538617/http-download-very-big-file'''

    contentType, junk = mimetypes.guess_type(request.path)
    request.setHeader('Content-Type', contentType if contentType else 'text/plain')
    dd = FileSender().beginFileTransfer(openFile, request)

    def cbFinished(ignored):
        openFile.close()
        request.finish()
    
    dd.addErrback(err)
    dd.addCallback(cbFinished)
    return server.NOT_DONE_YET
    def render_GET(self, request):
        encoding = request.args.get('encoding', [None])[0]
        filename = request.args.get('filename', [self.attachment_id])[0]
        attachment = self.mail_service.attachment(self.attachment_id, encoding)

        request.setHeader(b'Content-Type', b'application/force-download')
        request.setHeader(b'Content-Disposition', bytes('attachment; filename=' + filename))
        bytes_io = io.BytesIO(attachment['content'])
        d = FileSender().beginFileTransfer(bytes_io, request)

        def cb_finished(_):
            bytes_io.close()
            request.finish()

        d.addErrback(err).addCallback(cb_finished)

        return server.NOT_DONE_YET
    def attachment(self, request, attachment_id):
        encoding = request.args.get('encoding', [None])[0]
        filename = request.args.get('filename', [attachment_id])[0]
        attachment = self.querier.attachment(attachment_id, encoding)

        request.setHeader(b'Content-Type', b'application/force-download')
        request.setHeader(b'Content-Disposition', bytes('attachment; filename=' + filename))
        bytes_io = io.BytesIO(attachment['content'])
        d = FileSender().beginFileTransfer(bytes_io, request)

        def cbFinished(ignored):
            bytes_io.close()
            request.finish()

        d.addErrback(err).addCallback(cbFinished)

        return d
Exemplo n.º 17
0
    def render_POST (self, request):
        # Read POST into a temporary file
        tmpfile = tempfile.TemporaryFile()
        while True:
            data = request.content.read(512 * 1024)
            if not data:
                break
            tmpfile.write (data)

        tmpfile.seek(0)

        # Decrypt it
        decrypted = self.server.key_manager.decrypt_file (tmpfile)
        request.setHeader("content-type", "text/plain")

        # JSON parse
        op = json.loads (decrypted.data)

        print op

        # Operations
        if op['op'] == 'ping':
            return self.server.key_manager.crypt ("PONG", decrypted.key_id)

        elif op['op'] == 'get channel list':
            channels = self.server.channel_manager.get_local_channels()
            channels_json = json.dumps(channels)
            return self.server.key_manager.crypt (channels_json, decrypted.key_id)

        elif op['op'] == 'get file list':
            files = self.server.channel_manager.get_local_files(op['channels'])
            files_json = json.dumps(files)
            return self.server.key_manager.crypt (files_json, decrypted.key_id)

        elif op['op'] == 'download file':
            f = self.server.channel_manager.get_filestream (op['channel'], op['file'])
            p = self.server.key_manager.crypt_file_popen (f, decrypted.key_id)
            d = FileSender().beginFileTransfer(p.stdout, request)

            def cbFinished(ignored):
                p.kill()
                p.wait()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
Exemplo n.º 18
0
    def sendFile(self, dataObj):
        try:
            etag = dataObj.get_md5()
            if etag == None:
                etag = self.calcMd5Sum(dataObj)
                dataObj.set_md5(etag)
            self.setHeader(self.request, 'ETag', '"%s"' % (etag))
            self.setResponseCode(self.request, 200, 'OK')

            fp = dataObj
            d = FileSender().beginFileTransfer(fp, self.request)
            def cbFinished(ignored):
                fp.close()
                self.request.finish()
            d.addErrback(err).addCallback(cbFinished)

        except cbException, (ex):
            ex.sendErrorResponse(self.request, self.requestId)
            traceback.print_exc(file=sys.stdout)
Exemplo n.º 19
0
    def render_GET(self, request):
        request.setHeader("content-type", "text/html")
        response = self.get_matching_response(request.path)
        if not response:
            return None
        if "static" in response:
            file_path = response["static"]
            contentType, junk = mimetypes.guess_type(file_path)
            request.setHeader("Content-Type", contentType if contentType else "text/plain")
            fp = open(file_path, "rb")
            d = FileSender().beginFileTransfer(fp, request)

            def cbFinished(ignored):
                fp.close()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
        return template % {"title": str(response["title"]), "body": str(response["body"])}
Exemplo n.º 20
0
	def accessFile(self,filepath,request):
		try:
			fileType = (filepath.split('.')[-1])
			request.setHeader('Content-Type',"image/octet-stream")
			if fileType == 'png':
				request.setHeader('Content-Type',"image/png")
				f = open('images/'+filepath,'rb')
			elif fileType == 'ico':
				request.setHeader('Content-Type',"image/ico")
				f = open('images/favicon.ico','rb')
			else:
				print 'failed to get %s'%(name)
			def cbFinished(ignored):
					f.close()
					request.finish()
			d = FileSender().beginFileTransfer(f,request)
			d.addErrback(err).addCallback(cbFinished)
			return NOT_DONE_YET
		except:
			request.setHeader('Content-Type',"text/plain")
			print request.path + ' failed'
			return 'failed'
Exemplo n.º 21
0
    def render_GET(self, request):
        request.setHeader("content-type", "text/html")
        response = self.get_matching_response(request.path)
        if not response:
            return None
        if "static" in response:
            file_path = response["static"]
            contentType, junk = mimetypes.guess_type(file_path)
            request.setHeader("Content-Type",
                              contentType if contentType else "text/plain")
            fp = open(file_path, "rb")
            d = FileSender().beginFileTransfer(fp, request)

            def cbFinished(ignored):
                fp.close()
                request.finish()

            d.addErrback(err).addCallback(cbFinished)
            return server.NOT_DONE_YET
        return template % {
            "title": str(response["title"]),
            "body": str(response["body"])
        }