mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 20:40:17 +02:00
Merge pull request #278 from Adarnof/notification
Batch of User Notifications
This commit is contained in:
commit
1b7f2254c2
@ -2,6 +2,7 @@ from django.conf import settings
|
|||||||
from celery.task import periodic_task
|
from celery.task import periodic_task
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from notifications import notify
|
||||||
from celery import task
|
from celery import task
|
||||||
from models import SyncGroupCache
|
from models import SyncGroupCache
|
||||||
from celery.task.schedules import crontab
|
from celery.task.schedules import crontab
|
||||||
@ -35,14 +36,18 @@ import logging
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def disable_member(user):
|
def disable_member(user):
|
||||||
|
change = False
|
||||||
logger.debug("Disabling member %s" % user)
|
logger.debug("Disabling member %s" % user)
|
||||||
if user.user_permissions.all().exists():
|
if user.user_permissions.all().exists():
|
||||||
logger.info("Clearning user %s permission to deactivate user." % user)
|
logger.info("Clearning user %s permission to deactivate user." % user)
|
||||||
user.user_permissions.clear()
|
user.user_permissions.clear()
|
||||||
|
change = True
|
||||||
if user.groups.all().exists():
|
if user.groups.all().exists():
|
||||||
logger.info("Clearing user %s groups to deactivate user." % user)
|
logger.info("Clearing user %s groups to deactivate user." % user)
|
||||||
user.groups.clear()
|
user.groups.clear()
|
||||||
|
change = True
|
||||||
deactivate_services(user)
|
deactivate_services(user)
|
||||||
|
return change
|
||||||
|
|
||||||
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
|
||||||
@ -301,56 +306,70 @@ def assign_alliance_group(auth):
|
|||||||
auth.user.groups.remove(g)
|
auth.user.groups.remove(g)
|
||||||
|
|
||||||
def make_member(user):
|
def make_member(user):
|
||||||
|
change = False
|
||||||
logger.debug("Ensuring user %s has member permissions and groups." % user)
|
logger.debug("Ensuring user %s has member permissions and groups." % user)
|
||||||
# ensure member is not blue right now
|
# ensure member is not blue right now
|
||||||
if check_if_user_has_permission(user, 'blue_member'):
|
if check_if_user_has_permission(user, 'blue_member'):
|
||||||
logger.info("Removing user %s blue permission to transition to member" % user)
|
logger.info("Removing user %s blue permission to transition to member" % user)
|
||||||
remove_member_permission(user, 'blue_member')
|
remove_member_permission(user, 'blue_member')
|
||||||
|
change = True
|
||||||
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
||||||
if blue_group in user.groups.all():
|
if blue_group in user.groups.all():
|
||||||
logger.info("Removing user %s blue group" % user)
|
logger.info("Removing user %s blue group" % user)
|
||||||
user.groups.remove(blue_group)
|
user.groups.remove(blue_group)
|
||||||
|
change = True
|
||||||
# make member
|
# make member
|
||||||
if check_if_user_has_permission(user, 'member') is False:
|
if check_if_user_has_permission(user, 'member') is False:
|
||||||
logger.info("Adding user %s member permission" % user)
|
logger.info("Adding user %s member permission" % user)
|
||||||
add_member_permission(user, 'member')
|
add_member_permission(user, 'member')
|
||||||
|
change = True
|
||||||
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
||||||
if not member_group in user.groups.all():
|
if not member_group in user.groups.all():
|
||||||
logger.info("Adding user %s to member group" % user)
|
logger.info("Adding user %s to member group" % user)
|
||||||
user.groups.add(member_group)
|
user.groups.add(member_group)
|
||||||
|
change = True
|
||||||
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
||||||
if auth.is_blue:
|
if auth.is_blue:
|
||||||
logger.info("Marking user %s as non-blue" % user)
|
logger.info("Marking user %s as non-blue" % user)
|
||||||
auth.is_blue = False
|
auth.is_blue = False
|
||||||
auth.save()
|
auth.save()
|
||||||
|
change = True
|
||||||
assign_corp_group(auth)
|
assign_corp_group(auth)
|
||||||
assign_alliance_group(auth)
|
assign_alliance_group(auth)
|
||||||
|
return change
|
||||||
|
|
||||||
def make_blue(user):
|
def make_blue(user):
|
||||||
|
change = False
|
||||||
logger.debug("Ensuring user %s has blue permissions and groups." % user)
|
logger.debug("Ensuring user %s has blue permissions and groups." % user)
|
||||||
# ensure user is not a member
|
# ensure user is not a member
|
||||||
if check_if_user_has_permission(user, 'member'):
|
if check_if_user_has_permission(user, 'member'):
|
||||||
logger.info("Removing user %s member permission to transition to blue" % user)
|
logger.info("Removing user %s member permission to transition to blue" % user)
|
||||||
remove_member_permission(user, 'blue_member')
|
remove_member_permission(user, 'blue_member')
|
||||||
|
change = True
|
||||||
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
||||||
if member_group in user.groups.all():
|
if member_group in user.groups.all():
|
||||||
logger.info("Removing user %s member group" % user)
|
logger.info("Removing user %s member group" % user)
|
||||||
user.groups.remove(member_group)
|
user.groups.remove(member_group)
|
||||||
|
change = True
|
||||||
# make blue
|
# make blue
|
||||||
if check_if_user_has_permission(user, 'blue_member') is False:
|
if check_if_user_has_permission(user, 'blue_member') is False:
|
||||||
logger.info("Adding user %s blue permission" % user)
|
logger.info("Adding user %s blue permission" % user)
|
||||||
add_member_permission(user, 'blue_member')
|
add_member_permission(user, 'blue_member')
|
||||||
|
change = True
|
||||||
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
||||||
if not blue_group in user.groups.all():
|
if not blue_group in user.groups.all():
|
||||||
logger.info("Adding user %s to blue group" % user)
|
logger.info("Adding user %s to blue group" % user)
|
||||||
user.groups.add(blue_group)
|
user.groups.add(blue_group)
|
||||||
|
change = True
|
||||||
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
||||||
if auth.is_blue is False:
|
if auth.is_blue is False:
|
||||||
logger.info("Marking user %s as blue" % user)
|
logger.info("Marking user %s as blue" % user)
|
||||||
auth.is_blue = True
|
auth.is_blue = True
|
||||||
auth.save()
|
auth.save()
|
||||||
|
change = True
|
||||||
assign_corp_group(auth)
|
assign_corp_group(auth)
|
||||||
assign_alliance_group(auth)
|
assign_alliance_group(auth)
|
||||||
|
return change
|
||||||
|
|
||||||
def determine_membership_by_character(char):
|
def determine_membership_by_character(char):
|
||||||
if settings.IS_CORP:
|
if settings.IS_CORP:
|
||||||
@ -388,14 +407,17 @@ def determine_membership_by_user(user):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def set_state(user):
|
def set_state(user):
|
||||||
|
change = False
|
||||||
state = determine_membership_by_user(user)
|
state = determine_membership_by_user(user)
|
||||||
logger.debug("Assigning user %s to state %s" % (user, state))
|
logger.debug("Assigning user %s to state %s" % (user, state))
|
||||||
if state == "MEMBER":
|
if state == "MEMBER":
|
||||||
make_member(user)
|
change = make_member(user)
|
||||||
elif state == "BLUE":
|
elif state == "BLUE":
|
||||||
make_blue(user)
|
change = make_blue(user)
|
||||||
else:
|
else:
|
||||||
disable_member(user)
|
change = disable_member(user)
|
||||||
|
if change:
|
||||||
|
notify(user, "Membership State Change", message="You membership state has been changed to %s" % state)
|
||||||
|
|
||||||
# Run every minute
|
# Run every minute
|
||||||
@periodic_task(run_every=crontab(minute="*/1"))
|
@periodic_task(run_every=crontab(minute="*/1"))
|
||||||
@ -445,6 +467,7 @@ def refresh_api(api_key_pair):
|
|||||||
elif type == False:
|
elif type == False:
|
||||||
logger.info("Determined api key %s for blue user %s is no longer type account as requred." % (api_key_pair.api_id, user))
|
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
|
||||||
|
notify(user, "API Failed Validation", message="Your API key ID %s is not account-wide as required." % api_key_pair.api_id, level="danger")
|
||||||
full = EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
|
full = EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
|
||||||
if full == None:
|
if full == None:
|
||||||
api_key_pair.error_count += 1
|
api_key_pair.error_count += 1
|
||||||
@ -454,6 +477,7 @@ def refresh_api(api_key_pair):
|
|||||||
elif full == False:
|
elif full == False:
|
||||||
logger.info("Determined api key %s for blue user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
|
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
|
||||||
|
notify(user, "API Failed Validation", message="Your API key ID %s does not meet access mask requirements." % api_key_pair.api_id, level="danger")
|
||||||
elif state == "MEMBER":
|
elif state == "MEMBER":
|
||||||
if settings.MEMBER_API_ACCOUNT:
|
if settings.MEMBER_API_ACCOUNT:
|
||||||
type = EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key)
|
type = EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key)
|
||||||
@ -465,6 +489,7 @@ def refresh_api(api_key_pair):
|
|||||||
elif type == False:
|
elif type == False:
|
||||||
logger.info("Determined api key %s for user %s is no longer type account as required." % (api_key_pair.api_id, user))
|
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
|
||||||
|
notify(user, "API Failed Validation", message="Your API key ID %s is not account-wide as required." % api_key_pair.api_id, level="danger")
|
||||||
full = EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
|
full = EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
|
||||||
if full == None:
|
if full == None:
|
||||||
api_key_pair.error_count += 1
|
api_key_pair.error_count += 1
|
||||||
@ -474,14 +499,17 @@ def refresh_api(api_key_pair):
|
|||||||
elif full == False:
|
elif full == False:
|
||||||
logger.info("Determined api key %s for user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
|
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
|
||||||
|
notify(user, "API Failed Validation", message="Your API key ID %s does not meet access mask requirements." % api_key_pair.api_id, level="danger")
|
||||||
if still_valid == None:
|
if still_valid == None:
|
||||||
if api_key_pair.error_count >= 3:
|
if api_key_pair.error_count >= 3:
|
||||||
logger.info("API key %s has incurred 3 or more errors. Assuming invalid." % api_key_pair.api_id)
|
logger.info("API key %s has incurred 3 or more errors. Assuming invalid." % api_key_pair.api_id)
|
||||||
still_valid = False
|
still_valid = False
|
||||||
|
notify(user, "API Failed Validation", message="Your API key ID %s has accumulated too many errors during refresh and is assumed to be invalid." % api_key_pair.api_id, level="danger")
|
||||||
if still_valid == False:
|
if still_valid == False:
|
||||||
logger.debug("API key %s has failed validation; it and its characters will be deleted." % api_key_pair.api_id)
|
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)
|
||||||
|
notify(user, "API Key Deleted", message="Your API key ID %s has failed validation. It and its associated characters have been deleted." % api_key_pair.api_id, level="danger")
|
||||||
elif still_valid == True:
|
elif still_valid == True:
|
||||||
if api_key_pair.error_count != 0:
|
if api_key_pair.error_count != 0:
|
||||||
logger.info("Clearing error count for api %s as it passed validation" % api_key_pair.api_id)
|
logger.info("Clearing error count for api %s as it passed validation" % api_key_pair.api_id)
|
||||||
@ -504,6 +532,7 @@ def refresh_api(api_key_pair):
|
|||||||
logger.debug("API key %s is no longer valid; it and its characters will be deleted." % api_key_pair.api_id)
|
logger.debug("API key %s is no longer valid; 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)
|
||||||
|
notify(user, "API Key Deleted", message="Your API key ID %s is invalid. It and its associated characters have been deleted." % api_key_pair.api_id, level="danger")
|
||||||
|
|
||||||
# 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"))
|
||||||
@ -526,6 +555,7 @@ def run_api_refresh():
|
|||||||
logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
|
logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
|
||||||
authserviceinfo.main_char_id = ''
|
authserviceinfo.main_char_id = ''
|
||||||
authserviceinfo.save()
|
authserviceinfo.save()
|
||||||
|
notify(user, "Main Character Reset", message="Your specified main character no longer has a model.\nThis could be the result of an invalid API\nYour main character ID has been reset." % api_key_pair.api_id, level="warn")
|
||||||
set_state(user)
|
set_state(user)
|
||||||
|
|
||||||
def populate_alliance(id, blue=False):
|
def populate_alliance(id, blue=False):
|
||||||
|
@ -5,7 +5,7 @@ from django.conf import settings
|
|||||||
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.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from notifications import notify
|
||||||
from models import GroupDescription
|
from models import GroupDescription
|
||||||
from models import GroupRequest
|
from models import GroupRequest
|
||||||
from models import HiddenGroup
|
from models import HiddenGroup
|
||||||
@ -48,6 +48,7 @@ def group_accept_request(request, group_request_id):
|
|||||||
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))
|
logger.info("User %s accepted group request from user %s to group %s" % (request.user, group_request.user, group_request.group.name))
|
||||||
|
notify(group_request.user, "Group Application Accepted", level="success", message="Your application to %s has been accepted." % group_request.group)
|
||||||
except:
|
except:
|
||||||
logger.exception("Unhandled exception occured while user %s attempting to accept grouprequest id %s." % (request.user, group_request_id))
|
logger.exception("Unhandled exception occured while user %s attempting to accept grouprequest id %s." % (request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
@ -65,6 +66,7 @@ def group_reject_request(request, 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))
|
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()
|
||||||
|
notify(group_request.user, "Group Application Rejected", level="danger", message="Your application to %s has been rejected." % group_request.group)
|
||||||
except:
|
except:
|
||||||
logger.exception("Unhandled exception occured while user %s attempting to reject group request id %s" % (request.user, group_request_id))
|
logger.exception("Unhandled exception occured while user %s attempting to reject group request id %s" % (request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
@ -83,6 +85,7 @@ def group_leave_accept_request(request, group_request_id):
|
|||||||
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))
|
logger.info("User %s accepted group leave request from user %s to group %s" % (request.user, group_request.user, group_request.group.name))
|
||||||
|
notify(group_request.user, "Group Leave Request Accepted", level="success", message="Your request to leave %s has been accepted." % group_request.group)
|
||||||
except:
|
except:
|
||||||
logger.exception("Unhandled exception occured while user %s attempting to accept group leave request id %s" % (request.user, group_request_id))
|
logger.exception("Unhandled exception occured while user %s attempting to accept group leave request id %s" % (request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
@ -100,6 +103,7 @@ def group_leave_reject_request(request, 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))
|
logger.info("User %s rejected group leave request from user %s for group %s" % (request.user, group_request.user, group_request.group.name))
|
||||||
|
notify(group_request.user, "Group Leave Request Rejected", level="danger", message="Your request to leave %s has been rejected." % group_request.group)
|
||||||
except:
|
except:
|
||||||
logger.exception("Unhandled exception occured while user %s attempting to reject group leave request id %s" % (request.user, group_request_id))
|
logger.exception("Unhandled exception occured while user %s attempting to reject group leave request id %s" % (request.user, group_request_id))
|
||||||
pass
|
pass
|
||||||
@ -160,7 +164,6 @@ def group_request_add(request, group_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)))
|
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")
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from django.shortcuts import render_to_response
|
|||||||
from django.contrib.auth.decorators import permission_required
|
from django.contrib.auth.decorators import permission_required
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.shortcuts import HttpResponseRedirect
|
from django.shortcuts import HttpResponseRedirect
|
||||||
|
from notifications import notify
|
||||||
from models import HRApplication
|
from models import HRApplication
|
||||||
from models import HRApplicationComment
|
from models import HRApplicationComment
|
||||||
from forms import HRApplicationForm
|
from forms import HRApplicationForm
|
||||||
@ -162,6 +162,7 @@ def hr_application_remove(request, app_id):
|
|||||||
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))
|
logger.info("Deleted HRApplication id %s on behalf of user %s" % (app_id, request.user))
|
||||||
|
notify(application.user, "Application Deleted", message="Your application to %s was deleted.")
|
||||||
application.delete()
|
application.delete()
|
||||||
else:
|
else:
|
||||||
logger.error("Unable to delete HRApplication with id %s on behalf of user %s: application is NoneType" % (app_id, request.user))
|
logger.error("Unable to delete HRApplication with id %s on behalf of user %s: application is NoneType" % (app_id, request.user))
|
||||||
@ -183,6 +184,7 @@ def hr_application_approve(request, app_id):
|
|||||||
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))
|
logger.info("HRApplication for user %s to corp %s approved by %s" % (application.user, application.corp, request.user))
|
||||||
|
notify(application.user, "Application Accepted", message="Your application to %s has been approved." % application.corp, level="success")
|
||||||
else:
|
else:
|
||||||
logger.error("User %s unable to approve HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
|
logger.error("User %s unable to approve HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
|
||||||
|
|
||||||
@ -201,6 +203,7 @@ def hr_application_reject(request, app_id):
|
|||||||
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))
|
logger.info("HRApplication for user %s to corp %s rejected by %s" % (application.user, application.corp, request.user))
|
||||||
|
notify(application.user, "Application Rejected", message="Your application to %s has been rejected." % application.corp, level="danger")
|
||||||
else:
|
else:
|
||||||
logger.error("User %s unable to reject HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
|
logger.error("User %s unable to reject HRApplication id %s - hrapplication with that id not found." % (request.user, app_id))
|
||||||
|
|
||||||
@ -251,6 +254,7 @@ def hr_application_mark_in_progress(request, 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))
|
logger.info("Marked HRApplication for user %s to corp %s in progress by user %s" % (application.user, application.corp, request.user))
|
||||||
|
notify(application.user, "Application In Progress", message="Your application to %s is being reviewed by %s" % (application.corp, application.reviewer_inprogress_character))
|
||||||
else:
|
else:
|
||||||
logger.error("Unable to mark HRApplication id %s in progress by user %s - hrapplication matching id not found." % (app_id, request.user))
|
logger.error("Unable to mark HRApplication id %s in progress by user %s - hrapplication matching id not found." % (app_id, request.user))
|
||||||
|
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
from .models import Notification
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def notify(user, title, message=None, level='info'):
|
||||||
|
notif = Notification()
|
||||||
|
notif.user = user
|
||||||
|
notif.title = title
|
||||||
|
if not message:
|
||||||
|
message = title
|
||||||
|
notif.message = message
|
||||||
|
notif.level = level
|
||||||
|
notif.save()
|
||||||
|
logger.info("Created notification %s" % notif)
|
@ -2,6 +2,8 @@ import logging
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from .models import Notification
|
from .models import Notification
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class NotificationHandler(logging.Handler):
|
class NotificationHandler(logging.Handler):
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
for user in User.objects.all():
|
for user in User.objects.all():
|
||||||
@ -10,5 +12,8 @@ class NotificationHandler(logging.Handler):
|
|||||||
notif.user = user
|
notif.user = user
|
||||||
notif.title = "%s [%s:%s]" % (record.levelname, record.funcName, record.lineno)
|
notif.title = "%s [%s:%s]" % (record.levelname, record.funcName, record.lineno)
|
||||||
notif.level = str([item[0] for item in Notification.LEVEL_CHOICES if item[1] == record.levelname][0])
|
notif.level = str([item[0] for item in Notification.LEVEL_CHOICES if item[1] == record.levelname][0])
|
||||||
notif.message = record.getMessage()
|
message = record.getMessage()
|
||||||
|
message = message + "\n\n"
|
||||||
|
message = message + record.exc_text
|
||||||
|
notif.message = message
|
||||||
notif.save()
|
notif.save()
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="panel panel-{{ notif.level }}">
|
<div class="panel panel-{{ notif.level }}">
|
||||||
<div class="panel-heading">{{ notif.timestamp }} {{ notif.title }}</div>
|
<div class="panel-heading">{{ notif.timestamp }} {{ notif.title }}</div>
|
||||||
<div class="panel-body">{{ notif.message }}</div>
|
<div class="panel-body"><pre>{{ notif.message }}</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from notifications import notify
|
||||||
from authentication.managers import AuthServicesInfoManager
|
from authentication.managers import AuthServicesInfoManager
|
||||||
from services.managers.openfire_manager import OpenfireManager
|
from services.managers.openfire_manager import OpenfireManager
|
||||||
from services.managers.phpbb3_manager import Phpbb3Manager
|
from services.managers.phpbb3_manager import Phpbb3Manager
|
||||||
@ -39,33 +39,41 @@ def remove_user_from_group(user, groupname):
|
|||||||
|
|
||||||
|
|
||||||
def deactivate_services(user):
|
def deactivate_services(user):
|
||||||
|
change = False
|
||||||
logger.debug("Deactivating services for user %s" % 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))
|
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)
|
||||||
|
change = True
|
||||||
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))
|
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)
|
||||||
|
change = True
|
||||||
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))
|
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)
|
||||||
|
change = True
|
||||||
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))
|
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)
|
||||||
|
change = True
|
||||||
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))
|
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)
|
||||||
|
change = True
|
||||||
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))
|
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)
|
||||||
|
change = True
|
||||||
|
if change:
|
||||||
|
notify(user, "Services Disabled", message="Your services accounts have been disabled.", level="danger")
|
||||||
|
|
||||||
def generate_corp_group_name(corpname):
|
def generate_corp_group_name(corpname):
|
||||||
return 'Corp_' + corpname.replace(' ', '_')
|
return 'Corp_' + corpname.replace(' ', '_')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user