diff --git a/mama_cas/management/commands/checkservice.py b/mama_cas/management/commands/checkservice.py new file mode 100644 index 0000000..15d2780 --- /dev/null +++ b/mama_cas/management/commands/checkservice.py @@ -0,0 +1,36 @@ +from django.core.management.base import BaseCommand + +from mama_cas.services import get_callbacks +from mama_cas.services import get_logout_url +from mama_cas.services import logout_allowed +from mama_cas.services import proxy_allowed +from mama_cas.services import proxy_callback_allowed +from mama_cas.services import service_allowed + + +class Command(BaseCommand): + help = 'Check validity and configuration of a service identifier' + + def add_arguments(self, parser): + parser.add_argument( + 'service', + help='Service identifier to check' + ) + parser.add_argument( + 'pgturl', nargs='?', + help='Optional pgtUrl to test proxy callback identifier' + ) + + def handle(self, **options): + service = options['service'] + pgturl = options['pgturl'] + if service_allowed(service): + self.stdout.write('Valid Service: %s' % service) + self.stdout.write('Proxy Allowed: %s' % proxy_allowed(service)) + if pgturl: + self.stdout.write('Proxy Callback Allowed: %s' % proxy_callback_allowed(service, pgturl)) + self.stdout.write('Logout Allowed: %s' % logout_allowed(service)) + self.stdout.write('Logout URL: %s' % get_logout_url(service)) + self.stdout.write('Callbacks: %s' % get_callbacks(service)) + else: + self.stdout.write(self.style.ERROR('Invalid Service: %s' % service)) diff --git a/mama_cas/tests/test_commands.py b/mama_cas/tests/test_commands.py new file mode 100644 index 0000000..71146d6 --- /dev/null +++ b/mama_cas/tests/test_commands.py @@ -0,0 +1,55 @@ +from django.core import management +from django.test import TestCase +from django.utils import six + +from .factories import ProxyGrantingTicketFactory +from .factories import ProxyTicketFactory +from .factories import ServiceTicketFactory +from mama_cas.models import ProxyGrantingTicket +from mama_cas.models import ProxyTicket +from mama_cas.models import ServiceTicket + + +class ManagementCommandTests(TestCase): + """ + Test management commands that operate on tickets. + """ + def test_cleanupcas_management_command(self): + """ + The ``cleanupcas`` management command should delete tickets + that are expired or consumed. + """ + st = ServiceTicketFactory(consume=True) + pgt = ProxyGrantingTicketFactory(expire=True, granted_by_st=st) + ProxyTicketFactory(consume=True, granted_by_pgt=pgt) + management.call_command('cleanupcas') + + self.assertEqual(ServiceTicket.objects.count(), 0) + self.assertEqual(ProxyGrantingTicket.objects.count(), 0) + self.assertEqual(ProxyTicket.objects.count(), 0) + + def test_cleanupcas_management_command_chain(self): + """ + The ``cleanupcas`` management command should delete chains of + invalid tickets. + """ + st = ServiceTicketFactory(consume=True) + pgt = ProxyGrantingTicketFactory(expire=True, granted_by_st=st) + pt = ProxyTicketFactory(consume=True, granted_by_pgt=pgt) + pgt2 = ProxyGrantingTicketFactory(expire=True, granted_by_st=None, granted_by_pt=pt) + ProxyTicketFactory(consume=True, granted_by_pgt=pgt2) + management.call_command('cleanupcas') + + self.assertEqual(ServiceTicket.objects.count(), 0) + self.assertEqual(ProxyGrantingTicket.objects.count(), 0) + self.assertEqual(ProxyTicket.objects.count(), 0) + + def test_checkservice_management_command(self): + output = six.StringIO() + management.call_command('checkservice', 'https://www.example.com', no_color=True, stdout=output) + self.assertIn('Valid Service', output.getvalue()) + + def test_checkservice_management_command_invalid(self): + output = six.StringIO() + management.call_command('checkservice', 'https://example.org', no_color=True, stdout=output) + self.assertIn('Invalid Service', output.getvalue()) diff --git a/mama_cas/tests/test_models.py b/mama_cas/tests/test_models.py index 19f5900..1d4c2a2 100644 --- a/mama_cas/tests/test_models.py +++ b/mama_cas/tests/test_models.py @@ -2,7 +2,6 @@ from mock import patch import re -from django.core import management from django.test import TestCase from django.test.utils import override_settings from django.utils.timezone import now @@ -14,7 +13,6 @@ from .factories import ServiceTicketFactory from .factories import UserFactory from mama_cas.models import ProxyGrantingTicket -from mama_cas.models import ProxyTicket from mama_cas.models import ServiceTicket from mama_cas.exceptions import InvalidProxyCallback from mama_cas.exceptions import InvalidRequest @@ -575,38 +573,3 @@ def test_create_proxy_granting_ticket(self): """ pgt = ProxyGrantingTicketFactory() self.assertTrue(pgt.ticket.startswith(pgt.TICKET_PREFIX)) - - -class ManagementCommandTests(TestCase): - """ - Test management commands that operate on tickets. - """ - def test_cleanupcas_management_command(self): - """ - The ``cleanupcas`` management command should delete tickets - that are expired or consumed. - """ - st = ServiceTicketFactory(consume=True) - pgt = ProxyGrantingTicketFactory(expire=True, granted_by_st=st) - ProxyTicketFactory(consume=True, granted_by_pgt=pgt) - management.call_command('cleanupcas') - - self.assertEqual(ServiceTicket.objects.count(), 0) - self.assertEqual(ProxyGrantingTicket.objects.count(), 0) - self.assertEqual(ProxyTicket.objects.count(), 0) - - def test_cleanupcas_management_command_chain(self): - """ - The ``cleanupcas`` management command should delete chains of - invalid tickets. - """ - st = ServiceTicketFactory(consume=True) - pgt = ProxyGrantingTicketFactory(expire=True, granted_by_st=st) - pt = ProxyTicketFactory(consume=True, granted_by_pgt=pgt) - pgt2 = ProxyGrantingTicketFactory(expire=True, granted_by_st=None, granted_by_pt=pt) - ProxyTicketFactory(consume=True, granted_by_pgt=pgt2) - management.call_command('cleanupcas') - - self.assertEqual(ServiceTicket.objects.count(), 0) - self.assertEqual(ProxyGrantingTicket.objects.count(), 0) - self.assertEqual(ProxyTicket.objects.count(), 0)