Merge pull request #158 from Adarnof/more_logging

Holiday Goodies
This commit is contained in:
Adarnof 2016-01-06 00:27:36 -05:00
commit 4821d36e7c
31 changed files with 1130 additions and 188 deletions

2
.gitignore vendored
View File

@ -45,7 +45,7 @@ coverage.xml
*.pot *.pot
# Django stuff: # Django stuff:
*.log *.log*
# Sphinx documentation # Sphinx documentation
docs/_build/ docs/_build/

View File

@ -188,6 +188,17 @@ EMAIL_HOST_USER = os.environ.get('AA_EMAIL_HOST_USER', '')
EMAIL_HOST_PASSWORD = os.environ.get('AA_EMAIL_HOST_PASSWORD', '') EMAIL_HOST_PASSWORD = os.environ.get('AA_EMAIL_HOST_PASSWORD', '')
EMAIL_USE_TLS = 'True' == os.environ.get('AA_EMAIL_USE_TLS', 'True') EMAIL_USE_TLS = 'True' == os.environ.get('AA_EMAIL_USE_TLS', 'True')
####################
# Front Page Links
####################
# KILLBOARD_URL - URL for your killboard. Blank to hide link
# MEDIA_URL - URL for your media page (youtube etc). Blank to hide link
# FORUM_URL - URL for your forums. Blank to hide link
####################
KILLBOARD_URL = os.environ.get('AA_KILLBOARD_URL', '')
MEDIA_URL = os.environ.get('AA_MEDIA_URL', '')
FORUM_URL = os.environ.get('AA_FORUM_URL', '')
######################### #########################
# Default Group Settings # Default Group Settings
######################### #########################
@ -279,12 +290,10 @@ JACK_KNIFE_URL = os.environ.get('AA_JACK_KNIFE_URL', 'http://ridetheclown.com/ev
##################### #####################
# Forum Configuration # Forum Configuration
##################### #####################
# FORUM_URL - Forum url location
# IPBOARD_ENDPOINT - Api endpoint if using ipboard # IPBOARD_ENDPOINT - Api endpoint if using ipboard
# IPBOARD_APIKEY - Api key to interact with ipboard # IPBOARD_APIKEY - Api key to interact with ipboard
# IPBOARD_APIMODULE - Module for alliance auth *leave alone* # IPBOARD_APIMODULE - Module for alliance auth *leave alone*
##################### #####################
FORUM_URL = os.environ.get('AA_FORUM_URL', "http://yourdomain.com")
IPBOARD_ENDPOINT = os.environ.get('AA_IPBOARD_ENDPOINT', 'yourdomain.com/interface/board/index.php') IPBOARD_ENDPOINT = os.environ.get('AA_IPBOARD_ENDPOINT', 'yourdomain.com/interface/board/index.php')
IPBOARD_APIKEY = os.environ.get('AA_IPBOARD_APIKEY', 'somekeyhere') IPBOARD_APIKEY = os.environ.get('AA_IPBOARD_APIKEY', 'somekeyhere')
IPBOARD_APIMODULE = 'aa' IPBOARD_APIMODULE = 'aa'
@ -347,3 +356,96 @@ TEAMSPEAK3_PUBLIC_URL = os.environ.get('AA_TEAMSPEAK3_PUBLIC_URL', 'yourdomain.c
DISCORD_SERVER_ID = os.environ.get('AA_DISCORD_SERVER_ID', '') DISCORD_SERVER_ID = os.environ.get('AA_DISCORD_SERVER_ID', '')
DISCORD_USER_EMAIL = os.environ.get('AA_DISCORD_USER_EMAIL', '') DISCORD_USER_EMAIL = os.environ.get('AA_DISCORD_USER_EMAIL', '')
DISCORD_USER_PASSWORD = os.environ.get('AA_DISCORD_USER_PASSWORD', '') DISCORD_USER_PASSWORD = os.environ.get('AA_DISCORD_USER_PASSWORD', '')
#####################################
# Logging Configuration
#####################################
# Set log_file and console level to desired state:
# DEBUG - basically stack trace, explains every step
# INFO - model creation, deletion, updates, etc
# WARN - unexpected function outcomes that do not impact user
# ERROR - unexcpeted function outcomes which prevent user from achieving desired outcome
# EXCEPTION - something critical went wrong, unhandled
#####################################
# Recommended level for log_file is INFO, console is DEBUG
# Change log level of individual apps below to narrow your debugging
#####################################
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'log_file': {
'level': 'INFO', # edit this line to change logging level to file
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR,'allianceauth.log'),
'formatter': 'verbose',
'maxBytes': 1024*1024*5, # edit this line to change max log file size
'backupCount': 5, # edit this line to change number of log backups
},
'console': {
'level': 'DEBUG', # edit this line to change logging level to console
'class': 'logging.StreamHandler',
'formatter': 'verbose',
}
},
'loggers': {
'authentication': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'celerytask': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'eveonline': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'groupmanagement': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'hrapplications': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'portal': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'registration': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'services': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'srp': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'timerboard': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'util': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
'django': {
'handlers': ['log_file', 'console'],
'level': 'ERROR',
},
}
}

View File

