def push(self, request): command = request.args.get("c") if command is None: raise AJAXException, "No command specified." self.__total_hit() decoded = ircclient.irc_decode(command[0]) session = self.getSession(request) if len(decoded) > config.MAXLINELEN: session.disconnect() raise AJAXException, "Line too long." try: session.push(decoded) except AttributeError: # occurs when we haven't noticed an error session.disconnect() raise AJAXException, "Connection closed by server; try reconnecting by reloading the page." except Exception, e: # catch all session.disconnect() traceback.print_exc(file=sys.stderr) raise AJAXException, "Unknown error."
def newConnection(self, request): ticket = login_optional(request) ip = request.getClientIP() nick = request.args.get("nick") if not nick: raise AJAXException, "Nickname not supplied." nick = ircclient.irc_decode(nick[0]) password = request.args.get("password") if password is not None: password = ircclient.irc_decode(password[0]) for i in xrange(10): id = get_session_id() if not Sessions.get(id): break else: raise IDGenerationException() session = IRCSession(id) qticket = getSessionData(request).get("qticket") if qticket is None: perform = None else: service_mask = config.AUTH_SERVICE msg_mask = service_mask.split("!")[0] + "@" + service_mask.split("@", 1)[1] perform = ["PRIVMSG %s :TICKETAUTH %s" % (msg_mask, qticket)] ident, realname = config.IDENT, config.REALNAME if ident is config_options.IDENT_HEX or ident is None: # latter is legacy ident = socket.inet_aton(ip).encode("hex") elif ident is config_options.IDENT_NICKNAME: ident = nick self.__connect_hit() def proceed(hostname): kwargs = dict(nick=nick, ident=ident, ip=ip, realname=realname, perform=perform, hostname=hostname) if password is not None: kwargs["password"] = password client = ircclient.createIRC(session, **kwargs) session.client = client if not hasattr(config, "WEBIRC_MODE") or config.WEBIRC_MODE == "hmac": proceed(None) elif config.WEBIRC_MODE != "hmac": notice = lambda x: session.event(connect_notice(x)) notice("Looking up your hostname...") def callback(hostname): notice("Found your hostname.") proceed(hostname) def errback(failure): notice("Couldn't look up your hostname!") proceed(ip) qdns.lookupAndVerifyPTR(ip, timeout=[config.DNS_TIMEOUT]).addCallbacks(callback, errback) Sessions[id] = session return id