Пример #1
0
def run(address, port, keyfile):
    """starts server"""
    try:
        server.start_server(keyfile, address, port)
    except KeyboardInterrupt:
        logger.info('got a KeyboardInterrupt, quitting.')
        os.unlink(config.admin_sock_file)
        os.unlink(config.io_sock_file)
Пример #2
0
def run(address, port, keyfile):
    """starts server"""
    try:
        server.start_server(keyfile, address, port)
    except KeyboardInterrupt:
        logger.info('got a KeyboardInterrupt, quitting.')
        os.unlink(config.admin_sock_file)
        os.unlink(config.io_sock_file)
Пример #3
0
def talk_server(handler, request):
    try:
        req_type = request.__class__.__name__
        func = ROUTES_SERVER[req_type]
        # found route, execute:
        logger.info('routing {} -> {}'.format(req_type, func))
        func(handler, request)
    except KeyError as err:
        logger.info('no route ' + err)
Пример #4
0
def talk_server(handler, request):
    try:
        req_type = request.__class__.__name__
        func = ROUTES_SERVER[req_type]
        # found route, execute:
        logger.info('routing {} -> {}'.format(req_type, func))
        func(handler, request)
    except KeyError as err:
        logger.info('no route '+err)
Пример #5
0
def get(index_name):
    try:
        return indexes[index_name]
    except KeyError:
        try:
            ix = index.open_dir(config.index_path, schema=FileSchema, indexname=index_name)
        except index.EmptyIndexError:
            logger.info('no index "{}" found, creating a new one'.format(index_name))
            ix = index.create_in(config.index_path, schema=FileSchema, indexname=index_name)
            indexes[index_name] = ix

        return ix
Пример #6
0
def route(self, handler, msg):
    logger.debug('routing: {}'.format(msg))
    try:
        msg = loads(msg.decode())
    except ValueError:
        # Any ValueError means a bad json message
        logger.debug('raising BadJsonMessage')
        handler.send_data('["bad_json"]')
        raise BadJsonMessage()

    admin_commands = {
        'ping': (ping_msg, {}),
        'seed': (seed_msg, seed_msg_schema),
        'planted': (plant_msg, {})
    }
    try:
        # split header from values
        # default cmd_values is {}
        try:
            cmd_header = msg[0]
            cmd_values = msg[1]
        except IndexError:
            cmd_values = {}  # default

        # grab func, schema and validate
        func, schema = admin_commands[cmd_header]
        try:
            if not validator.validate(cmd_values, schema):
                logger.info('msg not valid')
                raise BadSchema()
        except ValidationError:
            logger.info('validation error')
            raise BadSchema()

        # run func
        cmd_reply = func(handler, cmd_values)
        if cmd_reply:
            logger.debug('sending: {}'.format(cmd_reply))
            handler.send_data(cmd_reply)
        else:
            # Ack if cmd_reply is empty
            logger.debug('sending: {}'.format(dumps(['ack'])))
            handler.send_data(dumps(['ack']))
    except KeyError:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_request']))
    except BadSchema:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_schema']))
    except BadJsonMessage:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_json']))
Пример #7
0
def route(self, handler, msg):
    logger.debug('routing: {}'.format(msg))
    try:
        msg = loads(msg.decode())
    except ValueError:
        # Any ValueError means a bad json message
        logger.debug('raising BadJsonMessage')
        handler.send_data('["bad_json"]')
        raise BadJsonMessage()

    admin_commands = {'ping': (ping_msg, {}),
                      'seed': (seed_msg, seed_msg_schema),
                      'planted': (plant_msg, {})
                      }
    try:
        # split header from values
        # default cmd_values is {}
        try:
            cmd_header = msg[0]
            cmd_values = msg[1]
        except IndexError:
            cmd_values = {}  # default

        # grab func, schema and validate
        func, schema = admin_commands[cmd_header]
        try:
            if not validator.validate(cmd_values, schema):
                logger.info('msg not valid')
                raise BadSchema()
        except ValidationError:
                logger.info('validation error')
                raise BadSchema()

        # run func
        cmd_reply = func(handler, cmd_values)
        if cmd_reply:
            logger.debug('sending: {}'.format(cmd_reply))
            handler.send_data(cmd_reply)
        else:
            # Ack if cmd_reply is empty
            logger.debug('sending: {}'.format(dumps(['ack'])))
            handler.send_data(dumps(['ack']))
    except KeyError:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_request']))
    except BadSchema:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_schema']))
    except BadJsonMessage:
        # Any KeyError means a bad request
        handler.send_data(dumps(['bad_json']))
