예제 #1
0
    def lookupUser(self, name):
        """
        Looks for the given user first in the local store and
        failing that in the database. If found in the databse,
        checks the session for validity - if the session is valid
        the user must be connected to some other node, so a ShardedUser
        with a ProxyIRCDDUser for mind is returned. If the session is
        not valid, fail with NoSuchUser.

        :param name: the name of the user to look for.
        """
        assert isinstance(name, unicode)
        name = name.lower()

        local_user = self.users.get(name)
        if local_user:
            return defer.succeed(local_user)

        remote_user = self.ctx.db.lookupUser(name)
        user_session = self.ctx.db.lookupUserSession(name)

        # User exists and session is active, so he must be
        # connected to some remote
        if remote_user and user_session and user_session["active"]:
            return defer.succeed(
                ShardedUser(self.ctx, name, ProxyIRCDDUser(self.ctx, name)))

        return defer.fail(failure.Failure(ewords.NoSuchUser(name)))
예제 #2
0
 def lookupUser(self, name):
     name = name.lower()
     try:
         user = self.users[name]
     except KeyError:
         return defer.fail(failure.Failure(ewords.NoSuchUser(name)))
     else:
         return defer.succeed(user)
예제 #3
0
    def lookupUser(self, name):
        print "LOOKUPUSER", name
        assert isinstance(name, unicode)

        users = {}
        for g in self.groups.values():
            users.update(g.users)

        if name in users:
            return defer.succeed(users[name])

        if self.so.lookupuser(name):
            return defer.succeed(SoUser(name))
        else:
            return defer.fail(failure.Failure(ewords.NoSuchUser(name)))