mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 04:20:17 +02:00
Added permissions, reworked registration, added minimal django group support
This commit is contained in:
parent
eacb3d03b8
commit
d2d3f0ec85
@ -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
|
@ -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?"
|
||||
|
@ -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
|
@ -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()
|
||||
|
@ -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
|
@ -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 |
@ -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>
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user