mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 14:52:15 +00:00
Allow services to specify to use the charnames or auth username, also add IPB and SMF framework
This commit is contained in:
87
sso/services/ipb/__init__.py
Normal file
87
sso/services/ipb/__init__.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
import xmlrpclib
|
||||||
|
from sso.services import BaseService
|
||||||
|
import settings
|
||||||
|
from hashlib import md5
|
||||||
|
|
||||||
|
class IPBService(BaseService):
|
||||||
|
|
||||||
|
settings = { 'require_user': True,
|
||||||
|
'require_password': True,
|
||||||
|
'provide_login': False,
|
||||||
|
'use_auth_username': True,
|
||||||
|
'ipb_display_name': "[%(corp)s] - %(name)s",
|
||||||
|
'ipb_endpoint': 'http://testboard.aevumdecessus.com/interface/board/index.php',
|
||||||
|
'ipb_api_key': '51242ecca069b986106f04db1047cfc4',
|
||||||
|
'ipb_api_module': 'ipb' }
|
||||||
|
|
||||||
|
def exec_xmlrpc(self, func, **kwargs):
|
||||||
|
""" Send a XMLRPC request """
|
||||||
|
if not hasattr(self, '_server'):
|
||||||
|
self._server = xmlrpclib.Server(self.settings['ipb_endpoint'], verbose=True)
|
||||||
|
params = {}
|
||||||
|
for i in kwargs:
|
||||||
|
params[i] = kwargs[i]
|
||||||
|
params['api_key'] = self.settings['ipb_api_key']
|
||||||
|
params['api_module'] = self.settings['ipb_api_module']
|
||||||
|
|
||||||
|
return getattr(self._server, func)(params)
|
||||||
|
|
||||||
|
def _create_group(self, name):
|
||||||
|
""" Creates a IPB membergroup """
|
||||||
|
ret = self.exec_xmlrpc('createGroup', group_name=name)
|
||||||
|
if ret:
|
||||||
|
return {'name': name, 'id': ret['changeSuccessful']}
|
||||||
|
|
||||||
|
def add_user(self, username, password, **kwargs):
|
||||||
|
""" Add user to service """
|
||||||
|
|
||||||
|
password = md5(password).hexdigest()
|
||||||
|
details = { 'name': kwargs['character'].name,
|
||||||
|
'alli': kwargs['character'].corporation.alliance.ticker,
|
||||||
|
'corp': kwargs['character'].corporation.ticker }
|
||||||
|
display = self.settings['ipb_display_name'] % details
|
||||||
|
ret = self.exec_xmlrpc('createUser', username=username, email=kwargs['user'].email, display_name=display, password=password)
|
||||||
|
|
||||||
|
return username
|
||||||
|
|
||||||
|
def delete_user(self, uid):
|
||||||
|
""" Delete a user """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def check_user(self, username):
|
||||||
|
""" Check if the username exists """
|
||||||
|
ret = self.exec_xmlrpc('fetchMember', search_type='email', search_string=username)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def disable_user(self, uid):
|
||||||
|
""" Disable a user """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def enable_user(self, uid, password):
|
||||||
|
""" Enable a user """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def reset_password(self, uid, password):
|
||||||
|
""" Reset the user's password """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def update_groups(self, uid, groups, character=None):
|
||||||
|
|
||||||
|
user_id = self.check_user(uid)
|
||||||
|
|
||||||
|
# Get all IPB groups
|
||||||
|
|
||||||
|
# Iterate through the provided group list and create any missing ones
|
||||||
|
grplist = []
|
||||||
|
for g in groups:
|
||||||
|
if not g.name in grplist:
|
||||||
|
ret = self._create_group(g.name)
|
||||||
|
if ret:
|
||||||
|
grplist[ret['name']] = ret['id']
|
||||||
|
|
||||||
|
# Assign each group to the user id
|
||||||
|
for gk in grplist:
|
||||||
|
self.exec_xmlrpc('updateUserGroup', user_id=user_id, group_name=gk, action='ADD')
|
||||||
|
|
||||||
|
ServiceClass = 'IPBService'
|
||||||
@@ -8,6 +8,7 @@ class JabberService(BaseService):
|
|||||||
settings = { 'require_user': True,
|
settings = { 'require_user': True,
|
||||||
'require_password': True,
|
'require_password': True,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'jabber_server': 'dredd.it',
|
'jabber_server': 'dredd.it',
|
||||||
'jabber_xmlrpc_url': 'http://127.0.0.1:4560',
|
'jabber_xmlrpc_url': 'http://127.0.0.1:4560',
|
||||||
'jabber_annouce_from': 'announcebot@pleaseignore.com'}
|
'jabber_annouce_from': 'announcebot@pleaseignore.com'}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class MiningBuddyService(BaseDBService):
|
|||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'database_name': 'dreddit_mining',
|
'database_name': 'dreddit_mining',
|
||||||
'password_salt': 's98ss7fsc7fd2rf62ctcrlwztstnzve9toezexcsdhfgviuinusxcdtsvbrg' }
|
'password_salt': 's98ss7fsc7fd2rf62ctcrlwztstnzve9toezexcsdhfgviuinusxcdtsvbrg' }
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ class MumbleService(BaseService):
|
|||||||
settings = { 'require_user': True,
|
settings = { 'require_user': True,
|
||||||
'require_password': True,
|
'require_password': True,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'mumble_server_id': 2,
|
'mumble_server_id': 2,
|
||||||
'name_format': r'%(alliance)s - %(corporation)s - %(name)s',
|
'name_format': r'%(alliance)s - %(corporation)s - %(name)s',
|
||||||
'connection_string': 'Meta:tcp -h 127.0.0.1 -p 6502',
|
'connection_string': 'Meta:tcp -h 127.0.0.1 -p 6502',
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ class PhpBBService(BaseDBService):
|
|||||||
|
|
||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False }
|
'provide_login': False,
|
||||||
|
'use_auth_username': False }
|
||||||
|
|
||||||
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, user_password, user_email) VALUES (%s, %s, %s, %s)"
|
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, user_password, user_email) VALUES (%s, %s, %s, %s)"
|
||||||
SQL_DIS_USER = r"DELETE FROM phpbb_user_groups where user_id = (SELECT user_id FROM phpbb_user WHERE username = %s)"
|
SQL_DIS_USER = r"DELETE FROM phpbb_user_groups where user_id = (SELECT user_id FROM phpbb_user WHERE username = %s)"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class POSTrackerService(BaseDBService):
|
|||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'database_name': 'dreddit_pos' }
|
'database_name': 'dreddit_pos' }
|
||||||
|
|
||||||
SQL_ADD_USER = r"INSERT INTO pos3_user (eve_id, name, pass, email, access, corp, alliance_id) VALUES (%s, %s, %s, %s, 1, %s, %s)"
|
SQL_ADD_USER = r"INSERT INTO pos3_user (eve_id, name, pass, email, access, corp, alliance_id) VALUES (%s, %s, %s, %s, 1, %s, %s)"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class QMSService(BaseDBService):
|
|||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'database_name': 'dreddit_qms' }
|
'database_name': 'dreddit_qms' }
|
||||||
|
|
||||||
SQL_ADD_USER = r"INSERT INTO users (ssoid, Name, passhash, salt, Email, certificate) VALUES (%s, %s, %s, %s, %s, %s)"
|
SQL_ADD_USER = r"INSERT INTO users (ssoid, Name, passhash, salt, Email, certificate) VALUES (%s, %s, %s, %s, %s, %s)"
|
||||||
|
|||||||
78
sso/services/smf/__init__.py
Normal file
78
sso/services/smf/__init__.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
import hashlib
|
||||||
|
import random
|
||||||
|
from sso.services import BaseDBService
|
||||||
|
import settings
|
||||||
|
|
||||||
|
class SMFService(BaseDBService):
|
||||||
|
"""
|
||||||
|
SMF Class, allows registration and sign-in
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
settings = { 'require_user': True,
|
||||||
|
'require_password': True,
|
||||||
|
'provide_login': False,
|
||||||
|
'use_auth_username': False
|
||||||
|
'can_delete': False }
|
||||||
|
|
||||||
|
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, user_password, user_email) VALUES (%s, %s, %s, %s)"
|
||||||
|
SQL_DIS_USER = r"DELETE FROM phpbb_user_groups where user_id = (SELECT user_id FROM phpbb_user WHERE username = %s)"
|
||||||
|
SQL_CHECK_USER = r"SELECT username from phpbb_user WHERE username = %s"
|
||||||
|
|
||||||
|
SQL_ADD_USER_GROUP = r"INSERT INTO phpbb_user_group (group_id, user_id) VALUES (%s, %s)"
|
||||||
|
SQL_GET_GROUP = r"SELECT group_id from phpbb_groups WHERE group_name = %s"
|
||||||
|
SQL_ADD_GROUP = r"INSERT INTO phpbb_groups (group_name) VALUES (%s)"
|
||||||
|
|
||||||
|
def _gen_salt(self):
|
||||||
|
return "%x" % random.randint(0, 2147483647)
|
||||||
|
|
||||||
|
def _gen_hash(self, password, salt=None):
|
||||||
|
if not salt:
|
||||||
|
salt = self._gen_salt()
|
||||||
|
hash = hashlib.md5('%s-%s' % (salt, hashlib.md5(password).hexdigest())).hexdigest()
|
||||||
|
return ":B:%s:%s" % (salt, hash)
|
||||||
|
|
||||||
|
def add_user(self, username, password, **kwargs):
|
||||||
|
""" Add a user """
|
||||||
|
if 'user' in kwargs:
|
||||||
|
email = kwargs['user'].email
|
||||||
|
else:
|
||||||
|
email = ''
|
||||||
|
pwhash = self._gen_hash(password)
|
||||||
|
|
||||||
|
self._dbcursor.execute(self.SQL_ADD_USER, [username, pwhash, email])
|
||||||
|
|
||||||
|
self.update_groups(username)
|
||||||
|
return { 'username': username, 'password': password }
|
||||||
|
|
||||||
|
def update_groups(self, username, groups, character=None):
|
||||||
|
self._dbcursor.execute(self.SQL_CHECK_USER, [self._clean_username(username)])
|
||||||
|
row = self._dbcursor.fetchone()
|
||||||
|
user_id = row['id_member']
|
||||||
|
|
||||||
|
smfgrps = self._get_smf_groups()
|
||||||
|
|
||||||
|
grpids = []
|
||||||
|
for group in groups:
|
||||||
|
if group.name in smfgrps:
|
||||||
|
grpids.append(smfgrps[group.name])
|
||||||
|
else:
|
||||||
|
grpids.append(self._create_smf_group(group.name))
|
||||||
|
|
||||||
|
# Update DB with grouplist
|
||||||
|
self._dbcursor.execute(self.SQL_UPDATE_GROUPS, [user_id, ','.join(groupids)])
|
||||||
|
|
||||||
|
def check_user(self, username):
|
||||||
|
""" Check if the username exists """
|
||||||
|
self._dbcursor.execute(self.SQL_CHECK_USER, [self._clean_username(username)])
|
||||||
|
row = self._dbcursor.fetchone()
|
||||||
|
if row:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def reset_password(self, uid, password):
|
||||||
|
""" Reset the user's password """
|
||||||
|
return self.enable_user(uid, password)
|
||||||
|
|
||||||
|
|
||||||
|
ServiceClass = 'SMFService'
|
||||||
@@ -7,6 +7,7 @@ class TS3Service(BaseService):
|
|||||||
settings = { 'require_user': True,
|
settings = { 'require_user': True,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'host': 'mumble.pleaseignore.com',
|
'host': 'mumble.pleaseignore.com',
|
||||||
'port': 10011,
|
'port': 10011,
|
||||||
'sa_login': 'serveradmin',
|
'sa_login': 'serveradmin',
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class MediawikiService(BaseDBService):
|
|||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': False,
|
'provide_login': False,
|
||||||
|
'use_auth_username': False,
|
||||||
'database_name': 'dreddit_wiki' }
|
'database_name': 'dreddit_wiki' }
|
||||||
|
|
||||||
default_options = 'rows=80\ncols=50'
|
default_options = 'rows=80\ncols=50'
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ def service_add(request):
|
|||||||
else:
|
else:
|
||||||
acc.password = None
|
acc.password = None
|
||||||
|
|
||||||
|
if acc.service.settings['use_auth_username']:
|
||||||
|
username = request.user.username
|
||||||
|
else:
|
||||||
# Decode unicode and remove invalid characters
|
# Decode unicode and remove invalid characters
|
||||||
username = re.sub('[^a-zA-Z0-9_-]+', '', unicodedata.normalize('NFKD', acc.character.name).encode('ASCII', 'ignore'))
|
username = re.sub('[^a-zA-Z0-9_-]+', '', unicodedata.normalize('NFKD', acc.character.name).encode('ASCII', 'ignore'))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user