diff --git a/README.md b/README.md index 657e0bce..72e76cd2 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,15 @@ Note2: Most importantly though it works.... Requirments: django 1.6.1 + django-evolution + django-bootstrap-form + python-mysql-connector python-mysqld - django-evolution python-passlib python-evelink python-openfire + bcrypt Services Interaction: diff --git a/allianceauth/settings.py b/allianceauth/settings.py index c5e03771..34830ac0 100644 --- a/allianceauth/settings.py +++ b/allianceauth/settings.py @@ -53,6 +53,7 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', 'django_evolution', + 'bootstrapform', 'authentication', 'portal', 'registration', @@ -154,8 +155,8 @@ ALLIANCE_ID = 0 ALLIANCE_NAME = '' # Jabber Prosody Info -OPENFIRE_ADDRESS = "http://someaddress.com:9090/" -OPENFIRE_SECRET_KEY = "somesecretkey" +OPENFIRE_ADDRESS = "http://something.com:9090/" +OPENFIRE_SECRET_KEY = "somekey" # Mumble settings MUMBLE_SERVER_ID = 1 \ No newline at end of file diff --git a/allianceauth/urls.py b/allianceauth/urls.py index d169ebfc..a730457f 100644 --- a/allianceauth/urls.py +++ b/allianceauth/urls.py @@ -20,8 +20,9 @@ urlpatterns = patterns('', url(r'^logout_user/', 'authentication.views.logout_user', name='auth_logout_user'), # None views - url(r'^main_character_change/(\d+)/$', 'portal.views.main_character_change', name='auth_main_character_change'), + url(r'^main_character_change/(\w+)/$', 'portal.views.main_character_change', name='auth_main_character_change'), url(r'^activate_forum/$', 'portal.views.activate_forum', name='auth_activate_forum'), url(r'^activate_jabber/$', 'portal.views.activate_jabber', name='auth_activate_jabber'), url(r'^activate_mumble/$', 'portal.views.activate_mumble', name='auth_activate_mumble'), + url(r'^delete_api_pair/(\w+)/$', 'portal.views.api_key_removal', name='auth_api_key_removal') ) diff --git a/authentication/models.py b/authentication/models.py index aa03741d..5647f0e3 100644 --- a/authentication/models.py +++ b/authentication/models.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import AbstractBaseUser class AllianceUserManager(BaseUserManager): - def create_user(self, username, email , password=None): + def create_user(self, username, email, password=None): """ Creates and saves a User with the given email, date of birth and password. @@ -22,27 +22,6 @@ class AllianceUserManager(BaseUserManager): user.set_password(password) user.save(using=self._db) return user - - def create_user_withapi(self, username, email, password, api_id, api_key): - """ - Creates and saves a User with the given email, date of - birth and password. - """ - - if not username: - raise ValueError('Users must have a username') - - if not email: - raise ValueError('Users must have an email address') - - user = AllianceUser() - user.set_username(username) - user.set_email(email) - user.set_password(password) - user.api_id = api_id - user.api_key = api_key - user.save(using=self._db) - return user def create_superuser(self, username, email, password): """ @@ -95,8 +74,6 @@ class AllianceUser(AbstractBaseUser): is_admin = models.BooleanField(default=False) is_moderator = models.BooleanField(default=False) is_banned = models.BooleanField(default=False) - api_id = models.CharField(max_length=254) - api_key = models.CharField(max_length=254) main_char_id = models.IntegerField(default=0) # Login information stuff diff --git a/evespecific/managers.py b/evespecific/managers.py index 6688b168..0a0b885f 100644 --- a/evespecific/managers.py +++ b/evespecific/managers.py @@ -1,29 +1,31 @@ from models import EveCharacter +from models import EveApiKeyPair from services.eveapi_manager import EveApiManager -class EveCharacterManager(): +class EveManager(): def __init__(self): pass def create_character(self, character_id, character_name, corporation_id, corporation_name, corporation_ticker, alliance_id, - alliance_name, allianceuser_owner): - - eve_char = EveCharacter(); - eve_char.character_id = character_id - eve_char.character_name = character_name - eve_char.corporation_id = corporation_id - eve_char.corporation_name = corporation_name - eve_char.corporation_ticker = corporation_ticker - eve_char.alliance_id = alliance_id - eve_char.alliance_name = alliance_name - eve_char.allianceuser_owner = allianceuser_owner - - eve_char.save() + alliance_name, user, api_id): - def create_characters_from_list(self, chars, owner): + if not EveCharacter.objects.filter(character_id=character_id).exists(): + eve_char = EveCharacter(); + eve_char.character_id = character_id + eve_char.character_name = character_name + eve_char.corporation_id = corporation_id + eve_char.corporation_name = corporation_name + eve_char.corporation_ticker = corporation_ticker + eve_char.alliance_id = alliance_id + eve_char.alliance_name = alliance_name + eve_char.user = user + eve_char.api_id = api_id + eve_char.save() + + def create_characters_from_list(self, chars, user, api_id): evemanager = EveApiManager() for char in chars.result: @@ -35,13 +37,42 @@ class EveCharacterManager(): evemanager.get_corporation_ticker_from_id(chars.result[char]['corp']['id']), chars.result[char]['alliance']['id'], chars.result[char]['alliance']['name'], - owner) + user, api_id) + + def create_api_keypair(self, api_id, api_key, user_id): + if not EveApiKeyPair.objects.filter(api_id=api_id).exists(): + api_pair = EveApiKeyPair() + api_pair.api_id = api_id + api_pair.api_key = api_key + api_pair.user = user_id + api_pair.save() + + def get_api_key_pairs(self, user_id): + if EveApiKeyPair.objects.filter(user=user_id).exists(): + return EveApiKeyPair.objects.filter(user=user_id) + + def delete_api_key_pair(self, api_id, user_id): + if EveApiKeyPair.objects.filter(api_id=api_id).exists(): + # Check that its owned by our user_id + apikeypair = EveApiKeyPair.objects.get(api_id=api_id) + if apikeypair.user.id == user_id: + apikeypair.delete() + + def delete_characters_by_api_id(self, api_id, user_id): + if EveCharacter.objects.filter(api_id=api_id).exists(): + # Check that its owned by our user_id + characters = EveCharacter.objects.filter(api_id=api_id) + + for char in characters: + if char.user.id == user_id: + char.delete() + def check_if_character_exist(self, char_name): return EveCharacter.objects.filter(character_name=char_name).exists() - def get_characters_by_owner_id(self, owner_id): - return EveCharacter.objects.all().filter(allianceuser_owner=owner_id) + def get_characters_by_owner_id(self, user_id): + return EveCharacter.objects.all().filter(user_id=user_id) def get_character_by_id(self, char_id): if EveCharacter.objects.filter(character_id = char_id).exists(): diff --git a/evespecific/models.py b/evespecific/models.py index d6de1604..7a8c1753 100644 --- a/evespecific/models.py +++ b/evespecific/models.py @@ -11,4 +11,11 @@ class EveCharacter(models.Model): corporation_ticker = models.CharField(max_length=254) alliance_id = models.CharField(max_length=254) alliance_name = models.CharField(max_length=254) - allianceuser_owner = models.ForeignKey(AllianceUser) + api_id = models.CharField(max_length=254) + user = models.ForeignKey(AllianceUser) + + +class EveApiKeyPair(models.Model): + api_id = models.CharField(max_length=254) + api_key = models.CharField(max_length=254) + user = models.ForeignKey(AllianceUser) \ No newline at end of file diff --git a/portal/views.py b/portal/views.py index 3286848f..8c6dbf52 100644 --- a/portal/views.py +++ b/portal/views.py @@ -3,7 +3,8 @@ from django.shortcuts import render_to_response, HttpResponseRedirect from django.template import RequestContext from django.contrib.auth.decorators import login_required -from evespecific.managers import EveCharacterManager +from services.eveapi_manager import EveApiManager +from evespecific.managers import EveManager from authentication.models import AllianceUserManager from services.phpbb3_manager import Phpbb3Manager from services.jabber_manager import JabberManager @@ -23,25 +24,43 @@ def dashboard_view(request): @login_required def characters_view(request): - characterManager = EveCharacterManager() + evemanager = EveManager() - render_items = {'characters':characterManager.get_characters_by_owner_id(request.user.id)} + render_items = {'characters': evemanager.get_characters_by_owner_id(request.user.id)} return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request)) @login_required def api_key_management_view(request): + api = EveApiManager() + evemanager = EveManager() + if request.method == 'POST': form = UpdateKeyForm(request.POST) if form.is_valid(): + evemanager.create_api_keypair(form.cleaned_data['api_id'], + form.cleaned_data['api_key'], + request.user) - return HttpResponseRedirect("/") + # Grab characters associated with the key pair + + characters = api.get_characters_from_api(form.cleaned_data['api_id'], form.cleaned_data['api_key']) + evemanager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id']) + return HttpResponseRedirect("/api_key_management/") else: - form = UpdateKeyForm(initial={'api_id':request.user.api_id,'api_key':request.user.api_key}) + form = UpdateKeyForm() + context = {'form': form, 'apikeypairs': evemanager.get_api_key_pairs(request.user.id)} + return render_to_response('registered/apikeymanagment.html', context, + context_instance=RequestContext(request)) - return render_to_response('registered/apikeymanagment.html', {'form':form}, context_instance=RequestContext(request)) +@login_required +def api_key_removal(request, api_id): + evemanager = EveManager() + evemanager.delete_api_key_pair(api_id, request.user.id) + evemanager.delete_characters_by_api_id(api_id, request.user.id) + return HttpResponseRedirect("/api_key_management/") @login_required def applications_view(request): @@ -51,7 +70,7 @@ def applications_view(request): @login_required def main_character_change(request, id): userManager = AllianceUserManager() - characterManager = EveCharacterManager() + characterManager = EveManager() if characterManager.check_if_character_owned_by_user(id,request.user.id) == True: userManager.update_user_main_character(id,request.user.id) return HttpResponseRedirect("/") @@ -65,7 +84,7 @@ def activate_forum(request): if userManager.check_if_user_exist(request.user.id): # Valid now we get the main characters - characterManager = EveCharacterManager() + characterManager = EveManager() character = characterManager.get_character_by_id(request.user.main_char_id) if forumManager.check_user(character.character_name) == False: @@ -80,7 +99,7 @@ def activate_jabber(request): userManager = AllianceUserManager() jabberManager = JabberManager() if userManager.check_if_user_exist(request.user.id): - characterManager = EveCharacterManager() + characterManager = EveManager() character = characterManager.get_character_by_id(request.user.main_char_id) jabberManager.add_user(character.character_name,"test") @@ -93,11 +112,11 @@ def activate_jabber(request): @login_required def activate_mumble(request): userManager = AllianceUserManager() - characterManager = EveCharacterManager() + characterManager = EveManager() mumbleManager = MumbleManager() if userManager.check_if_user_exist(request.user.id): - characterManager = EveCharacterManager() + characterManager = EveManager() character = characterManager.get_character_by_id(request.user.main_char_id) mumbleManager.create_user(character.character_name, "test") diff --git a/registration/forms.py b/registration/forms.py index b758f699..f2f4cde8 100644 --- a/registration/forms.py +++ b/registration/forms.py @@ -3,6 +3,6 @@ from django import forms class RegistrationForm(forms.Form): username = forms.CharField(max_length=16, required = True) password = forms.CharField(widget=forms.PasswordInput()) - email = forms.CharField(max_length=254, required = True) - api_id = forms.CharField(max_length=254, required = True) + email = forms.CharField(max_length=254, required = True) + api_id = forms.CharField(max_length=254, required = True) api_key = forms.CharField(max_length=254, required = True) \ No newline at end of file diff --git a/registration/views.py b/registration/views.py index eb3bfc95..c6a06ca8 100644 --- a/registration/views.py +++ b/registration/views.py @@ -2,7 +2,7 @@ from django.http import Http404,HttpResponseRedirect from django.shortcuts import render_to_response, render from django.template import RequestContext from authentication.models import AllianceUserManager -from evespecific.managers import EveCharacterManager +from evespecific.managers import EveManager from services.eveapi_manager import EveApiManager from forms import RegistrationForm @@ -10,7 +10,7 @@ from forms import RegistrationForm def register(request): api = EveApiManager() - charmanager = EveCharacterManager() + evemanager = EveManager() if request.method == 'POST': form = RegistrationForm(request.POST) @@ -18,18 +18,18 @@ def register(request): if form.is_valid(): usermanager = AllianceUserManager() if not usermanager.check_if_user_exist_by_name(form.cleaned_data['username']): - user = usermanager.create_user_withapi( + user = usermanager.create_user( form.cleaned_data['username'], form.cleaned_data['email'], - form.cleaned_data['password'], - form.cleaned_data['api_id'], - form.cleaned_data['api_key'] + form.cleaned_data['password'] ) - # Populate character data + # Create api key object + evemanager.create_api_keypair(form.cleaned_data['api_id'], form.cleaned_data['api_key'], user) + # Populate character data characters = api.get_characters_from_api(form.cleaned_data['api_id'], form.cleaned_data['api_key']) - charmanager.create_characters_from_list(characters, user) + evemanager.create_characters_from_list(characters, user, form.cleaned_data['api_id']) return HttpResponseRedirect("/dashboard") else: diff --git a/services/eveapi_manager.py b/services/eveapi_manager.py index 9d4f95df..7964f108 100644 --- a/services/eveapi_manager.py +++ b/services/eveapi_manager.py @@ -24,11 +24,9 @@ class EveApiManager(): def get_corporation_ticker_from_id(self, corp_id): ticker = "" try: - print corp_id api = evelink.api.API() corp = evelink.corp.Corp(api) response = corp.corporation_sheet(corp_id) - print response ticker = response[0]['ticker'] except evelink.api.APIError as error: print error diff --git a/templates/public/base.html b/templates/public/base.html index 89d47861..41da2c71 100644 --- a/templates/public/base.html +++ b/templates/public/base.html @@ -48,8 +48,8 @@
- - {% if user.is_authenticated %} + + {% if user.is_authenticated %} - {% endif %} - - {% block content %} - {% endblock content %} -
+ {% endif %} + + {% block content %} + {% endblock content %} +