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/'
# 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

View File

@ -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?"

View File

@ -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

View File

@ -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()

View File

@ -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)
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

View File

@ -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:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 351 KiB

View File

@ -10,6 +10,10 @@
{% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<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>
<table class="table table-bordered">
<tr>
@ -35,7 +39,8 @@
<form class="form-signin" role="form" action="{% url 'auth_api_key_management' %}" method="POST">
{% csrf_token %}
{{ 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>
</div>
</div>

View File

@ -9,6 +9,7 @@
{% block content %}
<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>
{% if perms.authentication.alliance_member %}
<table class="table table-bordered">
<tr>
<th class="text-center">Application</th>
@ -64,6 +65,9 @@
</td>
</tr>
</table>
{% else %}
<div class="alert alert-danger" role="alert">You are not in the alliance</div>
{% endif %}
</div>
{% endblock content %}

View File

@ -9,6 +9,10 @@
{% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<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 %}
<div class="well well-sm profile">
<div class="col-sm-12">
@ -25,7 +29,13 @@
</div>
</div>
<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>
{% endfor %}