Merge remote-tracking branch 'upstream/master'

merging from upstream
This commit is contained in:
trent bartlem 2014-11-05 21:24:53 +10:00
commit 64bcd60d97
19 changed files with 392 additions and 84 deletions

4
.idea/dataSources.xml generated
View File

@ -21,8 +21,8 @@
<driver-ref>mysql</driver-ref>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://127.0.0.1:3306/alliance_mumble</jdbc-url>
<user-name>allianceauth</user-name>
<user-password>dfcbdfc6dfc6dfc3dfcbdfc4dfc9dfcfdfcbdfdfdfdedfc2</user-password>
<user-name>alliancemumble</user-name>
<user-password>dfcbdfc6dfc6dfc3dfcbdfc4dfc9dfcfdfc7dfdfdfc7dfc8dfc6dfcf</user-password>
<libraries />
</data-source>
</component>

View File

@ -3,7 +3,7 @@ allianceauth
Alliance service auth to help large scale alliances manage services.
Built for "The 99 Percent" open for anyone to use
Requirments:
Requirements:
# Django Stuff #
django 1.6.1
@ -21,7 +21,7 @@ Requirments:
python-dnspython
# Needed Apps
rabbitmq
celeryd
bcrypt
Services Interaction:
@ -34,24 +34,18 @@ Services Interaction:
Startup Instructions:
python syncdb
python manage.py celeryd --verbosity=2 --loglevel=DEBUG
python manage.py celerybeat --verbosity=2 --loglevel=DEBUG
python manage.py runserver
./bootstrap.sh (Sudo if needed)
./startup.sh
./shutdown.sh
Special Permissions In Admin:
auth | user | alliance_member ( Added auto by auth when a member is verified )
auth | user | group_management ( Access to add members to groups within the alliance )
auth | user | human_resources ( Corp only access to view applications )
auth | user | jabber_broadcast ( Access to broadcast a message over jabber to specific groups or all)
Note:
In order to create permissions automatically you there is a "bootstrap_permissions" function in the
__init__.py of the groupmanagement folder. Comment out before running syncdb, after add it back.
This is there because i currently have no idea how to do this any other way.
auth | user | blue_memeber ( Auto Added to people who register has a blue when adding api key)
Eve alliance auth for the 99 percent
Brought to you by The 99 Percent skunkworks.

View File

@ -13,11 +13,9 @@ import os
import djcelery
djcelery.setup_loader()
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/
@ -103,8 +101,8 @@ DATABASES = {
'mumble': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'alliance_mumble',
'USER': 'allianceauth',
'PASSWORD': 'allianceauth',
'USER': 'alliancemumble',
'PASSWORD': 'alliancemumble',
'HOST': '127.0.0.1',
'PORT': '3306',
}
@ -148,22 +146,26 @@ USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/
STATIC_URL = '/static/'
DEFAULT_ALLIANCE_GROUP = 'AllianceMember'
DEFAULT_BLUE_GROUP = 'BlueMember'
# ALLIANCE INFO
ALLIANCE_ID = '99001336'
ALLIANCE_NAME = 'Somealliance'
# Needed to update standings
ALLIANCE_EXEC_CORP_ID = ''
ALLIANCE_EXEC_CORP_VCODE = ''
ALLIANCE_BLUE_STANDING = 5.0
# Forum URL
FORUM_URL = "http://someaddress.com"
# Jabber Prosody Info
# Jabber information
JABBER_URL = "someaddress.com"
JABBER_PORT = 5223
JABBER_SERVER = "someadddress.com"

View File

@ -92,8 +92,12 @@ urlpatterns = patterns('',
name='auth_reset_jabber_password'),
# Mumble service contraol
url(r'^activate_blue_mumble/$', 'services.views.activate_blue_mumble',
name='auth_activate_blue_mumble'),
url(r'^activate_mumble/$', 'services.views.activate_mumble', name='auth_activate_mumble'),
url(r'^deactivate_mumble/$', 'services.views.deactivate_mumble', name='auth_deactivate_mumble'),
url(r'^deactivate_blue_mumble/$', 'services.views.deactivate_blue_mumble',
name='auth_deactivate_blue_mumble'),
url(r'^reset_mumble_password/$', 'services.views.reset_mumble_password',
name='auth_reset_mumble_password'),

