Added IPBoard support

This commit is contained in:
Raynaldo Rivera
2014-11-17 08:40:25 -07:00
parent c131798e24
commit 1ed41ae043
27 changed files with 1338 additions and 530 deletions

View File

@@ -0,0 +1,125 @@
import os
import xmlrpclib
from hashlib import md5
from django.conf import settings
class IPBoardManager:
def __init__(self):
pass
@staticmethod
def __santatize_username(username):
sanatized = username.replace(" ", "_")
sanatized = sanatized.replace("'", "")
return sanatized.lower()
@staticmethod
def __generate_random_pass():
return os.urandom(8).encode('hex')
@staticmethod
def exec_xmlrpc(func, **kwargs):
""" Send a XMLRPC request """
server = xmlrpclib.Server(settings.IPBOARD_ENDPOINT, verbose=False)
params = {}
for i in kwargs:
params[i] = kwargs[i]
params['api_key'] = settings.IPBOARD_APIKEY
params['api_module'] = settings.IPBOARD_APIMODULE
print params
return getattr(server, func)(params)
@staticmethod
def add_user(username, email):
""" Add user to service """
sanatized = str(IPBoardManager.__santatize_username(username))
plain_password = IPBoardManager.__generate_random_pass()
password = md5(plain_password).hexdigest()
ret = IPBoardManager.exec_xmlrpc('createUser', username=sanatized, email=str(email), display_name=sanatized, md5_passwordHash=password)
return sanatized, plain_password
@staticmethod
def delete_user(username):
""" Delete user """
ret = IPBoardManager.exec_xmlrpc('deleteUser', username=username)
return username
@staticmethod
def disable_user(username):
""" Disable user """
ret = IPBoardManager.exec_xmlrpc('disableUser', username=username)
return username
@staticmethod
def update_user(username, email, password):
""" Add user to service """
password = md5(password).hexdigest()
ret = IPBoardManager.exec_xmlrpc('updateUser', username=username, email=email, md5_passwordHash=password)
return username
@staticmethod
def get_all_groups():
groups = []
ret = IPBoardManager.exec_xmlrpc('getAllGroups')
for group in ret:
groups.append(group["g_title"])
return groups
@staticmethod
def get_user_groups(username):
groups = []
ret = IPBoardManager.exec_xmlrpc('getUserGroups', username=username)
for group in ret:
groups.append(group["g_title"])
return groups
@staticmethod
def add_group(group):
ret = IPBoardManager.exec_xmlrpc('addGroup', group=group)
return ret
@staticmethod
def add_user_to_group(username, group):
ret = IPBoardManager.exec_xmlrpc('addUserToGroup', username=username, group=group)
return ret
@staticmethod
def remove_user_from_group(username, group):
ret = IPBoardManager.exec_xmlrpc('removeUserFromGroup', username=username, group=group)
return ret
@staticmethod
def help_me():
"Random help me"
ret = IPBoardManager.exec_xmlrpc('helpMe')
return ret
@staticmethod
def update_groups(username, groups):
forum_groups = IPBoardManager.get_all_groups()
user_groups = set(IPBoardManager.get_user_groups(username))
act_groups = set([g.replace(' ', '-') for g in groups])
addgroups = act_groups - user_groups
remgroups = user_groups - act_groups
print addgroups
print remgroups
for g in addgroups:
if not g in forum_groups:
IPBoardManager.add_group(g)
print username
print g
IPBoardManager.add_user_to_group(username, g)
for g in remgroups:
IPBoardManager.remove_user_from_group(username, g)
@staticmethod
def update_user_password(username, email):
plain_password = IPBoardManager.__generate_random_pass()
IPBoardManager.update_user(username, email, plain_password)
return plain_password

View File