Пример #8
0
def get(index_name):
    try:
        return indexes[index_name]
    except KeyError:
        try:
            ix = index.open_dir(config.index_path, schema=FileSchema,
                                indexname=index_name)
        except index.EmptyIndexError:
            logger.info("no index \"{}\" found, creating a new one"
                        .format(index_name))
            ix = index.create_in(config.index_path, schema=FileSchema,
                                 indexname=index_name)
            indexes[index_name] = ix

        return ix
Пример #9
0
    def do_handshake(self, handler, msg):
        logger.debug('do_handshake()')
        try:
            # receive client pubkey and create my init_box
            handler.init_box = CryptoBox(self.keyobj)
            logger.debug("server init_box pk: {}".format(self.keyobj.pk))
            logger.debug("server init_box sk: {}".format(self.keyobj.sk))

            # init box with client's pubkey
            handler.init_box.box_with(msg.key)

            # create and send secret
            handler.box = SecretBox()
            sk_msg = encode(PubKeyReply(handler.box.sk))
            sk_msg = handler.init_box.encrypt(sk_msg)
            handler.send_data(compress_buff(sk_msg))

            handler.handshaked = True
            logger.info('HANDSHAKED1')
        except:
            raise BadHandshake()
Пример #10
0
    def route(self, handler, msg):
        logger.debug('routing msg: {}'.format(msg))
        try:
            msg = decompress_buff(msg)
            logger.debug('decompressed msg: {}'.format(msg))
            if not handler.handshaked:
                msg = decode(msg)
                logger.debug('decoded msg: {}'.format(msg))
                # at this point we can only expect PubKeyReply
                self.do_handshake(handler, msg)
            else:
                msg = handler.box.decrypt(msg)
                request = decode(msg)
                logger.debug('decrypted and decoded msg: {}'.format(request))

                # TODO treat client requests here
                routes.talk_server(handler, request)

        except Exception as err:
            logger.info('ignoring request [bad key] {}'.format(err))
            raise
Пример #11
0
    def do_handshake(self, handler, msg):
        logger.debug('do_handshake()')
        try:
            # receive client pubkey and create my init_box
            handler.init_box = CryptoBox(self.keyobj)
            logger.debug("server init_box pk: {}".format(self.keyobj.pk))
            logger.debug("server init_box sk: {}".format(self.keyobj.sk))

            # init box with client's pubkey
            handler.init_box.box_with(msg.key)

            # create and send secret
            handler.box = SecretBox()
            sk_msg = encode(PubKeyReply(handler.box.sk))
            sk_msg = handler.init_box.encrypt(sk_msg)
            handler.send_data(compress_buff(sk_msg))

            handler.handshaked = True
            logger.info('HANDSHAKED1')
        except:
            raise BadHandshake()
Пример #12
0
    def route(self, handler, msg):
        logger.debug('routing msg: {}'.format(msg))
        try:
            msg = decompress_buff(msg)
            logger.debug('decompressed msg: {}'.format(msg))
            if not handler.handshaked:
                msg = decode(msg)
                logger.debug('decoded msg: {}'.format(msg))
                # at this point we can only expect PubKeyReply
                self.do_handshake(handler, msg)
            else:
                msg = handler.box.decrypt(msg)
                request = decode(msg)
                logger.debug('decrypted and decoded msg: {}'.format(request))

                # TODO treat client requests here
                routes.talk_server(handler, request)

        except Exception as err:
            logger.info('ignoring request [bad key] {}'.format(err))
            raise