mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-06 23:26:19 +01:00
Merge branch 'master' of https://github.com/Adarnof/allianceauth into custom_user
# Conflicts: # alliance_auth/settings.py.example # eveonline/views.py Fix some tests.
This commit is contained in:
@@ -8,9 +8,9 @@ except ImportError:
|
||||
import mock
|
||||
|
||||
from django.test import TestCase, RequestFactory
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User, Group, Permission
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.conf import settings
|
||||
|
||||
from alliance_auth.tests.auth_utils import AuthUtils
|
||||
|
||||
@@ -19,13 +19,13 @@ from .models import DiscourseUser
|
||||
from .tasks import DiscourseTasks
|
||||
|
||||
MODULE_PATH = 'services.modules.discourse'
|
||||
DEFAULT_AUTH_GROUP = 'Member'
|
||||
|
||||
|
||||
def add_permissions():
|
||||
permission = Permission.objects.get(codename='access_discourse')
|
||||
members = Group.objects.get(name=settings.DEFAULT_AUTH_GROUP)
|
||||
blues = Group.objects.get(name=settings.DEFAULT_BLUE_GROUP)
|
||||
AuthUtils.add_permissions_to_groups([permission], [members, blues])
|
||||
members = Group.objects.get_or_create(name=DEFAULT_AUTH_GROUP)[0]
|
||||
AuthUtils.add_permissions_to_groups([permission], [members])
|
||||
|
||||
|
||||
class DiscourseHooksTestCase(TestCase):
|
||||
@@ -33,9 +33,6 @@ class DiscourseHooksTestCase(TestCase):
|
||||
self.member = 'member_user'
|
||||
member = AuthUtils.create_member(self.member)
|
||||
DiscourseUser.objects.create(user=member, enabled=True)
|
||||
self.blue = 'blue_user'
|
||||
blue = AuthUtils.create_blue(self.blue)
|
||||
DiscourseUser.objects.create(user=blue, enabled=True)
|
||||
self.none_user = 'none_user'
|
||||
none_user = AuthUtils.create_user(self.none_user)
|
||||
self.service = DiscourseService
|
||||
@@ -43,20 +40,16 @@ class DiscourseHooksTestCase(TestCase):
|
||||
|
||||
def test_has_account(self):
|
||||
member = User.objects.get(username=self.member)
|
||||
blue = User.objects.get(username=self.blue)
|
||||
none_user = User.objects.get(username=self.none_user)
|
||||
self.assertTrue(DiscourseTasks.has_account(member))
|
||||
self.assertTrue(DiscourseTasks.has_account(blue))
|
||||
self.assertFalse(DiscourseTasks.has_account(none_user))
|
||||
|
||||
def test_service_enabled(self):
|
||||
service = self.service()
|
||||
member = User.objects.get(username=self.member)
|
||||
blue = User.objects.get(username=self.blue)
|
||||
none_user = User.objects.get(username=self.none_user)
|
||||
|
||||
self.assertTrue(service.service_active_for_user(member))
|
||||
self.assertTrue(service.service_active_for_user(blue))
|
||||
self.assertFalse(service.service_active_for_user(none_user))
|
||||
|
||||
@mock.patch(MODULE_PATH + '.tasks.DiscourseManager')
|
||||
@@ -65,7 +58,7 @@ class DiscourseHooksTestCase(TestCase):
|
||||
service.update_all_groups()
|
||||
# Check member and blue user have groups updated
|
||||
self.assertTrue(manager.update_groups.called)
|
||||
self.assertEqual(manager.update_groups.call_count, 2)
|
||||
self.assertEqual(manager.update_groups.call_count, 1)
|
||||
|
||||
def test_update_groups(self):
|
||||
# Check member has Member group updated
|
||||
|
||||
@@ -33,27 +33,25 @@ ACCESS_PERM = 'discourse.access_discourse'
|
||||
@login_required
|
||||
def discourse_sso(request):
|
||||
|
||||
## Check if user has access
|
||||
|
||||
# Check if user has access
|
||||
if not request.user.has_perm(ACCESS_PERM):
|
||||
messages.error(request, 'You are not authorized to access Discourse.')
|
||||
return redirect('auth_dashboard')
|
||||
messages.error(request, 'You are not authorized to access Discourse.')
|
||||
logger.warning('User %s attempted to access Discourse but does not have permission.' % request.user)
|
||||
return redirect('authentication:dashboard')
|
||||
|
||||
if not request.user.profile.main_character:
|
||||
messages.error(request, "You must have a main character set to access Discourse.")
|
||||
return redirect('auth_characters')
|
||||
logger.warning('User %s attempted to access Discourse but does not have a main character.' % request.user)
|
||||
return redirect('authentication:characters')
|
||||
|
||||
main_char = request.user.profile.main_character
|
||||
if main_char is None:
|
||||
messages.error(request, "Your main character is missing a database model. Please select a new one.")
|
||||
return redirect('auth_characters')
|
||||
|
||||
payload = request.GET.get('sso')
|
||||
signature = request.GET.get('sig')
|
||||
|
||||
if None in [payload, signature]:
|
||||
messages.error(request, 'No SSO payload or signature. Please contact support if this problem persists.')
|
||||
return redirect('auth_dashboard')
|
||||
return redirect('authentication:dashboard')
|
||||
|
||||
# Validate the payload
|
||||
try:
|
||||
@@ -63,7 +61,7 @@ def discourse_sso(request):
|
||||
assert len(payload) > 0
|
||||
except AssertionError:
|
||||
messages.error(request, 'Invalid payload. Please contact support if this problem persists.')
|
||||
return redirect('auth_dashboard')
|
||||
return redirect('authentication:dashboard')
|
||||
|
||||
key = str(settings.DISCOURSE_SSO_SECRET).encode('utf-8')
|
||||
h = hmac.new(key, payload, digestmod=hashlib.sha256)
|
||||
@@ -71,7 +69,7 @@ def discourse_sso(request):
|
||||
|
||||
if this_signature != signature:
|
||||
messages.error(request, 'Invalid payload. Please contact support if this problem persists.')
|
||||
return redirect('auth_dashboard')
|
||||
return redirect('authentication:dashboard')
|
||||
|
||||
## Build the return payload
|
||||
|
||||
@@ -87,7 +85,7 @@ def discourse_sso(request):
|
||||
}
|
||||
|
||||
if main_char:
|
||||
params['avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % main_char.main_char_id
|
||||
params['avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % main_char.character_id
|
||||
|
||||
return_payload = base64.encodestring(urlencode(params).encode('utf-8'))
|
||||
h = hmac.new(key, return_payload, digestmod=hashlib.sha256)
|
||||
|
||||
Reference in New Issue
Block a user