@ -2,6 +2,9 @@ from django.contrib.auth.models import User
from models import AuthServicesInfo from models import AuthServicesInfo
import logging
logger = logging.getLogger(__name__)
class AuthServicesInfoManager: class AuthServicesInfoManager:
def __init__(self): def __init__(self):
@ -10,10 +13,11 @@ class AuthServicesInfoManager:
@staticmethod @staticmethod
def __get_or_create(user): def __get_or_create(user):
if AuthServicesInfo.objects.filter(user=user).exists(): if AuthServicesInfo.objects.filter(user=user).exists():
logger.debug("Returning existing authservicesinfo model for user %s" % user)
return AuthServicesInfo.objects.get(user=user) return AuthServicesInfo.objects.get(user=user)
else: else:
# We have to create # We have to create
print 'here' logger.info("Creating new authservicesinfo model for user %s" % user)
authserviceinfo = AuthServicesInfo() authserviceinfo = AuthServicesInfo()
authserviceinfo.user = user authserviceinfo.user = user
authserviceinfo.save() authserviceinfo.save()
@ -23,66 +27,97 @@ class AuthServicesInfoManager:
def get_auth_service_info(user): def get_auth_service_info(user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
return AuthServicesInfoManager.__get_or_create(user) return AuthServicesInfoManager.__get_or_create(user)
logger.error("Failed to get authservicesinfo object for user %s: user does not exist." % user)
return None return None
@staticmethod @staticmethod
def update_main_char_Id(char_id, user): def update_main_char_Id(char_id, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s main character to id %s" % (user, char_id))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.main_char_id = char_id authserviceinfo.main_char_id = char_id
authserviceinfo.save(update_fields=['main_char_id']) authserviceinfo.save(update_fields=['main_char_id'])
logger.info("Updated user %s main character to id %s" % (user, char_id))
else:
logger.error("Failed to update user %s main character id to %s: user does not exist." % (user, char_id))
@staticmethod @staticmethod
def update_user_forum_info(username, password, user): def update_user_forum_info(username, password, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s forum info: username %s" % (user, username))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.forum_username = username authserviceinfo.forum_username = username
authserviceinfo.forum_password = password authserviceinfo.forum_password = password
authserviceinfo.save(update_fields=['forum_username', 'forum_password']) authserviceinfo.save(update_fields=['forum_username', 'forum_password'])
logger.info("Updated user %s forum info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s forum info: user does not exist." % user)
@staticmethod @staticmethod
def update_user_jabber_info(username, password, user): def update_user_jabber_info(username, password, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s jabber info: username %s" % (user, username))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.jabber_username = username authserviceinfo.jabber_username = username
authserviceinfo.jabber_password = password authserviceinfo.jabber_password = password
authserviceinfo.save(update_fields=['jabber_username', 'jabber_password']) authserviceinfo.save(update_fields=['jabber_username', 'jabber_password'])
logger.info("Updated user %s jabber info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s jabber info: user does not exist." % user)
@staticmethod @staticmethod
def update_user_mumble_info(username, password, user): def update_user_mumble_info(username, password, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s mumble info: username %s" % (user, username))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.mumble_username = username authserviceinfo.mumble_username = username
authserviceinfo.mumble_password = password authserviceinfo.mumble_password = password
authserviceinfo.save(update_fields=['mumble_username', 'mumble_password']) authserviceinfo.save(update_fields=['mumble_username', 'mumble_password'])
logger.info("Updated user %s mumble info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s mumble info: user does not exist." % user)
@staticmethod @staticmethod
def update_user_ipboard_info(username, password, user): def update_user_ipboard_info(username, password, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s ipboard info: uername %s" % (user, username))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.ipboard_username = username authserviceinfo.ipboard_username = username
authserviceinfo.ipboard_password = password authserviceinfo.ipboard_password = password
authserviceinfo.save(update_fields=['ipboard_username', 'ipboard_password']) authserviceinfo.save(update_fields=['ipboard_username', 'ipboard_password'])
logger.info("Updated user %s ipboard info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s ipboard info: user does not exist." % user)
@staticmethod @staticmethod
def update_user_teamspeak3_info(uid, perm_key, user): def update_user_teamspeak3_info(uid, perm_key, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s teamspeak3 info: uid %s" % (user, uid))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.teamspeak3_uid = uid authserviceinfo.teamspeak3_uid = uid
authserviceinfo.teamspeak3_perm_key = perm_key authserviceinfo.teamspeak3_perm_key = perm_key
authserviceinfo.save(update_fields=['teamspeak3_uid', 'teamspeak3_perm_key']) authserviceinfo.save(update_fields=['teamspeak3_uid', 'teamspeak3_perm_key'])
logger.info("Updated user %s teamspeak3 info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s teamspeak3 info: user does not exist." % user)
@staticmethod @staticmethod
def update_is_blue(is_blue, user): def update_is_blue(is_blue, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s blue status: %s" % (user, is_blue))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.is_blue = is_blue authserviceinfo.is_blue = is_blue
authserviceinfo.save(update_fields=['is_blue']) authserviceinfo.save(update_fields=['is_blue'])
logger.info("Updated user %s blue status to %s in authservicesinfo model." % (user, is_blue))
@staticmethod @staticmethod
def update_user_discord_info(user_id, user): def update_user_discord_info(user_id, user):
if User.objects.filter(username=user.username).exists(): if User.objects.filter(username=user.username).exists():
logger.debug("Updating user %s discord info: user_id %s" % (user, user_id))
authserviceinfo = AuthServicesInfoManager.__get_or_create(user) authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.discord_uid = user_id authserviceinfo.discord_uid = user_id
authserviceinfo.save(update_fields=['discord_uid']) authserviceinfo.save(update_fields=['discord_uid'])
logger.info("Updated user %s discord info in authservicesinfo model." % user)
else:
logger.error("Failed to update user %s discord info: user does not exist." % user)

View File

@ -7,26 +7,39 @@ from django.template import RequestContext
from forms import LoginForm from forms import LoginForm
import logging
logger = logging.getLogger(__name__)
def login_user(request): def login_user(request):
logger.debug("login_user called by user %s" % request.user)
if request.method == 'POST': if request.method == 'POST':
form = LoginForm(request.POST) form = LoginForm(request.POST)
logger.debug("Request of type POST, received form, valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password']) user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password'])
logger.debug("Authentication attempt with supplied credentials. Received user %s" % user)
if user is not None: if user is not None:
if user.is_active: if user.is_active:
logger.info("Successful login attempt from user %s" % user)
login(request, user) login(request, user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
else:
logger.info("Login attempt failed for user %s: user marked inactive." % user)
else:
logger.info("Failed login attempt: provided username %s" % form.cleaned_data['username'])
return render_to_response('public/login.html', {'form': form, 'error': True}, return render_to_response('public/login.html', {'form': form, 'error': True},
context_instance=RequestContext(request)) context_instance=RequestContext(request))
else: else:
logger.debug("Providing new login form.")
form = LoginForm() form = LoginForm()
return render_to_response('public/login.html', {'form': form}, context_instance=RequestContext(request)) return render_to_response('public/login.html', {'form': form}, context_instance=RequestContext(request))
def logout_user(request): def logout_user(request):
logger.debug("logout_user called by user %s" % request.user)
logout(request) logout(request)
return HttpResponseRedirect("/") logger.info("Successful logout for user %s" % request.user)
return HttpResponseRedirect("/")

View File

@ -9,7 +9,7 @@ from services.managers.mumble_manager import MumbleManager
from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.phpbb3_manager import Phpbb3Manager
from services.managers.ipboard_manager import IPBoardManager from services.managers.ipboard_manager import IPBoardManager
from services.managers.teamspeak3_manager import Teamspeak3Manager from services.managers.teamspeak3_manager import Teamspeak3Manager
from services.managers.discord_manager import DiscordManager from services.managers.discord_manager import DiscordManager, DiscordAPIManager
from services.models import AuthTS from services.models import AuthTS
from services.models import TSgroup from services.models import TSgroup
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
@ -25,84 +25,105 @@ from util.common_task import generate_corp_group_name
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from eveonline.models import EveCorporationInfo from eveonline.models import EveCorporationInfo
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from services.models import DiscordAuthToken
import logging
logger = logging.getLogger(__name__)
def disable_alliance_member(user, char_id): def disable_alliance_member(user, char_id):
logger.debug("Disabling alliance member %s" % user)
remove_member_permission(user, 'member') remove_member_permission(user, 'member')
remove_user_from_group(user, settings.DEFAULT_AUTH_GROUP) remove_user_from_group(user, settings.DEFAULT_AUTH_GROUP)
remove_user_from_group(user, remove_user_from_group(user,
generate_corp_group_name( generate_corp_group_name(
EveManager.get_character_by_id(char_id).corporation_name)) EveManager.get_character_by_id(char_id).corporation_name))
deactivate_services(user) deactivate_services(user)
logger.info("Disabled alliance member %s" % user)
def disable_expired_member(user): def disable_expired_member(user):
logger.debug("Disabling expired member %s" % user)
deactivate_services(user) deactivate_services(user)
user.user_permissions.clear() user.user_permissions.clear()
user.groups.clear() user.groups.clear()
user.save() user.save()
logger.info("Disabled expired member %s" % user)
def disable_blue_member(user): def disable_blue_member(user):
logger.debug("Disabling blue member %s" % user)
remove_member_permission(user, 'blue_member') remove_member_permission(user, 'blue_member')
remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP) remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
deactivate_services(user) deactivate_services(user)
AuthServicesInfoManager.update_is_blue(False, user) AuthServicesInfoManager.update_is_blue(False, user)
logger.info("Disabled blue member %s" % user)
def is_teamspeak3_active(): def is_teamspeak3_active():
return settings.ENABLE_AUTH_TEAMSPEAK3 or settings.ENABLE_BLUE_TEAMSPEAK3 return settings.ENABLE_AUTH_TEAMSPEAK3 or settings.ENABLE_BLUE_TEAMSPEAK3
def update_jabber_groups(user): def update_jabber_groups(user):
logger.debug("Updating jabber groups for user %s" % user)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = []
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
for syncgroup in syncgroups: for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname)) groups.append(str(syncgroup.groupname))
if len(groups) == 0: if len(groups) == 0:
groups.append('empty') groups.append('empty')
logger.debug("Updating user %s jabber groups to %s" % (user, groups))
OpenfireManager.update_user_groups(authserviceinfo.jabber_username, authserviceinfo.jabber_password, groups) OpenfireManager.update_user_groups(authserviceinfo.jabber_username, authserviceinfo.jabber_password, groups)
logger.info("Updated user %s jabber groups." % user)
def update_mumble_groups(user): def update_mumble_groups(user):
logger.debug("Updating mumble groups for user %s" % user)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = []
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
for syncgroup in syncgroups: for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname)) groups.append(str(syncgroup.groupname))
if len(groups) == 0: if len(groups) == 0:
groups.append('empty') groups.append('empty')
logger.debug("Updating user %s mumble groups to %s" % (user, groups))
MumbleManager.update_groups(authserviceinfo.mumble_username, groups) MumbleManager.update_groups(authserviceinfo.mumble_username, groups)
logger.info("Updated user %s mumble groups." % user)
def update_forum_groups(user): def update_forum_groups(user):
logger.debug("Updating forum groups for user %s" % user)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = []
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
for syncgroup in syncgroups: for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname)) groups.append(str(syncgroup.groupname))
if len(groups) == 0: if len(groups) == 0:
groups.append('empty') groups.append('empty')
logger.debug("Updating user %s forum groups to %s" % (user, groups))
Phpbb3Manager.update_groups(authserviceinfo.forum_username, groups) Phpbb3Manager.update_groups(authserviceinfo.forum_username, groups)
logger.info("Updated user %s forum groups." % user)
def update_ipboard_groups(user): def update_ipboard_groups(user):
logger.debug("Updating user %s ipboard groups." % user)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = []
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
for syncgroup in syncgroups: for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname)) groups.append(str(syncgroup.groupname))
if len(groups) == 0: if len(groups) == 0:
groups.append('empty') groups.append('empty')
logger.debug("Updating user %s ipboard groups to %s" % (user, groups))
IPBoardManager.update_groups(authserviceinfo.ipboard_username, groups) IPBoardManager.update_groups(authserviceinfo.ipboard_username, groups)
logger.info("Updated user %s ipboard groups." % user)
def update_teamspeak3_groups(user): def update_teamspeak3_groups(user):
logger.debug("Updating user %s teamspeak3 groups" % user)
usergroups = user.groups.all() usergroups = user.groups.all()
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = {} groups = {}
@ -112,157 +133,214 @@ def update_teamspeak3_groups(user):
for filtered_group in filtered_groups: for filtered_group in filtered_groups:
for ts_group in filtered_group.ts_group.all(): for ts_group in filtered_group.ts_group.all():
groups[ts_group.ts_group_name] = ts_group.ts_group_id groups[ts_group.ts_group_name] = ts_group.ts_group_id
if (is_teamspeak3_active()): logger.debug("Updating user %s teamspeak3 groups to %s" % (user, groups))
Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups)
logger.info("Updated user %s teamspeak3 groups." % user)
def update_discord_groups(user): def update_discord_groups(user):
logger.debug("Updating discord groups for user %s" % user)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = []
for syncgroup in syncgroups: for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname)) groups.append(str(syncgroup.groupname))
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
if len(groups) == 0: if len(groups) == 0:
logger.debug("No syncgroups found for user. Adding empty group.")
groups.append('empty') groups.append('empty')
logger.debug("Updating user %s discord groups to %s" % (user, groups))
DiscordManager.update_groups(authserviceinfo.discord_uid, groups) DiscordManager.update_groups(authserviceinfo.discord_uid, groups)
logger.info("Updated user %s discord groups." % user)
def create_syncgroup_for_user(user, groupname, servicename): def create_syncgroup_for_user(user, groupname, servicename):
logger.debug("Creating syncgroupcache for user %s group %s in service %s" % (user, groupname, servicename))
synccache = SyncGroupCache() synccache = SyncGroupCache()
synccache.groupname = groupname synccache.groupname = groupname
synccache.user = user synccache.user = user
synccache.servicename = servicename synccache.servicename = servicename
synccache.save() synccache.save()
logger.info("Created syncgroup for user %s group %s in service %s" % (user, groupname, servicename))
def remove_all_syncgroups_for_service(user, servicename): def remove_all_syncgroups_for_service(user, servicename):
logger.debug("Removing all syncgroups for user %s service %s" % (user, servicename))
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
logger.debug("User %s has %s syncgroups." % (user, len(syncgroups)))
for syncgroup in syncgroups: for syncgroup in syncgroups:
if syncgroup.servicename == servicename: if syncgroup.servicename == servicename:
logger.debug("Deleting syncgroups %s" % syncgroup)
syncgroup.delete() syncgroup.delete()
logger.info("Removed all syncgroups for user %s service %s" % (user, servicename))
def add_to_databases(user, groups, syncgroups): def add_to_databases(user, groups, syncgroups):
logger.debug("add_to_database for user %s called. groups %s - syncgroups %s" % (user, groups, syncgroups))
authserviceinfo = None authserviceinfo = None
try: try:
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
logger.debug("Got authservicesinfo object %s" % authserviceinfo)
except: except:
logger.debug("No authservicesinfo object found for user %s" % user)
pass pass
if authserviceinfo: if authserviceinfo:
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
update_teamspeak3_groups(user) logger.debug("Updating user TS groups.")
update_teamspeak3_groups(user)
for group in groups: for group in groups:
if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="openfire").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="openfire").exists() is not True:
logger.debug("User %s has jabber username %s - missing group %s." % (user, authserviceinfo.jabber_username, group.name))
create_syncgroup_for_user(user, group.name, "openfire") create_syncgroup_for_user(user, group.name, "openfire")
update_jabber_groups(user) update_jabber_groups(user)
if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "": if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="mumble").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="mumble").exists() is not True:
logger.debug("User %s has mumble username %s - missing group %s." % (user, authserviceinfo.mumble_username, group.name))
create_syncgroup_for_user(user, group.name, "mumble") create_syncgroup_for_user(user, group.name, "mumble")
update_mumble_groups(user) update_mumble_groups(user)
if authserviceinfo.forum_username and authserviceinfo.forum_username != "": if authserviceinfo.forum_username and authserviceinfo.forum_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="phpbb3").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="phpbb3").exists() is not True:
logger.debug("User %s has phpbb username %s - missing group %s." % (user, authserviceinfo.forum_username, group.name))
create_syncgroup_for_user(user, group.name, "phpbb3") create_syncgroup_for_user(user, group.name, "phpbb3")
update_forum_groups(user) update_forum_groups(user)
if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "": if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True:
logger.debug("User %s has ipboard username %s - missing group %s." % (user, authserviceinfo.ipboard_username, group.name))
create_syncgroup_for_user(user, group.name, "ipboard") create_syncgroup_for_user(user, group.name, "ipboard")
update_ipboard_groups(user) update_ipboard_groups(user)
if authserviceinfo.discord_uid and authserviceinfo.discord_uid != "": if authserviceinfo.discord_uid and authserviceinfo.discord_uid != "":
if syncgroups.filter(groupname=group.name).filter(servicename="discord").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="discord").exists() is not True:
logger.debug("User %s has discord uid %s - missing group %s." % (user, authserviceinfo.discord_uid, group.name))
create_syncgroup_for_user(user, group.name, "discord") create_syncgroup_for_user(user, group.name, "discord")
update_discord_groups(user) update_discord_groups(user)
def remove_from_databases(user, groups, syncgroups): def remove_from_databases(user, groups, syncgroups):
logger.debug("remove_from_database for user %s called. groups %s - syncgroups %s" % (user, groups, syncgroups))
authserviceinfo = None authserviceinfo = None
try: try:
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
logger.debug("Got authservicesinfo object %s" % authserviceinfo)
except: except:
logger.debug("No authservicesinfo object found for user %s" % user)
pass pass
if authserviceinfo: if authserviceinfo:
update = False update = False
for syncgroup in syncgroups: for syncgroup in syncgroups:
group = groups.filter(name=syncgroup.groupname) group = groups.filter(name=syncgroup.groupname)
logger.debug("Got group %s for syncgroup %s" % (group, syncgroup))
if not group: if not group:
logger.debug("Deleting syncgroup %s" % syncgroup)
syncgroup.delete() syncgroup.delete()
update = True update = True
if update: if update:
logger.debug("Syncgroups updated. Propogating to services for user %s" % user)
if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "":
logger.debug("User %s has jabber username %s - updating groups." % (user, authserviceinfo.jabber_username))
update_jabber_groups(user) update_jabber_groups(user)
if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "": if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "":
logger.debug("User %s has mumble username %s - updating groups." % (user, authserviceinfo.mumble_username))
update_mumble_groups(user) update_mumble_groups(user)
if authserviceinfo.forum_username and authserviceinfo.forum_username != "": if authserviceinfo.forum_username and authserviceinfo.forum_username != "":
logger.debug("User %s has forum username %s - updating groups." % (user, authserviceinfo.forum_username))
update_forum_groups(user) update_forum_groups(user)
if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "": if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "":
logger.debug("User %s has ipboard username %s - updating groups." % (user, authserviceinfo.ipboard_username))
update_ipboard_groups(user) update_ipboard_groups(user)
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
logger.debug("User %s has ts3 uid %s - updating groups." % (user, authserviceinfo.teamspeak3_uid))
update_teamspeak3_groups(user) update_teamspeak3_groups(user)
if authserviceinfo.discord_uid and authserviceinfo.discord_uid != "": if authserviceinfo.discord_uid and authserviceinfo.discord_uid != "":
logger.debug("User %s has discord uid %s - updating groups." % (user, authserviceinfo.discord_uid))
update_discord_groups(user) update_discord_groups(user)
# Run every minute # Run every minute
@periodic_task(run_every=crontab(minute="*/1")) @periodic_task(run_every=crontab(minute="*/1"))
def run_databaseUpdate(): def run_databaseUpdate():
logger.debug("Starting database update.")
users = User.objects.all() users = User.objects.all()
if (is_teamspeak3_active()): if (is_teamspeak3_active()):
logger.debug("TS3 installed. Syncing local group objects.")
Teamspeak3Manager._sync_ts_group_db() Teamspeak3Manager._sync_ts_group_db()
for user in users: for user in users:
logger.debug("Initiating database update for user %s" % user)
groups = user.groups.all() groups = user.groups.all()
logger.debug("User has groups %s" % groups)
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
logger.debug("User has syncgroups %s" % syncgroups)
add_to_databases(user, groups, syncgroups) add_to_databases(user, groups, syncgroups)
remove_from_databases(user, groups, syncgroups) remove_from_databases(user, groups, syncgroups)
# Run every 2 hours
@periodic_task(run_every=crontab(minute="0", hour="*/2"))
def run_discord_token_cleanup():
logger.debug("Running validation of all DiscordAuthTokens")
for auth in DiscordAuthToken.objects.all():
logger.debug("Testing DiscordAuthToken %s" % auth)
if DiscordAPIManager.validate_token(auth.token):
logger.debug("Token passes validation. Retaining %s" % auth)
else:
logger.debug("DiscordAuthToken failed validation. Deleting %s" % auth)
auth.delete()
# Run every 3 hours # Run every 3 hours
@periodic_task(run_every=crontab(minute=0, hour="*/3")) @periodic_task(run_every=crontab(minute=0, hour="*/3"))
def run_api_refresh(): def run_api_refresh():
users = User.objects.all() users = User.objects.all()
logger.debug("Running api refresh on %s users." % len(users))
for user in users: for user in users:
# Check if the api server is online # Check if the api server is online
logger.debug("Running api refresh for user %s" % user)
if EveApiManager.check_if_api_server_online(): if EveApiManager.check_if_api_server_online():
api_key_pairs = EveManager.get_api_key_pairs(user.id) api_key_pairs = EveManager.get_api_key_pairs(user.id)
logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
if api_key_pairs: if api_key_pairs:
valid_key = False valid_key = False
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
print 'Running update on user: ' + user.username logger.debug("User %s has api keys. Proceeding to refresh." % user)
if authserviceinfo.main_char_id: if authserviceinfo.main_char_id:
if authserviceinfo.main_char_id != "": if authserviceinfo.main_char_id != "":
#preserve old corp ID for corp change test on members #preserve old corp ID for corp change test on members
oldcorp_id = 0 oldcorp_id = 0
if EveManager.get_character_by_id(authserviceinfo.main_char_id): if EveManager.get_character_by_id(authserviceinfo.main_char_id):
oldcorp_id = EveCharacter.objects.get(character_id=authserviceinfo.main_char_id).corporation_id oldcorp_id = EveCharacter.objects.get(character_id=authserviceinfo.main_char_id).corporation_id
logger.debug("Determined user %s current main corp id %s" % (user, oldcorp_id))
for api_key_pair in api_key_pairs: for api_key_pair in api_key_pairs:
print 'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key logger.debug("Running update on api key %s" % api_key_pair.api_id)
if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key): if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
#check to ensure API key meets min spec #check to ensure API key meets min spec
logger.info("Determined api key %s is still active." % api_key_pair.api_id)
still_valid = True still_valid = True
if authserviceinfo.is_blue: if authserviceinfo.is_blue:
if settings.BLUE_API_ACCOUNT: if settings.BLUE_API_ACCOUNT:
if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key): if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
logger.info("Determined api key %s for blue user %s is no longer type account as requred." % (api_key_pair.api_id, user))
still_valid = False still_valid = False
if not EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key): if not EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
logger.info("Determined api key %s for blue user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
still_valid = False still_valid = False
else: else:
if settings.MEMBER_API_ACCOUNT: if settings.MEMBER_API_ACCOUNT:
if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key): if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
logger.info("Determined api key %s for user %s is no longer type account as required." % (api_key_pair.api_id, user))
still_valid = False still_valid = False
if not EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key): if not EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
logger.info("Determined api key %s for user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
still_valid = False still_valid = False
if still_valid is not True: if still_valid is not True:
logger.debug("API key %s has failed validation; it and its characters will be deleted." % api_key_pair.api_id)
EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id) EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
EveManager.delete_api_key_pair(api_key_pair.api_id, user.id) EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
else: else:
logger.info("Determined api key %s still meets requirements." % api_key_pair.api_id)
# Update characters # Update characters
characters = EveApiManager.get_characters_from_api(api_key_pair.api_id, characters = EveApiManager.get_characters_from_api(api_key_pair.api_id,
api_key_pair.api_key) api_key_pair.api_key)
@ -272,25 +350,32 @@ def run_api_refresh():
# Ensure we have a model for all characters on key # Ensure we have a model for all characters on key
if not EveManager.check_if_character_exist(characters.result[char]['name']): if not EveManager.check_if_character_exist(characters.result[char]['name']):
new_character = True new_character = True
logger.debug("API key %s has a new character on the account: %s" % (api_key_pair.api_id, characters.result[char]['name']))
if new_character: if new_character:
logger.debug("Creating new character %s from api key %s" % (characters.result[char]['name'], api_key_pair.api_id))
EveManager.create_characters_from_list(characters, user, api_key_pair.api_key) EveManager.create_characters_from_list(characters, user, api_key_pair.api_key)
valid_key = True valid_key = True
else: else:
logger.debug("API key %s is no longer active; it and its characters will be deleted." % api_key_pair.api_id)
EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id) EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
EveManager.delete_api_key_pair(api_key_pair.api_id, user.id) EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
if valid_key: if valid_key:
# Check our main character # Check our main character
character = EveManager.get_character_by_id(authserviceinfo.main_char_id) character = EveManager.get_character_by_id(authserviceinfo.main_char_id)
logger.debug("User %s has valid api key, checking main character %s" % (user, character))
if character is not None and EveManager.check_if_corporation_exists_by_id(character.corporation_id): if character is not None and EveManager.check_if_corporation_exists_by_id(character.corporation_id):
corp = EveManager.get_corporation_info_by_id(character.corporation_id) corp = EveManager.get_corporation_info_by_id(character.corporation_id)
main_corp_id = EveManager.get_charater_corporation_id_by_id(authserviceinfo.main_char_id) main_corp_id = EveManager.get_charater_corporation_id_by_id(authserviceinfo.main_char_id)
main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id) main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id)
logger.debug("User %s main character %s has corp %s with alliance id %s" % (user, character, corp, main_alliance_id))
if (settings.IS_CORP and main_corp_id == settings.CORP_ID) or (not settings.IS_CORP and main_alliance_id == settings.ALLIANCE_ID): if (settings.IS_CORP and main_corp_id == settings.CORP_ID) or (not settings.IS_CORP and main_alliance_id == settings.ALLIANCE_ID):
logger.debug("User %s corp or alliance meets membership requirements. Ensuring has required permissions and groups." % user)
if not check_if_user_has_permission(user, "member"): if not check_if_user_has_permission(user, "member"):
#transition from none or blue to member #transition from none or blue to member
if check_if_user_has_permission(user, "blue_member"): if check_if_user_has_permission(user, "blue_member"):
#strip blue status #strip blue status
logger.debug("Removing user %s blue permission and group to prepare for member transition." % user)
remove_member_permission(user, "blue_member") remove_member_permission(user, "blue_member")
remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP) remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
AuthServicesInfoManager.update_is_blue(False, user) AuthServicesInfoManager.update_is_blue(False, user)
@ -299,51 +384,65 @@ def run_api_refresh():
add_user_to_group(user, settings.DEFAULT_AUTH_GROUP) add_user_to_group(user, settings.DEFAULT_AUTH_GROUP)
#add to required corp group #add to required corp group
add_user_to_group(user, generate_corp_group_name(character.corporation_name)) add_user_to_group(user, generate_corp_group_name(character.corporation_name))
logger.info("User %s transitioned to full member during api refresh." % user)
elif corp.corporation_id != oldcorp_id: elif corp.corporation_id != oldcorp_id:
#changed corps, both corps auth'd, need to change group assignment #changed corps, both corps auth'd, need to change group assignment
logger.debug("User %s main character changed corp from id %s to %s, both meet membership requirements. Updating corp group." % (user, oldcorp_id, corp.corporation_id))
oldcorp = EveCorporationInfo.objects.get(corporation_id=oldcorp_id) oldcorp = EveCorporationInfo.objects.get(corporation_id=oldcorp_id)
remove_user_from_group(user, generate_corp_group_name(oldcorp.corporation_name)) remove_user_from_group(user, generate_corp_group_name(oldcorp.corporation_name))
add_user_to_group(user, generate_corp_group_name(character.corporation_name)) add_user_to_group(user, generate_corp_group_name(character.corporation_name))
#reset services to force new mumble names and group assignments #reset services to force new mumble names and group assignments
deactivate_services(user) deactivate_services(user)
logger.info("User %s transferred corps from member to member. Reassigned groups." % user)
elif corp is not None: elif corp is not None:
logger.debug("User %s main corp %s does not meet membership requirements." % (user, corp))
if corp.is_blue is not True: if corp.is_blue is not True:
if check_if_user_has_permission(user, "member"): if check_if_user_has_permission(user, "member"):
#transition from member to nobody #transition from member to nobody
disable_alliance_member(user, authserviceinfo.main_char_id) disable_alliance_member(user, authserviceinfo.main_char_id)
logger.info("User %s no longer member: main has left member corp/alliance." % user)
elif check_if_user_has_permission(user, "blue_member"): elif check_if_user_has_permission(user, "blue_member"):
#transition from blue to nobody #transition from blue to nobody
disable_blue_member(user) disable_blue_member(user)
logger.info("User %s no longer blue: main has left blue entities." % user)
else: else:
#stay nobody, make sure no services #stay nobody, make sure no services
deactivate_services(user) deactivate_services(user)
logger.debug("Ensured non-member %s has no services." % user)
else: else:
if check_if_user_has_permission(user, "member"): if check_if_user_has_permission(user, "member"):
#remove auth member to prepare for member to blue transition #remove auth member to prepare for member to blue transition
disable_alliance_member(user, authserviceinfo.main_char_id) disable_alliance_member(user, authserviceinfo.main_char_id)
logger.debug("Removed user %s member group/permissions to transition to blue." % user)
if not check_if_user_has_permission(user, "blue_member"): if not check_if_user_has_permission(user, "blue_member"):
#perform nobody to blue transition #perform nobody to blue transition
add_member_permission(user, "blue_member") add_member_permission(user, "blue_member")
add_user_to_group(user, settings.DEFAULT_BLUE_GROUP) add_user_to_group(user, settings.DEFAULT_BLUE_GROUP)
AuthServicesInfoManager.update_is_blue(True, user) AuthServicesInfoManager.update_is_blue(True, user)
logger.info("User %s transitioned to blue member during api refresh." % user)
else: else:
# disable accounts with missing corp model (not blue or member) # disable accounts with missing corp model (not blue or member)
if check_if_user_has_permission(user, "member"): if check_if_user_has_permission(user, "member"):
disable_alliance_member(user, authserviceinfo.main_char_id) disable_alliance_member(user, authserviceinfo.main_char_id)
logger.info("User %s disabled (previously member) as unable to check missing corp model." % user)
elif check_if_user_has_permission(user, "blue_member"): elif check_if_user_has_permission(user, "blue_member"):
disable_blue_member(user) disable_blue_member(user)
logger.info("User %s disabled (previously blue) as unable to check missing corp model." % user)
else: else:
deactivate_services(user) deactivate_services(user)
logger.debug("Ensured non-member %s has no services." % user)
else: else:
# nuke it, the hard way # nuke it, the hard way
disable_expired_member(user) disable_expired_member(user)
logger.info("User %s disabled due to missing main character or corp model." % user)
else: else:
# disable accounts with invalid keys # disable accounts with invalid keys
disable_expired_member(user) disable_expired_member(user)
logger.info("User %s has no valid api keys and has been disabled." % user)
else: else:
print 'No main_char_id set' logger.warn("User %s has no main character id, unable to validate membership.")
# Run Every 2 hours # Run Every 2 hours
@ -351,36 +450,48 @@ def run_api_refresh():
def run_corp_update(): def run_corp_update():
# I am not proud of this block of code # I am not proud of this block of code
if EveApiManager.check_if_api_server_online(): if EveApiManager.check_if_api_server_online():
logger.debug("API server online and reachable. Proceeding with corp update.")
if settings.IS_CORP: if settings.IS_CORP:
# Create the corp # Create the corp
logger.debug("Ensuring corp model exists for owning corp id %s due to settings.IS_CORP %s" % (settings.CORP_ID, settings.IS_CORP))
ownercorpinfo = EveApiManager.get_corporation_information(settings.CORP_ID) ownercorpinfo = EveApiManager.get_corporation_information(settings.CORP_ID)
logger.debug("Determined ownercorp info: %s" % ownercorpinfo)
if not EveManager.check_if_corporation_exists_by_id(ownercorpinfo['id']): if not EveManager.check_if_corporation_exists_by_id(ownercorpinfo['id']):
logger.debug("Owning corp id %s does not have a model. Creating." % ownercorpinfo['id'])
if ownercorpinfo['alliance']['id'] is None: if ownercorpinfo['alliance']['id'] is None:
logger.debug("Owning corp does not have an alliance. Creating model with alliance=None")
EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'], EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'],
ownercorpinfo['members']['current'], False, None) ownercorpinfo['members']['current'], False, None)
else: else:
alliance_info = EveApiManager.get_alliance_information(ownercorpinfo['alliance']['id']) alliance_info = EveApiManager.get_alliance_information(ownercorpinfo['alliance']['id'])
if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID): logger.debug("Owning corp has an alliance, got info: %s" % alliance_info)
EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'], if not EveManager.check_if_alliance_exists_by_id(ownercorpinfo['alliance']['id']):
logger.debug("Owning corp missing alliance model. Creating for id %s" % ownercorpinfo['alliance']['id'])
EveManager.create_alliance_info(ownercorpinfo['alliance']['id'], alliance_info['name'], alliance_info['ticker'],
alliance_info['executor_id'], alliance_info['member_count'], False) alliance_info['executor_id'], alliance_info['member_count'], False)
alliance = EveManager.get_alliance_info_by_id(ownercorpinfo['alliance']['id']) alliance = EveManager.get_alliance_info_by_id(ownercorpinfo['alliance']['id'])
logger.debug("Got alliance model %s for owning corp. Creating corp model." % alliance)
EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'], EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'],
ownercorpinfo['members']['current'], False, alliance) ownercorpinfo['members']['current'], False, alliance)
else: else:
# Updated alliance info # Updated alliance info
logger.debug("Getting info for owning alliance %s" % settings.ALLIANCE_ID)
alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID) alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)
logger.debug("Owning alliance info: %s" % alliance_info)
# Populate alliance info # Populate alliance info
if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID): if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
logger.debug("Missing alliance model for owning alliance. Creating with id %s" % settings.ALLIANCE_ID)
EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'], EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'],
alliance_info['executor_id'], alliance_info['member_count'], False) alliance_info['executor_id'], alliance_info['member_count'], False)
alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID) alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)
logger.debug("Got owning alliance model %s" % alliance)
# Create the corps in the alliance # Create the corps in the alliance
for alliance_corp in alliance_info['member_corps']: for alliance_corp in alliance_info['member_corps']:
corpinfo = EveApiManager.get_corporation_information(alliance_corp) corpinfo = EveApiManager.get_corporation_information(alliance_corp)
logger.debug("Got corpinfo for alliance member corp: %s" % corpinfo)
if not EveManager.check_if_corporation_exists_by_id(corpinfo['id']): if not EveManager.check_if_corporation_exists_by_id(corpinfo['id']):
logger.debug("Alliance member corp id %s missing model - creating." % corpinfo['id'])
EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'], EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
corpinfo['members']['current'], False, alliance) corpinfo['members']['current'], False, alliance)
@ -388,129 +499,167 @@ def run_corp_update():
#refer to https://github.com/eve-val/evelink/blob/master/evelink/parsing/contact_list.py#L43 #refer to https://github.com/eve-val/evelink/blob/master/evelink/parsing/contact_list.py#L43
standing_level = 'alliance' standing_level = 'alliance'
if settings.IS_CORP: if settings.IS_CORP:
logger.debug("Switching standings check to corp level.")
standing_level = 'corp' standing_level = 'corp'
# Create the corps in the standings # Create the corps in the standings
corp_standings = EveApiManager.get_corp_standings() corp_standings = EveApiManager.get_corp_standings()
logger.debug("Got %s corp standings." % len(corp_standings))
if corp_standings: if corp_standings:
for standing_id in EveApiManager.get_corp_standings()[standing_level]: for standing_id in EveApiManager.get_corp_standings()[standing_level]:
logger.debug("Processing standing id %s" % standing_id)
if int(corp_standings[standing_level][standing_id]['standing']) >= settings.BLUE_STANDING: if int(corp_standings[standing_level][standing_id]['standing']) >= settings.BLUE_STANDING:
logger.debug("Standing %s meets or exceeds blue threshold." % standing_id)
if EveApiManager.check_if_id_is_character(standing_id): if EveApiManager.check_if_id_is_character(standing_id):
logger.debug("Standing id %s is a character. Not creating model.")
pass pass
elif EveApiManager.check_if_id_is_corp(standing_id): elif EveApiManager.check_if_id_is_corp(standing_id):
corpinfo = EveApiManager.get_corporation_information(standing_id) corpinfo = EveApiManager.get_corporation_information(standing_id)
logger.debug("Standing id %s is a corp. Got corpinfo: %s" % (standing_id, corpinfo))
if not EveManager.check_if_corporation_exists_by_id(standing_id): if not EveManager.check_if_corporation_exists_by_id(standing_id):
logger.debug("Corp model for standing id %s does not exist. Creating" % standing_id)
EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'], EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
corpinfo['members']['current'], True, None) corpinfo['members']['current'], True, None)
else: else:
# Alliance id create corps # Alliance id create corps
blue_alliance_info = EveApiManager.get_alliance_information(standing_id) blue_alliance_info = EveApiManager.get_alliance_information(standing_id)
logger.debug("Standing id %s is alliance. Got alliance info: %s" % (standing_id, blue_alliance_info))
if not EveManager.check_if_alliance_exists_by_id(standing_id): if not EveManager.check_if_alliance_exists_by_id(standing_id):
logger.debug("Alliance model for standing id %s does not exist. Creating" % standing_id)
EveManager.create_alliance_info(standing_id, blue_alliance_info['name'], EveManager.create_alliance_info(standing_id, blue_alliance_info['name'],
blue_alliance_info['ticker'], blue_alliance_info['ticker'],
blue_alliance_info['executor_id'], blue_alliance_info['executor_id'],
blue_alliance_info['member_count'], True) blue_alliance_info['member_count'], True)
blue_alliance = EveManager.get_alliance_info_by_id(standing_id) blue_alliance = EveManager.get_alliance_info_by_id(standing_id)
logger.debug("Got alliance model %s for standing id %s" % (blue_alliance, standing_id))
for blue_alliance_corp in blue_alliance_info['member_corps']: for blue_alliance_corp in blue_alliance_info['member_corps']:
blue_info = EveApiManager.get_corporation_information(blue_alliance_corp) blue_info = EveApiManager.get_corporation_information(blue_alliance_corp)
logger.debug("Got corpinfo for member corp id %s of blue alliance %s: %s" % (blue_info['id'], blue_alliance, blue_info))
if not EveManager.check_if_corporation_exists_by_id(blue_info['id']): if not EveManager.check_if_corporation_exists_by_id(blue_info['id']):
logger.debug("Blue alliance %s member corp id %s missing model. Creating." % (blue_alliance, blue_info['id']))
EveManager.create_corporation_info(blue_info['id'], blue_info['name'], EveManager.create_corporation_info(blue_info['id'], blue_info['name'],
blue_info['ticker'], blue_info['ticker'],
blue_info['members']['current'], True, blue_alliance) blue_info['members']['current'], True, blue_alliance)
# Update all allinace info's # Update all allinace info's
for all_alliance_info in EveManager.get_all_alliance_info(): for all_alliance_info in EveManager.get_all_alliance_info():
logger.debug("Validating alliance model %s" % all_alliance_info)
if EveApiManager.check_if_alliance_exists(all_alliance_info.alliance_id): if EveApiManager.check_if_alliance_exists(all_alliance_info.alliance_id):
all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id) all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id)
logger.debug("Got alliance %s alliance info: %s" % (all_alliance_info, all_alliance_api_info))
if (not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID): if (not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID):
logger.debug("Alliance %s is owning alliance. Updating info." % all_alliance_info)
EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'], EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False) all_alliance_api_info['member_count'], False)
elif standing_level in corp_standings: elif standing_level in corp_standings:
if int(all_alliance_info.alliance_id) in corp_standings[standing_level]: if int(all_alliance_info.alliance_id) in corp_standings[standing_level]:
if int(corp_standings[standing_level][int(all_alliance_info.alliance_id)][ if int(corp_standings[standing_level][int(all_alliance_info.alliance_id)][
'standing']) >= settings.BLUE_STANDING: 'standing']) >= settings.BLUE_STANDING:
logger.debug("Alliance %s is blue. Updating." % all_alliance_info)
EveManager.update_alliance_info(all_alliance_api_info['id'], EveManager.update_alliance_info(all_alliance_api_info['id'],
all_alliance_api_info['executor_id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], True) all_alliance_api_info['member_count'], True)
else: else:
logger.debug("Alliance %s does not meet blue standing threshold. Updating as non-blue." % all_alliance_info)
EveManager.update_alliance_info(all_alliance_api_info['id'], EveManager.update_alliance_info(all_alliance_api_info['id'],
all_alliance_api_info['executor_id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False) all_alliance_api_info['member_count'], False)
else: else:
logger.debug("Alliance %s not in standings. Updating as non-blue." % all_alliance_info)
EveManager.update_alliance_info(all_alliance_api_info['id'], EveManager.update_alliance_info(all_alliance_api_info['id'],
all_alliance_api_info['executor_id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False) all_alliance_api_info['member_count'], False)
else: else:
logger.debug("No standings found. Updating alliance %s as non-blue." % all_alliance_info)
EveManager.update_alliance_info(all_alliance_api_info['id'], EveManager.update_alliance_info(all_alliance_api_info['id'],
all_alliance_api_info['executor_id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False) all_alliance_api_info['member_count'], False)
else: else:
logger.info("Alliance %s has closed. Deleting model." % all_alliance_info)
#alliance no longer exists #alliance no longer exists
all_alliance_info.delete() all_alliance_info.delete()
# Update corp infos # Update corp infos
for all_corp_info in EveManager.get_all_corporation_info(): for all_corp_info in EveManager.get_all_corporation_info():
logger.debug("Validating corp model %s" % all_corp_info)
if EveApiManager.check_if_corp_exists(all_corp_info.corporation_id): if EveApiManager.check_if_corp_exists(all_corp_info.corporation_id):
alliance = None alliance = None
corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id) corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
if corpinfo['alliance']['id'] is not None: if corpinfo['alliance']['id'] is not None:
alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id']) alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id'])
logger.debug("Got corpinfo %s and allianceinfo %s" % (corpinfo, alliance))
if alliance is not None and all_corp_info.alliance is not None: if (settings.IS_CORP and all_corp_info.corporation_id == settings.CORP_ID):
logger.debug("Corp %s is owning corp. Updating." % all_corp_info)
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
elif int(all_corp_info.corporation_id) in corp_standings[standing_level]:
if int(corp_standings[standing_level][int(all_corp_info.corporation_id)][
'standing']) >= settings.BLUE_STANDING:
logger.debug("Corp %s is blue. Updating." % all_corp_info)
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True)
else:
logger.debug("Corp %s does not meet blue standing threshold. Updating as non-blue." % all_corp_info)
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
elif alliance is not None and all_corp_info.alliance is not None:
logger.debug("Corp %s not in standings - checking alliance with model %s" % (all_corp_info, alliance))
if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID): if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID):
logger.debug("Corp %s is member of owning alliance. Updating." % all_corp_info)
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False) EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False)
elif int(alliance.alliance_id) in corp_standings[standing_level]: elif int(alliance.alliance_id) in corp_standings[standing_level]:
if int(corp_standings[standing_level][int(alliance.alliance_id)][ if int(corp_standings[standing_level][int(alliance.alliance_id)][
'standing']) >= settings.BLUE_STANDING: 'standing']) >= settings.BLUE_STANDING:
logger.debug("Corp %s alliance %s is blue. Updating." % (all_corp_info, alliance))
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
True) True)
else: else:
logger.debug("Corp %s alliance %s does not meet blue standing threshold. Updating as non-blue." % (all_corp_info, alliance))
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
False) False)
else: else:
logger.debug("Corp %s alliance %s not found in standings. Updating as non-blue." % (all_corp_info, alliance))
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
False) False)
else: else:
if int(all_corp_info.corporation_id) in corp_standings[standing_level]: logger.info("Corp model %s is not owning, member of owning alliance, or in standings. Updating as non-blue." % all_corp_info)
if int(corp_standings[standing_level][int(all_corp_info.corporation_id)][ EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
'standing']) >= settings.BLUE_STANDING:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True)
else:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
else:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
else: else:
#corp has closed #corp has closed
logger.info("Corp %s has closed. Deleting model." % all_corp_info)
all_corp_info.delete() all_corp_info.delete()
# Remove irrelevent corp and alliance models # Remove irrelevent corp and alliance models
# Check the corps # Check the corps
for all_corp_info in EveManager.get_all_corporation_info(): for all_corp_info in EveManager.get_all_corporation_info():
logger.debug("Checking to delete corp model %s" % all_corp_info)
if settings.IS_CORP: if settings.IS_CORP:
if all_corp_info.corporation_id != settings.CORP_ID: if all_corp_info.corporation_id != settings.CORP_ID:
if not all_corp_info.is_blue: if not all_corp_info.is_blue:
logger.info("Corp model %s is not owning corp nor blue. Deleting." % all_corp_info)
all_corp_info.delete() all_corp_info.delete()
else: else:
if all_corp_info.alliance is not None: if all_corp_info.alliance is not None:
if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID: if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
if not all_corp_info.is_blue: if not all_corp_info.is_blue:
logger.info("Corp model %s not in owning alliance nor blue. Deleting." % all_corp_info)
all_corp_info.delete() all_corp_info.delete()
elif not all_corp_info.is_blue: elif not all_corp_info.is_blue:
logger.info("Corp model %s has no alliance and is not blue. Deleting." % all_corp_info)
all_corp_info.delete() all_corp_info.delete()
# Check the alliances # Check the alliances
for all_alliance_info in EveManager.get_all_alliance_info(): for all_alliance_info in EveManager.get_all_alliance_info():
logger.debug("Checking to delete alliance model %s" % all_alliance_info)
if settings.IS_CORP: if settings.IS_CORP:
if all_alliance_info.is_blue is not True: if all_alliance_info.is_blue is not True:
if ownercorpinfo['alliance']['id'] is not None: if ownercorpinfo['alliance']['id'] is not None:
if int(all_alliance_info.alliance_id) != ownercorpinfo['alliance']['id']: if int(all_alliance_info.alliance_id) != ownercorpinfo['alliance']['id']:
logger.info("Alliance model %s not owning corp alliance nor blue. Deleting." % all_alliance_info)
all_alliance_info.delete() all_alliance_info.delete()
else: else:
logger.info("Alliance model %s not blue to alliance-less owning corp. Deleting." % all_alliance_info)
all_alliance_info.delete() all_alliance_info.delete()
elif all_alliance_info.alliance_id != settings.ALLIANCE_ID: elif all_alliance_info.alliance_id != settings.ALLIANCE_ID:
if all_alliance_info.is_blue is not True: if all_alliance_info.is_blue is not True:
logger.info("Alliance model %s not owning alliance nor blue. Deleting." % all_alliance_info)
all_alliance_info.delete() all_alliance_info.delete()

View File

@ -4,6 +4,9 @@ from django.conf import settings
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
import logging
logger = logging.getLogger(__name__)
class UpdateKeyForm(forms.Form): class UpdateKeyForm(forms.Form):
api_id = forms.CharField(max_length=254, required=True, label="Key ID") api_id = forms.CharField(max_length=254, required=True, label="Key ID")
@ -12,6 +15,7 @@ class UpdateKeyForm(forms.Form):
def clean(self): def clean(self):
if EveManager.check_if_api_key_pair_exist(self.cleaned_data['api_id']): if EveManager.check_if_api_key_pair_exist(self.cleaned_data['api_id']):
logger.debug("UpdateKeyForm failed cleaning as API id %s already exists." % self.cleaned_data['api_id'])
raise forms.ValidationError(u'API key already exist') raise forms.ValidationError(u'API key already exist')
check_blue = False check_blue = False
@ -24,20 +28,24 @@ class UpdateKeyForm(forms.Form):
if settings.BLUE_API_ACCOUNT: if settings.BLUE_API_ACCOUNT:
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'], if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
self.cleaned_data['api_key']): self.cleaned_data['api_key']):
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet blue api key account requirement." % self.cleaned_data['api_id'])
raise forms.ValidationError(u'API not of type account') raise forms.ValidationError(u'API not of type account')
if not EveApiManager.check_blue_api_is_full(self.cleaned_data['api_id'], if not EveApiManager.check_blue_api_is_full(self.cleaned_data['api_id'],
self.cleaned_data['api_key']): self.cleaned_data['api_key']):
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet minimum blue api access mask requirement." % self.cleaned_data['api_id'])
raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.BLUE_API_MASK)) raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.BLUE_API_MASK))
else: else:
if settings.MEMBER_API_ACCOUNT: if settings.MEMBER_API_ACCOUNT:
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'], if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
self.cleaned_data['api_key']): self.cleaned_data['api_key']):
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet member api key account requirement." % self.cleaned_data['api_id'])
raise forms.ValidationError(u'API not of type account') raise forms.ValidationError(u'API not of type account')
if not EveApiManager.check_api_is_full(self.cleaned_data['api_id'], if not EveApiManager.check_api_is_full(self.cleaned_data['api_id'],
self.cleaned_data['api_key']): self.cleaned_data['api_key']):
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet minimum member api access mask requirement." % self.cleaned_data['api_id'])
raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.MEMBER_API_MASK)) raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.MEMBER_API_MASK))
return self.cleaned_data return self.cleaned_data

View File

