Beispiel #1
0
    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
Beispiel #2
0
 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
Beispiel #3
0
 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()
Beispiel #4
0
    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