View File

@ -56,3 +56,11 @@ class AuthServicesInfoManager:
authserviceinfo.mumble_username = username
authserviceinfo.mumble_password = password
authserviceinfo.save(update_fields=['mumble_username', 'mumble_password'])
@staticmethod
def update_is_blue(is_blue, user):
if User.objects.filter(username=user.username).exists():
authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.is_blue = is_blue
authserviceinfo.save(update_fields=['is_blue'])

View File

@ -10,7 +10,7 @@ class AuthServicesInfo(models.Model):
mumble_username = models.CharField(max_length=254, default="")
mumble_password = models.CharField(max_length=254, default="")
main_char_id = models.CharField(max_length=64, default="")
is_blue = models.BooleanField(default=False)
user = models.ForeignKey(User)
def __str__(self):

View File

@ -66,9 +66,6 @@ def add_to_databases(user, groups, syncgroups):
for group in groups:
syncgroup = syncgroups.filter(groupname=group.name)
if not syncgroup:
# gotta create group
# create syncgroup
# create service groups
synccache = SyncGroupCache()
synccache.groupname = group.name
synccache.user = user
@ -155,7 +152,8 @@ def run_api_refresh():
if main_alliance_id == settings.ALLIANCE_ID:
pass
else:
deactivate_services(user)
if not authserviceinfo.is_blue:
deactivate_services(user)
else:
# nuke it
deactivate_services(user)
@ -166,17 +164,16 @@ def run_api_refresh():
# Run Every 2 hours
@periodic_task(run_every=crontab(minute=0, hour="*/2"))
def run_alliance_corp_update():
# I am not proud of this block of code
if EveApiManager.check_if_api_server_online():
# Updated alliance info
alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)
# Populate alliance info
if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'],
alliance_info['executor_id'], alliance_info['member_count'])
EveManager.update_alliance_info(settings.ALLIANCE_ID, alliance_info['executor_id'],
alliance_info['member_count'])
alliance_info['executor_id'], alliance_info['member_count'], False)
alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)
@ -185,13 +182,101 @@ def run_alliance_corp_update():
corpinfo = EveApiManager.get_corporation_information(alliance_corp)
if not EveManager.check_if_corporation_exists_by_id(corpinfo['id']):
EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
corpinfo['members']['current'], alliance)
corpinfo['members']['current'], False, alliance)
# Update all the corps
for all_corp_info in EveManager.get_all_corporation_info():
corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
if corpinfo['alliance']['id'] == int(settings.ALLIANCE_ID):
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance)
# Create the corps in the standings
alliance_standings = EveApiManager.get_alliance_standings()
if alliance_standings:
for standing_id in EveApiManager.get_alliance_standings()['alliance']:
if int(alliance_standings['alliance'][standing_id]['standing']) >= settings.ALLIANCE_BLUE_STANDING:
if EveApiManager.check_if_id_is_character(standing_id):
pass
elif EveApiManager.check_if_id_is_corp(standing_id):
corpinfo = EveApiManager.get_corporation_information(standing_id)
if not EveManager.check_if_corporation_exists_by_id(standing_id):
EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
corpinfo['members']['current'], True, None)
else:
# Alliance id create corps
blue_alliance_info = EveApiManager.get_alliance_information(standing_id)
if not EveManager.check_if_alliance_exists_by_id(standing_id):
EveManager.create_alliance_info(standing_id, blue_alliance_info['name'],
blue_alliance_info['ticker'],
blue_alliance_info['executor_id'],
blue_alliance_info['member_count'], True)
blue_alliance = EveManager.get_alliance_info_by_id(standing_id)
for blue_alliance_corp in blue_alliance_info['member_corps']:
blue_info = EveApiManager.get_corporation_information(blue_alliance_corp)
if not EveManager.check_if_corporation_exists_by_id(blue_info['id']):
EveManager.create_corporation_info(blue_info['id'], blue_info['name'],
blue_info['ticker'],
blue_info['members']['current'], True, blue_alliance)
# Update all allinace info's
for all_alliance_info in EveManager.get_all_alliance_info():
all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id)
if all_alliance_info.alliance_id == settings.ALLIANCE_ID:
EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False)
else:
# No longer in the alliance nuke it
all_corp_info.delete()
if int(alliance_standings['alliance'][int(all_alliance_info.alliance_id)][
'standing']) >= settings.ALLIANCE_BLUE_STANDING:
EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], True)
else:
EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
all_alliance_api_info['member_count'], False)
# Update corp infos
for all_corp_info in EveManager.get_all_corporation_info():
alliance = None
corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
if corpinfo['alliance']['id'] is not None:
alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id'])
if alliance is not None:
if all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False)
else:
if int(alliance.alliance_id) in alliance_standings['alliance']:
if int(alliance_standings['alliance'][int(alliance.alliance_id)][
'standing']) >= settings.ALLIANCE_BLUE_STANDING:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
True)
else:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
False)
else:
EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
False)
else:
if int(all_corp_info.corporation_id) in alliance_standings['alliance']:
if int(alliance_standings['alliance'][int(all_corp_info.corporation_id)][
'standing']) >= settings.ALLIANCE_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)
# Nuke the none believers
# Check the corps
for all_corp_info in EveManager.get_all_corporation_info():
if all_corp_info.alliance is not None:
if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
if not all_corp_info.is_blue:
all_corp_info.delete()
else:
if not all_corp_info.is_blue:
all_corp_info.delete()
# Check the alliances
for all_alliance_info in EveManager.get_all_alliance_info():
if all_alliance_info.alliance_id != settings.ALLIANCE_ID:
if not all_alliance_info.is_blue:
all_alliance_info.delete()