@ -4,7 +4,9 @@ from models import EveAllianceInfo
from models import EveCorporationInfo from models import EveCorporationInfo
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
import logging
logger = logging.getLogger(__name__)
class EveManager: class EveManager:
def __init__(self): def __init__(self):
@ -14,7 +16,7 @@ class EveManager:
def create_character(character_id, character_name, corporation_id, def create_character(character_id, character_name, corporation_id,
corporation_name, corporation_ticker, alliance_id, corporation_name, corporation_ticker, alliance_id,
alliance_name, user, api_id): alliance_name, user, api_id):
logger.debug("Creating model for character %s id %s" % (character_name, character_id))
if not EveCharacter.objects.filter(character_id=character_id).exists(): if not EveCharacter.objects.filter(character_id=character_id).exists():
eve_char = EveCharacter() eve_char = EveCharacter()
eve_char.character_id = character_id eve_char.character_id = character_id
@ -27,10 +29,13 @@ class EveManager:
eve_char.user = user eve_char.user = user
eve_char.api_id = api_id eve_char.api_id = api_id
eve_char.save() eve_char.save()
logger.info("Created new character model %s for user %s" % (eve_char, user))
else:
logger.warn("Attempting to create existing character model with id %s" % character_id)
@staticmethod @staticmethod
def create_characters_from_list(chars, user, api_id): def create_characters_from_list(chars, user, api_id):
logger.debug("Creating characters from batch: %s" % chars.result)
for char in chars.result: for char in chars.result:
if not EveManager.check_if_character_exist(chars.result[char]['name']): if not EveManager.check_if_character_exist(chars.result[char]['name']):
EveManager.create_character(chars.result[char]['id'], EveManager.create_character(chars.result[char]['id'],
@ -45,9 +50,11 @@ class EveManager:
@staticmethod @staticmethod
def update_characters_from_list(chars): def update_characters_from_list(chars):
logger.debug("Updating characters from list: %s" % chars.result)
for char in chars.result: for char in chars.result:
if EveManager.check_if_character_exist(chars.result[char]['name']): if EveManager.check_if_character_exist(chars.result[char]['name']):
eve_char = EveManager.get_character_by_character_name(chars.result[char]['name']) eve_char = EveManager.get_character_by_character_name(chars.result[char]['name'])
logger.debug("Got existing character model %s" % eve_char)
eve_char.corporation_id = chars.result[char]['corp']['id'] eve_char.corporation_id = chars.result[char]['corp']['id']
eve_char.corporation_name = chars.result[char]['corp']['name'] eve_char.corporation_name = chars.result[char]['corp']['name']
eve_char.corporation_ticker = EveApiManager.get_corporation_ticker_from_id( eve_char.corporation_ticker = EveApiManager.get_corporation_ticker_from_id(
@ -55,20 +62,28 @@ class EveManager:
eve_char.alliance_id = chars.result[char]['alliance']['id'] eve_char.alliance_id = chars.result[char]['alliance']['id']
eve_char.alliance_name = chars.result[char]['alliance']['name'] eve_char.alliance_name = chars.result[char]['alliance']['name']
eve_char.save() eve_char.save()
logger.info("Updated character model %s" % eve_char)
else:
logger.warn("Attempting to update non-existing character model with name %s" % char['name'])
@staticmethod @staticmethod
def create_api_keypair(api_id, api_key, user_id): def create_api_keypair(api_id, api_key, user_id):
logger.debug("Creating api keypair id %s for user_id %s" % (api_id, user_id))
if not EveApiKeyPair.objects.filter(api_id=api_id).exists(): if not EveApiKeyPair.objects.filter(api_id=api_id).exists():
api_pair = EveApiKeyPair() api_pair = EveApiKeyPair()
api_pair.api_id = api_id api_pair.api_id = api_id
api_pair.api_key = api_key api_pair.api_key = api_key
api_pair.user = user_id api_pair.user = user_id
api_pair.save() api_pair.save()
logger.info("Created api keypair id %s for user %s" % (api_id, user_id))
else:
logger.warn("Attempting to create existing api keypair with id %s" % api_id)
@staticmethod @staticmethod
def create_alliance_info(alliance_id, alliance_name, alliance_ticker, alliance_executor_corp_id, def create_alliance_info(alliance_id, alliance_name, alliance_ticker, alliance_executor_corp_id,
alliance_member_count, is_blue): alliance_member_count, is_blue):
logger.debug("Creating alliance info for alliance %s id %s" % (alliance_name, alliance_id))
if not EveManager.check_if_alliance_exists_by_id(alliance_id): if not EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo() alliance_info = EveAllianceInfo()
alliance_info.alliance_id = alliance_id alliance_info.alliance_id = alliance_id
@ -78,18 +93,26 @@ class EveManager:
alliance_info.member_count = alliance_member_count alliance_info.member_count = alliance_member_count
alliance_info.is_blue = is_blue alliance_info.is_blue = is_blue
alliance_info.save() alliance_info.save()
logger.info("Created alliance model for %s" % alliance_info)
else:
logger.warn("Attempting to create existing alliance model with id %s" % alliance_id)
@staticmethod @staticmethod
def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count, is_blue): def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count, is_blue):
logger.debug("Updating alliance model with id %s" % alliance_id)
if EveManager.check_if_alliance_exists_by_id(alliance_id): if EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo.objects.get(alliance_id=alliance_id) alliance_info = EveAllianceInfo.objects.get(alliance_id=alliance_id)
alliance_info.executor_corp_id = alliance_executor_corp_id alliance_info.executor_corp_id = alliance_executor_corp_id
alliance_info.member_count = alliance_member_count alliance_info.member_count = alliance_member_count
alliance_info.is_blue = is_blue alliance_info.is_blue = is_blue
alliance_info.save() alliance_info.save()
logger.info("Updated alliance model %s" % alliance_info)
else:
logger.warn("Attempting to update non-existing alliance model with id %s" % alliance_id)
@staticmethod @staticmethod
def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, is_blue, alliance): def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, is_blue, alliance):
logger.debug("Creating corp info for corp %s id %s" % (corp_name, corp_id))
if not EveManager.check_if_corporation_exists_by_id(corp_id): if not EveManager.check_if_corporation_exists_by_id(corp_id):
corp_info = EveCorporationInfo() corp_info = EveCorporationInfo()
corp_info.corporation_id = corp_id corp_info.corporation_id = corp_id
@ -100,45 +123,67 @@ class EveManager:
if alliance: if alliance:
corp_info.alliance = alliance corp_info.alliance = alliance
corp_info.save() corp_info.save()
logger.info("Created corp model for %s" % corp_info)
else:
logger.warn("Attempting to create existing corp model with id %s" % corp_id)
@staticmethod @staticmethod
def update_corporation_info(corp_id, corp_member_count, alliance, is_blue): def update_corporation_info(corp_id, corp_member_count, alliance, is_blue):
logger.debug("Updating corp model with id %s" % corp_id)
if EveManager.check_if_corporation_exists_by_id(corp_id): if EveManager.check_if_corporation_exists_by_id(corp_id):
corp_info = EveCorporationInfo.objects.get(corporation_id=corp_id) corp_info = EveCorporationInfo.objects.get(corporation_id=corp_id)
corp_info.member_count = corp_member_count corp_info.member_count = corp_member_count
corp_info.alliance = alliance corp_info.alliance = alliance
corp_info.is_blue = is_blue corp_info.is_blue = is_blue
corp_info.save() corp_info.save()
logger.info("Updated corp model %s" % corp_info)
else:
logger.warn("Attempting to update non-existant corp model with id %s" % corp_id)
@staticmethod @staticmethod
def get_api_key_pairs(user): def get_api_key_pairs(user):
if EveApiKeyPair.objects.filter(user=user).exists(): if EveApiKeyPair.objects.filter(user=user).exists():
logger.debug("Returning api keypairs for user %s" % user)
return EveApiKeyPair.objects.filter(user=user) return EveApiKeyPair.objects.filter(user=user)
else:
logger.debug("No api keypairs found for user %s" % user)
@staticmethod @staticmethod
def check_if_api_key_pair_exist(api_id): def check_if_api_key_pair_exist(api_id):
if EveApiKeyPair.objects.filter(api_id=api_id).exists(): if EveApiKeyPair.objects.filter(api_id=api_id).exists():
logger.debug("Determined api id %s exists." % api_id)
return True return True
else: else:
logger.debug("Determined api id %s does not exist." % api_id)
return False return False
@staticmethod @staticmethod
def delete_api_key_pair(api_id, user_id): def delete_api_key_pair(api_id, user_id):
logger.debug("Deleting api id %s" % api_id)
if EveApiKeyPair.objects.filter(api_id=api_id).exists(): if EveApiKeyPair.objects.filter(api_id=api_id).exists():
# Check that its owned by our user_id # Check that its owned by our user_id
apikeypair = EveApiKeyPair.objects.get(api_id=api_id) apikeypair = EveApiKeyPair.objects.get(api_id=api_id)
if apikeypair.user.id == user_id: if apikeypair.user.id == user_id:
logger.info("Deleted user %s api key id %s" % (user_id, api_id))
apikeypair.delete() apikeypair.delete()
else:
logger.error("Unable to delete api: user mismatch: key id %s owned by user id %s, not deleting user id %s" % (api_id, apikeypair.user.id, user_id))
else:
logger.warn("Unable to locate api id %s - cannot delete." % api_id)
@staticmethod @staticmethod
def delete_characters_by_api_id(api_id, user_id): def delete_characters_by_api_id(api_id, user_id):
logger.debug("Deleting all characters associated with api id %s" % api_id)
if EveCharacter.objects.filter(api_id=api_id).exists(): if EveCharacter.objects.filter(api_id=api_id).exists():
# Check that its owned by our user_id # Check that its owned by our user_id
characters = EveCharacter.objects.filter(api_id=api_id) characters = EveCharacter.objects.filter(api_id=api_id)
logger.debug("Got user %s characters %s from api %s" % (user_id, characters, api_id))
for char in characters: for char in characters:
if char.user.id == user_id: if char.user.id == user_id:
logger.info("Deleting user %s character %s from api %s" % (user_id, char, api_id))
char.delete() char.delete()
else:
logger.error("Unable to delete character %s by api %s: user mismatch: character owned by user id%s, not deleting user id %s" % (char, api_id, char.user.id, user_id))
@staticmethod @staticmethod
def check_if_character_exist(char_name): def check_if_character_exist(char_name):

View File

@ -21,27 +21,34 @@ from eveonline.models import EveCharacter
from eveonline.models import EveApiKeyPair from eveonline.models import EveApiKeyPair
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
import logging
logger = logging.getLogger(__name__)
def disable_member(user, char_id): def disable_member(user, char_id):
logger.debug("Disabling user %s with character id %s" % (user, char_id))
remove_member_permission(user, 'member') remove_member_permission(user, 'member')
remove_user_from_group(user, settings.DEFAULT_AUTH_GROUP) remove_user_from_group(user, settings.DEFAULT_AUTH_GROUP)
remove_user_from_group(user, remove_user_from_group(user,
generate_corp_group_name( generate_corp_group_name(
EveManager.get_character_by_id(char_id).corporation_name)) EveManager.get_character_by_id(char_id).corporation_name))
deactivate_services(user) deactivate_services(user)
logger.info("Disabled member %s" % user)
def disable_blue_member(user): def disable_blue_member(user):
logger.debug("Disabling blue user %s" % user)
remove_member_permission(user, 'blue_member') remove_member_permission(user, 'blue_member')
remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP) remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
deactivate_services(user) deactivate_services(user)
logger.info("Disabled blue user %s" % user)
@login_required @login_required
def add_api_key(request): def add_api_key(request):
logger.debug("add_api_key called by user %s" % request.user)
if request.method == 'POST': if request.method == 'POST':
form = UpdateKeyForm(request.POST) form = UpdateKeyForm(request.POST)
logger.debug("Request type POST with form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
EveManager.create_api_keypair(form.cleaned_data['api_id'], EveManager.create_api_keypair(form.cleaned_data['api_id'],
form.cleaned_data['api_key'], form.cleaned_data['api_key'],
@ -51,8 +58,12 @@ def add_api_key(request):
characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'], characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'],
form.cleaned_data['api_key']) form.cleaned_data['api_key'])
EveManager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id']) EveManager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id'])
logger.info("Successfully processed api add form for user %s" % request.user)
return HttpResponseRedirect("/api_key_management/") return HttpResponseRedirect("/api_key_management/")
else:
logger.debug("Form invalid: returning to form.")
else: else:
logger.debug("Providing empty update key form for user %s" % request.user)
form = UpdateKeyForm() form = UpdateKeyForm()
context = {'form': form, 'apikeypairs': EveManager.get_api_key_pairs(request.user.id)} context = {'form': form, 'apikeypairs': EveManager.get_api_key_pairs(request.user.id)}
return render_to_response('registered/addapikey.html', context, return render_to_response('registered/addapikey.html', context,
@ -61,6 +72,7 @@ def add_api_key(request):
@login_required @login_required
def api_key_management_view(request): def api_key_management_view(request):
logger.debug("api_key_management_view called by user %s" % request.user)
context = {'apikeypairs': EveManager.get_api_key_pairs(request.user.id)} context = {'apikeypairs': EveManager.get_api_key_pairs(request.user.id)}
return render_to_response('registered/apikeymanagment.html', context, return render_to_response('registered/apikeymanagment.html', context,
@ -69,6 +81,7 @@ def api_key_management_view(request):
@login_required @login_required
def api_key_removal(request, api_id): def api_key_removal(request, api_id):
logger.debug("api_key_removal called by user %s for api id %s" % (request.user, api_id))
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
# Check if our users main id is in the to be deleted characters # Check if our users main id is in the to be deleted characters
characters = EveManager.get_characters_by_owner_id(request.user.id) characters = EveManager.get_characters_by_owner_id(request.user.id)
@ -76,20 +89,23 @@ def api_key_removal(request, api_id):
for character in characters: for character in characters:
if character.character_id == authinfo.main_char_id: if character.character_id == authinfo.main_char_id:
if character.api_id == api_id: if character.api_id == api_id:
# TODO: Remove servies also # TODO: Remove services also
if authinfo.is_blue: if authinfo.is_blue:
logger.debug("Blue user %s deleting api for main character. Disabling." % request.user)
disable_blue_member(request.user) disable_blue_member(request.user)
else: else:
logger.debug("User %s deleting api for main character. Disabling." % request.user)
disable_member(request.user, authinfo.main_char_id) disable_member(request.user, authinfo.main_char_id)
EveManager.delete_api_key_pair(api_id, request.user.id) EveManager.delete_api_key_pair(api_id, request.user.id)
EveManager.delete_characters_by_api_id(api_id, request.user.id) EveManager.delete_characters_by_api_id(api_id, request.user.id)
logger.info("Succesfully processed api delete request by user %s for api %s" % (request.user, api_id))
return HttpResponseRedirect("/api_key_management/") return HttpResponseRedirect("/api_key_management/")
@login_required @login_required
def characters_view(request): def characters_view(request):
logger.debug("characters_view called by user %s" % request.user)
render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id), render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id),
'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)} 'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)}
return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request)) return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request))
@ -97,30 +113,34 @@ def characters_view(request):
@login_required @login_required
def main_character_change(request, char_id): def main_character_change(request, char_id):
logger.debug("main_character_change called by user %s for character id %s" % (request.user, char_id))
if EveManager.check_if_character_owned_by_user(char_id, request.user): if EveManager.check_if_character_owned_by_user(char_id, request.user):
previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id
AuthServicesInfoManager.update_main_char_Id(char_id, request.user) AuthServicesInfoManager.update_main_char_Id(char_id, request.user)
# Check if character is in the alliance # Check if character is in the alliance
character_info = EveManager.get_character_by_id(char_id) character_info = EveManager.get_character_by_id(char_id)
corporation_info = EveManager.get_corporation_info_by_id(character_info.corporation_id) corporation_info = EveManager.get_corporation_info_by_id(character_info.corporation_id)
logger.debug("User %s changing main character to %s in corp %s" % (request.user, character_info, corporation_info))
if (settings.IS_CORP and EveManager.get_charater_corporation_id_by_id(char_id) == settings.CORP_ID) or (not settings.IS_CORP and EveManager.get_charater_alliance_id_by_id(char_id) == settings.ALLIANCE_ID): if (settings.IS_CORP and EveManager.get_charater_corporation_id_by_id(char_id) == settings.CORP_ID) or (not settings.IS_CORP and EveManager.get_charater_alliance_id_by_id(char_id) == settings.ALLIANCE_ID):
add_member_permission(request.user, 'member') add_member_permission(request.user, 'member')
add_user_to_group(request.user, settings.DEFAULT_AUTH_GROUP) add_user_to_group(request.user, settings.DEFAULT_AUTH_GROUP)
add_user_to_group(request.user, add_user_to_group(request.user,
generate_corp_group_name(EveManager.get_character_by_id(char_id).corporation_name)) generate_corp_group_name(EveManager.get_character_by_id(char_id).corporation_name))
logger.info("User %s transitioned to full member by chaning main character to %s" % (request.user, character_info))
elif corporation_info != None: elif corporation_info != None:
if corporation_info.is_blue: if corporation_info.is_blue:
add_member_permission(request.user, 'blue_member') add_member_permission(request.user, 'blue_member')
add_user_to_group(request.user, settings.DEFAULT_BLUE_GROUP) add_user_to_group(request.user, settings.DEFAULT_BLUE_GROUP)
AuthServicesInfoManager.update_is_blue(True, request.user) AuthServicesInfoManager.update_is_blue(True, request.user)
logger.info("User %s transitioned to blue by changing main character to %s" % (request.user, character_info))
else: else:
if check_if_user_has_permission(request.user, 'member'): if check_if_user_has_permission(request.user, 'member'):
disable_member(request.user, previousmainid) disable_member(request.user, previousmainid)
if check_if_user_has_permission(request.user, 'blue_member'): if check_if_user_has_permission(request.user, 'blue_member'):
disable_blue_member(request.user) disable_blue_member(request.user)
logger.info("User %s disabled as new main character %s not member nor blue." % (request.user, character_info))
else: else:
# TODO: disable serivces # TODO: disable serivces
if check_if_user_has_permission(request.user, 'member'): if check_if_user_has_permission(request.user, 'member'):
@ -128,6 +148,7 @@ def main_character_change(request, char_id):
if check_if_user_has_permission(request.user, 'blue_member'): if check_if_user_has_permission(request.user, 'blue_member'):
disable_blue_member(request.user) disable_blue_member(request.user)
logger.info("User %s disabled as new main character %s does not have corp model to check." % (request.user, character_info))
return HttpResponseRedirect("/characters") return HttpResponseRedirect("/characters")
return HttpResponseRedirect("/characters") return HttpResponseRedirect("/characters")
@ -136,14 +157,18 @@ def main_character_change(request, char_id):
@login_required @login_required
@permission_required('auth.corp_stats') @permission_required('auth.corp_stats')
def corp_stats_view(request): def corp_stats_view(request):
logger.debug("corp_stats_view called by user %s" % request.user)
# Get the corp the member is in # Get the corp the member is in
auth_info = AuthServicesInfo.objects.get(user=request.user) auth_info = AuthServicesInfo.objects.get(user=request.user)
logger.debug("Got user %s authservicesinfo model %s" % (request.user, auth_info))
if EveCharacter.objects.filter(character_id=auth_info.main_char_id).exists(): if EveCharacter.objects.filter(character_id=auth_info.main_char_id).exists():
main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id) main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id)
logger.debug("Got user %s main character model %s" % (request.user, main_char))
if EveCorporationInfo.objects.filter(corporation_id=main_char.corporation_id).exists(): if EveCorporationInfo.objects.filter(corporation_id=main_char.corporation_id).exists():
current_count = 0 current_count = 0
allcharacters = {} allcharacters = {}
corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id) corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id)
logger.debug("Got user %s main character's corp model %s" % (request.user, corp))
all_characters = EveCharacter.objects.all() all_characters = EveCharacter.objects.all()
for char in all_characters: for char in all_characters:
if char: if char:
@ -157,4 +182,8 @@ def corp_stats_view(request):
"currentCount": current_count, "currentCount": current_count,
"characters": allcharacters} "characters": allcharacters}
return render_to_response('registered/corpstats.html', context, context_instance=RequestContext(request)) return render_to_response('registered/corpstats.html', context, context_instance=RequestContext(request))
else:
logger.error("Unable to locate user %s main character's corp model with id %s. Cannot provide corp stats." % (request.user, main_char.corporation_id))
else:
logger.error("Unable to locate user %s main character model with id %s. Cannot provide corp stats." % (request.user, auth_info.main_char_id))
return render_to_response('registered/corpstats.html', None, context_instance=RequestContext(request)) return render_to_response('registered/corpstats.html', None, context_instance=RequestContext(request))

View File

@ -12,10 +12,14 @@ from models import HiddenGroup
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
import logging
logger = logging.getLogger(__name__)
@login_required @login_required
@permission_required('auth.group_management') @permission_required('auth.group_management')
def group_management(request): def group_management(request):
logger.debug("group_management called by user %s" % request.user)
acceptrequests = [] acceptrequests = []
leaverequests = [] leaverequests = []
@ -24,6 +28,7 @@ def group_management(request):
leaverequests.append(grouprequest) leaverequests.append(grouprequest)
else: else:
acceptrequests.append(grouprequest) acceptrequests.append(grouprequest)
logger.debug("Providing user %s with %s acceptrequests and %s leaverequests." % (request.user, len(acceptrequests), len(leaverequests)))
render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests} render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests}
@ -34,13 +39,16 @@ def group_management(request):
@login_required @login_required
@permission_required('auth.group_management') @permission_required('auth.group_management')
def group_accept_request(request, group_request_id): def group_accept_request(request, group_request_id):
logger.debug("group_accept_request called by user %s for grouprequest id %s" % (request.user, group_request_id))
try: try:
group_request = GroupRequest.objects.get(id=group_request_id) group_request = GroupRequest.objects.get(id=group_request_id)
group, created = Group.objects.get_or_create(name=group_request.group.name) group, created = Group.objects.get_or_create(name=group_request.group.name)
group_request.user.groups.add(group) group_request.user.groups.add(group)
group_request.user.save() group_request.user.save()
group_request.delete() group_request.delete()
logger.info("User %s accepted group request from user %s to group %s" % (request.user, group_request.user, group_request.group.name))
except: except:
logger.exception("Unhandled exception occured while user %s attempting to accept grouprequest id %s." % (request.user, group_request_id), exc_info=True)
pass pass
return HttpResponseRedirect("/group/management/") return HttpResponseRedirect("/group/management/")
@ -49,12 +57,15 @@ def group_accept_request(request, group_request_id):
@login_required @login_required
@permission_required('auth.group_management') @permission_required('auth.group_management')
def group_reject_request(request, group_request_id): def group_reject_request(request, group_request_id):
logger.debug("group_reject_request called by user %s for group request id %s" % (request.user, group_request_id))
try: try:
group_request = GroupRequest.objects.get(id=group_request_id) group_request = GroupRequest.objects.get(id=group_request_id)
if group_request: if group_request:
logger.info("User %s rejected group request from user %s to group %s" % (request.user, group_request.user, group_request.group.name))
group_request.delete() group_request.delete()
except: except:
logger.exception("Unhandled exception occured while user %s attempting to reject group request id %s" % (request.user, group_request_id), exc_info=True)
pass pass
return HttpResponseRedirect("/group/management/") return HttpResponseRedirect("/group/management/")
@ -63,13 +74,16 @@ def group_reject_request(request, group_request_id):
@login_required @login_required
@permission_required('auth.group_management') @permission_required('auth.group_management')
def group_leave_accept_request(request, group_request_id): def group_leave_accept_request(request, group_request_id):
logger.debug("group_leave_accept_request called by user %s for group request id %s" % (request.user, group_request_id))
try: try:
group_request = GroupRequest.objects.get(id=group_request_id) group_request = GroupRequest.objects.get(id=group_request_id)
group, created = Group.objects.get_or_create(name=group_request.group.name) group, created = Group.objects.get_or_create(name=group_request.group.name)
group_request.user.groups.remove(group) group_request.user.groups.remove(group)
group_request.user.save() group_request.user.save()
group_request.delete() group_request.delete()
logger.info("User %s accepted group leave request from user %s to group %s" % (request.user, group_request.user, group_request.group.name))
except: except:
logger.exception("Unhandled exception occured while user %s attempting to accept group leave request id %s" % (request.user, group_request_id), exc_info=True)
pass pass
return HttpResponseRedirect("/group/management/") return HttpResponseRedirect("/group/management/")
@ -78,12 +92,15 @@ def group_leave_accept_request(request, group_request_id):
@login_required @login_required
@permission_required('auth.group_management') @permission_required('auth.group_management')
def group_leave_reject_request(request, group_request_id): def group_leave_reject_request(request, group_request_id):
logger.debug("group_leave_reject_request called by user %s for group request id %s" % (request.user, group_request_id))
try: try:
group_request = GroupRequest.objects.get(id=group_request_id) group_request = GroupRequest.objects.get(id=group_request_id)
if group_request: if group_request:
group_request.delete() group_request.delete()
logger.info("User %s rejected group leave request from user %s for group %s" % (request.user, group_request.user, group_request.group.name))
except: except:
logger.exception("Unhandled exception occured while user %s attempting to reject group leave request id %s" % (request.user, group_request_id), exc_info=True)
pass pass
return HttpResponseRedirect("/group/management/") return HttpResponseRedirect("/group/management/")
@ -91,6 +108,7 @@ def group_leave_reject_request(request, group_request_id):
@login_required @login_required
def groups_view(request): def groups_view(request):
logger.debug("groups_view called by user %s" % request.user)
paired_list = [] paired_list = []
for group in Group.objects.all(): for group in Group.objects.all():
@ -126,6 +144,7 @@ def groups_view(request):
@login_required @login_required
def group_request_add(request, group_id): def group_request_add(request, group_id):
logger.debug("group_request_add called by user %s for group id %s" % (request.user, group_id))
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = 'pending' grouprequest.status = 'pending'
@ -134,12 +153,14 @@ def group_request_add(request, group_id):
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = False grouprequest.leave_request = False
grouprequest.save() grouprequest.save()
logger.info("Created group request for user %s to group %s" % (request.user, Group.objects.get(id=group_id)))
return HttpResponseRedirect("/groups") return HttpResponseRedirect("/groups")
@login_required @login_required
def group_request_leave(request, group_id): def group_request_leave(request, group_id):
logger.debug("group_request_leave called by user %s for group id %s" % (request.user, group_id))
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = 'pending' grouprequest.status = 'pending'
@ -148,5 +169,6 @@ def group_request_leave(request, group_id):
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = True grouprequest.leave_request = True
grouprequest.save() grouprequest.save()
logger.info("Created group leave request for user %s to group %s" % (request.user, Group.objects.get(id=group_id)))
return HttpResponseRedirect("/groups") return HttpResponseRedirect("/groups")

View File

