mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-13 22:32:15 +00:00
Massive update to the Mumble SQL service
This commit is contained in:
@@ -18,14 +18,6 @@ class MumbleSQLService(BaseDBService):
|
||||
'name_format': '%(alliance)s - %(name)s',
|
||||
'server_id': 1 }
|
||||
|
||||
SQL_ADD_USER = r"INSERT INTO murmur_users (server_id, user_id, name, pw) VALUES (%s, %s, %s, %s)"
|
||||
SQL_DIS_USER = r"UPDATE murmur_users SET pw = null WHERE name = %s"
|
||||
SQL_ENABLE_USER = r"UPDATE murmur_users SET pw = %s WHERE name = %s"
|
||||
SQL_CHECK_USER = r"SELECT name from murmur_users WHERE name = %s"
|
||||
|
||||
SQL_GET_NEXT_USER_ID = r"SELECT max(user_id)+1 as next_id from murmur_users"
|
||||
SQL_GET_USER_ID = r"SELECT user_id from murmur_users WHERE name = %s"
|
||||
|
||||
@staticmethod
|
||||
def _gen_pwhash(password):
|
||||
return hashlib.sha1(password).hexdigest()
|
||||
@@ -39,20 +31,64 @@ class MumbleSQLService(BaseDBService):
|
||||
details['alliance'] = None
|
||||
return self.settings['name_format'] % details
|
||||
|
||||
def _get_id(self, name):
|
||||
self.dbcursor.execute(r"SELECT user_id from murmur_users WHERE name = %s AND server_id = %s", [name, self.settings['server_id']])
|
||||
row = self.dbcursor.fetchone()
|
||||
if row:
|
||||
return row[0]
|
||||
|
||||
def _get_groups(self):
|
||||
self.dbcursor.execute(r"SELECT group_id, name FROM murmur_groups WHERE server_id = % AND channel_id = 0", [self.settings['server_id']])
|
||||
rows = self.dbcursor.fetchall()
|
||||
|
||||
out = {}
|
||||
for row in rows:
|
||||
out[row[1]] = row[0]
|
||||
|
||||
return out
|
||||
|
||||
def _get_group(self, name):
|
||||
self.dbcursor.execute(r"SELECT group_id, name FROM murmur_groups WHERE server_id = % AND channel_id = 0 AND name = %s", [self.settings['server_id'], name])
|
||||
row = self.dbcursor.fetchone()
|
||||
if row:
|
||||
return row[0]
|
||||
|
||||
def _get_user_groups(self, name):
|
||||
self.dbcursor.execute(r"SELECT murmur_groups.name FROM murmur_groups, murmur_group_members WHERE murmur_group_members.group_id = murmur_groups.group_id AND murmur_group_members.server_id = murmur_groups.server_id AND murmur_group_members.user_id = %s", [user_id])
|
||||
return [row[0] for row in self.dbcursor.fetchall()]
|
||||
|
||||
def _add_group(self, name):
|
||||
self.dbcursor.execute(r"SELECT MAX(group_id)+1 FROM murmur_groups")
|
||||
row = self.dbcursor.fetchone()
|
||||
groupid = row[0]
|
||||
|
||||
self.dbcursor.execute(r"INSERT INTO murmur_groups (group_id, server_id, name, channel_id, inherit, inheritable) VALUES (%s, %s, %s, 0, 1, 1)", [groupid, self.settings['server_id'], name])
|
||||
self.commit()
|
||||
|
||||
return groupid
|
||||
|
||||
def _add_user_group(self, userid, groupid):
|
||||
self.dbcursor.execute(r"INSERT INTO murmur_group_members (group_id, server_id, user_id, addit) VALUES (%s, %s, %s, 1)", [groupid, self.settings['server_id'], userid])
|
||||
self.commit()
|
||||
|
||||
def _rem_user_group(self, userid, groupid):
|
||||
self.dbcursor.execute(r"DELETE FROM murmur_group_members WHERE group_id = %s AND server_id = %s AND user_id = %s", [groupid, self.settings['server_id'], userid])
|
||||
self.commit()
|
||||
|
||||
def add_user(self, username, password, **kwargs):
|
||||
""" Add a user """
|
||||
|
||||
username = self._gen_name(kwargs['character'])
|
||||
self.dbcursor.execute(self.SQL_GET_NEXT_USER_ID)
|
||||
self.dbcursor.execute(r"SELECT max(user_id)+1 as next_id from murmur_users")
|
||||
userid = self.dbcursor.fetchone()[0]
|
||||
|
||||
self.dbcursor.execute(self.SQL_ADD_USER, [self.settings['server_id'], userid, username, self._gen_pwhash(password)])
|
||||
self.dbcursor.execute(r"INSERT INTO murmur_users (server_id, user_id, name, pw) VALUES (%s, %s, %s, %s)", [self.settings['server_id'], userid, username, self._gen_pwhash(password)])
|
||||
self.commit()
|
||||
return { 'username': username, 'password': password }
|
||||
|
||||
def check_user(self, username):
|
||||
""" Check if the username exists """
|
||||
self.dbcursor.execute(self.SQL_CHECK_USER, [username])
|
||||
self.dbcursor.execute(r"SELECT name from murmur_users WHERE name = %s AND server_id = %s", [username, self.settings['server_id']])
|
||||
row = self.dbcursor.fetchone()
|
||||
if row and row[0].lower() == username.lower():
|
||||
return True
|
||||
@@ -60,19 +96,22 @@ class MumbleSQLService(BaseDBService):
|
||||
|
||||
def delete_user(self, uid):
|
||||
""" Delete a user """
|
||||
#self.dbcursor.execute(self.SQL_DEL_REV, [uid])
|
||||
#self.dbcursor.execute(self.SQL_DEL_USER, [uid])
|
||||
id = self._get_id(uid)
|
||||
self.dbcursor.execute(r"DELETE FROM murmur_users WHERE user_id = %s AND server_id = %s", [id, self.settings['server_id']])
|
||||
self.dbcursor.execute(r"DELETE FROM murmur_group_members WHERE user_id = %s AND server_id = %s", [id, self.settings['server_id']])
|
||||
return True
|
||||
|
||||
def disable_user(self, uid):
|
||||
def disable_user(self, username):
|
||||
""" Disable a user """
|
||||
self.dbcursor.execute(self.SQL_DIS_USER, [uid])
|
||||
uid = self._get_id(username)
|
||||
self.dbcursor.execute(r"UPDATE murmur_users SET pw = null WHERE user_id = %s AND server_id = %s", [uid, self.settings['server_id']])
|
||||
self.dbcursor.execute(r"DELETE FROM murmur_user_info WHERE user_id = %s AND server_id = %s AND key = 3", [uid, self.settings['server_id']])
|
||||
self.commit()
|
||||
return True
|
||||
|
||||
def enable_user(self, uid, password):
|
||||
""" Enable a user """
|
||||
self.dbcursor.execute(self.SQL_ENABLE_USER, [self._gen_pwhash(password), uid])
|
||||
self.dbcursor.execute(r"UPDATE murmur_users SET pw = %s WHERE name = %s AND server_id = %s", [self._gen_pwhash(password), uid, self.settings['server_id']])
|
||||
self.commit()
|
||||
return True
|
||||
|
||||
@@ -80,8 +119,23 @@ class MumbleSQLService(BaseDBService):
|
||||
""" Reset the user's password """
|
||||
return self.enable_user(uid, password)
|
||||
|
||||
def update_groups(self, uid, groups, character=None):
|
||||
def update_groups(self, username, groups, character=None):
|
||||
""" Update user's groups """
|
||||
pass
|
||||
|
||||
userid = self._get_id(uid)
|
||||
mumble_groups = self._get_groups()
|
||||
user_groups = set(self._get_user_groups(userid))
|
||||
act_groups = set([g.name.replace(' ', '-').lower() for g in groups])
|
||||
|
||||
addgroups = act_groups - user_groups
|
||||
remgroups = user_groups - act_groups
|
||||
|
||||
for g in addgroups:
|
||||
if not g in mumble_groups
|
||||
mumble_groups[g] = self._add_group(g)
|
||||
self._add_user_group(userid, mumble_groups[g])
|
||||
|
||||
for g in remgroups:
|
||||
self._rem_user_group(userid, mumble_group[g])
|
||||
|
||||
ServiceClass = 'MumbleSQLService'
|
||||
|
||||
Reference in New Issue
Block a user