mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 20:40:17 +02:00
commit
4821d36e7c
2
.gitignore
vendored
2
.gitignore
vendored
@ -45,7 +45,7 @@ coverage.xml
|
|||||||
*.pot
|
*.pot
|
||||||
|
|
||||||
# Django stuff:
|
# Django stuff:
|
||||||
*.log
|
*.log*
|
||||||
|
|
||||||
# Sphinx documentation
|
# Sphinx documentation
|
||||||
docs/_build/
|
docs/_build/
|
||||||
|
@ -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',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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("/")
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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))
|
||||||
|
@ -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")
|
||||||
|
@ -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))
|
||||||
|
@ -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))
|
||||||
|
@ -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
|
||||||
|
@ -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))
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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,):
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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')
|
||||||
|
@ -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))
|
||||||
|
58
srp/views.py
58
srp/views.py
@ -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}
|
||||||
|
@ -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>
|
||||||
|
@ -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 %}
|
||||||
|
@ -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/")
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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()}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user