diff --git a/ckanext/odsh/lib/odsh_icap_client.py b/ckanext/odsh/lib/odsh_icap_client.py index d781aafeecab8e7fc8cef34d391207c394d656bb..1143d38ac54557d633211cb96063283bb36056d5 100644 --- a/ckanext/odsh/lib/odsh_icap_client.py +++ b/ckanext/odsh/lib/odsh_icap_client.py @@ -1,34 +1,36 @@ import socket import sys import time -import ConfigParser +from ckan.common import config +import logging + +log = logging.getLogger(__name__) class ODSHICAPRequest(object): def __init__(self, FILENAME, FILEBUFF, cfg_file='odsh_icap_client.cfg'): - config = ConfigParser.ConfigParser() - config.read(cfg_file) - self.HOST = '10.61.127.77' - self.PORT = 1344 + self.HOST = config.get("odsh.icap.host", "localhost") #'10.61.127.77' + self.PORT = config.get("odsh.icap.port", 1344) + self.CLIENTIP = '127.0.0.1' self.FILENAME = FILENAME self.FILEBUFF = FILEBUFF def send(self): - print("----- Starting ICAP-Request via RESPMOD -----") + log.info("----- Starting ICAP-Request via RESPMOD -----") # socket connect try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as msg: - sys.stderr.write("[ERROR] %s\n" % msg[1]) + log.error(msg[1]) sys.exit(1) try: sock.connect((self.HOST, self.PORT)) except socket.error as msg: - sys.stderr.write("[ERROR] %s\n" % msg[1]) + log.error(msg[1]) sys.exit(2) # create and send header @@ -43,7 +45,7 @@ class ODSHICAPRequest(object): data_response = self._recvall(sock) response_object = self._parse_response(data_response) - print("----- Finished ICAP-Request via RESPMOD -----") + log.info("----- Finished ICAP-Request via RESPMOD -----") return response_object @@ -71,12 +73,12 @@ class ODSHICAPRequest(object): return icapRequest def _sendfile(self, fileBuffer, sock): - print('start sending file') + log.info('Start sending file.') PACK_SIZE = 1024 # in bytes l = fileBuffer.read(PACK_SIZE) while(l): - print('sending %d bytes of data...' % len(l)) + log.info('Sending {} bytes of data...'.format(len(l))) sock.send('{:02X}'.format(len(l)).encode()) sock.send("\r\n".encode()) sock.send(l) @@ -84,22 +86,22 @@ class ODSHICAPRequest(object): l = fileBuffer.read(PACK_SIZE) def _sendfile_old(self, fileName, sock): - print('start sending file') + log.info('OLD: Start sending file.') PACK_SIZE = 1024 # in bytes with open(fileName) as f: l = f.read(PACK_SIZE) while(l): - print('sending %d bytes of data...' % len(l)) + log.info('Sending {} bytes of data...'.format(len(l))) sock.send('{:02X}'.format(len(l)).encode()) sock.send("\r\n".encode()) sock.send(l) sock.send("\r\n".encode()) l = f.read(PACK_SIZE) - print('done sending') + log.info('Done sending.') def _recvall(self, sock): - print('receiving response from icap server') + log.info('Receiving response from icap server...') BUFF_SIZE = 4096 # 4 KiB data = b'' while True: @@ -111,7 +113,7 @@ class ODSHICAPRequest(object): return data def _parse_response(self, data_response): - print('parsing response') + log.info('Parsing response...') lines = data_response.split('\r\n') http_status_code = self._parse_response_http_statuscode(lines) http_block = self._parse_block(lines, 'HTTP/1.1') @@ -160,7 +162,9 @@ class ODSHParsedICAPResponse(object): def virus_found(self): if (self.http_status_code != 200) and (self.http_status_code != 403): - raise UnknownResponseException('Received an unknown http response code: %d' % self.http_status_code) + msg = 'Received an unknown http response code: {}'.format(self.http_status_code) + log.warning(msg) + raise UnknownResponseException(msg) return self.http_status_code != 200 diff --git a/ckanext/odsh/lib/uploader.py b/ckanext/odsh/lib/uploader.py index bfb7c9feeab1b669d5a6f4f25d512a7a3c2fbbcd..362f8d7f28e85b3bf789192ec31156d6ac4504e3 100644 --- a/ckanext/odsh/lib/uploader.py +++ b/ckanext/odsh/lib/uploader.py @@ -10,9 +10,10 @@ log = logging.getLogger(__name__) class ODSHResourceUpload(ResourceUpload): def __init__(self, resource): - log.debug("Resource({}) uploaded.".format(resource)) + log.info("Resource({}) uploaded.".format(resource)) super(ODSHResourceUpload, self).__init__(resource) if self._icap_virus_found(): + log.info("Found Virus!") raise logic.ValidationError({'upload': ['Virus gefunden']}) def _icap_virus_found(self): diff --git a/ckanext/odsh/tests/icap_sever_mock.py b/ckanext/odsh/tests/icap_sever_mock.py new file mode 100644 index 0000000000000000000000000000000000000000..cc20bdc6f2aed429c9aee37a8a2b1eaeee843016 --- /dev/null +++ b/ckanext/odsh/tests/icap_sever_mock.py @@ -0,0 +1,68 @@ +import socket +from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer +import time +import requests +import pdb +import threading +import asyncore + + +hostName = "localhost" +hostPort = 5002 + +# data = "test" +# with open('catalog.rdf', 'r') as myfile: +# data=myfile.read() + +# TODO: better was to set data on RequestHandler +data = "" + +class RequestHandler(BaseHTTPRequestHandler): + + # GET + def do_GET(self): + self.send_response(requests.codes.ok) + # self.send_header('Content-Type', 'application/json; charset=utf-8') + self.send_header( + 'Content-Type', 'application/rdf+xml; charset=utf-8') + self.end_headers() + self.wfile.write(data.encode("utf-8")) + + # POST + def do_POST(self): + content_length = int(self.headers['Content-Length']) + post_data = self.rfile.read(content_length) + self.send_response(200) + print(post_data) + self.wfile.write("".encode("utf-8")) # send back to client + + def do_HEAD(self): + self.send_response(requests.codes.ok) + self.send_header('Content-Type', 'application/json; charset=utf-8') + self.end_headers() + + +class HarvestServerMock(threading.Thread): + def __init__(self): + # init thread + self._stop_event = threading.Event() + self.thread_name = self.__class__ + self.server = HTTPServer((hostName, hostPort), RequestHandler) + threading.Thread.__init__( + self, name=self.thread_name, target=self.server.serve_forever) + self.setDaemon(True) + + +# def run(self): +# while not self._stop_event.isSet(): +# asyncore.loop(timeout=0.01, count=1) + + # pdb.set_trace() + + # try: + # except KeyboardInterrupt: + # pass + + def close(self): + self.server.server_close() + # print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))