View File

@ -7,17 +7,25 @@ from eveonline.managers import EveManager
class UpdateKeyForm(forms.Form):
api_id = forms.CharField(max_length=254, required=True, label="Key ID")
api_key = forms.CharField(max_length=254, required=True, label="Verification Code")
is_blue = forms.BooleanField(label="Blue to alliance", required=False)
def clean(self):
if EveManager.check_if_api_key_pair_exist(self.cleaned_data['api_id']):
raise forms.ValidationError(u'API key already exist')
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
self.cleaned_data['api_key']):
raise forms.ValidationError(u'API not of type account')
check_blue = False
try:
check_blue = self.cleaned_data['is_blue']
except:
pass
if not EveApiManager.check_api_is_full(self.cleaned_data['api_id'],
self.cleaned_data['api_key']):
raise forms.ValidationError(u'API supplied is not a full api key')
if not check_blue:
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
self.cleaned_data['api_key']):
raise forms.ValidationError(u'API not of type account')
if not EveApiManager.check_api_is_full(self.cleaned_data['api_id'],
self.cleaned_data['api_key']):
raise forms.ValidationError(u'API supplied is not a full api key')
return self.cleaned_data

View File

@ -68,7 +68,7 @@ class EveManager:
@staticmethod
def create_alliance_info(alliance_id, alliance_name, alliance_ticker, alliance_executor_corp_id,
alliance_member_count):
alliance_member_count, is_blue):
if not EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo()
alliance_info.alliance_id = alliance_id
@ -76,33 +76,38 @@ class EveManager:
alliance_info.alliance_ticker = alliance_ticker
alliance_info.executor_corp_id = alliance_executor_corp_id
alliance_info.member_count = alliance_member_count
alliance_info.is_blue = is_blue
alliance_info.save()
@staticmethod
def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count):
def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count, is_blue):
if EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo.objects.get(alliance_id=alliance_id)
alliance_info.executor_corp_id = alliance_executor_corp_id
alliance_info.member_count = alliance_member_count
alliance_info.is_blue = is_blue
alliance_info.save()
@staticmethod
def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, alliance):
def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, is_blue, alliance):
if not EveManager.check_if_corporation_exists_by_id(corp_id):
corp_info = EveCorporationInfo()
corp_info.corporation_id = corp_id
corp_info.corporation_name = corp_name
corp_info.corporation_ticker = corp_ticker
corp_info.member_count = corp_member_count
corp_info.alliance = alliance
corp_info.is_blue = is_blue
if alliance:
corp_info.alliance = alliance
corp_info.save()
@staticmethod
def update_corporation_info(corp_id, corp_member_count, alliance):
def update_corporation_info(corp_id, corp_member_count, alliance, is_blue):
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.alliance = alliance
corp_info.is_blue = is_blue
corp_info.save()
@staticmethod
@ -194,7 +199,10 @@ class EveManager:
else:
return None
@staticmethod
def get_all_corporation_info():
return EveCorporationInfo.objects.all()
return EveCorporationInfo.objects.all()
@staticmethod
def get_all_alliance_info():
return EveAllianceInfo.objects.all()

