Beispiel #1
0
    def drop(self, session_id, nicks):
        state = self.session.get(session_id)

        with self.statsdb_connection.enter_scope() as scope:
            for nick in nicks:
                victim_id = self.session.find_nick(nick)

                if victim_id:
                    self.broker.deliver(session_id, ltd.encode_status_msg("Drop", "You have dropped %s." % nick))
                    self.broker.deliver(victim_id, ltd.encode_status_msg("Drop", "You have been disconnected by %s." % state.nick))
                    self.broker.deliver(victim_id, ltd.encode_empty_cmd("g"))

                    self.statsdb.add_drop(scope)
                else:
                    self.broker.deliver(session_id, ltd.encode_str("e", "%s not found." % nick))

                scope.complete()
Beispiel #2
0
 def pong(self):
     self.__write__(ltd.encode_empty_cmd("m"))
Beispiel #3
0
 def ping(self):
     self.__write__(ltd.encode_empty_cmd("l"))
Beispiel #4
0
    def list_and_quit(self, session_id, msgid=""):
        self.list(session_id, msgid)

        self.broker.deliver(session_id, ltd.encode_empty_cmd("g"))
Beispiel #5
0
    def login(self,
              session_id,
              loginid,
              nick,
              password,
              group_name,
              status="",
              remote_address=""):
        self.log.debug("User login: loginid=%s, nick=%s, password=%s", loginid,
                       nick, hide_chars(password))

        if not validate.is_valid_loginid(loginid):
            raise LtdErrorException(
                "loginid must consist of at least %d and at most %d alphabetic characters."
                % (validate.LOGINID_MIN, validate.LOGINID_MAX))

        if not validate.is_valid_nick(nick):
            raise LtdErrorException(
                "Nickname must consist of at least %d and at most %d alphanumeric characters."
                % (validate.NICK_MIN, validate.NICK_MAX))

        self.__resolve_bridged_user__(session_id, loginid, remote_address)

        self.broker.deliver(session_id, ltd.encode_empty_cmd("a"))

        if nick == core.NICKSERV:
            raise LtdStatusException("Register", "Nick already in use.")

        ACTION(Motd).receive(session_id)

        registered = self.config.server_unsecure_login and self.__try_login_unsecure__(
            session_id, loginid, nick)

        if not registered:
            if not password:
                self.__login_no_password__(session_id, loginid, nick)
            else:
                registered = self.__login_password__(session_id, loginid, nick,
                                                     password)

        self.session.update(session_id, signon=dateutils.now())

        registration = ACTION(Registration)

        if registered:
            registration.mark_registered(session_id)

        self.__test_connection_limit__(session_id)
        self.__test_ip__(session_id)

        registration.notify_messagebox(session_id)

        if not group_name:
            group_name = core.DEFAULT_GROUP

        self.join(session_id, group_name, status)

        ACTION(Notify).notify_signon(session_id)

        s = self.resolve(shutdown.Shutdown)
        request = s.pending_request

        if request != shutdown.PendingRequest.NONE:
            msg = "Server is %s in %s." % (
                "restarting" if request == shutdown.PendingRequest.RESTART else
                "shutting down", s.time_left_str)

            self.broker.deliver(session_id,
                                ltd.encode_status_msg("Shutdown", msg))

        with self.statsdb_connection.enter_scope() as scope:
            self.statsdb.add_signon(scope)
            self.statsdb.set_max_logins(scope, self.session.count_logins())

            scope.complete()