Exemple #1
0
    def my_handler(self):
        try:
            body = cherrypy.request.body.read()
            p = message_pb2.Packet()
            p.ParseFromString(body)

            cnx = mysql.connector.connect(**config)
            cursor = cnx.cursor()

            add_record = ("INSERT INTO ctin "
                          "(id, phrase, timestamp) "
                          "VALUES (%s, %s, %s)")
            cursor.execute(add_record, (p.id, p.phrase, current_milli_time()))

            # Make sure data is committed to the database
            cnx.commit()

            cursor.close()
            cnx.close()
        except Exception as e:
            print("exception", e.message)
            resp = response_pb2.Response()
            resp.type = response_pb2.Response.ERROR
            resp.text = e.message
            return resp.SerializeToString()

        resp = response_pb2.Response()
        resp.type = response_pb2.Response.SUCCESS
        resp.text = "success"

        return resp.SerializeToString()
Exemple #2
0
def postMethod(url, clientId, clientInfo, content, key):
    '''
	Função que cria arquivos no servidor

	Cria um arquivo com o conteudo recebido do cliente
	Para manter a autoridade dos arquivos, também é criado um arquivo, com mesmo nome,
	porém, concatenado com a identificação e informação do cliente.

	:param url: Url onde o arquivo sera salvo
	:param clientId: Identificação do cliente
	:param clientInfo: Informação sobre o cliente, neste caso o hostname
	:return: Estrutura Protobuf já pronta para o envio
	'''

    message = response.Response()
    archivePath = str(Path().absolute())
    archivePath += '/contents/'

    if not os.path.exists(archivePath):
        os.makedirs("contents")

    message = setDefaultServer(message)

    archivePath += clientInfo + "/"

    if not os.path.exists(archivePath):
        os.makedirs("contents/" + clientInfo)

    if url == '/':
        archivePath += 'index.html'

    else:
        # if url[0] == '/':
        # 	archivePath += str(''.join(url.split('/')))
        # else:
        # 	archivePath += url
        archivePath += str(''.join(url.split('/')[-1]))

    logging.info(" POST {0}".format(url))

    if os.path.exists(archivePath):
        logging.info(" POST in a existent file")
        message.status = "FAIL - 403"
    else:
        archive = open(archivePath, 'w+')

        archive.write(content)
        logging.info(" POST Sucessful")
        message.status = "OK - 200"

        archive.close()
    message.url = url
    message.content = content
    message.signature = communication.hmacFromResponse(message, key)

    return message
Exemple #3
0
def unknownMethod(key):
    '''
	Função que é chamada quando o comando especificado pelo cliente não é conhecido
	Ex: "gets", "trace"
	'''

    logging.info(" Unknown command")
    message = response.Response()
    message = setDefaultServer(message)
    message.status = "FAIL - 401"
    message.signature = communication.hmacFromResponse(message, key)

    return message
Exemple #4
0
def getMethod(url, clientId, clientInfo, key):
    '''
	Função que popula o protobuf enviando como conteudo, o arquivo que o cliente quer

	:param url: Url do arquivo desejado (ex: "index.html", "teste.txt")
	:return: Protobuf já pronto para o envio
	'''

    message = response.Response()
    archivePath = str(Path().absolute())
    archivePath += '/contents/'

    if not os.path.exists(archivePath):
        os.makedirs("contents")

    message = setDefaultServer(message)

    if (url in ['/', '']):
        archivePath += 'index.html'

    else:
        archivePath += clientInfo + "/"
        url = url.split('/')[-1]
        if url[0] != '/':
            archivePath += "/" + url
        else:
            archivePath += url

    message.url = url

    logging.info(" GET {0}".format(url))

    try:
        archive = open(archivePath, 'r')
        nameFile = archive.name.split('/')[-1]
        message.content += archive.read()
        logging.info(" GET Sucessful")
        message.status = "OK - 200"
        message.url = nameFile
        archive.close()
    except FileNotFoundError:
        message.status = "FAIL - 404"
        logging.info(" Archive not found")
    except OSError:
        message.status = "FAIL - 403"
        logging.info(" Error on archive")

    message.signature = communication.hmacFromResponse(message, key)

    return message
Exemple #5
0
def deleteMethod(url, clientId, clientInfo, key):
    '''
	Função de remoção de arquivos

	Remove arquivos localizados no servidor
	Para segurança dos arquivos, faz o teste antes de remover
	O teste basicamente é uma busca pelo arquivo de lock (url + . + clientId + clientInfo)

	:param url: Url do arquivo que será removido
	:param clientId: Identificação do cliente
	:param clientInfo: Informação do cliente, neste caso é o hostname
	:return: Estrutura protobuf de resposta já pronta para envio
	'''

    message = response.Response()
    archivePath = str(Path().absolute())
    archivePath += '/contents/'

    if not os.path.exists(archivePath):
        os.makedirs("contents")

    archivePath += clientInfo + "/"

    message = setDefaultServer(message)
    if url == '/':
        archivePath += 'index.html'

    else:
        # if url[0] == '/':
        # 	archivePath += str(''.join(url.split('/')))
        # else:
        # 	archivePath += url
        archivePath += str(''.join(url.split('/')[-1]))

    logging.info(" DELETE {0}".format(url))

    if os.path.exists(archivePath):
        os.remove(archivePath)
        logging.info(" DELETE Sucessful")
        message.status = "OK - 200"
    else:
        logging.info(" DELETE Unsucessful")
        message.status = "FAIL - 403"

    message.url = url
    message.content = ""
    message.signature = communication.hmacFromResponse(message, key)

    return message
Exemple #6
0
def do_it(id):

    phrase = id
    while True:
        try:
            p = message_pb2.Packet()
            p.id = id
            phrase = phrase + 1
            p.phrase = str(phrase)

            r = requests.post('http://127.0.0.1:8080/my_handler',
                              p.SerializeToString())
            retText = r.content
            resp = response_pb2.Response()
            resp.ParseFromString(retText)
            if resp.type != response_pb2.Response.SUCCESS:
                print(resp)
        except Exception as e:
            print("exception", e.message)
        time.sleep(1)