View File

@ -31,6 +31,7 @@ class EveAllianceInfo(models.Model):
alliance_name = models.CharField(max_length=254)
alliance_ticker = models.CharField(max_length=254)
executor_corp_id = models.CharField(max_length=254)
is_blue = models.BooleanField(default=False)
member_count = models.IntegerField()
def __str__(self):
@ -42,8 +43,8 @@ class EveCorporationInfo(models.Model):
corporation_name = models.CharField(max_length=254)
corporation_ticker = models.CharField(max_length=254)
member_count = models.IntegerField()
alliance = models.ForeignKey(EveAllianceInfo)
is_blue = models.BooleanField(default=False)
alliance = models.ForeignKey(EveAllianceInfo, blank=True, null=True)
def __str__(self):
return self.corporation_name

View File

@ -17,6 +17,21 @@ from util.common_task import deactivate_services
from util.common_task import generate_corp_group_name
def disable_alliance_member(user, char_id):
remove_member_permission(user, 'alliance_member')
remove_user_from_group(user, settings.DEFAULT_ALLIANCE_GROUP)
remove_user_from_group(user,
generate_corp_group_name(
EveManager.get_character_by_id(char_id).corporation_name))
deactivate_services(user)
def disable_blue_member(user):
remove_member_permission(user, 'blue_member')
remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
deactivate_services(user)
@login_required
def add_api_key(request):
if request.method == 'POST':
@ -57,7 +72,10 @@ def api_key_removal(request, api_id):
if character.character_id == authinfo.main_char_id:
if character.api_id == api_id:
# TODO: Remove servies also
AuthServicesInfoManager.update_main_char_Id("", request.user)
if authinfo.is_blue:
disable_blue_member(request.user)
else:
disable_alliance_member(request.user, authinfo.main_char_id)
EveManager.delete_api_key_pair(api_id, request.user.id)
EveManager.delete_characters_by_api_id(api_id, request.user.id)
@ -78,20 +96,26 @@ def main_character_change(request, char_id):
previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id
AuthServicesInfoManager.update_main_char_Id(char_id, request.user)
# Check if character is in the alliance
character_info = EveManager.get_character_by_id(char_id)
corporation_info = EveManager.get_corporation_info_by_id(character_info.corporation_id)
if EveManager.get_charater_alliance_id_by_id(char_id) == settings.ALLIANCE_ID:
add_member_permission(request.user, 'alliance_member')
add_user_to_group(request.user, settings.DEFAULT_ALLIANCE_GROUP)
add_user_to_group(request.user,
generate_corp_group_name(EveManager.get_character_by_id(char_id).corporation_name))
elif corporation_info.is_blue:
add_member_permission(request.user, 'blue_member')
add_user_to_group(request.user, settings.DEFAULT_BLUE_GROUP)
else:
# TODO: disable serivces
if check_if_user_has_permission(request.user, 'alliance_member'):
remove_member_permission(request.user, 'alliance_member')
remove_user_from_group(request.user, settings.DEFAULT_ALLIANCE_GROUP)
remove_user_from_group(request.user,
generate_corp_group_name(
EveManager.get_character_by_id(previousmainid).corporation_name))
deactivate_services(request.user)
disable_alliance_member(request.user, previousmainid)
if check_if_user_has_permission(request.user, 'blue_member'):
disable_blue_member(request.user)
return HttpResponseRedirect("/characters")
return HttpResponseRedirect("/characters")

View File

@ -1,3 +0,0 @@
from util import bootstrap_permissions
bootstrap_permissions()

View File

