Commit 057c7b65 authored by Antoine Millet's avatar Antoine Millet
Browse files

Implemented bootstrap role.

parent ea22fd8d
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -126,6 +126,13 @@ class CCServer(object):
        else:
            self._connected[login] = CCClient(login, role, self, connection)

        # If the registered role is bootstrap, we need to register the object
        # on objectdb because it have no account:
        if role == 'bootstrap':
            obj = TqlObject(id=login, r=role)
            logging.info('%s' % obj)
            self.objects.register(obj)

    def unregister(self, connection):
        '''
        Unregister an already connected account.
+15 −1
Original line number Diff line number Diff line
@@ -825,6 +825,15 @@ class CliHandler(OnlineCCHandler):
        return client.connection.call(command, *args, **kwargs)


class BootstrapHandler(OnlineCCHandler):

    '''
    Handler for bootstrap clients.
    '''

    pass


class WelcomeHandler(CCHandler):
    '''
    Default handler used on client connections of the server.
@@ -837,6 +846,7 @@ class WelcomeHandler(CCHandler):
        'hv': HypervisorHandler,
        'host': None,
        'spv': SpvHandler,
	'bootstrap': BootstrapHandler,
    }

    @listed
@@ -874,14 +884,18 @@ class WelcomeHandler(CCHandler):
                raise BadRoleError('%r is not a legal role' % role)
            
            # If authentication is a success, try to register the client:
            if role == 'bootstrap':
                # Set a bootstrap id for the object:
                login = '%s.%s' % (login, conn.get_fd())

            try:
                self._server.register(login, role, conn)
            except AlreadyRegistered:
                logging.warning(logmsg + 'already connected (%s)',
                                conn.getpeername(), login)
                raise AuthenticationError('Already connected')
            conn.set_handler(WelcomeHandler.ROLES.get(role)(self._server))

            conn.set_handler(WelcomeHandler.ROLES.get(role)(self._server))
            logging.info('Authentication success from %s with login %s',
                         conn.getpeername(), login)
            return role