
* providers/google: initial account sync to google workspace Signed-off-by: Jens Langhammer <jens@goauthentik.io> * start separating scim sync client Signed-off-by: Jens Langhammer <jens@goauthentik.io> * generalize more...ish Signed-off-by: Jens Langhammer <jens@goauthentik.io> * set dispatch_uid Signed-off-by: Jens Langhammer <jens@goauthentik.io> * start generalizing task Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully separate tasks Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix more Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix signals...? Signed-off-by: Jens Langhammer <jens@goauthentik.io> * start google dedupe Signed-off-by: Jens Langhammer <jens@goauthentik.io> * drawing the rest of the owl Signed-off-by: Jens Langhammer <jens@goauthentik.io> * more Signed-off-by: Jens Langhammer <jens@goauthentik.io> * juse use a whole lot less magic Signed-off-by: Jens Langhammer <jens@goauthentik.io> * member sync, better implement conflict/retry-able exceptions Signed-off-by: Jens Langhammer <jens@goauthentik.io> * max wizards taller Signed-off-by: Jens Langhammer <jens@goauthentik.io> * gen api, basic UI Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix some bugs Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix a bunch more bugs Signed-off-by: Jens Langhammer <jens@goauthentik.io> * generalize sync status API Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rework sync chart Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add slugify to evaluator Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add test property mappings Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename to google workspace Signed-off-by: Jens Langhammer <jens@goauthentik.io> * handle existing objects Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix credential render Signed-off-by: Jens Langhammer <jens@goauthentik.io> * verify email has correct domain before syncing user Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix missing docstring Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lock not being used Signed-off-by: Jens Langhammer <jens@goauthentik.io> * abstract more common stuff away Signed-off-by: Jens Langhammer <jens@goauthentik.io> * backport time limit fix https://github.com/goauthentik/authentik/pull/9546 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * start discovery Signed-off-by: Jens Langhammer <jens@goauthentik.io> * implement discover for google Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent same issue as with https://github.com/goauthentik/authentik/pull/9557 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix sync status Signed-off-by: Jens Langhammer <jens@goauthentik.io> * make group name unique in API Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix reference to old wrapper Signed-off-by: Jens Langhammer <jens@goauthentik.io> * start adding tests man this api client is awful Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add SkipObject Signed-off-by: Jens Langhammer <jens@goauthentik.io> * dont use weak ref Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add group tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add user and group delete options Signed-off-by: Jens Langhammer <jens@goauthentik.io> * set user agent Signed-off-by: Jens Langhammer <jens@goauthentik.io> * if the api's testing tools are awful, let's just make our own Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add more tests and already fix some more bugs Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add discover Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add preview banner Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add group import test Signed-off-by: Jens Langhammer <jens@goauthentik.io> * only import users/groups in the correct parent group Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix conflicting args Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix missing schedule Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix web ui Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add default_group_email_domain Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
77 lines
3.1 KiB
Python
77 lines
3.1 KiB
Python
"""authentik core property mapping tests"""
|
|
|
|
from django.test import RequestFactory, TestCase
|
|
from guardian.shortcuts import get_anonymous_user
|
|
|
|
from authentik.core.expression.exceptions import PropertyMappingExpressionException
|
|
from authentik.core.models import PropertyMapping
|
|
from authentik.core.tests.utils import create_test_admin_user
|
|
from authentik.events.models import Event, EventAction
|
|
from authentik.lib.generators import generate_id
|
|
from authentik.policies.expression.models import ExpressionPolicy
|
|
|
|
|
|
class TestPropertyMappings(TestCase):
|
|
"""authentik core property mapping tests"""
|
|
|
|
def setUp(self) -> None:
|
|
super().setUp()
|
|
self.user = create_test_admin_user()
|
|
self.factory = RequestFactory()
|
|
|
|
def test_expression(self):
|
|
"""Test expression"""
|
|
mapping = PropertyMapping.objects.create(name=generate_id(), expression="return 'test'")
|
|
self.assertEqual(mapping.evaluate(None, None), "test")
|
|
|
|
def test_expression_syntax(self):
|
|
"""Test expression syntax error"""
|
|
mapping = PropertyMapping.objects.create(name=generate_id(), expression="-")
|
|
with self.assertRaises(PropertyMappingExpressionException):
|
|
mapping.evaluate(None, None)
|
|
|
|
def test_expression_error_general(self):
|
|
"""Test expression error"""
|
|
expr = "return aaa"
|
|
mapping = PropertyMapping.objects.create(name=generate_id(), expression=expr)
|
|
with self.assertRaises(PropertyMappingExpressionException):
|
|
mapping.evaluate(None, None)
|
|
events = Event.objects.filter(
|
|
action=EventAction.PROPERTY_MAPPING_EXCEPTION, context__expression=expr
|
|
)
|
|
self.assertTrue(events.exists())
|
|
self.assertEqual(len(events), 1)
|
|
|
|
def test_expression_error_extended(self):
|
|
"""Test expression error (with user and http request"""
|
|
expr = "return aaa"
|
|
request = self.factory.get("/")
|
|
mapping = PropertyMapping.objects.create(name=generate_id(), expression=expr)
|
|
with self.assertRaises(PropertyMappingExpressionException):
|
|
mapping.evaluate(get_anonymous_user(), request)
|
|
events = Event.objects.filter(
|
|
action=EventAction.PROPERTY_MAPPING_EXCEPTION, context__expression=expr
|
|
)
|
|
self.assertTrue(events.exists())
|
|
self.assertEqual(len(events), 1)
|
|
event = events.first()
|
|
self.assertEqual(event.user["username"], "AnonymousUser")
|
|
self.assertEqual(event.client_ip, "127.0.0.1")
|
|
|
|
def test_call_policy(self):
|
|
"""test ak_call_policy"""
|
|
expr = ExpressionPolicy.objects.create(
|
|
name=generate_id(),
|
|
execution_logging=True,
|
|
expression="return request.http_request.path",
|
|
)
|
|
http_request = self.factory.get("/")
|
|
tmpl = f"""
|
|
res = ak_call_policy('{expr.name}')
|
|
result = [request.http_request.path, res.raw_result]
|
|
return result
|
|
"""
|
|
evaluator = PropertyMapping(expression=tmpl, name=generate_id())
|
|
res = evaluator.evaluate(self.user, http_request)
|
|
self.assertEqual(res, ["/", "/"])
|