def render_POST(self, request): print("Adding new server: {0}".format(str(request.args))) new_sql = """INSERT INTO servers (hostname, port, ssl) VALUES (%s, %s, %s)""" hostname = request.args["hostname"][0] # Cast to int seems required? Should use JSON maybe to avoid this... port = request.args["port"][0] if "ssl" in request.args: ssl = True else: ssl = False d = dbpool.runOperation(new_sql, (hostname, port, ssl)) d.addCallback(self.add_server, request) d.addErrback(self.add_server_error, request) return server.NOT_DONE_YET
def render_POST(self, request, session): """Join a channel""" email = session.email # Issue the client command client_cmd = [email.encode("utf-8"), self.server, "join", self.name.encode("utf-8")] message_json = json.loads(request.content.read()) if "key" in message_json: key = message_json["key"] client_cmd.append(key.encode("utf-8")) else: key = None irc_client.send(client_cmd) # Save to the database d = dbpool.runOperation("INSERT INTO channels (user_email, name, server_id, key) VALUES (%s, %s, (SELECT id FROM servers WHERE hostname = %s), %s)", (email, self.name, self.server, key)) def finished(result): request.write(json.dumps(True)) request.finish() d.addCallback(finished) return server.NOT_DONE_YET
def verify_login(self, browserid, request): """Verify the BrowserID request was successful""" login = json.loads(browserid) if login["status"] == "okay": email = login["email"] request.getSession().email = email def existing_user(failure): # Don't have to do much, just end the request print(failure) request.write(json.dumps(email)) request.finish() def new_user(query_rows): request.write(json.dumps(email)) request.finish() d = dbpool.runOperation("INSERT INTO users (email) VALUES (%s)", (email,)) d.addCallback(new_user) d.addErrback(existing_user) return d else: print("Failed login: {0}".format(login)) request.setResponseCode(403) request.finish()
def render_POST(self, request, session): print("Requested connection to {0}".format(self.name)) email = session.email nick = request.args["nick"][0] enabled = (request.args["enabled"][0] == "true") # Upsert is fancy... connect_sql = """ UPDATE server_configs SET enabled = true WHERE user_email = %s AND server_id = (SELECT server_id FROM servers WHERE hostname = %s); INSERT INTO server_configs (user_email, server_id, nick, enabled) SELECT %s, servers.id, %s, %s FROM servers WHERE hostname = %s AND NOT EXISTS (SELECT 1 FROM server_configs WHERE user_email = %s AND server_id = servers.id);""" d = dbpool.runOperation(connect_sql, (email, # UPDATE self.name, # UPDATE subquery email, nick, True, self.name, # INSERT email)) # INSERT subquery d.addCallback(self.connect_server, request, nick) return server.NOT_DONE_YET