Added permissions, reworked registration, added minimal django group support

This commit is contained in:
Raynaldo Rivera 2014-10-06 19:15:58 -07:00
parent eacb3d03b8
commit d2d3f0ec85
10 changed files with 112 additions and 45 deletions

View File

@ -151,12 +151,12 @@ STATICFILES_DIRS = (
STATIC_URL = '/static/' STATIC_URL = '/static/'
# ALLIANCE INFO # ALLIANCE INFO
ALLIANCE_ID = 0 ALLIANCE_ID = 'someid'
ALLIANCE_NAME = '' ALLIANCE_NAME = 'somealliancename'
# Jabber Prosody Info # Jabber Prosody Info
OPENFIRE_ADDRESS = "http://something.com:9090/" OPENFIRE_ADDRESS = "http://someaddres.com:9090/"
OPENFIRE_SECRET_KEY = "somekey" OPENFIRE_SECRET_KEY = "somesecretkey"
# Mumble settings # Mumble settings
MUMBLE_SERVER_ID = 1 MUMBLE_SERVER_ID = 1

View File

@ -1,6 +1,10 @@
from django.db import models 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 BaseUserManager
from django.contrib.auth.models import AbstractBaseUser from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
class AllianceUserManager(BaseUserManager): class AllianceUserManager(BaseUserManager):
@ -66,15 +70,34 @@ class AllianceUserManager(BaseUserManager):
user.mumble_password = password user.mumble_password = password
user.save(update_fields=['mumble_username', 'mumble_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) username = models.CharField(max_length=40, unique=True)
email = models.EmailField(max_length=255, unique=True) email = models.EmailField(max_length=255, unique=True)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False) is_admin = models.BooleanField(default=False)
is_moderator = models.BooleanField(default=False) is_moderator = models.BooleanField(default=False)
is_banned = 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 # Login information stuff
forum_username = models.CharField(max_length=64) forum_username = models.CharField(max_length=64)
@ -107,16 +130,6 @@ class AllianceUser(AbstractBaseUser):
def __unicode__(self): def __unicode__(self):
return self.username 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 @property
def is_staff(self): def is_staff(self):
"Is the user a member of staff?" "Is the user a member of staff?"

View File

@ -67,23 +67,29 @@ class EveManager():
if char.user.id == user_id: if char.user.id == user_id:
char.delete() char.delete()
def check_if_character_exist(self, char_name): def check_if_character_exist(self, char_name):
return EveCharacter.objects.filter(character_name=char_name).exists() return EveCharacter.objects.filter(character_name=char_name).exists()
def get_characters_by_owner_id(self, user_id): def get_characters_by_owner_id(self, user):
return EveCharacter.objects.all().filter(user_id=user_id) if EveCharacter.objects.filter(user=user).exists():
return EveCharacter.objects.all().filter(user=user)
return None
def get_character_by_id(self, char_id): 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 EveCharacter.objects.get(character_id=char_id)
return None 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 True
return False return False

View File

@ -1,7 +1,9 @@
from django.shortcuts import render_to_response, HttpResponseRedirect from django.shortcuts import render_to_response, HttpResponseRedirect
from django.conf import settings
from django.template import RequestContext from django.template import RequestContext
from django.contrib.auth.decorators import login_required 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 services.eveapi_manager import EveApiManager
from evespecific.managers import EveManager from evespecific.managers import EveManager
@ -58,26 +60,45 @@ def api_key_management_view(request):
@login_required @login_required
def api_key_removal(request, api_id): def api_key_removal(request, api_id):
evemanager = EveManager() 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_api_key_pair(api_id, request.user.id)
evemanager.delete_characters_by_api_id(api_id, request.user.id) evemanager.delete_characters_by_api_id(api_id, request.user.id)
return HttpResponseRedirect("/api_key_management/") return HttpResponseRedirect("/api_key_management/")
@login_required @login_required
def applications_view(request): def applications_view(request):
return render_to_response('registered/applications.html', None, context_instance=RequestContext(request)) return render_to_response('registered/applications.html', None, context_instance=RequestContext(request))
@login_required @login_required
def main_character_change(request, id): def main_character_change(request, char_id):
userManager = AllianceUserManager() usermanager = AllianceUserManager()
characterManager = EveManager() charactermanager = EveManager()
if characterManager.check_if_character_owned_by_user(id,request.user.id) == True: if charactermanager.check_if_character_owned_by_user(char_id, request.user):
userManager.update_user_main_character(id,request.user.id) usermanager.update_user_main_character(char_id, request.user.id)
return HttpResponseRedirect("/") # 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") return HttpResponseRedirect("/characters")
@login_required @login_required
@permission_required('auth.alliance_member')
def activate_forum(request): def activate_forum(request):
userManager = AllianceUserManager() userManager = AllianceUserManager()
forumManager = Phpbb3Manager() forumManager = Phpbb3Manager()
@ -95,6 +116,7 @@ def activate_forum(request):
@login_required @login_required
@permission_required('auth.alliance_member')
def activate_jabber(request): def activate_jabber(request):
userManager = AllianceUserManager() userManager = AllianceUserManager()
jabberManager = JabberManager() jabberManager = JabberManager()
@ -110,6 +132,7 @@ def activate_jabber(request):
@login_required @login_required
@permission_required('auth.alliance_member')
def activate_mumble(request): def activate_mumble(request):
userManager = AllianceUserManager() userManager = AllianceUserManager()
characterManager = EveManager() characterManager = EveManager()

View File

@ -1,8 +1,20 @@
from django import forms from django import forms
class RegistrationForm(forms.Form): class RegistrationForm(forms.Form):
username = forms.CharField(max_length=16, required = True) username = forms.CharField(max_length=16, required=True)
password = forms.CharField(widget=forms.PasswordInput()) password = forms.CharField(widget=forms.PasswordInput(), required=True)
email = forms.CharField(max_length=254, required = True) password_again = forms.CharField(widget=forms.PasswordInput(), required=True, label="Password Again")
api_id = forms.CharField(max_length=254, required = True) email = forms.CharField(max_length=254, required=True)
api_key = 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

View File

@ -24,12 +24,6 @@ def register(request):
form.cleaned_data['password'] 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") return HttpResponseRedirect("/dashboard")
else: else:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 351 KiB

View File

@ -10,6 +10,10 @@
{% block content %} {% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<div class="row"> <div class="row">
{% if apikeypairs %}
{% else %}
<div class="alert alert-danger" role="alert">No api keys found</div>
{% endif %}
<h1 class="page-header text-center">API Key Management</h1> <h1 class="page-header text-center">API Key Management</h1>
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
@ -35,7 +39,8 @@
<form class="form-signin" role="form" action="{% url 'auth_api_key_management' %}" method="POST"> <form class="form-signin" role="form" action="{% url 'auth_api_key_management' %}" method="POST">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap_horizontal }} {{ form|bootstrap_horizontal }}
<button class="btn btn-lg btn-primary btn-block" type="submit">Create Key</button> <br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Add Key</button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -9,6 +9,7 @@
{% block content %} {% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h1 class="page-header text-center">Available Applications</h1> <h1 class="page-header text-center">Available Applications</h1>
{% if perms.authentication.alliance_member %}
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
<th class="text-center">Application</th> <th class="text-center">Application</th>
@ -64,6 +65,9 @@
</td> </td>
</tr> </tr>
</table> </table>
{% else %}
<div class="alert alert-danger" role="alert">You are not in the alliance</div>
{% endif %}
</div> </div>
{% endblock content %} {% endblock content %}

View File

@ -9,6 +9,10 @@
{% block content %} {% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<div class="row"> <div class="row">
{% if request.user.main_char_id %}
{% else %}
<div class="alert alert-danger" role="alert">No primary character set</div>
{% endif %}
{% for character in characters %} {% for character in characters %}
<div class="well well-sm profile"> <div class="well well-sm profile">
<div class="col-sm-12"> <div class="col-sm-12">
@ -25,7 +29,13 @@
</div> </div>
</div> </div>
<div class="col-md-offset-8"> <div class="col-md-offset-8">
<a href="/main_character_change/{{character.character_id}}"><button type="button" class="btn btn-primary">Make Primary</button></a> <a href="/main_character_change/{{character.character_id}}">
{% ifequal character.character_id request.user.main_char_id %}
<button type="button" class="btn btn-disable" disabled>Make Primary</button>
{% else %}
<button type="button" class="btn btn-primary">Make Primary</button>
{% endifequal %}
</a>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}