Merge pull request #6 from R4stl1n/master

update
This commit is contained in:
Mr McClain 2016-02-07 23:12:35 -06:00
commit 4be32d16f2
6 changed files with 135 additions and 93 deletions

View File

@ -213,9 +213,13 @@ FORUM_URL = os.environ.get('AA_FORUM_URL', '')
######################### #########################
# DEFAULT_AUTH_GROUP - Default group members are put in # DEFAULT_AUTH_GROUP - Default group members are put in
# DEFAULT_BLUE_GROUP - Default group for blue members # DEFAULT_BLUE_GROUP - Default group for blue members
# MEMBER_CORP_GROUPS - Assign members to a group representing their main corp
# BLUE_CORP_GROUPS - Assign blues to a group representing their main corp
######################### #########################
DEFAULT_AUTH_GROUP = os.environ.get('AA_DEFAULT_ALLIANCE_GROUP', 'Member') DEFAULT_AUTH_GROUP = os.environ.get('AA_DEFAULT_ALLIANCE_GROUP', 'Member')
DEFAULT_BLUE_GROUP = os.environ.get('AA_DEFAULT_BLUE_GROUP', 'Blue') DEFAULT_BLUE_GROUP = os.environ.get('AA_DEFAULT_BLUE_GROUP', 'Blue')
MEMBER_CORP_GROUPS = 'True' == os.environ.get('AA_MEMBER_CORP_GROUPS', 'True')
BLUE_CORP_GROUPS = 'True' == os.environ.get('AA_BLUE_CORP_GROUPS', 'False')
######################### #########################
# Alliance Service Setup # Alliance Service Setup

View File

@ -37,6 +37,7 @@ urlpatterns = patterns('',
url(r'^add_api_key/', 'eveonline.views.add_api_key', name='auth_add_api_key'), url(r'^add_api_key/', 'eveonline.views.add_api_key', name='auth_add_api_key'),
url(r'^api_key_management/', 'eveonline.views.api_key_management_view', url(r'^api_key_management/', 'eveonline.views.api_key_management_view',
name='auth_api_key_management'), name='auth_api_key_management'),
url(r'^refresh_api_pair/([0-9]+)/$', 'eveonline.views.user_refresh_api', name='auth_user_refresh_api'),
url(r'^delete_api_pair/(\w+)/$', 'eveonline.views.api_key_removal', name='auth_api_key_removal'), url(r'^delete_api_pair/(\w+)/$', 'eveonline.views.api_key_removal', name='auth_api_key_removal'),
url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'), url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'),
url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change', url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change',

4
cache/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*
!README.md
!.gitignore

View File