@@ -11,7 +11,7 @@ from openfire import UserService
from authentication.managers import AuthServicesInfoManager
class JabberManager:
class OpenfireManager:
def __init__(self):
pass
@@ -35,8 +35,8 @@ class JabberManager:
def add_user(username):
try:
sanatized_username = JabberManager.__santatize_username(username)
password = JabberManager.__generate_random_pass()
sanatized_username = OpenfireManager.__santatize_username(username)
password = OpenfireManager.__generate_random_pass()
api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.add_user(sanatized_username, password)
@@ -68,7 +68,7 @@ class JabberManager:
@staticmethod
def update_user_pass(username):
try:
password = JabberManager.__generate_random_pass()
password = OpenfireManager.__generate_random_pass()
api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.update_user(username, password)
return password

View File

@@ -6,7 +6,7 @@ from passlib.apps import phpbb3_context
from django.db import connections
class ForumManager:
class Phpbb3Manager:
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, " \
r"user_password, user_email, group_id, user_regdate, user_permissions, " \
r"user_sig, user_occ, user_interests) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
@@ -52,7 +52,7 @@ class ForumManager:
@staticmethod
def __get_group_id(groupname):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_GET_GROUP_ID, [groupname])
cursor.execute(Phpbb3Manager.SQL_GET_GROUP_ID, [groupname])
row = cursor.fetchone()
return row[0]
@@ -60,14 +60,14 @@ class ForumManager:
@staticmethod
def __get_user_id(username):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_USER_ID_FROM_USERNAME, [username])
cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [username])
row = cursor.fetchone()
return row[0]
@staticmethod
def __get_all_groups():
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_GET_ALL_GROUPS)
cursor.execute(Phpbb3Manager.SQL_GET_ALL_GROUPS)
rows = cursor.fetchall()
out = {}
for row in rows:
@@ -78,7 +78,7 @@ class ForumManager:
@staticmethod
def __get_user_groups(userid):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_GET_USER_GROUPS, [userid])
cursor.execute(Phpbb3Manager.SQL_GET_USER_GROUPS, [userid])
return [row[0] for row in cursor.fetchall()]
@staticmethod
@@ -90,37 +90,37 @@ class ForumManager:
@staticmethod
def __create_group(groupname):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_ADD_GROUP, [groupname, groupname])
return ForumManager.__get_group_id(groupname)
cursor.execute(Phpbb3Manager.SQL_ADD_GROUP, [groupname, groupname])
return Phpbb3Manager.__get_group_id(groupname)
@staticmethod
def __add_user_to_group(userid, groupid):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_ADD_USER_GROUP, [groupid, userid, 0])
cursor.execute(Phpbb3Manager.SQL_ADD_USER_GROUP, [groupid, userid, 0])
@staticmethod
def __remove_user_from_group(userid, groupid):
cursor = connections['phpbb3'].cursor()
cursor.execute(ForumManager.SQL_REMOVE_USER_GROUP, [userid, groupid])
cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid])
@staticmethod
def add_user(username, email, groups):
cursor = connections['phpbb3'].cursor()
username_clean = ForumManager.__santatize_username(username)
password = ForumManager.__generate_random_pass()
pwhash = ForumManager.__gen_hash(password)
username_clean = Phpbb3Manager.__santatize_username(username)
password = Phpbb3Manager.__generate_random_pass()
pwhash = Phpbb3Manager.__gen_hash(password)
# check if the username was simply revoked
if ForumManager.check_user(username_clean):
ForumManager.__update_user_info(username_clean, email, pwhash)
if Phpbb3Manager.check_user(username_clean):
Phpbb3Manager.__update_user_info(username_clean, email, pwhash)
else:
try:
cursor.execute(ForumManager.SQL_ADD_USER, [username_clean, username_clean, pwhash,
email, 2, ForumManager.__get_current_utc_date(),
cursor.execute(Phpbb3Manager.SQL_ADD_USER, [username_clean, username_clean, pwhash,
email, 2, Phpbb3Manager.__get_current_utc_date(),
"", "", "", ""])
ForumManager.update_groups(username_clean, groups)
Phpbb3Manager.update_groups(username_clean, groups)
except:
pass
@@ -130,11 +130,11 @@ class ForumManager:
def disable_user(username):
cursor = connections['phpbb3'].cursor()
password = ForumManager.__gen_hash(ForumManager.__generate_random_pass())
password = Phpbb3Manager.__gen_hash(Phpbb3Manager.__generate_random_pass())
revoke_email = "revoked@the99eve.com"
try:
pwhash = ForumManager.__gen_hash(password)
cursor.execute(ForumManager.SQL_DIS_USER, [revoke_email, pwhash, username])
pwhash = Phpbb3Manager.__gen_hash(password)
cursor.execute(Phpbb3Manager.SQL_DIS_USER, [revoke_email, pwhash, username])
return True
except TypeError as e:
print e
@@ -144,16 +144,16 @@ class ForumManager:
def delete_user(username):
cursor = connections['phpbb3'].cursor()
if ForumManager.check_user(username):
cursor.execute(ForumManager.SQL_DEL_USER, [username])
if Phpbb3Manager.check_user(username):
cursor.execute(Phpbb3Manager.SQL_DEL_USER, [username])
return True
return False
@staticmethod
def update_groups(username, groups):
userid = ForumManager.__get_user_id(username)
forum_groups = ForumManager.__get_all_groups()
user_groups = set(ForumManager.__get_user_groups(userid))
userid = Phpbb3Manager.__get_user_id(username)
forum_groups = Phpbb3Manager.__get_all_groups()
user_groups = set(Phpbb3Manager.__get_user_groups(userid))
act_groups = set([g.replace(' ', '-') for g in groups])
addgroups = act_groups - user_groups
remgroups = user_groups - act_groups
@@ -162,28 +162,28 @@ class ForumManager:
print remgroups
for g in addgroups:
if not g in forum_groups:
forum_groups[g] = ForumManager.__create_group(g)
ForumManager.__add_user_to_group(userid, forum_groups[g])
forum_groups[g] = Phpbb3Manager.__create_group(g)
Phpbb3Manager.__add_user_to_group(userid, forum_groups[g])
for g in remgroups:
ForumManager.__remove_user_from_group(userid, forum_groups[g])
Phpbb3Manager.__remove_user_from_group(userid, forum_groups[g])
@staticmethod
def remove_group(username, group):
cursor = connections['phpbb3'].cursor()
userid = ForumManager.__get_user_id(username)
groupid = ForumManager.__get_group_id(group)
userid = Phpbb3Manager.__get_user_id(username)
groupid = Phpbb3Manager.__get_group_id(group)
if userid:
if groupid:
cursor.execute(ForumManager.SQL_REMOVE_USER_GROUP, [userid, groupid])
cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid])
@staticmethod
def check_user(username):
cursor = connections['phpbb3'].cursor()
""" Check if the username exists """
cursor.execute(ForumManager.SQL_USER_ID_FROM_USERNAME, [ForumManager.__santatize_username(username)])
cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [Phpbb3Manager.__santatize_username(username)])
row = cursor.fetchone()
if row:
return True
@@ -192,10 +192,10 @@ class ForumManager:
@staticmethod
def update_user_password(username):
cursor = connections['phpbb3'].cursor()
password = ForumManager.__generate_random_pass()
if ForumManager.check_user(username):
pwhash = ForumManager.__gen_hash(password)
cursor.execute(ForumManager.SQL_UPDATE_USER_PASSWORD, [pwhash, username])
password = Phpbb3Manager.__generate_random_pass()
if Phpbb3Manager.check_user(username):
pwhash = Phpbb3Manager.__gen_hash(password)
cursor.execute(Phpbb3Manager.SQL_UPDATE_USER_PASSWORD, [pwhash, username])
return password
return ""
@@ -204,6 +204,6 @@ class ForumManager:
def __update_user_info(username, email, password):
cursor = connections['phpbb3'].cursor()
try:
cursor.execute(ForumManager.SQL_DIS_USER, [email, password, username])
cursor.execute(Phpbb3Manager.SQL_DIS_USER, [email, password, username])
except:
pass