mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-06 07:06:19 +01:00
Shorthand notify command
Notifications on API key update failures Notifications on application status updates Notifications on services disabled
This commit is contained in:
@@ -2,7 +2,7 @@ from django.conf import settings
|
||||
from celery.task import periodic_task
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
from notifications import notify
|
||||
from models import SyncGroupCache
|
||||
from celery.task.schedules import crontab
|
||||
from services.managers.openfire_manager import OpenfireManager
|
||||
@@ -34,14 +34,18 @@ import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def disable_member(user):
|
||||
change = False
|
||||
logger.debug("Disabling member %s" % user)
|
||||
if user.user_permissions.all().exists():
|
||||
logger.info("Clearning user %s permission to deactivate user." % user)
|
||||
user.user_permissions.clear()
|
||||
change = True
|
||||
if user.groups.all().exists():
|
||||
logger.info("Clearing user %s groups to deactivate user." % user)
|
||||
user.groups.clear()
|
||||
change = True
|
||||
deactivate_services(user)
|
||||
return change
|
||||
|
||||
def is_teamspeak3_active():
|
||||
return settings.ENABLE_AUTH_TEAMSPEAK3 or settings.ENABLE_BLUE_TEAMSPEAK3
|
||||
@@ -272,54 +276,68 @@ def assign_corp_group(auth):
|
||||
auth.user.groups.remove(g)
|
||||
|
||||
def make_member(user):
|
||||
change = False
|
||||
logger.debug("Ensuring user %s has member permissions and groups." % user)
|
||||
# ensure member is not blue right now
|
||||
if check_if_user_has_permission(user, 'blue_member'):
|
||||
logger.info("Removing user %s blue permission to transition to member" % user)
|
||||
remove_member_permission(user, 'blue_member')
|
||||
change = True
|
||||
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
||||
if blue_group in user.groups.all():
|
||||
logger.info("Removing user %s blue group" % user)
|
||||
user.groups.remove(blue_group)
|
||||
change = True
|
||||
# make member
|
||||
if check_if_user_has_permission(user, 'member') is False:
|
||||
logger.info("Adding user %s member permission" % user)
|
||||
add_member_permission(user, 'member')
|
||||
change = True
|
||||
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
||||
if not member_group in user.groups.all():
|
||||
logger.info("Adding user %s to member group" % user)
|
||||
user.groups.add(member_group)
|
||||
change = True
|
||||
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
||||
if auth.is_blue:
|
||||
logger.info("Marking user %s as non-blue" % user)
|
||||
auth.is_blue = False
|
||||
auth.save()
|
||||
change = True
|
||||
assign_corp_group(auth)
|
||||
return change
|
||||
|
||||
def make_blue(user):
|
||||
change = False
|
||||
logger.debug("Ensuring user %s has blue permissions and groups." % user)
|
||||
# ensure user is not a member
|
||||
if check_if_user_has_permission(user, 'member'):
|
||||
logger.info("Removing user %s member permission to transition to blue" % user)
|
||||
remove_member_permission(user, 'blue_member')
|
||||
change = True
|
||||
member_group, c = Group.objects.get_or_create(name=settings.DEFAULT_AUTH_GROUP)
|
||||
if member_group in user.groups.all():
|
||||
logger.info("Removing user %s member group" % user)
|
||||
user.groups.remove(member_group)
|
||||
change = True
|
||||
# make blue
|
||||
if check_if_user_has_permission(user, 'blue_member') is False:
|
||||
logger.info("Adding user %s blue permission" % user)
|
||||
add_member_permission(user, 'blue_member')
|
||||
change = True
|
||||
blue_group, c = Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
|
||||
if not blue_group in user.groups.all():
|
||||
logger.info("Adding user %s to blue group" % user)
|
||||
user.groups.add(blue_group)
|
||||
change = True
|
||||
auth, c = AuthServicesInfo.objects.get_or_create(user=user)
|
||||
if auth.is_blue is False:
|
||||
logger.info("Marking user %s as blue" % user)
|
||||
auth.is_blue = True
|
||||
auth.save()
|
||||
change = True
|
||||
assign_corp_group(auth)
|
||||
return change
|
||||
|
||||
def determine_membership_by_character(char):
|
||||
if settings.IS_CORP:
|
||||
@@ -357,14 +375,17 @@ def determine_membership_by_user(user):
|
||||
return False
|
||||
|
||||
def set_state(user):
|
||||
change = False
|
||||
state = determine_membership_by_user(user)
|
||||
logger.debug("Assigning user %s to state %s" % (user, state))
|
||||
if state == "MEMBER":
|
||||
make_member(user)
|
||||
change = make_member(user)
|
||||
elif state == "BLUE":
|
||||
make_blue(user)
|
||||
change = make_blue(user)
|
||||
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
|
||||
@periodic_task(run_every=crontab(minute="*/1"))
|
||||
@@ -414,6 +435,7 @@ def refresh_api(api_key_pair):
|
||||
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))
|
||||
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)
|
||||
if full == None:
|
||||
api_key_pair.error_count += 1
|
||||
@@ -423,6 +445,7 @@ def refresh_api(api_key_pair):
|
||||
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))
|
||||
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":
|
||||
if settings.MEMBER_API_ACCOUNT:
|
||||
type = EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key)
|
||||
@@ -434,6 +457,7 @@ def refresh_api(api_key_pair):
|
||||
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))
|
||||
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)
|
||||
if full == None:
|
||||
api_key_pair.error_count += 1
|
||||
@@ -443,14 +467,17 @@ def refresh_api(api_key_pair):
|
||||
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))
|
||||
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 api_key_pair.error_count >= 3:
|
||||
logger.info("API key %s has incurred 3 or more errors. Assuming invalid." % api_key_pair.api_id)
|
||||
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:
|
||||
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_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:
|
||||
if api_key_pair.error_count != 0:
|
||||
logger.info("Clearing error count for api %s as it passed validation" % api_key_pair.api_id)
|
||||
@@ -473,6 +500,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)
|
||||
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)
|
||||
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
|
||||
@periodic_task(run_every=crontab(minute=0, hour="*/3"))
|
||||
@@ -495,6 +523,7 @@ def run_api_refresh():
|
||||
logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
|
||||
authserviceinfo.main_char_id = ''
|
||||
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)
|
||||
|
||||
def populate_alliance(id, blue=False):
|
||||
|
||||
Reference in New Issue
Block a user