@ -1,4 +1,5 @@
from django import forms
from django.conf import settings
from eveonline.models import EveCorporationInfo
@ -6,7 +7,9 @@ from eveonline.models import EveCorporationInfo
class HRApplicationForm(forms.Form):
allchoices = []
for corp in EveCorporationInfo.objects.all():
allchoices.append((str(corp.corporation_id), str(corp.corporation_name)))
if corp.alliance is not None:
if corp.alliance.alliance_id == settings.ALLIANCE_ID:
allchoices.append((str(corp.corporation_id), str(corp.corporation_name)))
character_name = forms.CharField(max_length=254, required=True, label="Main Character Name")
full_api_id = forms.CharField(max_length=254, required=True, label="API ID")

View File

@ -2,6 +2,8 @@ import evelink.api
import evelink.char
import evelink.eve
from django.conf import settings
class EveApiManager():
def __init__(self):
@ -105,7 +107,7 @@ class EveApiManager():
try:
api = evelink.api.API(api_key=(api_id, api_key))
account = evelink.account.Account(api=api)
info = account.status()
info = account.key_info()
return True
except evelink.api.APIError as error:
return False
@ -122,4 +124,58 @@ class EveApiManager():
except evelink.api.APIError as error:
return False
return False
@staticmethod
def check_if_id_is_corp(corp_id):
try:
api = evelink.api.API()
corp = evelink.corp.Corp(api=api)
corpinfo = corp.corporation_sheet(corp_id=int(corp_id))
results = corpinfo[0]
return True
except evelink.api.APIError as error:
return False
return False
@staticmethod
def get_alliance_standings():
if settings.ALLIANCE_EXEC_CORP_ID != "":
try:
api = evelink.api.API(api_key=(settings.ALLIANCE_EXEC_CORP_ID, settings.ALLIANCE_EXEC_CORP_VCODE))
corp = evelink.corp.Corp(api=api)
corpinfo = corp.contacts()
results = corpinfo[0]
return results
except evelink.api.APIError as error:
pass
return {}
@staticmethod
def check_if_id_is_alliance(alliance_id):
try:
api = evelink.api.API()
eve = evelink.eve.EVE(api=api)
alliance = eve.alliances()
results = alliance[0][int(alliance_id)]
if results:
return True
except evelink.api.APIError as error:
return False
return False
@staticmethod
def check_if_id_is_character(character_id):
try:
api = evelink.api.API()
eve = evelink.eve.EVE(api=api)
results = eve.character_info_from_id(character_id)
if results:
return True
except evelink.api.APIError as error:
return False
return False

View File

@ -56,6 +56,10 @@ class MumbleManager:
def __generate_username(username, corp_ticker):
return "[" + corp_ticker + "]" + username
@staticmethod
def __generate_username_blue(username, corp_ticker):
return "[BLUE][" + corp_ticker + "]" + username
@staticmethod
def _gen_pwhash(password):
return hashlib.sha1(password).hexdigest()
@ -133,6 +137,26 @@ class MumbleManager:
return "", ""
@staticmethod
def create_blue_user(corp_ticker, username):
dbcursor = connections['mumble'].cursor()
username_clean = MumbleManager.__generate_username_blue(MumbleManager.__santatize_username(username),
corp_ticker)
password = MumbleManager.__generate_random_pass()
pwhash = MumbleManager._gen_pwhash(password)
try:
dbcursor.execute(MumbleManager.SQL_SELECT_USER_MAX_ID)
user_id = dbcursor.fetchone()[0]
dbcursor.execute(MumbleManager.SQL_CREATE_USER,
[settings.MUMBLE_SERVER_ID, user_id, username_clean, pwhash])
return username_clean, password
except:
return "", ""
@staticmethod
def check_user_exist(username):
dbcursor = connections['mumble'].cursor()

View File