@ -16,13 +16,18 @@ from authentication.models import AuthServicesInfo
from django.conf import settings from django.conf import settings
from eveonline.managers import EveManager from eveonline.managers import EveManager
import logging
logger = logging.getLogger(__name__)
@login_required @login_required
def hr_application_management_view(request): def hr_application_management_view(request):
logger.debug("hr_application_management_view called by user %s" % request.user)
personal_app = None personal_app = None
corp_applications = None corp_applications = None
if request.user.is_superuser: if request.user.is_superuser:
logger.debug("User %s is superuser: returning all applications." % request.user)
corp_applications = HRApplication.objects.all() corp_applications = HRApplication.objects.all()
else: else:
# Get the corp the member is in # Get the corp the member is in
@ -41,6 +46,7 @@ def hr_application_management_view(request):
else: else:
corp_applications = None corp_applications = None
except: except:
logger.error("Unable to determine user %s main character id %s corp. Returning no corp hrapplications." % (request.user, auth_info.main_char_id))
corp_applications = None corp_applications = None
context = {'personal_apps': HRApplication.objects.all().filter(user=request.user), context = {'personal_apps': HRApplication.objects.all().filter(user=request.user),
'applications': corp_applications, 'applications': corp_applications,
@ -52,10 +58,12 @@ def hr_application_management_view(request):
@login_required @login_required
def hr_application_create_view(request): def hr_application_create_view(request):
logger.debug("hr_application_create_view called by user %s" % request.user)
success = False success = False
if request.method == 'POST': if request.method == 'POST':
form = HRApplicationForm(request.POST) form = HRApplicationForm(request.POST)
logger.debug("Request type POST with form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
application = HRApplication() application = HRApplication()
application.user = request.user application.user = request.user
@ -68,7 +76,9 @@ def hr_application_create_view(request):
application.extra = form.cleaned_data['extra'] application.extra = form.cleaned_data['extra']
application.save() application.save()
success = True success = True
logger.info("Created HRApplication for user %s to corp %s" % (request.user, application.corp))
else: else:
logger.debug("Providing empty form.")
form = HRApplicationForm() form = HRApplicationForm()
context = {'form': form, 'success': success} context = {'form': form, 'success': success}
@ -78,11 +88,15 @@ def hr_application_create_view(request):
@login_required @login_required
def hr_application_personal_view(request, app_id): def hr_application_personal_view(request, app_id):
logger.debug("hr_application_personal_view called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
logger.debug("Got application id %s: %s" % (app_id, application))
if application.user != request.user: if application.user != request.user:
logger.warn("HRApplication id %s user %s does not match request user %s - returning blank application." % (app_id, application.user, request.user))
application = HRApplication() application = HRApplication()
else: else:
logger.error("Unable to locate HRApplication matching id %s - returning blank application to user %s" % (app_id, request.user))
application = HRApplication() application = HRApplication()
context = {'application': application} context = {'application': application}
@ -92,19 +106,24 @@ def hr_application_personal_view(request, app_id):
@login_required @login_required
def hr_application_personal_removal(request, app_id): def hr_application_personal_removal(request, app_id):
logger.debug("hr_application_personal_removal called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
if application.user == request.user: if application.user == request.user:
application.delete() application.delete()
logger.info("Deleted HRApplication with id %s for user %s to corp %s" % (app_id, request.user, application.corp))
else:
logger.error("HRapplication id %s user %s does not match request user %s - refusing to delete." % (app_id, application.user, request.user))
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_view(request, app_id): def hr_application_view(request, app_id):
logger.debug("hr_application_view called by user %s for app id %s" % (request.user, app_id))
if request.method == 'POST': if request.method == 'POST':
form = HRApplicationCommentForm(request.POST) form = HRApplicationCommentForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
auth_info = AuthServicesInfo.objects.get(user=request.user) auth_info = AuthServicesInfo.objects.get(user=request.user)
@ -114,16 +133,20 @@ def hr_application_view(request, app_id):
comment.commenter_character = EveCharacter.objects.get(character_id=auth_info.main_char_id) comment.commenter_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
comment.comment = form.cleaned_data['comment'] comment.comment = form.cleaned_data['comment']
comment.save() comment.save()
logger.info("Saved comment by user %s to hrapplication %s" % (request.user, comment.hrapplication))
else: else:
logger.debug("Returning blank HRApplication comment form.")
form = HRApplicationCommentForm() form = HRApplicationCommentForm()
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
comments = HRApplicationComment.objects.all().filter(application=application) comments = HRApplicationComment.objects.all().filter(application=application)
logger.debug("Retrieved hrpplication id %s on behalf of user %s with comments %s" % (app_id, request.user, commends))
else: else:
application = HRApplication() application = HRApplication()
comments = [] comments = []
logger.error("HRAppllication with id %s not found - returning blank applicatin to user %s" % request.user)
context = {'application': application, 'comments': comments, 'comment_form': form} context = {'application': application, 'comments': comments, 'comment_form': form}
@ -134,10 +157,16 @@ def hr_application_view(request, app_id):
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_remove(request, app_id): def hr_application_remove(request, app_id):
logger.debug("hr_application_remove called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
if application: if application:
logger.info("Deleted HRApplication id %s on behalf of user %s" % (app_id, request.user))
application.delete() application.delete()
else:
logger.error("Unable to delete HRApplication with id %s on behalf of user %s: application is NoneType" % (app_id, request.user))
else:
logger.error("Unable to delete HRApplication with id %s on behalf of user %s: application not found." % (app_id, request.user))
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@ -145,6 +174,7 @@ def hr_application_remove(request, app_id):
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_approve(request, app_id): def hr_application_approve(request, app_id):
logger.debug("hr_application_approve called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
auth_info = AuthServicesInfo.objects.get(user=request.user) auth_info = AuthServicesInfo.objects.get(user=request.user)
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
@ -152,6 +182,9 @@ def hr_application_approve(request, app_id):
application.reviewer_user = request.user application.reviewer_user = request.user
application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id) application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
application.save() application.save()
logger.info("HRApplication for user %s to corp %s approved by %s" % (application.user, application.corp, request.user))
else:
logger.error("User %s unable to approve HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@ -159,6 +192,7 @@ def hr_application_approve(request, app_id):
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_reject(request, app_id): def hr_application_reject(request, app_id):
logger.debug("hr_application_reject called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
auth_info = AuthServicesInfo.objects.get(user=request.user) auth_info = AuthServicesInfo.objects.get(user=request.user)
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
@ -166,6 +200,9 @@ def hr_application_reject(request, app_id):
application.reviewer_user = request.user application.reviewer_user = request.user
application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id) application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
application.save() application.save()
logger.info("HRApplication for user %s to corp %s rejected by %s" % (application.user, application.corp, request.user))
else:
logger.error("User %s unable to reject HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@ -173,33 +210,48 @@ def hr_application_reject(request, app_id):
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_search(request): def hr_application_search(request):
logger.debug("hr_application_search called by user %s" % request.user)
if request.method == 'POST': if request.method == 'POST':
form = HRApplicationSearchForm(request.POST) form = HRApplicationSearchForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
# Really dumb search and only checks character name # Really dumb search and only checks character name
# This can be improved but it does the job for now # This can be improved but it does the job for now
searchstring = form.cleaned_data['search_string'] searchstring = form.cleaned_data['search_string']
applications = [] applications = []
logger.debug("Searching for application with character name %s for user %s" % (searchstring, request.user))
for application in HRApplication.objects.all(): for application in HRApplication.objects.all():
if searchstring in application.character_name: if searchstring in application.character_name:
applications.append(application) applications.append(application)
logger.info("Found %s HRApplications for user %s matching search string %s" % (len(applications), request.user, searchstring))
context = {'applications': applications, 'search_form': HRApplicationSearchForm()} context = {'applications': applications, 'search_form': HRApplicationSearchForm()}
return render_to_response('registered/hrapplicationsearchview.html', return render_to_response('registered/hrapplicationsearchview.html',
context, context_instance=RequestContext(request)) context, context_instance=RequestContext(request))
else:
logger.debug("Form invalid - returning for user %s to retry." % request.user)
context = {'applications': None, 'search_form': form}
return render_to_response('registered/hrapplicationsearchview.html',
context, context_instance=RequestContext(request))
else: else:
logger.debug("Returning empty search form for user %s" % request.user)
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_mark_in_progress(request, app_id): def hr_application_mark_in_progress(request, app_id):
logger.debug("hr_application_mark_in_progress called by user %s for app id %s" % (request.user, app_id))
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
auth_info = AuthServicesInfo.objects.get(user=request.user) auth_info = AuthServicesInfo.objects.get(user=request.user)
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
application.reviewer_inprogress_character = EveCharacter.objects.get(character_id=auth_info.main_char_id) application.reviewer_inprogress_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
application.save() application.save()
logger.info("Marked HRApplication for user %s to corp %s in progress by user %s" % (application.user, application.corp, request.user))
else:
logger.error("Unable to mark HRApplication id %s in progress by user %s - hrapplication matching id not found." % (app_id, request.user))
return HttpResponseRedirect("/hr_application_view/" + str(app_id)) return HttpResponseRedirect("/hr_application_view/" + str(app_id))

View File

@ -5,15 +5,20 @@ from django.contrib.auth.decorators import login_required
from eveonline.managers import EveManager from eveonline.managers import EveManager
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
import logging
logger = logging.getLogger(__name__)
# Create your views here. # Create your views here.
def index_view(request): def index_view(request):
logger.debug("index_view called by user %s" % request.user)
return render_to_response('public/index.html', None, context_instance=RequestContext(request)) return render_to_response('public/index.html', None, context_instance=RequestContext(request))
@login_required @login_required
def dashboard_view(request): def dashboard_view(request):
logger.debug("dashboard_view called by user %s" % request.user)
render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id), render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id),
'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)} 'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)}
return render_to_response('registered/dashboard.html', render_items, context_instance=RequestContext(request)) return render_to_response('registered/dashboard.html', render_items, context_instance=RequestContext(request))
@ -21,4 +26,5 @@ def dashboard_view(request):
@login_required @login_required
def help_view(request): def help_view(request):
logger.debug("help_view called by user %s" % request.user)
return render_to_response('registered/help.html', None, context_instance=RequestContext(request)) return render_to_response('registered/help.html', None, context_instance=RequestContext(request))

View File

@ -2,6 +2,9 @@ from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
import re import re
import logging
logger = logging.getLogger(__name__)
class RegistrationForm(forms.Form): class RegistrationForm(forms.Form):
username = forms.CharField(max_length=30, required=True) username = forms.CharField(max_length=30, required=True)
@ -12,24 +15,29 @@ class RegistrationForm(forms.Form):
def clean(self): def clean(self):
if ' ' in self.cleaned_data['username']: if ' ' in self.cleaned_data['username']:
logger.error("RegistrationForm username contains spaces. Raising ValidationError. Username: %s" % self.cleaned_data['username'])
raise forms.ValidationError(u'Username cannot contain a space') raise forms.ValidationError(u'Username cannot contain a space')
# We attempt to get the user object if we succeed we know email as been used # We attempt to get the user object if we succeed we know email as been used
try: try:
User.objects.get(email=self.cleaned_data['email']) User.objects.get(email=self.cleaned_data['email'])
logger.error("RegistrationForm email already registered. Raising ValidationError")
raise forms.ValidationError(u'Email as already been used') raise forms.ValidationError(u'Email as already been used')
except: except:
pass pass
if not re.match("^\w+$", self.cleaned_data['username']): if not re.match("^\w+$", self.cleaned_data['username']):
logger.error("RegistrationForm username contains non-alphanumeric characters. Raising ValueError. Username: %s" % self.cleaned_data['username'])
raise forms.ValidationError(u'Username contains illegal characters') raise forms.ValidationError(u'Username contains illegal characters')
if 'password' in self.cleaned_data and 'password_again' in self.cleaned_data: if 'password' in self.cleaned_data and 'password_again' in self.cleaned_data:
if self.cleaned_data['password'] != self.cleaned_data['password_again']: if self.cleaned_data['password'] != self.cleaned_data['password_again']:
logger.error("RegistrationForm password mismatch. Raising ValueError")
raise forms.ValidationError(u'Passwords do not match') raise forms.ValidationError(u'Passwords do not match')
if 'email' in self.cleaned_data and 'email_again' in self.cleaned_data: if 'email' in self.cleaned_data and 'email_again' in self.cleaned_data:
if self.cleaned_data['email'] != self.cleaned_data['email_again']: if self.cleaned_data['email'] != self.cleaned_data['email_again']:
logger.error("RegistrationForm email mismatch. Raising ValidationError")
raise forms.ValidationError(u'Emails do not match') raise forms.ValidationError(u'Emails do not match')
return self.cleaned_data return self.cleaned_data

View File

@ -5,11 +5,15 @@ from django.template import RequestContext
from forms import RegistrationForm from forms import RegistrationForm
import logging
logger = logging.getLogger(__name__)
def register_user_view(request): def register_user_view(request):
logger.debug("register_user_view called by user %s" % request.user)
if request.method == 'POST': if request.method == 'POST':
form = RegistrationForm(request.POST) form = RegistrationForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
if not User.objects.filter(username=form.cleaned_data['username']).exists(): if not User.objects.filter(username=form.cleaned_data['username']).exists():
@ -17,14 +21,19 @@ def register_user_view(request):
form.cleaned_data['email'], form.cleaned_data['password']) form.cleaned_data['email'], form.cleaned_data['password'])
user.save() user.save()
logger.info("Created new user %s" % user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
else: else:
logger.error("Unable to register new user: username %s already exists." % form.cleaned_data['username'])
return render_to_response('public/register.html', {'form': form, 'error': True} return render_to_response('public/register.html', {'form': form, 'error': True}
, context_instance=RequestContext(request)) , context_instance=RequestContext(request))
else:
logger.debug("Registration form invalid. Returning for user %s to make corrections." % request.user)
else: else:
logger.debug("Returning blank registration form.")
form = RegistrationForm() form = RegistrationForm()
return render_to_response('public/register.html', {'form': form}, context_instance=RequestContext(request)) return render_to_response('public/register.html', {'form': form}, context_instance=RequestContext(request))

View File

@ -2,6 +2,7 @@ from django.contrib import admin
from .models import AuthTS from .models import AuthTS
from .models import TSgroup from .models import TSgroup
from .models import UserTSgroup from .models import UserTSgroup
from .models import DiscordAuthToken
class AuthTSgroupAdmin(admin.ModelAdmin): class AuthTSgroupAdmin(admin.ModelAdmin):
fields = ['auth_group','ts_group'] fields = ['auth_group','ts_group']
@ -15,4 +16,6 @@ class UserTSgroupAdmin(admin.ModelAdmin):
filter_horizontal = ('ts_group',) filter_horizontal = ('ts_group',)
admin.site.register(AuthTS, AuthTSgroupAdmin) admin.site.register(AuthTS, AuthTSgroupAdmin)
admin.site.register(TSgroup, TSgroupAdmin) admin.site.register(TSgroup, TSgroupAdmin)
admin.site.register(DiscordAuthToken)

View File

@ -1,13 +1,20 @@
from django import forms from django import forms
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from util import check_if_user_has_permission
class JabberBroadcastForm(forms.Form): class JabberBroadcastForm(forms.Form):
allchoices = [] def __init__(self, user, *args, **kwargs):
allchoices.append(('all', 'all')) super(JabberBroadcastForm, self).__init__(*args, **kwargs)
for group in Group.objects.all(): allchoices = []
allchoices.append((str(group.name), str(group.name))) if check_if_user_has_permission(user, 'jabber_broadcast_all'):
group = forms.ChoiceField(choices=allchoices, widget=forms.Select) allchoices.append(('all', 'all'))
for g in Group.objects.all():
allchoices.append((str(g.name), str(g.name)))
else:
for g in user.groups.all():
allchoices.append((str(g.name), str(g.name)))
self.fields['group'] = forms.ChoiceField(choices=allchoices, widget=forms.Select)
message = forms.CharField(widget=forms.Textarea) message = forms.CharField(widget=forms.Textarea)

View File

@ -3,33 +3,34 @@ import json
from django.conf import settings from django.conf import settings
import re import re
import os import os
from services.models import DiscordAuthToken
import logging
logger = logging.getLogger(__name__)
DISCORD_URL = "https://discordapp.com/api" DISCORD_URL = "https://discordapp.com/api"
class DiscordAPIManager: class DiscordAPIManager:
def __init__(self, server_id, email, password): def __init__(self, server_id, email, password, user=None):
data = { self.token = DiscordAPIManager.get_token_by_user(email, password, user)
"email" : email,
"password": password,
}
custom_headers = {'content-type':'application/json'}
path = DISCORD_URL + "/auth/login"
r = requests.post(path, headers=custom_headers, data=json.dumps(data))
r.raise_for_status()
self.token = r.json()['token']
self.email = email self.email = email
self.password = password self.password = password
self.server_id = server_id self.server_id = server_id
logger.debug("Initialized DiscordAPIManager with server id %s" % self.server_id)
def __del__(self): @staticmethod
if hasattr(self, 'token'): def validate_token(token):
if self.token and self.token != "": custom_headers = {'accept': 'application/json', 'authorization': token}
data = {'token': self.token} path = DISCORD_URL + "/users/@me"
path = DISCORD_URL + "/auth/logout" r = requests.get(path, headers=custom_headers)
custom_headers = {'content-type':'application/json'} if r.status_code == 200:
r = requests.post(path, headers=custom_headers, data=json.dumps(data)) logger.debug("Token starting with %s passed validation." % token[0:5])
r.raise_for_status() return True
else:
logger.debug("Token starting with %s failed validation with status code %s" % (token[0:5], r.status_code))
return False
@staticmethod @staticmethod
def get_auth_token(): def get_auth_token():
@ -40,6 +41,7 @@ class DiscordAPIManager:
custom_headers = {'content-type':'application/json'} custom_headers = {'content-type':'application/json'}
path = DISCORD_URL + "/auth/login" path = DISCORD_URL + "/auth/login"
r = requests.post(path, headers=custom_headers, data=json.dumps(data)) r = requests.post(path, headers=custom_headers, data=json.dumps(data))
logger.debug("Received status code %s during token generation for settings discord user." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json()['token'] return r.json()['token']
@ -83,18 +85,21 @@ class DiscordAPIManager:
custom_headers = {'authorization': self.token} custom_headers = {'authorization': self.token}
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/bans/" + str(user_id) + "?delete-message-days=" + str(delete_message_age) path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/bans/" + str(user_id) + "?delete-message-days=" + str(delete_message_age)
r = requests.put(path, headers=custom_headers) r = requests.put(path, headers=custom_headers)
logger.debug("Received status code %s after banning user %s" % (r.status_code, user_id))
r.raise_for_status() r.raise_for_status()
def unban_user(self, user_id): def unban_user(self, user_id):
custom_headers = {'authorization': self.token} custom_headers = {'authorization': self.token}
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/bans/" + str(user_id) path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/bans/" + str(user_id)
r = requests.delete(path, headers=custom_headers) r = requests.delete(path, headers=custom_headers)
logger.debug("Received status code %s after deleting ban for user %s" % (r.status_code, user_id))
r.raise_for_status() r.raise_for_status()
def generate_role(self): def generate_role(self):
custom_headers = {'accept':'application/json', 'authorization': self.token} custom_headers = {'accept':'application/json', 'authorization': self.token}
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles" path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles"
r = requests.post(path, headers=custom_headers) r = requests.post(path, headers=custom_headers)
logger.debug("Received status code %s after generating new role." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@ -108,6 +113,7 @@ class DiscordAPIManager:
} }
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles/" + str(role_id) path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles/" + str(role_id)
r = requests.patch(path, headers=custom_headers, data=json.dumps(data)) r = requests.patch(path, headers=custom_headers, data=json.dumps(data))
logger.debug("Received status code %s after editing role id %s" % (r.status_code, role_id))
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@ -125,11 +131,11 @@ class DiscordAPIManager:
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@staticmethod def accept_invite(self, invite_id):
def accept_invite(invite_id, token): custom_headers = {'accept': 'application/json', 'authorization': self.token}
custom_headers = {'accept': 'application/json', 'authorization': token}
path = DISCORD_URL + "/invite/" + str(invite_id) path = DISCORD_URL + "/invite/" + str(invite_id)
r = requests.post(path, headers=custom_headers) r = requests.post(path, headers=custom_headers)
logger.debug("Received status code %s after accepting invite." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@ -143,6 +149,7 @@ class DiscordAPIManager:
'xkcdpass': xkcdpass, 'xkcdpass': xkcdpass,
} }
r = requests.post(path, headers=custom_headers, data=json.dumps(data)) r = requests.post(path, headers=custom_headers, data=json.dumps(data))
logger.debug("Received status code %s after creating invite." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@ -157,6 +164,7 @@ class DiscordAPIManager:
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/members/" + str(user_id) path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/members/" + str(user_id)
data = { 'roles': role_ids } data = { 'roles': role_ids }
r = requests.patch(path, headers=custom_headers, data=json.dumps(data)) r = requests.patch(path, headers=custom_headers, data=json.dumps(data))
logger.debug("Received status code %s after setting roles of user %s to %s" % (r.status_code, user_id, role_ids))
r.raise_for_status() r.raise_for_status()
@staticmethod @staticmethod
@ -197,18 +205,37 @@ class DiscordAPIManager:
custom_headers = {'authorization': self.token, 'accept':'application/json'} custom_headers = {'authorization': self.token, 'accept':'application/json'}
path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles" path = DISCORD_URL + "/guilds/" + str(self.server_id) + "/roles"
r = requests.get(path, headers=custom_headers) r = requests.get(path, headers=custom_headers)
logger.debug("Received status code %s after retrieving role list from server." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
def get_group_id(self, group_name): def get_group_id(self, group_name):
logger.debug("Determining role id for group name %s" % group_name)
all_roles = self.get_roles() all_roles = self.get_roles()
logger.debug("Retrieved role list for server: %s" % all_roles)
for role in all_roles: for role in all_roles:
logger.debug("Checking role %s" % role)
if role['name'] == group_name: if role['name'] == group_name:
logger.debug("Found role matching name: %s" % role['id'])
return role['id'] return role['id']
logger.debug("Role not found on server. Raising KeyError")
raise KeyError('Group not found on server: ' + group_name) raise KeyError('Group not found on server: ' + group_name)
@staticmethod @staticmethod
def get_token_by_user(email, password): def get_token_by_user(email, password, user):
if DiscordAuthToken.objects.filter(email=email).exists():
auth = DiscordAuthToken.objects.get(email=email)
if not auth.user == user:
raise ValueError("User mismatch while validating DiscordAuthToken for email %s - user %s, requesting user %s" % (email, auth.user, user))
logger.debug("Discord auth token cached for supplied email starting with %s" % email[0:3])
auth = DiscordAuthToken.objects.get(email=email, user=user)
if DiscordAPIManager.validate_token(auth.token):
logger.debug("Token still valid. Returning token starting with %s" % auth.token[0:5])
return auth.token
else:
logger.debug("Token has expired. Deleting.")
auth.delete()
logger.debug("Generating auth token for email starting with %s user %s and password of length %s" % (email[0:3], user, len(password)))
data = { data = {
"email" : email, "email" : email,
"password": password, "password": password,
@ -216,8 +243,21 @@ class DiscordAPIManager:
custom_headers = {'content-type':'application/json'} custom_headers = {'content-type':'application/json'}
path = DISCORD_URL + "/auth/login" path = DISCORD_URL + "/auth/login"
r = requests.post(path, headers=custom_headers, data=json.dumps(data)) r = requests.post(path, headers=custom_headers, data=json.dumps(data))
logger.debug("Received status code %s after generating auth token for custom user." % r.status_code)
r.raise_for_status() r.raise_for_status()
return r.json()['token'] token = r.json()['token']
auth = DiscordAuthToken(email=email, token=token, user=user)
auth.save()
logger.debug("Created cached token for email starting with %s" % email[0:3])
return token
def get_profile(self):
custom_headers = {'accept': 'application/json', 'authorization': self.token}
path = DISCORD_URL + "/users/@me"
r = requests.get(path, headers=custom_headers)
logger.debug("Received status code %s after retrieving user profile with email %s" % (r.status_code, self.email[0:3]))
r.raise_for_status()
return r.json()
@staticmethod @staticmethod
def get_user_profile(email, password): def get_user_profile(email, password):
@ -225,6 +265,7 @@ class DiscordAPIManager:
custom_headers = {'accept': 'application/json', 'authorization': token} custom_headers = {'accept': 'application/json', 'authorization': token}
path = DISCORD_URL + "/users/@me" path = DISCORD_URL + "/users/@me"
r = requests.get(path, headers=custom_headers) r = requests.get(path, headers=custom_headers)
logger.debug("Received status code %s after retrieving user profile with email %s" % (r.status_code, email[0:3]))
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
@ -282,24 +323,34 @@ class DiscordManager:
@staticmethod @staticmethod
def update_groups(user_id, groups): def update_groups(user_id, groups):
logger.debug("Updating groups for user_id %s: %s" % (user_id, groups))
group_ids = [] group_ids = []
api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD) api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD)
if len(groups) == 0: if len(groups) == 0:
logger.debug("No groups provided - generating empty array of group ids.")
group_ids = [] group_ids = []
else: else:
for g in groups: for g in groups:
try: try:
logger.debug("Retrieving group id for group %s" % g)
group_id = api.get_group_id(g) group_id = api.get_group_id(g)
group_ids.append(group_id) group_ids.append(group_id)
logger.debug("Got id %s" % group_id)
except: except:
logger.debug("Group id retrieval generated exception - generating new group on discord server.", exc_info=True)
group_ids.append(DiscordManager.create_group(g)) group_ids.append(DiscordManager.create_group(g))
logger.info("Setting discord groups for user %s to %s" % (user_id, group_ids))
api.set_roles(user_id, group_ids) api.set_roles(user_id, group_ids)
@staticmethod @staticmethod
def create_group(groupname): def create_group(groupname):
logger.debug("Creating new group %s" % groupname)
api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD) api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD)
new_group = api.generate_role() new_group = api.generate_role()
logger.debug("Created new role on server with id %s: %s" % (new_group['id'], new_group))
named_group = api.edit_role(new_group['id'], groupname) named_group = api.edit_role(new_group['id'], groupname)
logger.debug("Renamed group id %s to %s" % (new_group['id'], groupname))
logger.info("Created new group on discord server with name %s" % groupname)
return named_group['id'] return named_group['id']
@staticmethod @staticmethod
@ -330,26 +381,36 @@ class DiscordManager:
return current_password return current_password
@staticmethod @staticmethod
def add_user(email, password): def add_user(email, password, user):
try: try:
api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD) logger.debug("Adding new user %s to discord with email %s and password of length %s" % (user, email[0:3], len(password)))
profile = DiscordAPIManager.get_user_profile(email, password) server_api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD)
user_api = DiscordAPIManager(settings.DISCORD_SERVER_ID, email, password, user=user)
profile = user_api.get_profile()
logger.debug("Got profile for user: %s" % profile)
user_id = profile['id'] user_id = profile['id']
if api.check_if_user_banned(user_id): logger.debug("Determined user id: %s" % user_id)
api.unban_user(user_id) if server_api.check_if_user_banned(user_id):
invite_code = api.create_invite()['code'] logger.debug("User is currently banned. Unbanning %s" % user_id)
token = DiscordAPIManager.get_token_by_user(email, password) server_api.unban_user(user_id)
DiscordAPIManager.accept_invite(invite_code, token) invite_code = server_api.create_invite()['code']
logger.debug("Generated invite code beginning with %s" % invite_code[0:5])
user_api.accept_invite(invite_code)
logger.info("Added user to discord server %s with id %s" % (settings.DISCORD_SERVER_ID, user_id))
return user_id return user_id
except: except:
logger.exception("An unhandled exception has occured.", exc_info=True)
return "" return ""
@staticmethod @staticmethod
def delete_user(user_id): def delete_user(user_id):
try: try:
logger.debug("Deleting user with id %s from discord server." % user_id)
api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD) api = DiscordAPIManager(settings.DISCORD_SERVER_ID, settings.DISCORD_USER_EMAIL, settings.DISCORD_USER_PASSWORD)
DiscordManager.update_groups(user_id, []) DiscordManager.update_groups(user_id, [])
api.ban_user(user_id) api.ban_user(user_id)
logger.info("Deleted user with id %s from discord server id %s" % (user_id, settings.DISCORD_SERVER_ID))
return True return True
except: except:
logger.exception("An unhandled exception has occured.", exc_info=True)
return False return False

View File

