def exists(self): conn, cur = db.get_conn() cur.execute("SELECT * FROM users WHERE discord_id=%s", (self.discord_id, )) result = cur.fetchone() db.put_conn(conn, cursor=cur) return not not result # Convert to bool
def get_login_key(self): conn, cur = db.get_conn() cur.execute("SELECT key FROM login_keys WHERE discord_id=%s", (self.discord_id, )) result = cur.fetchone() db.put_conn(conn, cursor=cur) if result: return result[0]
def get_membership(self): conn, cur = db.get_conn() cur.execute( "SELECT started_at, duration FROM memberships WHERE discord_id=%s", (self.discord_id, )) result = cur.fetchone() db.put_conn(conn, cursor=cur) if result: return Membership(self.discord_id, result[0], result[1]) else: return Membership(self.discord_id, 0, 0)
def set_login_key(self, length=16): key = "".join( random.choice(tuple(string.digits + string.ascii_letters)) for _ in range(length)) conn, cur = db.get_conn() if self.get_login_key(): cur.execute("UPDATE login_keys SET key=%s WHERE discord_id=%s", (key, self.discord_id)) else: cur.execute( "INSERT INTO login_keys (discord_id, key) VALUES (%s, %s)", (self.discord_id, key)) conn.commit() db.put_conn(conn, cursor=cur) return key
def create_membership(self, key): conn, cur = db.get_conn() cur.execute("SELECT duration FROM keys WHERE key=%s", (key, )) result = cur.fetchone() membership = False if result: cur.execute("DELETE FROM keys WHERE key=%s", (key, )) if self.membership and self.membership.duration != 0: cur.execute( "UPDATE memberships SET started=%s, duration=%s WHERE discord_id=%s", (int(time.time()), result[0], self.discord_id)) else: cur.execute( "INSERT INTO memberships (discord_id, started_at, duration) VALUES (%s, %s, %s)", (self.discord_id, int(time.time()), result[0])) conn.commit() self.get_membership() membership = True db.put_conn(conn, cursor=cur) return membership
def app_auth(): key = request.args.get("key") response = {"login": False} if key: conn, cur = db.get_conn() cur.execute("SELECT discord_id FROM login_keys WHERE key=%s", (key, )) result = cur.fetchone() if result: cur.execute( "SELECT address, last_login FROM ip_address_logins WHERE discord_id=%s", (result[0], )) result1 = cur.fetchone() current_time = time.time() if result1: if result1[0] != request.remote_addr and result1[ 1] - current_time < 10800: # 10800 = 3hrs response[ "reason"] = "Cannot use multiple IP addresses in quick succession." else: response["login"] = True response["discord_id"] = result[0] cur.execute( "UPDATE ip_address_logins SET address=%s, last_login=%s, logins=logins+1 WHERE discord_id=%s", (request.remote_addr, current_time, result[0])) else: response["login"] = True response["discord_id"] = result[0] cur.execute( "INSERT INTO ip_address_logins VALUES (%s, %s, 0, %s)", (result[0], request.remote_addr, current_time)) else: response["reason"] = "Invalid key." conn.commit() db.put_conn(conn, cursor=cur) return jsonify(response)
def create(self): conn, cur = db.get_conn() cur.execute("INSERT INTO users (discord_id) VALUES (%s)", (self.discord_id, )) conn.commit() db.put_conn(conn, cursor=cur)