X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/1d924d975da119681e9ed30346847ae3079d51af..348574eea8f66fb7a46aaa0cc840123dbf4c24f3:/qwebirc/engines/ajaxengine.py diff --git a/qwebirc/engines/ajaxengine.py b/qwebirc/engines/ajaxengine.py index d033840..5fab9cf 100644 --- a/qwebirc/engines/ajaxengine.py +++ b/qwebirc/engines/ajaxengine.py @@ -1,4 +1,4 @@ -from twisted.web import resource, server, static +from twisted.web import resource, server, static, error as http_error from twisted.names import client from twisted.internet import reactor, error from authgateengine import login_optional, getSessionData @@ -21,6 +21,9 @@ class AJAXException(Exception): class IDGenerationException(Exception): pass +class PassthruException(Exception): + pass + NOT_DONE_YET = None def jsondump(fn): @@ -32,6 +35,8 @@ def jsondump(fn): x = (True, x) except AJAXException, e: x = (False, e[0]) + except PassthruException, e: + return str(e) return simplejson.dumps(x) return decorator @@ -115,7 +120,7 @@ class IRCSession: bufferlen = sum(map(len, self.buffer)) if bufferlen + len(data) > config.MAXBUFLEN: self.buffer = [] - self.client.error("Buffer overflow") + self.client.error("Buffer overflow.") return self.buffer.append(data) @@ -165,10 +170,11 @@ class AJAXEngine(resource.Resource): handler = self.COMMANDS.get(path[1:]) if handler is not None: return handler(self, request) - raise AJAXException("404") + + raise PassthruException, http_error.NoResource().render(request) -# def render_GET(self, request): -# return self.render_POST(request) + #def render_GET(self, request): + #return self.render_POST(request) def newConnection(self, request): ticket = login_optional(request) @@ -177,7 +183,7 @@ class AJAXEngine(resource.Resource): nick = request.args.get("nick") if not nick: - raise AJAXException("Nickname not supplied") + raise AJAXException, "Nickname not supplied." nick = ircclient.irc_decode(nick[0]) ident, realname = "webchat", config.REALNAME @@ -195,7 +201,9 @@ class AJAXEngine(resource.Resource): if qticket is None: perform = None else: - perform = ["PRIVMSG %s :TICKETAUTH %s" % (config.QBOT, qticket)] + service_mask = config.AUTH_SERVICE + msg_mask = service_mask.split("!")[0] + "@" + service_mask.split("@", 1)[1] + perform = ["PRIVMSG %s :TICKETAUTH %s" % (msg_mask, qticket)] self.__connect_hit() client = ircclient.createIRC(session, nick=nick, ident=ident, ip=ip, realname=realname, perform=perform) @@ -206,13 +214,15 @@ class AJAXEngine(resource.Resource): return id def getSession(self, request): + bad_session_message = "Invalid session, this most likely means the server has restarted; close this dialog and then try refreshing the page." + sessionid = request.args.get("s") if sessionid is None: - raise AJAXException("Bad session ID") + raise AJAXException, bad_session_message session = Sessions.get(sessionid[0]) if not session: - raise AJAXException("Bad session ID") + raise AJAXException, bad_session_message return session def subscribe(self, request): @@ -223,7 +233,7 @@ class AJAXEngine(resource.Resource): def push(self, request): command = request.args.get("c") if command is None: - raise AJAXException("No command specified") + raise AJAXException, "No command specified." self.__total_hit() decoded = ircclient.irc_decode(command[0]) @@ -232,17 +242,17 @@ class AJAXEngine(resource.Resource): if len(decoded) > config.MAXLINELEN: session.disconnect() - raise AJAXException("Line too long") + 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.") + 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.") + raise AJAXException, "Unknown error." return True