@ -4,6 +4,9 @@ import evelink.eve
from django.conf import settings from django.conf import settings
import logging
logger = logging.getLogger(__name__)
class EveApiManager(): class EveApiManager():
def __init__(self): def __init__(self):
@ -12,44 +15,51 @@ class EveApiManager():
@staticmethod @staticmethod
def get_characters_from_api(api_id, api_key): def get_characters_from_api(api_id, api_key):
chars = [] chars = []
logger.debug("Getting characters from api id %s" % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
# Should get characters # Should get characters
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
chars = account.characters() chars = account.characters()
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
logger.debug("Retrieved characters %s from api id %s" % (chars, api_id))
return chars return chars
@staticmethod @staticmethod
def get_corporation_ticker_from_id(corp_id): def get_corporation_ticker_from_id(corp_id):
logger.debug("Getting ticker for corp id %s" % corp_id)
ticker = "" ticker = ""
try: try:
api = evelink.api.API() api = evelink.api.API()
corp = evelink.corp.Corp(api) corp = evelink.corp.Corp(api)
response = corp.corporation_sheet(corp_id) response = corp.corporation_sheet(corp_id)
logger.debug("Retrieved corp sheet for id %s: %s" % (corp_id, response))
ticker = response[0]['ticker'] ticker = response[0]['ticker']
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
logger.debug("Determined corp id %s ticker: %s" % (corp_id, ticker))
return ticker return ticker
@staticmethod @staticmethod
def get_alliance_information(alliance_id): def get_alliance_information(alliance_id):
results = {} results = {}
logger.debug("Getting info for alliance with id %s" % alliance_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
eve = evelink.eve.EVE(api=api) eve = evelink.eve.EVE(api=api)
alliance = eve.alliances() alliance = eve.alliances()
results = alliance[0][int(alliance_id)] results = alliance[0][int(alliance_id)]
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
logger.debug("Got alliance info %s" % results)
return results return results
@staticmethod @staticmethod
def get_corporation_information(corp_id): def get_corporation_information(corp_id):
logger.debug("Getting info for corp with id %s" % corp_id)
results = {} results = {}
try: try:
api = evelink.api.API() api = evelink.api.API()
@ -57,171 +67,205 @@ class EveApiManager():
corpinfo = corp.corporation_sheet(corp_id=int(corp_id)) corpinfo = corp.corporation_sheet(corp_id=int(corp_id))
results = corpinfo[0] results = corpinfo[0]
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
logger.debug("Got corp info %s" % results)
return results return results
@staticmethod @staticmethod
def check_api_is_type_account(api_id, api_key): def check_api_is_type_account(api_id, api_key):
logger.debug("Checking if api id %s is account." % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
info = account.key_info() info = account.key_info()
logger.debug("API id %s is type %s" % (api_id, info[0]['type']))
return info[0]['type'] == "account" return info[0]['type'] == "account"
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
return False return False
@staticmethod @staticmethod
def check_api_is_full(api_id, api_key): def check_api_is_full(api_id, api_key):
logger.debug("Checking if api id %s meets member requirements." % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
info = account.key_info() info = account.key_info()
return info[0]['access_mask'] & settings.MEMBER_API_MASK == int(settings.MEMBER_API_MASK) logger.debug("API has mask %s, required is %s" % (info[0]['access_mask'], settings.MEMBER_API_MASK))
return info[0]['access_mask'] & int(settings.MEMBER_API_MASK) == int(settings.MEMBER_API_MASK)
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
return False return False
@staticmethod @staticmethod
def check_blue_api_is_full(api_id, api_key): def check_blue_api_is_full(api_id, api_key):
logger.debug("Checking if api id %s meets blue requirements." % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
info = account.key_info() info = account.key_info()
return info[0]['access_mask'] & settings.BLUE_API_MASK == int(settings.BLUE_API_MASK) logger.debug("API has mask %s, required is %s" % (info[0]['access_mask'], settings.BLUE_API_MASK))
return info[0]['access_mask'] & int(settings.BLUE_API_MASK) == int(settings.BLUE_API_MASK)
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
@staticmethod @staticmethod
def get_api_info(api_id, api_key): def get_api_info(api_id, api_key):
logger.debug("Getting api info for key id %s" % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
info = account.key_info() info = account.key_info()
logger.debug("Got info for api id %s: %s" % (api_id, info))
return info return info
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
return False return False
@staticmethod @staticmethod
def api_key_is_valid(api_id, api_key): def api_key_is_valid(api_id, api_key):
logger.debug("Checking if api id %s is valid." % api_id)
try: try:
api = evelink.api.API(api_key=(api_id, api_key)) api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api) account = evelink.account.Account(api=api)
info = account.key_info() info = account.key_info()
logger.info("Verified api id %s is still valid." % api_id)
return True return True
except evelink.api.APIError as error: except evelink.api.APIError as error:
return False logger.exception("APIError occured while validating api id %s" % api_id, exc_info=True)
logger.info("API id %s is invalid." % api_id)
return False return False
@staticmethod @staticmethod
def check_if_api_server_online(): def check_if_api_server_online():
logger.debug("Checking if API server online.")
try: try:
api = evelink.api.API() api = evelink.api.API()
server = evelink.server.Server(api=api) server = evelink.server.Server(api=api)
info = server.server_status() info = server.server_status()
logger.info("Verified API server is online and reachable.")
return True return True
except evelink.api.APIError as error: except evelink.api.APIError as error:
return False logger.exception("APIError occured while trying to query api server. Possibly offline?", exc_info=True)
logger.warn("Unable to reach API server.")
return False return False
@staticmethod @staticmethod
def check_if_id_is_corp(corp_id): def check_if_id_is_corp(corp_id):
logger.debug("Checking if id %s is a corp." % corp_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
corp = evelink.corp.Corp(api=api) corp = evelink.corp.Corp(api=api)
corpinfo = corp.corporation_sheet(corp_id=int(corp_id)) corpinfo = corp.corporation_sheet(corp_id=int(corp_id))
results = corpinfo[0] results = corpinfo[0]
logger.debug("Confirmed id %s is a corp." % corp_id)
return True return True
except evelink.api.APIError as error: except evelink.api.APIError as error:
return False logger.exception("APIError occured while checking if id %s is corp. Possibly not corp?" % corp_id, exc_info=True)
logger.debug("Unable to verify id %s is corp." % corp_id)
return False return False
@staticmethod @staticmethod
def get_corp_standings(): def get_corp_standings():
if settings.CORP_API_ID != "": if settings.CORP_API_ID and settings.CORP_API_VCODE:
try: try:
logger.debug("Getting corp standings with api id %s" % settings.CORP_API_ID)
api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE)) api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE))
corp = evelink.corp.Corp(api=api) corp = evelink.corp.Corp(api=api)
corpinfo = corp.contacts() corpinfo = corp.contacts()
results = corpinfo[0] results = corpinfo[0]
logger.debug("Got corp standings from settings: %s" % results)
return results return results
except evelink.api.APIError as error: except evelink.api.APIError as error:
pass logger.exception("Unhandled APIError occured.", exc_info=True)
else:
logger.error("No corp API key supplied in settings. Unable to get standings.")
return {} return {}
@staticmethod @staticmethod
def check_if_id_is_alliance(alliance_id): def check_if_id_is_alliance(alliance_id):
logger.debug("Checking if id %s is an alliance." % alliance_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
eve = evelink.eve.EVE(api=api) eve = evelink.eve.EVE(api=api)
alliance = eve.alliances() alliance = eve.alliances()
results = alliance[0][int(alliance_id)] results = alliance[0][int(alliance_id)]
if results: if results:
logger.debug("Confirmed id %s is an alliance." % alliance_id)
return True return True
except evelink.api.APIError as error: except evelink.api.APIError as error:
return False logger.exception("APIError occured while checking if id %s is an alliance. Possibly not alliance?" % alliance_id, exc_info=True)
logger.debug("Unable to verify id %s is an an alliance." % alliance_id)
return False return False
@staticmethod @staticmethod
def check_if_id_is_character(character_id): def check_if_id_is_character(character_id):
logger.debug("Checking if id %s is a character." % character_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
eve = evelink.eve.EVE(api=api) eve = evelink.eve.EVE(api=api)
results = eve.character_info_from_id(character_id) results = eve.character_info_from_id(character_id)
if results: if results:
logger.debug("Confirmed id %s is a character." % character_id)
return True return True
except evelink.api.APIError as error: except evelink.api.APIError as error:
return False logger.exception("APIError occured while checking if id %s is a character. Possibly not character?" % character_id, exc_info=True)
logger.debug("Unable to verify id %s is a character." % character_id)
return False return False
@staticmethod @staticmethod
def check_if_alliance_exists(alliance_id): def check_if_alliance_exists(alliance_id):
logger.debug("Checking if alliance id %s exists." % alliance_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
eve = evelink.eve.EVE(api=api) eve = evelink.eve.EVE(api=api)
alliances = eve.alliances() alliances = eve.alliances()
if int(alliance_id) in alliances[0]: if int(alliance_id) in alliances[0]:
logger.debug("Verified alliance id %s exists." % alliance_id)
return True return True
else: else:
logger.debug("Verified alliance id %s does not exist." % alliance_id)
return False return False
except evelink.api.APIError as error: except evelink.api.APIError as error:
print error logger.exception("Unhandled APIError occured.", exc_info=True)
return False return False
except ValueError as error: except ValueError as error:
#attempts to catch error resulting from checking alliance_of nonetype models #attempts to catch error resulting from checking alliance_of nonetype models
print error logger.exception("Unhandled ValueError occured. Possible nonetype alliance model.", exc_info=True)
return False return False
logger.warn("Exception prevented verification of alliance id %s existance. Assuming false." % alliance_id)
return False return False
@staticmethod @staticmethod
def check_if_corp_exists(corp_id): def check_if_corp_exists(corp_id):
logger.debug("Checking if corp id %s exists." % corp_id)
try: try:
api = evelink.api.API() api = evelink.api.API()
corp = evelink.corp.Corp(api=api) corp = evelink.corp.Corp(api=api)
corpinfo = corp.corporation_sheet(corp_id=corp_id) corpinfo = corp.corporation_sheet(corp_id=corp_id)
if corpinfo[0]['members']['current'] > 0: if corpinfo[0]['members']['current'] > 0:
logger.debug("Verified corp id %s exists with member count %s" % (corp_id, corpinfo[0]['members']['current']))
return True return True
else: else:
logger.debug("Verified corp id %s has closed. Member count %s" % (corp_id, corpinfo[0]['members']['current']))
return False return False
except evelink.api.APIError as error: except evelink.api.APIError as error:
#could be smart and check for error code523 to verify error due to no corp instead of catch-all #could be smart and check for error code523 to verify error due to no corp instead of catch-all
print error logger.exception("Unhandled APIError occured.", exc_info=True)
return False return False
logger.warn("Exception prevented verification of corp id %s existance. Assuming false." % corp_id)
return False return False

View File

@ -4,6 +4,9 @@ from hashlib import md5
from django.conf import settings from django.conf import settings
import logging
logger = logging.getLogger(__name__)
class IPBoardManager: class IPBoardManager:
def __init__(self): def __init__(self):
@ -39,29 +42,35 @@ class IPBoardManager:
def add_user(username, email): def add_user(username, email):
""" Add user to service """ """ Add user to service """
sanatized = str(IPBoardManager.__santatize_username(username)) sanatized = str(IPBoardManager.__santatize_username(username))
logger.debug("Adding user to IPBoard with username %s" % sanatized)
plain_password = IPBoardManager.__generate_random_pass() plain_password = IPBoardManager.__generate_random_pass()
password = md5(plain_password).hexdigest() password = md5(plain_password).hexdigest()
ret = IPBoardManager.exec_xmlrpc('createUser', username=sanatized, email=str(email), display_name=sanatized, ret = IPBoardManager.exec_xmlrpc('createUser', username=sanatized, email=str(email), display_name=sanatized,
md5_passwordHash=password) md5_passwordHash=password)
logger.info("Added IPBoard user with username %s" % sanatized)
return sanatized, plain_password return sanatized, plain_password
@staticmethod @staticmethod
def delete_user(username): def delete_user(username):
""" Delete user """ """ Delete user """
ret = IPBoardManager.exec_xmlrpc('deleteUser', username=username) ret = IPBoardManager.exec_xmlrpc('deleteUser', username=username)
logger.info("Deleted IPBoard user with username %s" % username)
return username return username
@staticmethod @staticmethod
def disable_user(username): def disable_user(username):
""" Disable user """ """ Disable user """
ret = IPBoardManager.exec_xmlrpc('disableUser', username=username) ret = IPBoardManager.exec_xmlrpc('disableUser', username=username)
logger.info("Disabled IPBoard user with username %s" % username)
return username return username
@staticmethod @staticmethod
def update_user(username, email, password): def update_user(username, email, password):
""" Add user to service """ """ Add user to service """
password = md5(password).hexdigest() password = md5(password).hexdigest()
logger.debug("Updating IPBoard username %s with email %s and password hash starting with %s" % (username, email, password[0:5]))
ret = IPBoardManager.exec_xmlrpc('updateUser', username=username, email=email, md5_passwordHash=password) ret = IPBoardManager.exec_xmlrpc('updateUser', username=username, email=email, md5_passwordHash=password)
logger.info("Updated IPBoard user with username %s" % username)
return username return username
@staticmethod @staticmethod
@ -70,6 +79,7 @@ class IPBoardManager:
ret = IPBoardManager.exec_xmlrpc('getAllGroups') ret = IPBoardManager.exec_xmlrpc('getAllGroups')
for group in ret: for group in ret:
groups.append(group["g_title"]) groups.append(group["g_title"])
logger.debug("Retrieved group list from IPBoard: %s" % groups)
return groups return groups
@staticmethod @staticmethod
@ -79,21 +89,25 @@ class IPBoardManager:
if type(ret) is list: if type(ret) is list:
for group in ret: for group in ret:
groups.append(group["g_title"]) groups.append(group["g_title"])
logger.debug("Got user %s IPBoard groups %s" % (username, groups))
return groups return groups
@staticmethod @staticmethod
def add_group(group): def add_group(group):
ret = IPBoardManager.exec_xmlrpc('addGroup', group=group) ret = IPBoardManager.exec_xmlrpc('addGroup', group=group)
logger.info("Added IPBoard group %s" % group)
return ret return ret
@staticmethod @staticmethod
def add_user_to_group(username, group): def add_user_to_group(username, group):
ret = IPBoardManager.exec_xmlrpc('addUserToGroup', username=username, group=group) ret = IPBoardManager.exec_xmlrpc('addUserToGroup', username=username, group=group)
logger.info("Added IPBoard user %s to group %s" % (username, group))
return ret return ret
@staticmethod @staticmethod
def remove_user_from_group(username, group): def remove_user_from_group(username, group):
ret = IPBoardManager.exec_xmlrpc('removeUserFromGroup', username=username, group=group) ret = IPBoardManager.exec_xmlrpc('removeUserFromGroup', username=username, group=group)
logger.info("Removed IPBoard user %s from group %s" % (username, group))
return ret return ret
@staticmethod @staticmethod
@ -104,27 +118,27 @@ class IPBoardManager:
@staticmethod @staticmethod
def update_groups(username, groups): def update_groups(username, groups):
logger.debug("Updating IPBoard user %s with groups %s" % (username, groups))
forum_groups = IPBoardManager.get_all_groups() forum_groups = IPBoardManager.get_all_groups()
user_groups = set(IPBoardManager.get_user_groups(username)) user_groups = set(IPBoardManager.get_user_groups(username))
act_groups = set([g.replace(' ', '-') for g in groups]) act_groups = set([g.replace(' ', '-') for g in groups])
addgroups = act_groups - user_groups addgroups = act_groups - user_groups
remgroups = user_groups - act_groups remgroups = user_groups - act_groups
print addgroups logger.info("Updating IPBoard groups for user %s - adding %s, removing %s" % (username, addgroups, remgroups))
print remgroups
for g in addgroups: for g in addgroups:
if not g in forum_groups: if not g in forum_groups:
IPBoardManager.add_group(g) IPBoardManager.add_group(g)
print username logger.debug("Adding user %s to IPBoard group %s" % (username, g))
print g
IPBoardManager.add_user_to_group(username, g) IPBoardManager.add_user_to_group(username, g)
for g in remgroups: for g in remgroups:
logger.debug("Removing user %s from IPBoard group %s" % (username, g))
IPBoardManager.remove_user_from_group(username, g) IPBoardManager.remove_user_from_group(username, g)
@staticmethod @staticmethod
def update_user_password(username, email): def update_user_password(username, email):
logger.debug("Settings new IPBoard password for user %s" % username)
plain_password = IPBoardManager.__generate_random_pass() plain_password = IPBoardManager.__generate_random_pass()
IPBoardManager.update_user(username, email, plain_password) IPBoardManager.update_user(username, email, plain_password)
return plain_password return plain_password

View File

@ -6,6 +6,9 @@ import django
from django.db import connections from django.db import connections
from django.conf import settings from django.conf import settings
import logging
logger = logging.getLogger(__name__)
class MumbleManager: class MumbleManager:
SQL_SELECT_USER_MAX_ID = r"SELECT max(user_id)+1 as next_id from murmur_users" SQL_SELECT_USER_MAX_ID = r"SELECT max(user_id)+1 as next_id from murmur_users"
@ -76,30 +79,38 @@ class MumbleManager:
for row in rows: for row in rows:
out[row[1]] = row[0] out[row[1]] = row[0]
logger.debug("Got mumble groups %s" % out)
return out return out
@staticmethod @staticmethod
def _get_group(name): def _get_group(name):
logger.debug("Looking for group name %s in mumble." % name)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_GET_GROUP_FROM_NAME, [settings.MUMBLE_SERVER_ID, name]) dbcursor.execute(MumbleManager.SQL_GET_GROUP_FROM_NAME, [settings.MUMBLE_SERVER_ID, name])
row = dbcursor.fetchone() row = dbcursor.fetchone()
if row: if row:
logger.debug("Found group %s in mumble - %s" % (name, row[0]))
return row[0] return row[0]
@staticmethod @staticmethod
def _get_user_groups(name): def _get_user_groups(name):
logger.debug("Getting mumble groups for username %s" % name)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
user_id = MumbleManager.get_user_id_by_name(name) user_id = MumbleManager.get_user_id_by_name(name)
dbcursor.execute(MumbleManager.SQL_GET_USER_GROUPS, [user_id]) dbcursor.execute(MumbleManager.SQL_GET_USER_GROUPS, [user_id])
return [row[0] for row in dbcursor.fetchall()] out = [row[0] for row in dbcursor.fetchall()]
logger.debug("Got user %s mumble groups %s" % (name, out))
return out
@staticmethod @staticmethod
def _add_group(name): def _add_group(name):
logger.debug("Adding group %s to mumble server." % name)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_SELECT_GROUP_MAX_ID) dbcursor.execute(MumbleManager.SQL_SELECT_GROUP_MAX_ID)
row = dbcursor.fetchone() row = dbcursor.fetchone()
groupid = row[0] groupid = row[0]
dbcursor.execute(MumbleManager.SQL_ADD_GROUP, [groupid, settings.MUMBLE_SERVER_ID, name]) dbcursor.execute(MumbleManager.SQL_ADD_GROUP, [groupid, settings.MUMBLE_SERVER_ID, name])
logger.info("Created group %s on mumble server with id %s" % (name, groupid))
return groupid return groupid
@staticmethod @staticmethod
@ -107,124 +118,142 @@ class MumbleManager:
if userid != None: if userid != None:
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_ADD_USER_TO_GROUP, [groupid, settings.MUMBLE_SERVER_ID, userid]) dbcursor.execute(MumbleManager.SQL_ADD_USER_TO_GROUP, [groupid, settings.MUMBLE_SERVER_ID, userid])
logger.info("Added user id %s to mumble group id %s" % (userid, groupid))
@staticmethod @staticmethod
def _del_user_from_group(userid, groupid): def _del_user_from_group(userid, groupid):
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_DELETE_USER_FROM_GROUP, [groupid, settings.MUMBLE_SERVER_ID, userid]) dbcursor.execute(MumbleManager.SQL_DELETE_USER_FROM_GROUP, [groupid, settings.MUMBLE_SERVER_ID, userid])
logger.info("Removed user id %s from mumble group id %s" % (userid, groupid))
@staticmethod @staticmethod
def get_user_id_by_name(name): def get_user_id_by_name(name):
logger.debug("Getting mumble user id for user with name %s" % name)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_SELECT_GET_USER_ID_BY_NAME, [name, settings.MUMBLE_SERVER_ID]) dbcursor.execute(MumbleManager.SQL_SELECT_GET_USER_ID_BY_NAME, [name, settings.MUMBLE_SERVER_ID])
row = dbcursor.fetchone() row = dbcursor.fetchone()
if row: if row:
logger.debug("Got mumble user id %s for name %s" % (row[0], name))
return row[0] return row[0]
@staticmethod @staticmethod
def create_user(corp_ticker, username): def create_user(corp_ticker, username):
logger.debug("Creating mumble user with username %s and ticker %s" % (username, corp_ticker))
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
username_clean = MumbleManager.__santatize_username(MumbleManager.__generate_username(username, corp_ticker)) username_clean = MumbleManager.__santatize_username(MumbleManager.__generate_username(username, corp_ticker))
password = MumbleManager.__generate_random_pass() password = MumbleManager.__generate_random_pass()
pwhash = MumbleManager._gen_pwhash(password) pwhash = MumbleManager._gen_pwhash(password)
logger.debug("Proceeding with mumble user creation: clean username %s, pwhash starts with %s" % (username_clean, pwhash[0:5]))
try: try:
dbcursor.execute(MumbleManager.SQL_SELECT_USER_MAX_ID) dbcursor.execute(MumbleManager.SQL_SELECT_USER_MAX_ID)
user_id = dbcursor.fetchone()[0] user_id = dbcursor.fetchone()[0]
dbcursor.execute(MumbleManager.SQL_CREATE_USER, dbcursor.execute(MumbleManager.SQL_CREATE_USER,
[settings.MUMBLE_SERVER_ID, user_id, username_clean, pwhash]) [settings.MUMBLE_SERVER_ID, user_id, username_clean, pwhash])
logger.info("Added user to mumble with username %s" % username_clean)
return username_clean, password return username_clean, password
except django.db.utils.IntegrityError as error: except django.db.utils.IntegrityError as error:
print error logger.exception("IntegrityError during mumble create_user occured.", exc_info=True)
except: except:
print "Unexpected error:", sys.exc_info()[0] logger.exception("Unhandled exception occured.", exc_info=True)
logger.error("Exception prevented creation of mumble user. Returning blank for username, password.")
return "", "" return "", ""
@staticmethod @staticmethod
def create_blue_user(corp_ticker, username): def create_blue_user(corp_ticker, username):
logger.debug("Creating mumble blue user with username %s and ticker %s" % (username, corp_ticker))
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
username_clean = MumbleManager.__santatize_username(MumbleManager.__generate_username_blue(username, username_clean = MumbleManager.__santatize_username(MumbleManager.__generate_username_blue(username,
corp_ticker)) corp_ticker))
password = MumbleManager.__generate_random_pass() password = MumbleManager.__generate_random_pass()
pwhash = MumbleManager._gen_pwhash(password) pwhash = MumbleManager._gen_pwhash(password)
logger.debug("Proceeding with mumble user creation: clean username %s, pwhash starts with %s" % (username_clean, pwhash[0:5]))
try: try:
dbcursor.execute(MumbleManager.SQL_SELECT_USER_MAX_ID) dbcursor.execute(MumbleManager.SQL_SELECT_USER_MAX_ID)
user_id = dbcursor.fetchone()[0] user_id = dbcursor.fetchone()[0]
dbcursor.execute(MumbleManager.SQL_CREATE_USER, dbcursor.execute(MumbleManager.SQL_CREATE_USER,
[settings.MUMBLE_SERVER_ID, user_id, username_clean, pwhash]) [settings.MUMBLE_SERVER_ID, user_id, username_clean, pwhash])
logger.info("Added blue user to mumble with username %s" % username_clean)
return username_clean, password return username_clean, password
except: except:
print "Unexpected error:", sys.exc_info()[0] logger.exception("Unhandled exception occured.", exc_info=True)
logger.error("Exception prevented creation of mumble blue user. Returning blank for username, password.")
return "", "" return "", ""
@staticmethod @staticmethod
def check_user_exist(username): def check_user_exist(username):
logger.debug("Checking if username %s exists on mumble." % username)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
dbcursor.execute(MumbleManager.SQL_CHECK_USER_EXIST, dbcursor.execute(MumbleManager.SQL_CHECK_USER_EXIST,
[username, settings.MUMBLE_SERVER_ID]) [username, settings.MUMBLE_SERVER_ID])
row = dbcursor.fetchone() row = dbcursor.fetchone()
if row and row[0].lower() == username.lower(): if row and row[0].lower() == username.lower():
logger.debug("Found username %s on mumble." % username)
return True return True
logger.debug("Unable to find username %s on mumble." % username)
return False return False
@staticmethod @staticmethod
def delete_user(username): def delete_user(username):
logger.debug("Deleting user %s from mumble." % username)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
if MumbleManager.check_user_exist(username): if MumbleManager.check_user_exist(username):
try: try:
dbcursor.execute(MumbleManager.SQL_DELETE_USER, dbcursor.execute(MumbleManager.SQL_DELETE_USER,
[username, settings.MUMBLE_SERVER_ID]) [username, settings.MUMBLE_SERVER_ID])
logger.info("Deleted user %s from mumble." % username)
return True return True
except: except:
logger.exception("Exception prevented deletion of user %s from mumble." % username, exc_info=True)
return False return False
logger.error("User %s not found on mumble. Unable to delete." % username)
return False return False
@staticmethod @staticmethod
def update_user_password(username): def update_user_password(username):
logger.debug("Updating mumble user %s password." % username)
dbcursor = connections['mumble'].cursor() dbcursor = connections['mumble'].cursor()
password = MumbleManager.__generate_random_pass() password = MumbleManager.__generate_random_pass()
pwhash = MumbleManager._gen_pwhash(password) pwhash = MumbleManager._gen_pwhash(password)
logger.debug("Proceeding with mumble user %s password update - pwhash starts with %s" % (username, pwhash[0:5]))
if MumbleManager.check_user_exist(username): if MumbleManager.check_user_exist(username):
try: try:
dbcursor.execute(MumbleManager.SQL_UPDATE_USER_PASSWORD, dbcursor.execute(MumbleManager.SQL_UPDATE_USER_PASSWORD,
[pwhash, username, settings.MUMBLE_SERVER_ID]) [pwhash, username, settings.MUMBLE_SERVER_ID])
logger.info("Updated mumble user %s password." % username)
return password return password
except: except:
logger.exception("Exception prevented updating of mumble user %s password." % username, exc_info=True)
return "" return ""
logger.error("User %s not found on mumble. Unable to update password." % username)
return "" return ""
@staticmethod @staticmethod
def update_groups(username, groups): def update_groups(username, groups):
logger.debug("Updating mumble user %s groups %s" % (username, groups))
userid = MumbleManager.get_user_id_by_name(username) userid = MumbleManager.get_user_id_by_name(username)
mumble_groups = MumbleManager._get_groups() mumble_groups = MumbleManager._get_groups()
user_groups = set(MumbleManager._get_user_groups(username)) user_groups = set(MumbleManager._get_user_groups(username))
act_groups = set([g.replace(' ', '-') for g in groups]) act_groups = set([g.replace(' ', '-') for g in groups])
addgroups = act_groups - user_groups addgroups = act_groups - user_groups
remgroups = user_groups - act_groups remgroups = user_groups - act_groups
logger.info("Updating mumble user %s groups - adding %s, removing %s" % (username, addgroups, remgroups))
for g in addgroups: for g in addgroups:
if not g in mumble_groups: if not g in mumble_groups:
mumble_groups[g] = MumbleManager._add_group(g) mumble_groups[g] = MumbleManager._add_group(g)
try: try:
logger.debug("Adding mumble user %s to group %s" % (userid, mumble_groups[g]))
MumbleManager._add_user_to_group(userid, mumble_groups[g]) MumbleManager._add_user_to_group(userid, mumble_groups[g])
except: except:
print "Error occurred while adding a mumble to a group" logger.exception("Exception occured while adding mumble user %s with id %s to group %s with id %s" % (username, userid, g, mumble_groups[g]), exc_info=True)
for g in remgroups: for g in remgroups:
try: try:
logger.debug("Deleting mumble user %s from group %s" % (userid, mumble_groups[g]))
MumbleManager._del_user_from_group(userid, mumble_groups[g]) MumbleManager._del_user_from_group(userid, mumble_groups[g])
except: except:
print "Error occurred while removing a mumble user from group" logger.exception("Exception occured while removing mumble user %s with id %s from group %s with id %s" % (username, userid, g, mumble_groups[g]), exc_info=True)

