diff --git a/allianceauth/settings.py b/allianceauth/settings.py index 34830ac0..1579a8bf 100644 --- a/allianceauth/settings.py +++ b/allianceauth/settings.py @@ -151,12 +151,12 @@ STATICFILES_DIRS = ( STATIC_URL = '/static/' # ALLIANCE INFO -ALLIANCE_ID = 0 -ALLIANCE_NAME = '' +ALLIANCE_ID = 'someid' +ALLIANCE_NAME = 'somealliancename' # Jabber Prosody Info -OPENFIRE_ADDRESS = "http://something.com:9090/" -OPENFIRE_SECRET_KEY = "somekey" +OPENFIRE_ADDRESS = "http://someaddres.com:9090/" +OPENFIRE_SECRET_KEY = "somesecretkey" # Mumble settings MUMBLE_SERVER_ID = 1 \ No newline at end of file diff --git a/authentication/models.py b/authentication/models.py index 5647f0e3..8ef1af9a 100644 --- a/authentication/models.py +++ b/authentication/models.py @@ -1,6 +1,10 @@ from django.db import models +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import Group +from django.contrib.auth.models import Permission from django.contrib.auth.models import BaseUserManager from django.contrib.auth.models import AbstractBaseUser +from django.contrib.auth.models import PermissionsMixin class AllianceUserManager(BaseUserManager): @@ -66,15 +70,34 @@ class AllianceUserManager(BaseUserManager): user.mumble_password = password user.save(update_fields=['mumble_username', 'mumble_password']) + def add_alliance_member_permission(self, user_id): + ct = ContentType.objects.get_for_model(AllianceUser) + permission, created = Permission.objects.get_or_create(codename='alliance_member', + content_type=ct, name='Alliance Member') -class AllianceUser(AbstractBaseUser): + if AllianceUser.objects.filter(id=user_id).exists(): + user = AllianceUser.objects.get(id=user_id) + user.user_permissions.add(permission) + user.save() + + def remove_alliance_member_permission(self, user_id): + ct = ContentType.objects.get_for_model(AllianceUser) + permission, created = Permission.objects.get_or_create(codename='alliance_member', + content_type=ct, name='Alliance Member') + if AllianceUser.objects.filter(id=user_id).exists(): + user = AllianceUser.objects.get(id=user_id) + if user.has_perm('authentication.alliance_member'): + user.user_permissions.remove(permission) + user.save() + +class AllianceUser(AbstractBaseUser, PermissionsMixin): username = models.CharField(max_length=40, unique=True) email = models.EmailField(max_length=255, unique=True) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) is_moderator = models.BooleanField(default=False) is_banned = models.BooleanField(default=False) - main_char_id = models.IntegerField(default=0) + main_char_id = models.CharField(max_length=64, default="") # Login information stuff forum_username = models.CharField(max_length=64) @@ -107,16 +130,6 @@ class AllianceUser(AbstractBaseUser): def __unicode__(self): return self.username - def has_perm(self, perm, obj=None): - "Does the user have a specific permission?" - # Simplest possible answer: Yes, always - return True - - def has_module_perms(self, app_label): - "Does the user have permissions to view the app `app_label`?" - # Simplest possible answer: Yes, always - return True - @property def is_staff(self): "Is the user a member of staff?" diff --git a/evespecific/managers.py b/evespecific/managers.py index 0a0b885f..23a4a63d 100644 --- a/evespecific/managers.py +++ b/evespecific/managers.py @@ -67,23 +67,29 @@ class EveManager(): 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, user_id): - return EveCharacter.objects.all().filter(user_id=user_id) - + def get_characters_by_owner_id(self, user): + if EveCharacter.objects.filter(user=user).exists(): + return EveCharacter.objects.all().filter(user=user) + + return None + def get_character_by_id(self, char_id): - if EveCharacter.objects.filter(character_id = char_id).exists(): + if EveCharacter.objects.filter(character_id=char_id).exists(): return EveCharacter.objects.get(character_id=char_id) return None - - def check_if_character_owned_by_user(self, char_id, user_id): - character = EveCharacter.objects.get(character_id = char_id) - if character.allianceuser_owner.id == user_id: + def get_charater_alliance_id_by_id(self, char_id): + if EveCharacter.objects.filter(character_id=char_id).exists(): + return EveCharacter.objects.get(character_id=char_id).alliance_id + + def check_if_character_owned_by_user(self, char_id, user): + character = EveCharacter.objects.get(character_id=char_id) + + if character.user.id == user.id: return True return False \ No newline at end of file diff --git a/portal/views.py b/portal/views.py index 8c6dbf52..5f70ffb6 100644 --- a/portal/views.py +++ b/portal/views.py @@ -1,7 +1,9 @@ from django.shortcuts import render_to_response, HttpResponseRedirect - +from django.conf import settings from django.template import RequestContext from django.contrib.auth.decorators import login_required +from django.contrib.auth.decorators import permission_required +from django.contrib.auth.models import Permission from services.eveapi_manager import EveApiManager from evespecific.managers import EveManager @@ -58,26 +60,45 @@ def api_key_management_view(request): @login_required def api_key_removal(request, api_id): evemanager = EveManager() + usermanager = AllianceUserManager() + # Check if our users main id is in the to be deleted characters + characters = evemanager.get_characters_by_owner_id(request.user.id) + if characters is not None: + for character in characters: + if character.character_id == request.user.main_char_id: + # TODO: Remove servies also + usermanager.update_user_main_character("", request.user.id) + 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): return render_to_response('registered/applications.html', None, context_instance=RequestContext(request)) @login_required -def main_character_change(request, id): - userManager = AllianceUserManager() - 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("/") +def main_character_change(request, char_id): + usermanager = AllianceUserManager() + charactermanager = EveManager() + if charactermanager.check_if_character_owned_by_user(char_id, request.user): + usermanager.update_user_main_character(char_id, request.user.id) + # Check if character is in the alliance + if charactermanager.get_charater_alliance_id_by_id(char_id) == settings.ALLIANCE_ID: + usermanager.add_alliance_member_permission(request.user.id) + else: + #TODO: disable serivces + usermanager.remove_alliance_member_permission(request.user.id) + + return HttpResponseRedirect("/characters") return HttpResponseRedirect("/characters") @login_required +@permission_required('auth.alliance_member') def activate_forum(request): userManager = AllianceUserManager() forumManager = Phpbb3Manager() @@ -95,6 +116,7 @@ def activate_forum(request): @login_required +@permission_required('auth.alliance_member') def activate_jabber(request): userManager = AllianceUserManager() jabberManager = JabberManager() @@ -110,6 +132,7 @@ def activate_jabber(request): @login_required +@permission_required('auth.alliance_member') def activate_mumble(request): userManager = AllianceUserManager() characterManager = EveManager() diff --git a/registration/forms.py b/registration/forms.py index f2f4cde8..3650b0ab 100644 --- a/registration/forms.py +++ b/registration/forms.py @@ -1,8 +1,20 @@ 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) - api_key = forms.CharField(max_length=254, required = True) \ No newline at end of file + username = forms.CharField(max_length=16, required=True) + password = forms.CharField(widget=forms.PasswordInput(), required=True) + password_again = forms.CharField(widget=forms.PasswordInput(), required=True, label="Password Again") + email = forms.CharField(max_length=254, required=True) + email_again = forms.CharField(max_length=254, required=True, label="Email Again") + + def clean(self): + if 'password' in self.cleaned_data and 'password_again' in self.cleaned_data: + if self.cleaned_data['password'] != self.cleaned_data['password_again']: + raise forms.ValidationError(u'Passwords do not match') + + if 'email' in self.cleaned_data and 'email_again' in self.cleaned_data: + if self.cleaned_data['email'] != self.cleaned_data['email_again']: + raise forms.ValidationError(u'Emails do not match') + + return self.cleaned_data \ No newline at end of file diff --git a/registration/views.py b/registration/views.py index c6a06ca8..b6228375 100644 --- a/registration/views.py +++ b/registration/views.py @@ -24,12 +24,6 @@ def register(request): form.cleaned_data['password'] ) - # 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']) - evemanager.create_characters_from_list(characters, user, form.cleaned_data['api_id']) return HttpResponseRedirect("/dashboard") else: diff --git a/static/img/index_bg.jpg b/static/img/index_bg.jpg index 7836a41b..e7f1e9c5 100644 Binary files a/static/img/index_bg.jpg and b/static/img/index_bg.jpg differ diff --git a/templates/registered/apikeymanagment.html b/templates/registered/apikeymanagment.html index 416f0b9d..243afc81 100644 --- a/templates/registered/apikeymanagment.html +++ b/templates/registered/apikeymanagment.html @@ -10,6 +10,10 @@ {% block content %}
Application | @@ -64,6 +65,9 @@
---|