@ -245,6 +245,31 @@ def remove_from_databases(user, groups, syncgroups):
logger.debug("User %s has discord uid %s - updating groups." % (user, 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)
def assign_corp_group(auth):
corp_group = None
if auth.main_char_id:
if EveCharacter.objects.filter(character_id=auth.main_char_id).exists():
char = EveCharacter.objects.get(character_id=auth.main_char_id)
corpname = generate_corp_group_name(char.corporation_name)
state = determine_membership_by_character(char)
if state == "BLUE" and settings.BLUE_CORP_GROUPS:
logger.debug("Validating blue user %s has corp group assigned." % auth.user)
corp_group, c = Group.objects.get_or_create(name=corpname)
elif state == "MEMBER" and settings.MEMBER_CORP_GROUPS:
logger.debug("Validating member %s has corp group assigned." % auth.user)
corp_group, c = Group.objects.get_or_create(name=corpname)
else:
logger.debug("Ensuring non-member %s has no corp groups assigned." % auth.user)
if corp_group:
if not corp_group in auth.user.groups.all():
logger.info("Adding user %s to corp group %s" % (auth.user, corp_group))
auth.user.groups.add(corp_group)
for g in auth.user.groups.all():
if str.startswith(str(g.name), "Corp_"):
if g != corp_group:
logger.info("Removing user %s from old corpgroup %s" % (auth.user, g))
auth.user.groups.remove(g)
def make_member(user): def make_member(user):
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
@ -268,19 +293,7 @@ def make_member(user):
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()
if auth.main_char_id: assign_corp_group(auth)
if EveCharacter.objects.filter(character_id=auth.main_char_id).exists():
char = EveCharacter.objects.get(character_id=auth.main_char_id)
corpname = generate_corp_group_name(char.corporation_name)
corp_group, c = Group.objects.get_or_create(name=corpname)
if not corp_group in user.groups.all():
logger.info("Adding user %s to corp group %s" % (user, corp_group))
user.groups.add(corp_group)
for g in user.groups.all():
if str.startswith(str(g.name), "Corp_"):
if g != corp_group:
logger.info("Removing user %s from old corpgroup %s" % (user, g))
user.groups.remove(g)
def make_blue(user): def make_blue(user):
logger.debug("Ensuring user %s has blue permissions and groups." % user) logger.debug("Ensuring user %s has blue permissions and groups." % user)
@ -305,10 +318,7 @@ def make_blue(user):
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()
for g in user.groups.all(): assign_corp_group(auth)
if str.startswith(str(g.name), 'Corp_'):
logger.info("Removing blue user %s from corp group %s" % (user, g))
user.groups.remove(g)
def determine_membership_by_character(char): def determine_membership_by_character(char):
if settings.IS_CORP: if settings.IS_CORP:
@ -384,22 +394,9 @@ def run_discord_token_cleanup():
logger.debug("DiscordAuthToken failed validation. Deleting %s" % auth) logger.debug("DiscordAuthToken failed validation. Deleting %s" % auth)
auth.delete() auth.delete()
# Run every 3 hours def refresh_api(api_key_pair):
@periodic_task(run_every=crontab(minute=0, hour="*/3"))
def run_api_refresh():
users = User.objects.all()
logger.debug("Running api refresh on %s users." % len(users))
for user in users:
# Check if the api server is online
logger.debug("Running api refresh for user %s" % user)
if EveApiManager.check_if_api_server_online():
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:
authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
logger.debug("User %s has api keys. Proceeding to refresh." % user)
for api_key_pair in api_key_pairs:
logger.debug("Running update on api key %s" % api_key_pair.api_id) logger.debug("Running update on api key %s" % api_key_pair.api_id)
user = api_key_pair.user
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) logger.info("Determined api key %s is still active." % api_key_pair.api_id)
@ -475,6 +472,23 @@ def run_api_refresh():
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)
# Run every 3 hours
@periodic_task(run_every=crontab(minute=0, hour="*/3"))
def run_api_refresh():
users = User.objects.all()
logger.debug("Running api refresh on %s users." % len(users))
for user in users:
# Check if the api server is online
logger.debug("Running api refresh for user %s" % user)
if EveApiManager.check_if_api_server_online():
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:
authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
logger.debug("User %s has api keys. Proceeding to refresh." % user)
for api_key_pair in api_key_pairs:
refresh_api(api_key_pair)
# Check our main character # Check our main character
if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False: if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
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))

View File

@ -22,6 +22,7 @@ from eveonline.models import EveApiKeyPair
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
from celerytask.tasks import determine_membership_by_user from celerytask.tasks import determine_membership_by_user
from celerytask.tasks import set_state from celerytask.tasks import set_state
from celerytask.tasks import refresh_api
import logging import logging
@ -160,3 +161,17 @@ def corp_stats_view(request):
else: 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)) 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))
@login_required
def user_refresh_api(request, api_id):
logger.debug("user_refresh_api called by user %s for api id %s" % (request.user, api_id))
if EveApiKeyPair.objects.filter(api_id=api_id).exists():
api_key_pair = EveApiKeyPair.objects.get(api_id=api_id)
if api_key_pair.user == request.user:
refresh_api(api_key_pair)
set_state(request.user)
else:
logger.warn("User %s not authorized to refresh api id %s" % (request.user, api_id))
else:
logger.warn("User %s unable to refresh api id %s - api key not found" % (request.user, api_id))
return HttpResponseRedirect("/api_key_management/")

View File

@ -32,6 +32,10 @@
<td class="text-center">{{ pair.api_id }}</td> <td class="text-center">{{ pair.api_id }}</td>
<td class="text-center">{{ pair.api_key }}</td> <td class="text-center">{{ pair.api_key }}</td>
<td class="text-center"> <td class="text-center">
<a href="/refresh_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-refresh"></span></button>
</a>
<a href="/delete_api_pair/{{ pair.api_id }}"> <a href="/delete_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-danger"><span <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button> class="glyphicon glyphicon-remove"></span></button>