View File

@ -9,6 +9,9 @@ import threading
from ofrestapi.users import Users as ofUsers from ofrestapi.users import Users as ofUsers
from ofrestapi import exception from ofrestapi import exception
import logging
logger = logging.getLogger(__name__)
class OpenfireManager: class OpenfireManager:
def __init__(self): def __init__(self):
@ -16,6 +19,7 @@ class OpenfireManager:
@staticmethod @staticmethod
def send_broadcast_threaded(group_name, broadcast_message): def send_broadcast_threaded(group_name, broadcast_message):
logger.debug("Starting broadcast to %s with message %s" % (group_name, broadcast_message))
broadcast_thread = XmppThread(1, "XMPP Broadcast Thread", 1, group_name, broadcast_message) broadcast_thread = XmppThread(1, "XMPP Broadcast Thread", 1, group_name, broadcast_message)
broadcast_thread.start() broadcast_thread.start()
@ -37,55 +41,68 @@ class OpenfireManager:
@staticmethod @staticmethod
def add_user(username): def add_user(username):
logger.debug("Adding username %s to openfire." % username)
try: try:
sanatized_username = OpenfireManager.__santatize_username(username) sanatized_username = OpenfireManager.__santatize_username(username)
password = OpenfireManager.__generate_random_pass() password = OpenfireManager.__generate_random_pass()
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.add_user(sanatized_username, password) api.add_user(sanatized_username, password)
logger.info("Added openfire user %s" % username)
except exception.UserAlreadyExistsException: except exception.UserAlreadyExistsException:
# User exist # User exist
logger.error("Attempting to add a user %s to openfire which already exists on server." % username)
return "", "" return "", ""
return sanatized_username, password return sanatized_username, password
@staticmethod @staticmethod
def delete_user(username): def delete_user(username):
logger.debug("Deleting user %s from openfire." % username)
try: try:
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.delete_user(username) api.delete_user(username)
logger.info("Deleted user %s from openfire." % username)
return True return True
except exception.UserNotFoundException: except exception.UserNotFoundException:
logger.error("Attempting to delete a user %s from openfire which was not found on server." % username)
return False return False
@staticmethod @staticmethod
def lock_user(username): def lock_user(username):
logger.debug("Locking openfire user %s" % username)
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.lock_user(username) api.lock_user(username)
logger.info("Locked openfire user %s" % username)
@staticmethod @staticmethod
def unlock_user(username): def unlock_user(username):
logger.debug("Unlocking openfire user %s" % username)
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.unlock_user(username) api.unlock_user(username)
logger.info("Unlocked openfire user %s" % username)
@staticmethod @staticmethod
def update_user_pass(username): def update_user_pass(username):
logger.debug("Updating openfire user %s password." % username)
try: try:
password = OpenfireManager.__generate_random_pass() password = OpenfireManager.__generate_random_pass()
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.update_user(username, password=password) api.update_user(username, password=password)
logger.info("Updated openfire user %s password." % username)
return password return password
except exception.UserNotFoundException: except exception.UserNotFoundException:
logger.error("Unable to update openfire user %s password - user not found on server." % username)
return "" return ""
@staticmethod @staticmethod
def update_user_groups(username, password, groups): def update_user_groups(username, password, groups):
logger.debug("Updating openfire user %s groups %s" % (username, groups))
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
response = api.get_user_groups(username) response = api.get_user_groups(username)
remote_groups = [] remote_groups = []
if response: if response:
remote_groups = response['groupname'] remote_groups = response['groupname']
logger.debug("Openfire user %s has groups %s" % (username, remote_groups))
add_groups = [] add_groups = []
del_groups = [] del_groups = []
for g in groups: for g in groups:
@ -94,6 +111,7 @@ class OpenfireManager:
for g in remote_groups: for g in remote_groups:
if not g in groups: if not g in groups:
del_groups.append(g) del_groups.append(g)
logger.info("Updating openfire groups for user %s - adding %s, removing %s" % (username, add_groups, del_groups))
if add_groups: if add_groups:
api.add_user_groups(username, add_groups) api.add_user_groups(username, add_groups)
if del_groups: if del_groups:
@ -101,24 +119,28 @@ class OpenfireManager:
@staticmethod @staticmethod
def delete_user_groups(username, groups): def delete_user_groups(username, groups):
logger.debug("Deleting openfire groups %s from user %s" % (groups, username))
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.delete_user_groups(username, groups) api.delete_user_groups(username, groups)
logger.info("Deleted groups %s from openfire user %s" % (groups, username))
@staticmethod @staticmethod
def send_broadcast_message(group_name, broadcast_message): def send_broadcast_message(group_name, broadcast_message):
logger.debug("Sending jabber ping to group %s with message %s" % (group_name, broadcast_message))
# create to address # create to address
client = xmpp.Client(settings.JABBER_URL) client = xmpp.Client(settings.JABBER_URL)
client.connect(server=(settings.JABBER_SERVER, settings.JABBER_PORT)) client.connect(server=(settings.JABBER_SERVER, settings.JABBER_PORT))
client.auth(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, 'broadcast') client.auth(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, 'broadcast')
to_address = group_name + '@' + settings.BROADCAST_SERVICE_NAME + '.' + settings.JABBER_URL to_address = group_name + '@' + settings.BROADCAST_SERVICE_NAME + '.' + settings.JABBER_URL
logger.debug("Determined ping to address: %s" % to_address)
message = xmpp.Message(to_address, broadcast_message) message = xmpp.Message(to_address, broadcast_message)
message.setAttr('type', 'chat') message.setAttr('type', 'chat')
client.send(message) client.send(message)
client.Process(1) client.Process(1)
client.disconnect() client.disconnect()
logger.info("Sent jabber ping to group %s" % group_name)
class XmppThread (threading.Thread): class XmppThread (threading.Thread):
def __init__(self, threadID, name, counter, group, message,): def __init__(self, threadID, name, counter, group, message,):

View File

@ -5,6 +5,11 @@ from datetime import datetime
from passlib.apps import phpbb3_context from passlib.apps import phpbb3_context
from django.db import connections from django.db import connections
import logging
from django.conf import settings
logger = logging.getLogger(__name__)
class Phpbb3Manager: class Phpbb3Manager:
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, " \ SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, " \
@ -39,6 +44,7 @@ class Phpbb3Manager:
@staticmethod @staticmethod
def __add_avatar(username, characterid): def __add_avatar(username, characterid):
logger.debug("Adding EVE character id %s portrait as phpbb avater for user %s" % (characterid, username))
avatar_url = "http://image.eveonline.com/Character/" + characterid + "_64.jpg" avatar_url = "http://image.eveonline.com/Character/" + characterid + "_64.jpg"
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
userid = Phpbb3Manager.__get_user_id(username) userid = Phpbb3Manager.__get_user_id(username)
@ -60,38 +66,46 @@ class Phpbb3Manager:
@staticmethod @staticmethod
def __get_group_id(groupname): def __get_group_id(groupname):
logger.debug("Getting phpbb3 group id for groupname %s" % groupname)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_GET_GROUP_ID, [groupname]) cursor.execute(Phpbb3Manager.SQL_GET_GROUP_ID, [groupname])
row = cursor.fetchone() row = cursor.fetchone()
logger.debug("Got phpbb group id %s for groupname %s" % (row[0], groupname))
return row[0] return row[0]
@staticmethod @staticmethod
def __get_user_id(username): def __get_user_id(username):
logger.debug("Getting phpbb3 user id for username %s" % username)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [username]) cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [username])
row = cursor.fetchone() row = cursor.fetchone()
if row is not None: if row is not None:
logger.debug("Got phpbb user id %s for username %s" % (row[0], username))
return row[0] return row[0]
else: else:
logger.error("Username %s not found on phpbb. Unable to determine user id." % username)
return None return None
@staticmethod @staticmethod
def __get_all_groups(): def __get_all_groups():
logger.debug("Getting all phpbb3 groups.")
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_GET_ALL_GROUPS) cursor.execute(Phpbb3Manager.SQL_GET_ALL_GROUPS)
rows = cursor.fetchall() rows = cursor.fetchall()
out = {} out = {}
for row in rows: for row in rows:
out[row[1]] = row[0] out[row[1]] = row[0]
logger.debug("Got phpbb groups %s" % out)
return out return out
@staticmethod @staticmethod
def __get_user_groups(userid): def __get_user_groups(userid):
logger.debug("Getting phpbb3 user id %s groups" % userid)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_GET_USER_GROUPS, [userid]) cursor.execute(Phpbb3Manager.SQL_GET_USER_GROUPS, [userid])
return [row[0] for row in cursor.fetchall()] out = [row[0] for row in cursor.fetchall()]
logger.debug("Got user %s phpbb groups %s" % (userid, out))
return out
@staticmethod @staticmethod
def __get_current_utc_date(): def __get_current_utc_date():
@ -101,36 +115,46 @@ class Phpbb3Manager:
@staticmethod @staticmethod
def __create_group(groupname): def __create_group(groupname):
logger.debug("Creating phpbb3 group %s" % groupname)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_ADD_GROUP, [groupname, groupname]) cursor.execute(Phpbb3Manager.SQL_ADD_GROUP, [groupname, groupname])
logger.info("Created phpbb group %s" % groupname)
return Phpbb3Manager.__get_group_id(groupname) return Phpbb3Manager.__get_group_id(groupname)
@staticmethod @staticmethod
def __add_user_to_group(userid, groupid): def __add_user_to_group(userid, groupid):
logger.debug("Adding phpbb3 user id %s to group id %s" % (userid, groupid))
try: try:
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
cursor.execute(Phpbb3Manager.SQL_ADD_USER_GROUP, [groupid, userid, 0]) cursor.execute(Phpbb3Manager.SQL_ADD_USER_GROUP, [groupid, userid, 0])
logger.info("Added phpbb user id %s to group id %s" % (userid, groupid))
except: except:
logger.exception("Unable to add phpbb user id %s to group id %s" % (userid, groupid), exc_info=True)
pass pass
@staticmethod @staticmethod
def __remove_user_from_group(userid, groupid): def __remove_user_from_group(userid, groupid):
logger.debug("Removing phpbb3 user id %s from group id %s" % (userid, groupid))
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
try: try:
cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid])
logger.info("Removed phpbb user id %s from group id %s" % (userid, groupid))
except: except:
logger.exception("Unable to remove phpbb user id %s from group id %s" % (userid, groupid), exc_info=True)
pass pass
@staticmethod @staticmethod
def add_user(username, email, groups, characterid): def add_user(username, email, groups, characterid):
logger.debug("Adding phpbb user with username %s, email %s, groups %s, characterid %s" % (username, email, groups, characterid))
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
username_clean = Phpbb3Manager.__santatize_username(username) username_clean = Phpbb3Manager.__santatize_username(username)
password = Phpbb3Manager.__generate_random_pass() password = Phpbb3Manager.__generate_random_pass()
pwhash = Phpbb3Manager.__gen_hash(password) pwhash = Phpbb3Manager.__gen_hash(password)
logger.debug("Proceeding to add phpbb user %s and pwhash starting with %s" % (username_clean, pwhash[0:5]))
# check if the username was simply revoked # check if the username was simply revoked
if Phpbb3Manager.check_user(username_clean): if Phpbb3Manager.check_user(username_clean):
logger.warn("Unable to add phpbb user with username %s - already exists. Updating user instead." % username)
Phpbb3Manager.__update_user_info(username_clean, email, pwhash) Phpbb3Manager.__update_user_info(username_clean, email, pwhash)
else: else:
try: try:
@ -140,46 +164,52 @@ class Phpbb3Manager:
"", ""]) "", ""])
Phpbb3Manager.update_groups(username_clean, groups) Phpbb3Manager.update_groups(username_clean, groups)
Phpbb3Manager.__add_avatar(username_clean, characterid) Phpbb3Manager.__add_avatar(username_clean, characterid)
logger.info("Added phpbb user %s" % username_clean)
except: except:
logger.exception("Unable to add phpbb user %s" % username_clean, exc_info=True)
pass pass
return username_clean, password return username_clean, password
@staticmethod @staticmethod
def disable_user(username): def disable_user(username):
logger.debug("Disabling phpbb user %s" % username)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
password = Phpbb3Manager.__gen_hash(Phpbb3Manager.__generate_random_pass()) password = Phpbb3Manager.__gen_hash(Phpbb3Manager.__generate_random_pass())
revoke_email = "revoked@the99eve.com" revoke_email = "revoked@" + settings.DOMAIN
try: try:
pwhash = Phpbb3Manager.__gen_hash(password) pwhash = Phpbb3Manager.__gen_hash(password)
cursor.execute(Phpbb3Manager.SQL_DIS_USER, [revoke_email, pwhash, username]) cursor.execute(Phpbb3Manager.SQL_DIS_USER, [revoke_email, pwhash, username])
logger.info("Disabled phpbb user %s" % username)
return True return True
except TypeError as e: except TypeError as e:
print e logger.exception("TypeError occured while disabling user %s - failed to disable." % username, exc_info=True)
return False return False
@staticmethod @staticmethod
def delete_user(username): def delete_user(username):
logger.debug("Deleting phpbb user %s" % username)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
if Phpbb3Manager.check_user(username): if Phpbb3Manager.check_user(username):
cursor.execute(Phpbb3Manager.SQL_DEL_USER, [username]) cursor.execute(Phpbb3Manager.SQL_DEL_USER, [username])
logger.info("Deleted phpbb user %s" % username)
return True return True
logger.error("Unable to delete phpbb user %s - user not found on phpbb." % username)
return False return False
@staticmethod @staticmethod
def update_groups(username, groups): def update_groups(username, groups):
userid = Phpbb3Manager.__get_user_id(username) userid = Phpbb3Manager.__get_user_id(username)
logger.debug("Updating phpbb user %s with id %s groups %s" % (username, userid, groups))
if userid is not None: if userid is not None:
forum_groups = Phpbb3Manager.__get_all_groups() forum_groups = Phpbb3Manager.__get_all_groups()
user_groups = set(Phpbb3Manager.__get_user_groups(userid)) user_groups = set(Phpbb3Manager.__get_user_groups(userid))
act_groups = set([g.replace(' ', '-') for g in groups]) act_groups = set([g.replace(' ', '-') for g in groups])
addgroups = act_groups - user_groups addgroups = act_groups - user_groups
remgroups = user_groups - act_groups remgroups = user_groups - act_groups
print username logger.info("Updating phpbb user %s groups - adding %s, removing %s" % (username, addgroups, remgroups))
print addgroups
print remgroups
for g in addgroups: for g in addgroups:
if not g in forum_groups: if not g in forum_groups:
forum_groups[g] = Phpbb3Manager.__create_group(g) forum_groups[g] = Phpbb3Manager.__create_group(g)
@ -190,6 +220,7 @@ class Phpbb3Manager:
@staticmethod @staticmethod
def remove_group(username, group): def remove_group(username, group):
logger.debug("Removing phpbb user %s from group %s" % (username, group))
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
userid = Phpbb3Manager.__get_user_id(username) userid = Phpbb3Manager.__get_user_id(username)
if userid is not None: if userid is not None:
@ -199,35 +230,45 @@ class Phpbb3Manager:
if groupid: if groupid:
try: try:
cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid])
logger.info("Removed phpbb user %s from group %s" % (username, group))
except: except:
logger.exception("Exception prevented removal of phpbb user %s with id %s from group %s with id %s" % (username, userid, group, groupid), exc_info=True)
pass pass
@staticmethod @staticmethod
def check_user(username): def check_user(username):
logger.debug("Checking phpbb username %s" % username)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
""" Check if the username exists """
cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [Phpbb3Manager.__santatize_username(username)]) cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [Phpbb3Manager.__santatize_username(username)])
row = cursor.fetchone() row = cursor.fetchone()
if row: if row:
logger.debug("Found user %s on phpbb" % username)
return True return True
logger.debug("User %s not found on phpbb" % username)
return False return False
@staticmethod @staticmethod
def update_user_password(username, characterid): def update_user_password(username, characterid):
logger.debug("Updating phpbb user %s password" % username)
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
password = Phpbb3Manager.__generate_random_pass() password = Phpbb3Manager.__generate_random_pass()
if Phpbb3Manager.check_user(username): if Phpbb3Manager.check_user(username):
pwhash = Phpbb3Manager.__gen_hash(password) pwhash = Phpbb3Manager.__gen_hash(password)
logger.debug("Proceeding to update phpbb user %s password with pwhash starting with %s" % (username, pwhash[0:5]))
cursor.execute(Phpbb3Manager.SQL_UPDATE_USER_PASSWORD, [pwhash, username]) cursor.execute(Phpbb3Manager.SQL_UPDATE_USER_PASSWORD, [pwhash, username])
Phpbb3Manager.__add_avatar(username, characterid) Phpbb3Manager.__add_avatar(username, characterid)
logger.info("Updated phpbb user %s password." % username)
return password return password
logger.error("Unable to update phpbb user %s password - user not found on phpbb." % username)
return "" return ""
@staticmethod @staticmethod
def __update_user_info(username, email, password): def __update_user_info(username, email, password):
logger.debug("Updating phpbb user %s info: username %s password of length %s" % (username, email, len(password)))
cursor = connections['phpbb3'].cursor() cursor = connections['phpbb3'].cursor()
try: try:
cursor.execute(Phpbb3Manager.SQL_DIS_USER, [email, password, username]) cursor.execute(Phpbb3Manager.SQL_DIS_USER, [email, password, username])
logger.info("Updated phpbb user %s info" % username)
except: except:
logger.exception("Unable to update phpbb user %s info." % username, exc_info=True)
pass pass

View File

@ -2,7 +2,9 @@ from django.conf import settings
from services.managers.util.ts3 import TS3Server from services.managers.util.ts3 import TS3Server
from services.models import TSgroup from services.models import TSgroup
import logging
logger = logging.getLogger(__name__)
class Teamspeak3Manager: class Teamspeak3Manager:
def __init__(self): def __init__(self):
@ -13,6 +15,7 @@ class Teamspeak3Manager:
server = TS3Server(settings.TEAMSPEAK3_SERVER_IP, settings.TEAMSPEAK3_SERVER_PORT) server = TS3Server(settings.TEAMSPEAK3_SERVER_IP, settings.TEAMSPEAK3_SERVER_PORT)
server.login(settings.TEAMSPEAK3_SERVERQUERY_USER, settings.TEAMSPEAK3_SERVERQUERY_PASSWORD) server.login(settings.TEAMSPEAK3_SERVERQUERY_USER, settings.TEAMSPEAK3_SERVERQUERY_PASSWORD)
server.use(settings.TEAMSPEAK3_VIRTUAL_SERVER) server.use(settings.TEAMSPEAK3_VIRTUAL_SERVER)
logger.debug("Got TS3 server instance based on settings.")
return server return server
@staticmethod @staticmethod
@ -31,27 +34,34 @@ class Teamspeak3Manager:
@staticmethod @staticmethod
def _get_userid(uid): def _get_userid(uid):
logger.debug("Looking for uid %s on TS3 server." % uid)
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
ret = server.send_command('customsearch', {'ident': 'sso_uid', 'pattern': uid}) ret = server.send_command('customsearch', {'ident': 'sso_uid', 'pattern': uid})
if ret and 'keys' in ret and 'cldbid' in ret['keys']: if ret and 'keys' in ret and 'cldbid' in ret['keys']:
logger.debug("Got userid %s for uid %s" % (ret['keys']['cldbid'], uid))
return ret['keys']['cldbid'] return ret['keys']['cldbid']
@staticmethod @staticmethod
def _group_id_by_name(groupname): def _group_id_by_name(groupname):
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
logger.debug("Looking for group %s on TS3 server." % groupname)
group_cache = server.send_command('servergrouplist') group_cache = server.send_command('servergrouplist')
logger.debug("Received group cache from server: %s" % group_cache)
for group in group_cache: for group in group_cache:
logger.debug("Checking group %s" % group)
if group['keys']['name'] == groupname: if group['keys']['name'] == groupname:
logger.debug("Found group %s, returning id %s" % (groupname, group['keys']['sgid']))
return group['keys']['sgid'] return group['keys']['sgid']
logger.debug("Group %s not found on server." % groupname)
return None return None
@staticmethod @staticmethod
def _create_group(groupname): def _create_group(groupname):
logger.debug("Creating group %s on TS3 server." % groupname)
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
sgid = Teamspeak3Manager._group_id_by_name(groupname) sgid = Teamspeak3Manager._group_id_by_name(groupname)
if not sgid: if not sgid:
logger.debug("Group does not yet exist. Proceeding with creation.")
ret = server.send_command('servergroupadd', {'name': groupname}) ret = server.send_command('servergroupadd', {'name': groupname})
Teamspeak3Manager.__group_cache = None Teamspeak3Manager.__group_cache = None
sgid = ret['keys']['sgid'] sgid = ret['keys']['sgid']
@ -64,72 +74,95 @@ class Teamspeak3Manager:
server.send_command('servergroupaddperm', server.send_command('servergroupaddperm',
{'sgid': sgid, 'permsid': 'i_group_needed_member_remove_power', 'permvalue': 100, {'sgid': sgid, 'permsid': 'i_group_needed_member_remove_power', 'permvalue': 100,
'permnegated': 0, 'permskip': 0}) 'permnegated': 0, 'permskip': 0})
logger.info("Created group on TS3 server with name %s and id %s" % (groupname, sgid))
return sgid return sgid
@staticmethod @staticmethod
def _user_group_list(cldbid): def _user_group_list(cldbid):
logger.debug("Retrieving group list for user with id %s" % cldbid)
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
groups = server.send_command('servergroupsbyclientid', {'cldbid': cldbid}) groups = server.send_command('servergroupsbyclientid', {'cldbid': cldbid})
logger.debug("Retrieved group list: %s" % groups)
outlist = {} outlist = {}
if type(groups) == list: if type(groups) == list:
logger.debug("Recieved multiple groups. Iterating.")
for group in groups: for group in groups:
logger.debug("Assigning name/id dict: %s = %s" % (group['keys']['name'], group['keys']['sgid']))
outlist[group['keys']['name']] = group['keys']['sgid'] outlist[group['keys']['name']] = group['keys']['sgid']
elif type(groups) == dict: elif type(groups) == dict:
logger.debug("Recieved single group.")
logger.debug("Assigning name/id dict: %s = %s" % (groups['keys']['name'], groups['keys']['sgid']))
outlist[groups['keys']['name']] = groups['keys']['sgid'] outlist[groups['keys']['name']] = groups['keys']['sgid']
logger.debug("Returning name/id pairing: %s" % outlist)
return outlist return outlist
@staticmethod @staticmethod
def _group_list(): def _group_list():
logger.debug("Retrieving group list on TS3 server.")
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
group_cache = server.send_command('servergrouplist') group_cache = server.send_command('servergrouplist')
logger.debug("Received group cache from server: %s" % group_cache)
outlist = {} outlist = {}
if group_cache: if group_cache:
for group in group_cache: for group in group_cache:
logger.debug("Assigning name/id dict: %s = %s" % (group['keys']['name'], group['keys']['sgid']))
outlist[group['keys']['name']] = group['keys']['sgid'] outlist[group['keys']['name']] = group['keys']['sgid']
else: else:
print '1024 error' logger.error("Received empty group cache while retrieving group cache from TS3 server. 1024 error.")
logger.debug("Returning name/id pairing: %s" % outlist)
return outlist return outlist
@staticmethod @staticmethod
def _add_user_to_group(uid, groupid): def _add_user_to_group(uid, groupid):
logger.debug("Adding group id %s to TS3 user id %s" % (groupid, uid))
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
user_groups = Teamspeak3Manager._user_group_list(uid) user_groups = Teamspeak3Manager._user_group_list(uid)
if not groupid in user_groups.values(): if not groupid in user_groups.values():
logger.debug("User does not have group already. Issuing command to add.")
server.send_command('servergroupaddclient', server.send_command('servergroupaddclient',
{'sgid': str(groupid), 'cldbid': uid}) {'sgid': str(groupid), 'cldbid': uid})
logger.info("Added user id %s to group id %s on TS3 server." % (uid, groupid))
@staticmethod @staticmethod
def _remove_user_from_group(uid, groupid): def _remove_user_from_group(uid, groupid):
logger.debug("Removing group id %s from TS3 user id %s" % (groupid, uid))
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
user_groups = Teamspeak3Manager._user_group_list(uid) user_groups = Teamspeak3Manager._user_group_list(uid)
if str(groupid) in user_groups.values(): if str(groupid) in user_groups.values():
logger.debug("User is in group. Issuing command to remove.")
server.send_command('servergroupdelclient', server.send_command('servergroupdelclient',
{'sgid': str(groupid), 'cldbid': uid}) {'sgid': str(groupid), 'cldbid': uid})
logger.info("Removed user id %s from group id %s on TS3 server." % (uid, groupid))
@staticmethod @staticmethod
def _sync_ts_group_db(): def _sync_ts_group_db():
logger.debug("_sync_ts_group_db function called.")
try: try:
remote_groups = Teamspeak3Manager._group_list() remote_groups = Teamspeak3Manager._group_list()
local_groups = TSgroup.objects.all() local_groups = TSgroup.objects.all()
logger.debug("Comparing remote groups to TSgroup objects: %s" % local_groups)
for key in remote_groups: for key in remote_groups:
logger.debug("Typecasting remote_group value at position %s to int: %s" % (key, remote_groups[key]))
remote_groups[key] = int(remote_groups[key]) remote_groups[key] = int(remote_groups[key])
for group in local_groups: for group in local_groups:
logger.debug("Checking local group %s" % group)
if group.ts_group_id not in remote_groups.values(): if group.ts_group_id not in remote_groups.values():
logger.debug("Local group id %s not found on server. Deleting model %s" % (group.ts_group_id, group))
TSgroup.objects.filter(ts_group_id=group.ts_group_id).delete() TSgroup.objects.filter(ts_group_id=group.ts_group_id).delete()
for key in remote_groups: for key in remote_groups:
g = TSgroup(ts_group_id=remote_groups[key],ts_group_name=key) g = TSgroup(ts_group_id=remote_groups[key],ts_group_name=key)
q = TSgroup.objects.filter(ts_group_id=g.ts_group_id) q = TSgroup.objects.filter(ts_group_id=g.ts_group_id)
if not q: if not q:
logger.debug("Local group does not exist for TS group %s. Creating TSgroup model %s" % (remote_groups[key], g))
g.save() g.save()
except: except:
logger.exception("An unhandled exception has occured while syncing TS groups.", exc_info=True)
pass pass
@staticmethod @staticmethod
@ -138,7 +171,7 @@ class Teamspeak3Manager:
corp_ticker)) corp_ticker))
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
token = "" token = ""
logger.debug("Adding user to TS3 server with cleaned username %s" % username_clean)
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
if not settings.DEFAULT_AUTH_GROUP in server_groups: if not settings.DEFAULT_AUTH_GROUP in server_groups:
@ -156,6 +189,7 @@ class Teamspeak3Manager:
token = ret['keys']['token'] token = ret['keys']['token']
except: except:
pass pass
logger.info("Created permission token for user %s on TS3 server" % username_clean)
return username_clean, token return username_clean, token
@ -165,7 +199,7 @@ class Teamspeak3Manager:
corp_ticker)) corp_ticker))
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
token = "" token = ""
logger.debug("Adding user to TS3 server with cleaned username %s" % username_clean)
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
if not settings.DEFAULT_BLUE_GROUP in server_groups: if not settings.DEFAULT_BLUE_GROUP in server_groups:
Teamspeak3Manager._create_group(settings.DEFAULT_BLUE_GROUP) Teamspeak3Manager._create_group(settings.DEFAULT_BLUE_GROUP)
@ -183,6 +217,7 @@ class Teamspeak3Manager:
except: except:
pass pass
logger.info("Created permission token for blue user %s on TS3 server" % username_clean)
return username_clean, token return username_clean, token
@ -190,16 +225,20 @@ class Teamspeak3Manager:
def delete_user(uid): def delete_user(uid):
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
user = Teamspeak3Manager._get_userid(uid) user = Teamspeak3Manager._get_userid(uid)
logger.debug("Deleting user %s with id %s from TS3 server." % (user, uid))
if user: if user:
for client in server.send_command('clientlist'): for client in server.send_command('clientlist'):
if client['keys']['client_database_id'] == user: if client['keys']['client_database_id'] == user:
logger.debug("Found user %s on TS3 server - issuing deletion command." % user)
server.send_command('clientkick', {'clid': client['keys']['clid'], 'reasonid': 5, server.send_command('clientkick', {'clid': client['keys']['clid'], 'reasonid': 5,
'reasonmsg': 'Auth service deleted'}) 'reasonmsg': 'Auth service deleted'})
ret = server.send_command('clientdbdelete', {'cldbid': user}) ret = server.send_command('clientdbdelete', {'cldbid': user})
if ret == '0': if ret == '0':
logger.info("Deleted user with id %s from TS3 server." % uid)
return True return True
else: else:
logger.warn("User with id %s not found on TS3 server. Assuming succesful deletion." % uid)
return True return True
@staticmethod @staticmethod
@ -211,37 +250,42 @@ class Teamspeak3Manager:
@staticmethod @staticmethod
def generate_new_permissionkey(uid, username, corpticker): def generate_new_permissionkey(uid, username, corpticker):
logger.debug("Re-issuing permission key for user id %s" % uid)
Teamspeak3Manager.delete_user(uid) Teamspeak3Manager.delete_user(uid)
return Teamspeak3Manager.add_user(username, corpticker) return Teamspeak3Manager.add_user(username, corpticker)
@staticmethod @staticmethod
def generate_new_blue_permissionkey(uid, username, corpticker): def generate_new_blue_permissionkey(uid, username, corpticker):
logger.debug("Re-issuing blue permission key for user id %s" % uid)
Teamspeak3Manager.delete_user(uid) Teamspeak3Manager.delete_user(uid)
return Teamspeak3Manager.add_blue_user(username, corpticker) return Teamspeak3Manager.add_blue_user(username, corpticker)
@staticmethod @staticmethod
def update_groups(uid, ts_groups): def update_groups(uid, ts_groups):
logger.debug("Updating uid %s TS3 groups %s" % (uid, ts_groups))
userid = Teamspeak3Manager._get_userid(uid) userid = Teamspeak3Manager._get_userid(uid)
addgroups = [] addgroups = []
remgroups = [] remgroups = []
if userid is not None: if userid is not None:
user_ts_groups = Teamspeak3Manager._user_group_list(userid) user_ts_groups = Teamspeak3Manager._user_group_list(userid)
logger.debug("User has groups on TS3 server: %s" % user_ts_groups)
for key in user_ts_groups: for key in user_ts_groups:
user_ts_groups[key] = int(user_ts_groups[key]) user_ts_groups[key] = int(user_ts_groups[key])
for ts_group_key in ts_groups: for ts_group_key in ts_groups:
logger.debug("Checking if user has group %s on TS3 server." % ts_group_key)
if ts_groups[ts_group_key] not in user_ts_groups.values(): if ts_groups[ts_group_key] not in user_ts_groups.values():
addgroups.append(ts_groups[ts_group_key]) addgroups.append(ts_groups[ts_group_key])
for user_ts_group_key in user_ts_groups: for user_ts_group_key in user_ts_groups:
if user_ts_groups[user_ts_group_key] not in ts_groups.values(): if user_ts_groups[user_ts_group_key] not in ts_groups.values():
remgroups.append(user_ts_groups[user_ts_group_key]) remgroups.append(user_ts_groups[user_ts_group_key])
print userid logger.info("Finished checking user id %s TS3 groups - adding %s, removing %s." % (userid, addgroups, remgroups))
print addgroups
print remgroups
for g in addgroups: for g in addgroups:
logger.debug("Issuing add command for group %s" % g)
Teamspeak3Manager._add_user_to_group(userid, g) Teamspeak3Manager._add_user_to_group(userid, g)
for g in remgroups: for g in remgroups:
logger.debug("Issuing remove command for group %s" % g)
Teamspeak3Manager._remove_user_from_group(userid, g) Teamspeak3Manager._remove_user_from_group(userid, g)