@ -157,6 +157,20 @@ def activate_mumble(request):
return HttpResponseRedirect("/dashboard")
@login_required
@permission_required('auth.blue_member')
def activate_blue_mumble(request):
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
character = EveManager.get_character_by_id(authinfo.main_char_id)
result = MumbleManager.create_blue_user(character.corporation_ticker, character.character_name)
# if its empty we failed
if result[0] is not "":
AuthServicesInfoManager.update_user_mumble_info(result[0], result[1], request.user)
update_mumble_groups(request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/dashboard")
@login_required
@permission_required('auth.alliance_member')
def deactivate_mumble(request):
@ -169,6 +183,18 @@ def deactivate_mumble(request):
return HttpResponseRedirect("/")
@login_required
@permission_required('auth.blue_member')
def deactivate_blue_mumble(request):
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = MumbleManager.delete_user(authinfo.mumble_username)
# if false we failed
if result:
AuthServicesInfoManager.update_user_mumble_info("", "", request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/")
@login_required
@permission_required('auth.alliance_member')
def reset_mumble_password(request):
@ -178,4 +204,16 @@ def reset_mumble_password(request):
if result != "":
AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/")
return HttpResponseRedirect("/")
@login_required
@permission_required('auth.blue_member')
def reset_mumble_password(request):
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = MumbleManager.update_user_password(authinfo.mumble_username)
# if blank we failed
if result != "":
AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/")

View File

@ -17,10 +17,28 @@
<p class="text-center">
Full API Key is required for auth services
</p>
<a target="_blank"
href="https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=268435455">Create
a full API key</a>
<p class="text-center">
<a target="_blank"
href="https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=268435455">Create
a full API key</a>
</p>
<p class="text-center">
NOTE: If you are part of the alliance do not check "Blue" this is for people who are blue to the
alliance
but are not in it. Blue access is limited.
</p>
<p class="text-center"><b>Do not change the accessmask or deselect options or it will not work </b>
</p>
<p class="text-center">
<a target="_blank"
href="https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=8388608">Create
a blue key</a>
</p>
<form class="form-signin" role="form" action="{% url 'auth_add_api_key' %}" method="POST">
{% csrf_token %}
{{ form|bootstrap }}

View File

@ -9,7 +9,40 @@
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">Available Services</h1>
{% if perms.auth.alliance_member %}
{% if perms.auth.blue_member %}
<table class="table table-bordered">
<tr>
<th class="text-center">Service</th>
<th class="text-center">Username</th>
<th class="text-center">Password</th>
<th class="text-center">Domain</th>
<th class="text-center">Action</th>
</tr>
<tr>
<td class="text-center">Mumble</td>
<td class="text-center">{{ authinfo.mumble_username }}</td>
<td class="text-center">{{ authinfo.mumble_password }}</td>
<td class="text-center">{{ MUMBLE_URL }}</td>
<td class="text-center">
{% ifequal authinfo.mumble_username "" %}
<a href="{% url 'auth_activate_blue_mumble' %}">
<button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-ok"></span></button>
</a>
{% else %}
<a href="{% url 'auth_reset_mumble_password' %}">
<button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button>
</a>
<a href="{% url 'auth_deactivate_blue_mumble' %}">
<button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a>
{% endifequal %}
</td>
</tr>
</table>
{% elif perms.auth.alliance_member %}
<table class="table table-bordered">
<tr>
<th class="text-center">Service</th>

View File

@ -1,35 +1,40 @@
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission
from django.conf import settings
def bootstrap_permissions():
ct = ContentType.objects.get_for_model(User)
Permission.objects.get_or_create(codename="alliance_member", content_type=ct, name="alliance_member")
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="human_resources", content_type=ct, name="human_resources")
Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member")
Group.objects.get_or_create(name=settings.DEFAULT_ALLIANCE_GROUP)
Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP)
def add_member_permission(user, permission):
ct = ContentType.objects.get_for_model(User)
stored_permission, created = Permission.objects.get_or_create(codename=permission,
content_type=ct, name=permission)
if User.objects.filter(username=user.username).exists():
user = User.objects.get(username=user.username)
user.user_permissions.add(stored_permission)
user.save()
user = User.objects.get(username=user.username)
user.user_permissions.add(stored_permission)
user.save()
def remove_member_permission(user, permission):
ct = ContentType.objects.get_for_model(User)
stored_permission, created = Permission.objects.get_or_create(codename=permission,
content_type=ct, name=permission)
if User.objects.filter(username=user.username).exists():
user = User.objects.get(username=user.username)
if user.has_perm(permission):
user.user_permissions.remove(stored_permission)
user.save()
user = User.objects.get(username=user.username)
if user.has_perm('auth.' + permission):
user.user_permissions.remove(stored_permission)
user.save()
def check_if_user_has_permission(user, permission):