View File

@ -1,5 +1,5 @@
from django.db import models from django.db import models
from django.contrib.auth.models import Group from django.contrib.auth.models import Group, User
class TSgroup(models.Model): class TSgroup(models.Model):
ts_group_id = models.IntegerField(primary_key=True) ts_group_id = models.IntegerField(primary_key=True)
@ -29,4 +29,12 @@ class UserTSgroup(models.Model):
verbose_name='User TS Group' verbose_name='User TS Group'
def __str__(self): def __str__(self):
return self.user.name return self.user.name
class DiscordAuthToken(models.Model):
email = models.CharField(max_length=254, unique=True)
token = models.CharField(max_length=254)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
def __str__(self):
output = "Discord Token for email %s user %s" % (self.email, self.user)
return output.encode('utf-8')

View File

@ -4,6 +4,7 @@ from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from django.contrib.auth.models import Group
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
@ -30,11 +31,17 @@ from util import check_if_user_has_permission
import threading import threading
import datetime import datetime
import logging
logger = logging.getLogger(__name__)
@login_required @login_required
def fleet_formatter_view(request): def fleet_formatter_view(request):
logger.debug("fleet_formatter_view called by user %s" % request.user)
generated = ""
if request.method == 'POST': if request.method == 'POST':
form = FleetFormatterForm(request.POST) form = FleetFormatterForm(request.POST)
logger.debug("Received POST request containing form, valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
generated = "Fleet Name: " + form.cleaned_data['fleet_name'] + "\n" generated = "Fleet Name: " + form.cleaned_data['fleet_name'] + "\n"
generated = generated + "FC: " + form.cleaned_data['fleet_commander'] + "\n" generated = generated + "FC: " + form.cleaned_data['fleet_commander'] + "\n"
@ -48,9 +55,10 @@ def fleet_formatter_view(request):
generated = generated + "Important: " + form.cleaned_data['important'] + "\n" generated = generated + "Important: " + form.cleaned_data['important'] + "\n"
if form.cleaned_data['comments'] != "": if form.cleaned_data['comments'] != "":
generated = generated + "Why: " + form.cleaned_data['comments'] + "\n" generated = generated + "Why: " + form.cleaned_data['comments'] + "\n"
logger.info("Formatted fleet broadcast for user %s" % request.user)
else: else:
form = FleetFormatterForm() form = FleetFormatterForm()
generated = "" logger.debug("Returning empty form to user %s" % request.user)
context = {'form': form, 'generated': generated} context = {'form': form, 'generated': generated}
@ -59,12 +67,15 @@ def fleet_formatter_view(request):
@login_required @login_required
@permission_required('auth.jabber_broadcast') @permission_required('auth.jabber_broadcast')
def jabber_broadcast_view(request): def jabber_broadcast_view(request):
logger.debug("jabber_broadcast_view called by user %s" % request.user)
success = False success = False
if request.method == 'POST': if request.method == 'POST':
form = JabberBroadcastForm(request.POST) form = JabberBroadcastForm(request.POST)
logger.debug("Received POST request containing form, valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
user_info = AuthServicesInfo.objects.get(user=request.user) user_info = AuthServicesInfo.objects.get(user=request.user)
main_char = EveCharacter.objects.get(character_id=user_info.main_char_id) main_char = EveCharacter.objects.get(character_id=user_info.main_char_id)
logger.debug("Processing jabber broadcast for user %s with main character %s" % (user_info, main_char))
if user_info.main_char_id != "": if user_info.main_char_id != "":
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + main_char.character_name + " TO: " + form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n" message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + main_char.character_name + " TO: " + form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
group_to_send = form.cleaned_data['group'] group_to_send = form.cleaned_data['group']
@ -78,8 +89,10 @@ def jabber_broadcast_view(request):
OpenfireManager.send_broadcast_threaded(group_to_send, message_to_send,) OpenfireManager.send_broadcast_threaded(group_to_send, message_to_send,)
success = True success = True
logger.info("Sent jabber broadcast on behalf of user %s" % request.user)
else: else:
form = JabberBroadcastForm() form = JabberBroadcastForm(request.user)
logger.debug("Generated broadcast form for user %s containing %s groups" % (request.user, len(form.fields['group'].choices)))
context = {'form': form, 'success': success} context = {'form': form, 'success': success}
return render_to_response('registered/jabberbroadcast.html', context, context_instance=RequestContext(request)) return render_to_response('registered/jabberbroadcast.html', context, context_instance=RequestContext(request))
@ -87,6 +100,7 @@ def jabber_broadcast_view(request):
@login_required @login_required
def services_view(request): def services_view(request):
logger.debug("services_view called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
return render_to_response('registered/services.html', {'authinfo': authinfo}, return render_to_response('registered/services.html', {'authinfo': authinfo},
@ -100,184 +114,236 @@ def service_blue_alliance_test(user):
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_forum(request): def activate_forum(request):
logger.debug("activate_forum called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
# Valid now we get the main characters # Valid now we get the main characters
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
logger.debug("Adding phpbb user for user %s with main character %s" % (request.user, character))
result = Phpbb3Manager.add_user(character.character_name, request.user.email, ['REGISTERED'], authinfo.main_char_id) result = Phpbb3Manager.add_user(character.character_name, request.user.email, ['REGISTERED'], authinfo.main_char_id)
# if empty we failed # if empty we failed
if result[0] != "": if result[0] != "":
AuthServicesInfoManager.update_user_forum_info(result[0], result[1], request.user) AuthServicesInfoManager.update_user_forum_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with forum credentials. Updating groups." % request.user)
update_forum_groups(request.user) update_forum_groups(request.user)
logger.info("Succesfully activated forum for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to activate forum for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_forum(request): def deactivate_forum(request):
logger.debug("deactivate_forum called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = Phpbb3Manager.disable_user(authinfo.forum_username) result = Phpbb3Manager.disable_user(authinfo.forum_username)
remove_all_syncgroups_for_service(request.user, "phpbb") remove_all_syncgroups_for_service(request.user, "phpbb")
# false we failed # false we failed
if result: if result:
AuthServicesInfoManager.update_user_forum_info("", "", request.user) AuthServicesInfoManager.update_user_forum_info("", "", request.user)
logger.info("Succesfully deactivated forum for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to activate forum for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_forum_password(request): def reset_forum_password(request):
logger.debug("reset_forum_password called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = Phpbb3Manager.update_user_password(authinfo.forum_username, authinfo.main_char_id) result = Phpbb3Manager.update_user_password(authinfo.forum_username, authinfo.main_char_id)
# false we failed # false we failed
if result != "": if result != "":
AuthServicesInfoManager.update_user_forum_info(authinfo.forum_username, result, request.user) AuthServicesInfoManager.update_user_forum_info(authinfo.forum_username, result, request.user)
logger.info("Succesfully reset forum password for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to reset forum password for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_ipboard_forum(request): def activate_ipboard_forum(request):
logger.debug("activate_ipboard_forum called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
# Valid now we get the main characters # Valid now we get the main characters
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
logger.debug("Adding ipboard user for user %s with main character %s" % (request.user, character))
result = IPBoardManager.add_user(character.character_name, request.user.email) result = IPBoardManager.add_user(character.character_name, request.user.email)
if result[0] != "": if result[0] != "":
AuthServicesInfoManager.update_user_ipboard_info(result[0], result[1], request.user) AuthServicesInfoManager.update_user_ipboard_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with ipboard credentials. Updating groups." % request.user)
update_ipboard_groups(request.user) update_ipboard_groups(request.user)
logger.info("Succesfully activated ipboard for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to activate ipboard for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_ipboard_forum(request): def deactivate_ipboard_forum(request):
logger.debug("deactivate_ipboard_forum called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = IPBoardManager.disable_user(authinfo.ipboard_username) result = IPBoardManager.disable_user(authinfo.ipboard_username)
remove_all_syncgroups_for_service(request.user, "ipboard") remove_all_syncgroups_for_service(request.user, "ipboard")
# false we failed # false we failed
if result: if result:
AuthServicesInfoManager.update_user_ipboard_info("", "", request.user) AuthServicesInfoManager.update_user_ipboard_info("", "", request.user)
logger.info("Succesfully deactivated ipboard for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to deactviate ipboard for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_ipboard_password(request): def reset_ipboard_password(request):
logger.debug("reset_ipboard_password called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = IPBoardManager.update_user_password(authinfo.ipboard_username, request.user.email) result = IPBoardManager.update_user_password(authinfo.ipboard_username, request.user.email)
if result != "": if result != "":
AuthServicesInfoManager.update_user_ipboard_info(authinfo.ipboard_username, result, request.user) AuthServicesInfoManager.update_user_ipboard_info(authinfo.ipboard_username, result, request.user)
logger.info("Succesfully reset ipboard password for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to reset ipboard password for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_jabber(request): def activate_jabber(request):
logger.debug("activate_jabber called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
logger.debug("Adding jabber user for user %s with main character %s" % (request.user, character))
info = OpenfireManager.add_user(character.character_name) info = OpenfireManager.add_user(character.character_name)
# If our username is blank means we already had a user # If our username is blank means we already had a user
if info[0] is not "": if info[0] is not "":
AuthServicesInfoManager.update_user_jabber_info(info[0], info[1], request.user) AuthServicesInfoManager.update_user_jabber_info(info[0], info[1], request.user)
logger.debug("Updated authserviceinfo for user %s with jabber credentials. Updating groups." % request.user)
update_jabber_groups(request.user) update_jabber_groups(request.user)
logger.info("Succesfully activated jabber for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to activate jabber for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_jabber(request): def deactivate_jabber(request):
logger.debug("deactivate_jabber called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = OpenfireManager.delete_user(authinfo.jabber_username) result = OpenfireManager.delete_user(authinfo.jabber_username)
remove_all_syncgroups_for_service(request.user, "openfire") remove_all_syncgroups_for_service(request.user, "openfire")
# If our username is blank means we failed # If our username is blank means we failed
if result: if result:
AuthServicesInfoManager.update_user_jabber_info("", "", request.user) AuthServicesInfoManager.update_user_jabber_info("", "", request.user)
logger.info("Succesfully deactivated jabber for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to deactivate jabber for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_jabber_password(request): def reset_jabber_password(request):
logger.debug("reset_jabber_password called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = OpenfireManager.update_user_pass(authinfo.jabber_username) result = OpenfireManager.update_user_pass(authinfo.jabber_username)
# If our username is blank means we failed # If our username is blank means we failed
if result != "": if result != "":
AuthServicesInfoManager.update_user_jabber_info(authinfo.jabber_username, result, request.user) AuthServicesInfoManager.update_user_jabber_info(authinfo.jabber_username, result, request.user)
logger.info("Succesfully reset jabber password for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to reset jabber for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_mumble(request): def activate_mumble(request):
logger.debug("activate_mumble called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
if check_if_user_has_permission(request.user, "blue_member"): if check_if_user_has_permission(request.user, "blue_member"):
logger.debug("Adding mumble user for blue user %s with main character %s" % (request.user, character))
result = MumbleManager.create_blue_user(character.corporation_ticker, character.character_name) result = MumbleManager.create_blue_user(character.corporation_ticker, character.character_name)
else: else:
logger.debug("Adding mumble user for user %s with main character %s" % (request.user, character))
result = MumbleManager.create_user(character.corporation_ticker, character.character_name) result = MumbleManager.create_user(character.corporation_ticker, character.character_name)
# if its empty we failed # if its empty we failed
if result[0] is not "": if result[0] is not "":
AuthServicesInfoManager.update_user_mumble_info(result[0], result[1], request.user) AuthServicesInfoManager.update_user_mumble_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with mumble credentials. Updating groups." % request.user)
update_mumble_groups(request.user) update_mumble_groups(request.user)
logger.info("Succesfully activated mumble for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to activate mumble for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_mumble(request): def deactivate_mumble(request):
logger.debug("deactivate_mumble called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = MumbleManager.delete_user(authinfo.mumble_username) result = MumbleManager.delete_user(authinfo.mumble_username)
remove_all_syncgroups_for_service(request.user, "mumble") remove_all_syncgroups_for_service(request.user, "mumble")
# if false we failed # if false we failed
if result: if result:
AuthServicesInfoManager.update_user_mumble_info("", "", request.user) AuthServicesInfoManager.update_user_mumble_info("", "", request.user)
logger.info("Succesfully deactivated mumble for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to deactivate mumble for user %s" % request.user)
return HttpResponseRedirect("/") return HttpResponseRedirect("/")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_mumble_password(request): def reset_mumble_password(request):
logger.debug("reset_mumble_password called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = MumbleManager.update_user_password(authinfo.mumble_username) result = MumbleManager.update_user_password(authinfo.mumble_username)
# if blank we failed # if blank we failed
if result != "": if result != "":
AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user) AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user)
logger.info("Succesfully reset mumble password for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to reset mumble password for user %s" % request.user)
return HttpResponseRedirect("/") return HttpResponseRedirect("/")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_teamspeak3(request): def activate_teamspeak3(request):
logger.debug("activate_teamspeak3 called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
if check_if_user_has_permission(request.user, "blue_member"): if check_if_user_has_permission(request.user, "blue_member"):
logger.debug("Adding TS3 user for blue user %s with main character %s" % (request.user, character))
result = Teamspeak3Manager.add_blue_user(character.character_name, character.corporation_ticker) result = Teamspeak3Manager.add_blue_user(character.character_name, character.corporation_ticker)
else: else:
logger.debug("Adding TS3 user for user %s with main character %s" % (request.user, character))
result = Teamspeak3Manager.add_user(character.character_name, character.corporation_ticker) result = Teamspeak3Manager.add_user(character.character_name, character.corporation_ticker)
# if its empty we failed # if its empty we failed
if result[0] is not "": if result[0] is not "":
AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
update_teamspeak3_groups(request.user) update_teamspeak3_groups(request.user)
logger.info("Succesfully activated TS3 for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_teamspeak3(request): def deactivate_teamspeak3(request):
logger.debug("deactivate_teamspeak3 called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) result = Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid)
@ -286,37 +352,45 @@ def deactivate_teamspeak3(request):
# if false we failed # if false we failed
if result: if result:
AuthServicesInfoManager.update_user_teamspeak3_info("", "", request.user) AuthServicesInfoManager.update_user_teamspeak3_info("", "", request.user)
logger.info("Succesfully deactivated TS3 for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to deactivate TS3 for user %s" % request.user)
return HttpResponseRedirect("/") return HttpResponseRedirect("/")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_teamspeak3_perm(request): def reset_teamspeak3_perm(request):
logger.debug("reset_teamspeak3_perm called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
logger.debug("Deleting TS3 user for user %s" % request.user)
Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid)
remove_all_syncgroups_for_service(request.user, "teamspeak3") remove_all_syncgroups_for_service(request.user, "teamspeak3")
if check_if_user_has_permission(request.user, "blue_member"): if check_if_user_has_permission(request.user, "blue_member"):
logger.debug("Generating new permission key for blue user %s with main character %s" % (request.user, character))
result = Teamspeak3Manager.generate_new_blue_permissionkey(authinfo.teamspeak3_uid, character.character_name, result = Teamspeak3Manager.generate_new_blue_permissionkey(authinfo.teamspeak3_uid, character.character_name,
character.corporation_ticker) character.corporation_ticker)
else: else:
logger.debug("Generating new permission key for user %s with main character %s" % (request.user, character))
result = Teamspeak3Manager.generate_new_permissionkey(authinfo.teamspeak3_uid, character.character_name, result = Teamspeak3Manager.generate_new_permissionkey(authinfo.teamspeak3_uid, character.character_name,
character.corporation_ticker) character.corporation_ticker)
# if blank we failed # if blank we failed
if result != "": if result != "":
AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
update_teamspeak3_groups(request.user) update_teamspeak3_groups(request.user)
logger.info("Successfully reset TS3 permission key for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccessful attempt to reset TS3 permission key for user %s" % request.user)
return HttpResponseRedirect("/") return HttpResponseRedirect("/")
@login_required @login_required
def fleet_fits(request): def fleet_fits(request):
logger.debug("fleet_fits called by user %s" % request.user)
context = {} context = {}
return render_to_response('registered/fleetfits.html', context, return render_to_response('registered/fleetfits.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@ -324,44 +398,62 @@ context_instance=RequestContext(request))
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def deactivate_discord(request): def deactivate_discord(request):
logger.debug("deactivate_discord called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = DiscordManager.delete_user(authinfo.discord_uid) result = DiscordManager.delete_user(authinfo.discord_uid)
if result: if result:
remove_all_syncgroups_for_service(request.user, "discord") remove_all_syncgroups_for_service(request.user, "discord")
AuthServicesInfoManager.update_user_discord_info("", request.user) AuthServicesInfoManager.update_user_discord_info("", request.user)
logger.info("Succesfully deactivated discord for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
logger.error("Unsuccesful attempt to deactivate discord for user %s" % request.user)
return HttpResponseRedirect("/dashboard") return HttpResponseRedirect("/dashboard")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def reset_discord(request): def reset_discord(request):
logger.debug("reset_discord called by user %s" % request.user)
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = DiscordManager.delete_user(authinfo.discord_uid) result = DiscordManager.delete_user(authinfo.discord_uid)
if result: if result:
AuthServicesInfoManager.update_user_discord_info("",request.user) AuthServicesInfoManager.update_user_discord_info("",request.user)
logger.info("Succesfully deleted discord user for user %s - forwarding to discord activation." % request.user)
return HttpResponseRedirect("/activate_discord/") return HttpResponseRedirect("/activate_discord/")
logger.error("Unsuccessful attempt to reset discord for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
@login_required @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)
def activate_discord(request): def activate_discord(request):
logger.debug("activate_discord called by user %s" % request.user)
success = False success = False
if request.method == 'POST': if request.method == 'POST':
logger.debug("Received POST request with form.")
form = DiscordForm(request.POST) form = DiscordForm(request.POST)
logger.debug("Form is valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
email = form.cleaned_data['email'] email = form.cleaned_data['email']
logger.debug("Form contains email address beginning with %s" % email[0:3])
password = form.cleaned_data['password'] password = form.cleaned_data['password']
logger.debug("Form contains password of length %s" % len(password))
try: try:
user_id = DiscordManager.add_user(email, password) user_id = DiscordManager.add_user(email, password, request.user)
logger.debug("Received discord uid %s" % user_id)
if user_id != "": if user_id != "":
AuthServicesInfoManager.update_user_discord_info(user_id, request.user) AuthServicesInfoManager.update_user_discord_info(user_id, request.user)
logger.debug("Updated discord id %s for user %s" % (user_id, request.user))
update_discord_groups(request.user) update_discord_groups(request.user)
logger.debug("Updated discord groups for user %s." % request.user)
success = True success = True
logger.info("Succesfully activated discord for user %s" % request.user)
return HttpResponseRedirect("/services/") return HttpResponseRedirect("/services/")
except: except:
logger.exception("An unhandled exception has occured.", exc_info=True)
pass pass
else: else:
logger.debug("Request is not type POST - providing empty form.")
form = DiscordForm() form = DiscordForm()
logger.debug("Rendering form for user %s with success %s" % (request.user, success))
context = {'form': form, 'success': success} context = {'form': form, 'success': success}
return render_to_response('registered/discord.html', context, context_instance=RequestContext(request)) return render_to_response('registered/discord.html', context, context_instance=RequestContext(request))

View File

@ -16,6 +16,9 @@ from form import SrpFleetUserRequestForm
from form import SrpFleetUpdateCostForm from form import SrpFleetUpdateCostForm
from form import SrpFleetMainUpdateForm from form import SrpFleetMainUpdateForm
import logging
logger = logging.getLogger(__name__)
def srp_util_test(user): def srp_util_test(user):
return check_if_user_has_permission(user, 'member') or check_if_user_has_permission(user, 'blue_member') return check_if_user_has_permission(user, 'member') or check_if_user_has_permission(user, 'blue_member')
@ -24,6 +27,7 @@ def srp_util_test(user):
@login_required @login_required
@user_passes_test(srp_util_test) @user_passes_test(srp_util_test)
def srp_management(request): def srp_management(request):
logger.debug("srp_management called by user %s" % request.user)
totalcost = 0 totalcost = 0
runningcost = 0 runningcost = 0
price_pair = {} price_pair = {}
@ -32,7 +36,9 @@ def srp_management(request):
totalcost = totalcost + fleet_data.srp_total_amount totalcost = totalcost + fleet_data.srp_total_amount
runningcost = runningcost + fleet_data.srp_total_amount runningcost = runningcost + fleet_data.srp_total_amount
price_pair[fleet_main.id] = runningcost price_pair[fleet_main.id] = runningcost
logger.debug("Determined SRP fleet %s costs %s" % (fleet_main.id, runningcost))
runningcost = 0 runningcost = 0
logger.debug("Determined total outstanding SRP cost %s" % totalcost)
context = {"srpfleets": SrpFleetMain.objects.filter(fleet_srp_status=""), "totalcost": totalcost, context = {"srpfleets": SrpFleetMain.objects.filter(fleet_srp_status=""), "totalcost": totalcost,
"price_pair": price_pair} "price_pair": price_pair}
@ -42,6 +48,7 @@ def srp_management(request):
@login_required @login_required
@user_passes_test(srp_util_test) @user_passes_test(srp_util_test)
def srp_management_all(request): def srp_management_all(request):
logger.debug("srp_management_all called by user %s" % request.user)
totalcost = 0 totalcost = 0
runningcost = 0 runningcost = 0
price_pair = {} price_pair = {}
@ -50,7 +57,9 @@ def srp_management_all(request):
totalcost = totalcost + fleet_data.srp_total_amount totalcost = totalcost + fleet_data.srp_total_amount
runningcost = runningcost + fleet_data.srp_total_amount runningcost = runningcost + fleet_data.srp_total_amount
price_pair[fleet_main.id] = runningcost price_pair[fleet_main.id] = runningcost
logger.debug("Determined SRP fleet %s costs %s" % (fleet_main.id, runningcost))
runningcost = 0 runningcost = 0
logger.debug("Determined all-time total SRP cost %s" % totalcost)
context = {"srpfleets": SrpFleetMain.objects.all(), "totalcost": totalcost, "price_pair": price_pair} context = {"srpfleets": SrpFleetMain.objects.all(), "totalcost": totalcost, "price_pair": price_pair}
return render_to_response('registered/srpmanagement.html', context, context_instance=RequestContext(request)) return render_to_response('registered/srpmanagement.html', context, context_instance=RequestContext(request))
@ -59,11 +68,13 @@ def srp_management_all(request):
@login_required @login_required
@user_passes_test(srp_util_test) @user_passes_test(srp_util_test)
def srp_fleet_view(request, fleet_id): def srp_fleet_view(request, fleet_id):
logger.debug("srp_fleet_view called by user %s for fleet id %s" % (request.user, fleet_id))
if SrpFleetMain.objects.filter(id=fleet_id).exists(): if SrpFleetMain.objects.filter(id=fleet_id).exists():
fleet_main = SrpFleetMain.objects.get(id=fleet_id) fleet_main = SrpFleetMain.objects.get(id=fleet_id)
totalcost = 0 totalcost = 0
for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main): for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main):
totalcost = totalcost + fleet_data.srp_total_amount totalcost = totalcost + fleet_data.srp_total_amount
logger.debug("Determiend fleet id %s total cost %s" % (fleet_id, totalcost))
context = {"fleet_id": fleet_id, "fleet_status": fleet_main.fleet_srp_status, context = {"fleet_id": fleet_id, "fleet_status": fleet_main.fleet_srp_status,
"srpfleetrequests": SrpUserRequest.objects.filter(srp_fleet_main=fleet_main), "srpfleetrequests": SrpUserRequest.objects.filter(srp_fleet_main=fleet_main),
@ -72,18 +83,20 @@ def srp_fleet_view(request, fleet_id):
return render_to_response('registered/srpfleetdata.html', context, context_instance=RequestContext(request)) return render_to_response('registered/srpfleetdata.html', context, context_instance=RequestContext(request))
else: else:
logger.error("Unable to view SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_fleet_add_view(request): def srp_fleet_add_view(request):
logger.debug("srp_fleet_add_view called by user %s" % request.user)
completed = False completed = False
completed_srp_code = "" completed_srp_code = ""
if request.method == 'POST': if request.method == 'POST':
form = SrpFleetMainForm(request.POST) form = SrpFleetMainForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id) character = EveManager.get_character_by_id(authinfo.main_char_id)
@ -99,8 +112,10 @@ def srp_fleet_add_view(request):
completed = True completed = True
completed_srp_code = srp_fleet_main.fleet_srp_code completed_srp_code = srp_fleet_main.fleet_srp_code
logger.info("Created SRP Fleet %s by user %s" % (srp_fleet_main.fleet_name, request.user))
else: else:
logger.debug("Returning blank SrpFleetMainForm")
form = SrpFleetMainForm() form = SrpFleetMainForm()
render_items = {'form': form, "completed": completed, "completed_srp_code": completed_srp_code} render_items = {'form': form, "completed": completed, "completed_srp_code": completed_srp_code}
@ -111,47 +126,59 @@ def srp_fleet_add_view(request):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_fleet_remove(request, fleet_id): def srp_fleet_remove(request, fleet_id):
logger.debug("srp_fleet_remove called by user %s for fleet id %s" % (request.user, fleet_id))
if SrpFleetMain.objects.filter(id=fleet_id).exists(): if SrpFleetMain.objects.filter(id=fleet_id).exists():
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
srpfleetmain.delete() srpfleetmain.delete()
logger.info("SRP Fleet %s deleted by user %s" % (srpfleetmain.fleet_name, request.user))
else:
logger.error("Unable to delete SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_fleet_mark_completed(request, fleet_id): def srp_fleet_mark_completed(request, fleet_id):
logger.debug("srp_fleet_mark_completed called by user %s for fleet id %s" % (request.user, fleet_id))
if SrpFleetMain.objects.filter(id=fleet_id).exists(): if SrpFleetMain.objects.filter(id=fleet_id).exists():
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
srpfleetmain.fleet_srp_status = "Completed" srpfleetmain.fleet_srp_status = "Completed"
srpfleetmain.save() srpfleetmain.save()
logger.info("Marked SRP Fleet %s as completed by user %s" % (srpfleetmain.fleet_name, request.user))
else:
logger.error("Unable to mark SRP fleet with id %s as completed for user %s - fleet matching id not found." % (fleet_id, request.user))
return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id)) return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id))
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_fleet_mark_uncompleted(request, fleet_id): def srp_fleet_mark_uncompleted(request, fleet_id):
logger.debug("srp_fleet_mark_uncompleted called by user %s for fleet id %s" % (request.user, fleet_id))
if SrpFleetMain.objects.filter(id=fleet_id).exists(): if SrpFleetMain.objects.filter(id=fleet_id).exists():
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
srpfleetmain.fleet_srp_status = "" srpfleetmain.fleet_srp_status = ""
srpfleetmain.save() srpfleetmain.save()
logger.info("Marked SRP Fleet %s as incomplete for user %s" % (fleet_id, request.user))
else:
logger.error("Unable to mark SRP Fleet id %s as incomplete for user %s - fleet matching id not found." % (fleet_id, request.user))
return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id)) return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id))
@login_required @login_required
@user_passes_test(srp_util_test) @user_passes_test(srp_util_test)
def srp_request_view(request, fleet_srp): def srp_request_view(request, fleet_srp):
logger.debug("srp_request_view called by user %s for fleet srp code %s" % (request.user, fleet_srp))
completed = False completed = False
no_srp_code = False no_srp_code = False
srp_code = "" srp_code = ""
if SrpFleetMain.objects.filter(fleet_srp_code=fleet_srp).exists() is False: if SrpFleetMain.objects.filter(fleet_srp_code=fleet_srp).exists() is False:
no_srp_code = True no_srp_code = True
logger.error("Unable to locate SRP Fleet using code %s for user %s" % (fleet_srp, request.user))
if request.method == 'POST': if request.method == 'POST':
form = SrpFleetUserRequestForm(request.POST) form = SrpFleetUserRequestForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
@ -166,8 +193,10 @@ def srp_request_view(request, fleet_srp):
srp_request.save() srp_request.save()
completed = True completed = True
logger.info("Created SRP Request on behalf of user %s for fleet name %s" % (request.user, srp_fleet_main.fleet_name))
else: else:
logger.debug("Returning blank SrpFleetUserRequestForm")
form = SrpFleetUserRequestForm() form = SrpFleetUserRequestForm()
render_items = {'form': form, "completed": completed, "no_srp_code": no_srp_code} render_items = {'form': form, "completed": completed, "no_srp_code": no_srp_code}
@ -178,14 +207,17 @@ def srp_request_view(request, fleet_srp):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_request_remove(request, srp_request_id): def srp_request_remove(request, srp_request_id):
logger.debug("srp_request_remove called by user %s for srp request id %s" % (request.user, srp_request_id))
stored_fleet_view = None stored_fleet_view = None
if SrpUserRequest.objects.filter(id=srp_request_id).exists(): if SrpUserRequest.objects.filter(id=srp_request_id).exists():
srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id) srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id)
stored_fleet_view = srpuserrequest.srp_fleet_main.id stored_fleet_view = srpuserrequest.srp_fleet_main.id
srpuserrequest.delete() srpuserrequest.delete()
logger.info("Deleted SRP request id %s for user %s" % (srp_request_id, request.user))
if stored_fleet_view is None: if stored_fleet_view is None:
logger.error("Unable to delete srp request id %s for user %s - request matching id not found." % (srp_request_id, request.user))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
else: else:
return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view))
@ -194,6 +226,7 @@ def srp_request_remove(request, srp_request_id):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_request_approve(request, srp_request_id): def srp_request_approve(request, srp_request_id):
logger.debug("srp_request_approve called by user %s for srp request id %s" % (request.user, srp_request_id))
stored_fleet_view = None stored_fleet_view = None
if SrpUserRequest.objects.filter(id=srp_request_id).exists(): if SrpUserRequest.objects.filter(id=srp_request_id).exists():
@ -201,8 +234,9 @@ def srp_request_approve(request, srp_request_id):
stored_fleet_view = srpuserrequest.srp_fleet_main.id stored_fleet_view = srpuserrequest.srp_fleet_main.id
srpuserrequest.srp_status = "Approved" srpuserrequest.srp_status = "Approved"
srpuserrequest.save() srpuserrequest.save()
logger.info("Approved SRP request id %s for character %s by user %s" % (srp_request_id, srpuserrequest.character, request.user))
if stored_fleet_view is None: if stored_fleet_view is None:
logger.error("Unable to approve srp request id %s on behalf of user %s - request matching id not found." % (srp_request_id, request.user))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
else: else:
return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view))
@ -211,6 +245,7 @@ def srp_request_approve(request, srp_request_id):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_request_reject(request, srp_request_id): def srp_request_reject(request, srp_request_id):
logger.debug("srp_request_reject called by user %s for srp request id %s" % (request.user, srp_request_id))
stored_fleet_view = None stored_fleet_view = None
if SrpUserRequest.objects.filter(id=srp_request_id).exists(): if SrpUserRequest.objects.filter(id=srp_request_id).exists():
@ -218,8 +253,10 @@ def srp_request_reject(request, srp_request_id):
stored_fleet_view = srpuserrequest.srp_fleet_main.id stored_fleet_view = srpuserrequest.srp_fleet_main.id
srpuserrequest.srp_status = "Rejected" srpuserrequest.srp_status = "Rejected"
srpuserrequest.save() srpuserrequest.save()
logger.info("SRP request id %s for character %s rejected by %s" % (srp_request_id, srpuserrequest.character, request.user))
if stored_fleet_view is None: if stored_fleet_view is None:
logger.error("Unable to reject SRP request id %s on behalf of user %s - request matching id not found." % (srp_request_id, request.user))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
else: else:
return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view))
@ -228,22 +265,26 @@ def srp_request_reject(request, srp_request_id):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_request_update_amount_view(request, fleet_srp_request_id): def srp_request_update_amount_view(request, fleet_srp_request_id):
logger.debug("srp_request_update_amount_view called by user %s for fleet srp request id %s" % (request.user, fleet_srp_request_id))
no_srp_code = False no_srp_code = False
srp_code = "" srp_code = ""
if SrpUserRequest.objects.filter(id=fleet_srp_request_id).exists() is False: if SrpUserRequest.objects.filter(id=fleet_srp_request_id).exists() is False:
logger.error("Unable to locate SRP request id %s for user %s" % (fleet_srp_request_id, request.user))
no_srp_code = True no_srp_code = True
if request.method == 'POST': if request.method == 'POST':
form = SrpFleetUpdateCostForm(request.POST) form = SrpFleetUpdateCostForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
srp_request = SrpUserRequest.objects.get(id=fleet_srp_request_id) srp_request = SrpUserRequest.objects.get(id=fleet_srp_request_id)
srp_request.srp_total_amount = form.cleaned_data['srp_total_amount'] srp_request.srp_total_amount = form.cleaned_data['srp_total_amount']
srp_request.save() srp_request.save()
logger.info("Updated srp request id %s total to %s by user %s" % (fleet_srp_request_id, form.cleaned_data['srp_total_amount'], request.user))
return HttpResponseRedirect("/srp_fleet_view/" + str(srp_request.srp_fleet_main.id)) return HttpResponseRedirect("/srp_fleet_view/" + str(srp_request.srp_fleet_main.id))
else: else:
logger.debug("Returning blank SrpFleetUpdateCostForm")
form = SrpFleetUpdateCostForm() form = SrpFleetUpdateCostForm()
render_items = {'form': form, "no_srp_code": no_srp_code} render_items = {'form': form, "no_srp_code": no_srp_code}
@ -255,19 +296,24 @@ def srp_request_update_amount_view(request, fleet_srp_request_id):
@login_required @login_required
@permission_required('auth.srp_management') @permission_required('auth.srp_management')
def srp_fleet_edit_view(request, fleet_id): def srp_fleet_edit_view(request, fleet_id):
logger.debug("srp_fleet_edit_view called by user %s for fleet id %s" % (request.user, fleet_id))
no_fleet_id = False no_fleet_id = False
form = None form = None
if SrpFleetMain.objects.filter(id=fleet_id).exists(): if SrpFleetMain.objects.filter(id=fleet_id).exists():
if request.method == 'POST': if request.method == 'POST':
form = SrpFleetMainUpdateForm(request.POST) form = SrpFleetMainUpdateForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
srpfleetmain.fleet_srp_aar_link = form.cleaned_data['fleet_aar_link'] srpfleetmain.fleet_srp_aar_link = form.cleaned_data['fleet_aar_link']
srpfleetmain.save() srpfleetmain.save()
logger.info("User %s edited SRP Fleet %s" % (request.user, srpfleetmain.fleet_name))
return HttpResponseRedirect("/srp") return HttpResponseRedirect("/srp")
else: else:
logger.debug("Returning blank SrpFleetMainUpdateForm")
form = SrpFleetMainUpdateForm() form = SrpFleetMainUpdateForm()
else: else:
logger.error("Unable to edit srp fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
no_fleet_id = True no_fleet_id = True
render_items = {'form': form, "no_fleet_id": no_fleet_id} render_items = {'form': form, "no_fleet_id": no_fleet_id}

View File

@ -52,18 +52,27 @@
<img src="{% static 'img/index_images/auth.png' %}" border="0"> <img src="{% static 'img/index_images/auth.png' %}" border="0">
</a> </a>
</p> </p>
{% if FORUM_URL %}
<p style="text-align:center"> <p style="text-align:center">
<a href="/forums/"> <a href="{{FORUM_URL}}">
<img src="{% static 'img/index_images/forums.png' %}" border="0"> <img src="{% static 'img/index_images/forums.png' %}" border="0">
</a> </a>
</p> </p>
{% endif %}
<p style="text-align:center"> {% if KILLBOARD_URL %}
<a href="/killboard/"> <p style="text-align:center">
<img src="{% static 'img/index_images/killboard.png' %}" border="0"> <a href="{{KILLBOARD_URL}}">
</a> <img src="{% static 'img/index_images/killboard.png' %}" border="0">
</p> </a>
</p>
{% endif %}
{% if MEDIA_URL %}
<p style="text-align:center">
<a href="{{MEDIA_URL}}">
<img src="{% static 'img/index_images/media.png' %}" border="0">
</a>
</p>
{% endif %}
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,12 +4,12 @@
{% trans "Please go to the following page and choose a new password:" %} {% trans "Please go to the following page and choose a new password:" %}
{% block reset_link %} {% block reset_link %}
https://someurl.com{% url 'password_reset_confirm' uidb64=uid token=token %} {{domain}}{% url 'password_reset_confirm' uidb64=uid token=token %}
{% endblock %} {% endblock %}
{% trans "Your username, in case you've forgotten:" %} {{ user.get_username }} {% trans "Your username, in case you've forgotten:" %} {{ user.get_username }}
{% trans "Thanks for using our site!" %} {% trans "Thanks for using our site!" %}
{% blocktrans %}Your Corporation{% endblocktrans %} {% blocktrans %}Your IT Team{% endblocktrans %}
{% endautoescape %} {% endautoescape %}

View File

@ -13,6 +13,9 @@ from eveonline.managers import EveManager
from form import TimerForm from form import TimerForm
from models import Timer from models import Timer
import logging
logger = logging.getLogger(__name__)
def timer_util_test(user): def timer_util_test(user):
return check_if_user_has_permission(user, 'member') or check_if_user_has_permission(user, 'blue_member') return check_if_user_has_permission(user, 'member') or check_if_user_has_permission(user, 'blue_member')
@ -22,13 +25,14 @@ def timer_util_test(user):
@user_passes_test(timer_util_test) @user_passes_test(timer_util_test)
@permission_required('auth.timer_view') @permission_required('auth.timer_view')
def timer_view(request): def timer_view(request):
logger.debug("timer_view called by user %s" % request.user)
timer_list = Timer.objects.all() timer_list = Timer.objects.all()
closest_timer = None closest_timer = None
if timer_list: if timer_list:
closest_timer = \ closest_timer = \
sorted(list(Timer.objects.all()), key=lambda d: abs(datetime.datetime.now() - d.eve_time.replace(tzinfo=None)))[ sorted(list(Timer.objects.all()), key=lambda d: abs(datetime.datetime.now() - d.eve_time.replace(tzinfo=None)))[
0] 0]
logger.debug("Determined closest timer is %s" % closest_timer)
render_items = {'timers': Timer.objects.all(), render_items = {'timers': Timer.objects.all(),
'closest_timer': closest_timer} 'closest_timer': closest_timer}
@ -38,20 +42,21 @@ def timer_view(request):
@login_required @login_required
@permission_required('auth.timer_management') @permission_required('auth.timer_management')
def add_timer_view(request): def add_timer_view(request):
logger.debug("add_timer_view called by user %s" % request.user)
if request.method == 'POST': if request.method == 'POST':
form = TimerForm(request.POST) form = TimerForm(request.POST)
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
if form.is_valid(): if form.is_valid():
# Get character # Get character
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(auth_info.main_char_id) character = EveManager.get_character_by_id(auth_info.main_char_id)
corporation = EveManager.get_corporation_info_by_id(character.corporation_id) corporation = EveManager.get_corporation_info_by_id(character.corporation_id)
logger.debug("Determined timer add request on behalf of character %s corporation %s" % (character, corporation))
# calculate future time # calculate future time
future_time = datetime.timedelta(days=form.cleaned_data['days_left'], hours=form.cleaned_data['hours_left'], minutes=form.cleaned_data['minutes_left']) future_time = datetime.timedelta(days=form.cleaned_data['days_left'], hours=form.cleaned_data['hours_left'], minutes=form.cleaned_data['minutes_left'])
current_time = datetime.datetime.utcnow() current_time = datetime.datetime.utcnow()
eve_time = current_time + future_time eve_time = current_time + future_time
logger.debug("Determined timer eve time is %s - current time %s, adding %s" % (eve_time, current_time, future_time))
# handle valid form # handle valid form
timer = Timer() timer = Timer()
timer.details = form.cleaned_data['details'] timer.details = form.cleaned_data['details']
@ -65,8 +70,10 @@ def add_timer_view(request):
timer.eve_corp = corporation timer.eve_corp = corporation
timer.user = request.user timer.user = request.user
timer.save() timer.save()
logger.info("Created new timer in %s at %s by user %s" % (timer.system, timer.eve_time, request.user))
return HttpResponseRedirect("/timers/") return HttpResponseRedirect("/timers/")
else: else:
logger.debug("Returning new TimerForm")
form = TimerForm() form = TimerForm()
render_items = {'form': form} render_items = {'form': form}
@ -77,7 +84,11 @@ def add_timer_view(request):
@login_required @login_required
@permission_required('auth.timer_management') @permission_required('auth.timer_management')
def remove_timer(request, timer_id): def remove_timer(request, timer_id):
logger.debug("remove_timer called by user %s for timer id %s" % (request.user, timer_id))
if Timer.objects.filter(id=timer_id).exists(): if Timer.objects.filter(id=timer_id).exists():
timer = Timer.objects.get(id=timer_id) timer = Timer.objects.get(id=timer_id)
timer.delete() timer.delete()
logger.debug("Deleting timer id %s by user %s" % (timer_id, request.user))
else:
logger.error("Unable to delete timer id %s for user %s - timer matching id not found." % (timer_id, request.user))
return HttpResponseRedirect("/timers/") return HttpResponseRedirect("/timers/")

View File

@ -6,12 +6,16 @@ from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.conf import settings from django.conf import settings
import logging
logger = logging.getLogger(__name__)
def bootstrap_permissions(): def bootstrap_permissions():
ct = ContentType.objects.get_for_model(User) ct = ContentType.objects.get_for_model(User)
Permission.objects.get_or_create(codename="member", content_type=ct, name="member") Permission.objects.get_or_create(codename="member", content_type=ct, name="member")
Permission.objects.get_or_create(codename="group_management", content_type=ct, name="group_management") Permission.objects.get_or_create(codename="group_management", content_type=ct, name="group_management")
Permission.objects.get_or_create(codename="jabber_broadcast", content_type=ct, name="jabber_broadcast") Permission.objects.get_or_create(codename="jabber_broadcast", content_type=ct, name="jabber_broadcast")
Permission.objects.get_or_create(codename="jabber_broadcast_all", content_type=ct, name="jabber_broadcast_all")
Permission.objects.get_or_create(codename="human_resources", content_type=ct, name="human_resources") Permission.objects.get_or_create(codename="human_resources", content_type=ct, name="human_resources")
Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member") Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member")
Permission.objects.get_or_create(codename="corp_stats", content_type=ct, name="corp_stats") Permission.objects.get_or_create(codename="corp_stats", content_type=ct, name="corp_stats")
@ -20,18 +24,22 @@ def bootstrap_permissions():
Permission.objects.get_or_create(codename="srp_management", content_type=ct, name="srp_management") Permission.objects.get_or_create(codename="srp_management", content_type=ct, name="srp_management")
Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP) Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP) Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
logger.info("Bootstrapped permissions for auth and created default groups.")
def add_member_permission(user, permission): def add_member_permission(user, permission):
logger.debug("Adding permission %s to member %s" % (permission, user))
ct = ContentType.objects.get_for_model(User) ct = ContentType.objects.get_for_model(User)
stored_permission, created = Permission.objects.get_or_create(codename=permission, stored_permission, created = Permission.objects.get_or_create(codename=permission,
content_type=ct, name=permission) content_type=ct, name=permission)
user = User.objects.get(username=user.username) user = User.objects.get(username=user.username)
user.user_permissions.add(stored_permission) user.user_permissions.add(stored_permission)
logger.info("Added permission %s to user %s" % (permission, user))
user.save() user.save()
def remove_member_permission(user, permission): def remove_member_permission(user, permission):
logger.debug("Removing permission %s from member %s" % (permission, user))
ct = ContentType.objects.get_for_model(User) ct = ContentType.objects.get_for_model(User)
stored_permission, created = Permission.objects.get_or_create(codename=permission, stored_permission, created = Permission.objects.get_or_create(codename=permission,
content_type=ct, name=permission) content_type=ct, name=permission)
@ -41,6 +49,9 @@ def remove_member_permission(user, permission):
if user.has_perm('auth.' + permission): if user.has_perm('auth.' + permission):
user.user_permissions.remove(stored_permission) user.user_permissions.remove(stored_permission)
user.save() user.save()
logger.info("Removed permission %s from member %s" % (permission, user))
else:
logger.warn("Attempting to remove permission user %s does not have: %s" % (user, permission))
def check_if_user_has_permission(user, permission): def check_if_user_has_permission(user, permission):

View File

@ -9,40 +9,60 @@ from services.managers.ipboard_manager import IPBoardManager
from services.managers.teamspeak3_manager import Teamspeak3Manager from services.managers.teamspeak3_manager import Teamspeak3Manager
from services.managers.discord_manager import DiscordManager from services.managers.discord_manager import DiscordManager
import logging
logger = logging.getLogger(__name__)
def add_user_to_group(user, groupname): def add_user_to_group(user, groupname):
logger.debug("Addung user %s to group %s" % (user, groupname))
user = User.objects.get(username=user.username) user = User.objects.get(username=user.username)
group, created = Group.objects.get_or_create(name=groupname) group, created = Group.objects.get_or_create(name=groupname)
if created:
logger.info("Created new group %s" % groupname)
user.groups.add(group) user.groups.add(group)
user.save() user.save()
logger.info("Added user %s to group %s" % (user, group))
def remove_user_from_group(user, groupname): def remove_user_from_group(user, groupname):
logger.debug("Removing user %s from group %s" % (user, groupname))
user = User.objects.get(username=user.username) user = User.objects.get(username=user.username)
group, created = Group.objects.get_or_create(name=groupname) group, created = Group.objects.get_or_create(name=groupname)
if created:
logger.warn("Created new group %s during attempt to remove user %s from it. This shouldn't have happened." % (group, user))
if user.groups.filter(name=groupname): if user.groups.filter(name=groupname):
user.groups.remove(group) user.groups.remove(group)
user.save() user.save()
logger.info("Removed user %s from group %s" % (user, group))
else:
logger.warn("Unable to remove user %s from group %s - user not in group." % (user, group))
def deactivate_services(user): def deactivate_services(user):
logger.debug("Deactivating services for user %s" % user)
authinfo = AuthServicesInfoManager.get_auth_service_info(user) authinfo = AuthServicesInfoManager.get_auth_service_info(user)
if authinfo.mumble_username and authinfo.mumble_username != "": if authinfo.mumble_username and authinfo.mumble_username != "":
logger.debug("User %s has mumble account %s. Deleting." % (user, authinfo.mumble_username))
MumbleManager.delete_user(authinfo.mumble_username) MumbleManager.delete_user(authinfo.mumble_username)
AuthServicesInfoManager.update_user_mumble_info("", "", user) AuthServicesInfoManager.update_user_mumble_info("", "", user)
if authinfo.jabber_username and authinfo.jabber_username != "": if authinfo.jabber_username and authinfo.jabber_username != "":
logger.debug("User %s has jabber account %s. Deleting." % (user, authinfo.jabber_username))
OpenfireManager.delete_user(authinfo.jabber_username) OpenfireManager.delete_user(authinfo.jabber_username)
AuthServicesInfoManager.update_user_jabber_info("", "", user) AuthServicesInfoManager.update_user_jabber_info("", "", user)
if authinfo.forum_username and authinfo.forum_username != "": if authinfo.forum_username and authinfo.forum_username != "":
logger.debug("User %s has forum account %s. Deleting." % (user, authinfo.forum_username))
Phpbb3Manager.disable_user(authinfo.forum_username) Phpbb3Manager.disable_user(authinfo.forum_username)
AuthServicesInfoManager.update_user_forum_info("", "", user) AuthServicesInfoManager.update_user_forum_info("", "", user)
if authinfo.ipboard_username and authinfo.ipboard_username != "": if authinfo.ipboard_username and authinfo.ipboard_username != "":
logger.debug("User %s has ipboard account %s. Deleting." % (user, authinfo.ipboard_username))
IPBoardManager.disable_user(authinfo.ipboard_username) IPBoardManager.disable_user(authinfo.ipboard_username)
AuthServicesInfoManager.update_user_forum_info("", "", user) AuthServicesInfoManager.update_user_forum_info("", "", user)
if authinfo.teamspeak3_uid and authinfo.teamspeak3_uid != "": if authinfo.teamspeak3_uid and authinfo.teamspeak3_uid != "":
logger.debug("User %s has mumble account %s. Deleting." % (user, authinfo.teamspeak3_uid))
Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid)
AuthServicesInfoManager.update_user_teamspeak3_info("", "", user) AuthServicesInfoManager.update_user_teamspeak3_info("", "", user)
if authinfo.discord_uid and authinfo.discord_uid != "": if authinfo.discord_uid and authinfo.discord_uid != "":
logger.debug("User %s has discord account %s. Deleting." % (user, authinfo.discord_uid))
DiscordManager.delete_user(authinfo.discord_uid) DiscordManager.delete_user(authinfo.discord_uid)
AuthServicesInfoManager.update_user_discord_info("", user) AuthServicesInfoManager.update_user_discord_info("", user)

View File

@ -44,4 +44,6 @@ def domain_url(request):
'TEAMSPEAK3_PUBLIC_URL': settings.TEAMSPEAK3_PUBLIC_URL, 'TEAMSPEAK3_PUBLIC_URL': settings.TEAMSPEAK3_PUBLIC_URL,
'JACK_KNIFE_URL': settings.JACK_KNIFE_URL, 'JACK_KNIFE_URL': settings.JACK_KNIFE_URL,
'DISCORD_SERVER_ID': settings.DISCORD_SERVER_ID, 'DISCORD_SERVER_ID': settings.DISCORD_SERVER_ID,
'KILLBOARD_URL': settings.KILLBOARD_URL,
'MEDIA_URL': settings.MEDIA_URL,
'CURRENT_UTC_TIME': timezone.now()} 'CURRENT_UTC_TIME': timezone.now()}