Exemple #1
0
 def test_request_auth_code(self):
     """test request param"""
     provider = OAuth2Provider.objects.create(
         name="test",
         client_id=generate_client_id(),
         client_secret=generate_client_secret(),
         authorization_flow=Flow.objects.first(),
         redirect_uris="http://local.invalid",
     )
     header = b64encode(
         f"{provider.client_id}:{provider.client_secret}".encode()
     ).decode()
     user = User.objects.get(username="******")
     code = AuthorizationCode.objects.create(
         code="foobar", provider=provider, user=user
     )
     request = self.factory.post(
         "/",
         data={
             "grant_type": GRANT_TYPE_AUTHORIZATION_CODE,
             "code": code.code,
             "redirect_uri": "http://local.invalid",
         },
         HTTP_AUTHORIZATION=f"Basic {header}",
     )
     params = TokenParams.from_request(request)
     self.assertEqual(params.provider, provider)
Exemple #2
0
 def test_request_refresh_token(self):
     """test request param"""
     provider = OAuth2Provider.objects.create(
         name="test",
         client_id=generate_client_id(),
         client_secret=generate_client_secret(),
         authorization_flow=Flow.objects.first(),
         redirect_uris="http://local.invalid",
     )
     header = b64encode(
         f"{provider.client_id}:{provider.client_secret}".encode()
     ).decode()
     user = User.objects.get(username="******")
     token: RefreshToken = RefreshToken.objects.create(
         provider=provider,
         user=user,
         refresh_token=generate_client_id(),
     )
     request = self.factory.post(
         "/",
         data={
             "grant_type": GRANT_TYPE_REFRESH_TOKEN,
             "refresh_token": token.refresh_token,
             "redirect_uri": "http://local.invalid",
         },
         HTTP_AUTHORIZATION=f"Basic {header}",
     )
     params = TokenParams.from_request(request)
     self.assertEqual(params.provider, provider)
Exemple #3
0
 def test_true(self):
     """Positive password case"""
     policy = HaveIBeenPwendPolicy.objects.create(
         name="test_true",
     )
     request = PolicyRequest(get_anonymous_user())
     request.context["password"] = generate_client_secret()
     result: PolicyResult = policy.passes(request)
     self.assertTrue(result.passing)
     self.assertEqual(result.messages, tuple())
Exemple #4
0
 def test_check_server_overlap(self):
     """Test check_server_overlap"""
     token = generate_client_secret()
     api = PlexAuth(self.source, token)
     with Mocker() as mocker:
         mocker.get("https://plex.tv/api/v2/resources",
                    json=RESOURCES_RESPONSE)
         self.assertFalse(api.check_server_overlap())
     self.source.allowed_servers = ["allowed"]
     self.source.save()
     with Mocker() as mocker:
         mocker.get("https://plex.tv/api/v2/resources",
                    json=RESOURCES_RESPONSE)
         self.assertTrue(api.check_server_overlap())
Exemple #5
0
 def test_refresh_token_view(self):
     """test request param"""
     provider = OAuth2Provider.objects.create(
         name="test",
         client_id=generate_client_id(),
         client_secret=generate_client_secret(),
         authorization_flow=Flow.objects.first(),
         redirect_uris="http://local.invalid",
     )
     # Needs to be assigned to an application for iss to be set
     self.app.provider = provider
     self.app.save()
     header = b64encode(f"{provider.client_id}:{provider.client_secret}".
                        encode()).decode()
     user = User.objects.get(username="******")
     token: RefreshToken = RefreshToken.objects.create(
         provider=provider,
         user=user,
         refresh_token=generate_client_id(),
     )
     response = self.client.post(
         reverse("authentik_providers_oauth2:token"),
         data={
             "grant_type": GRANT_TYPE_REFRESH_TOKEN,
             "refresh_token": token.refresh_token,
             "redirect_uri": "http://local.invalid",
         },
         HTTP_AUTHORIZATION=f"Basic {header}",
         HTTP_ORIGIN="http://local.invalid",
     )
     new_token: RefreshToken = (RefreshToken.objects.filter(
         user=user).exclude(pk=token.pk).first())
     self.assertEqual(response["Access-Control-Allow-Credentials"], "true")
     self.assertEqual(response["Access-Control-Allow-Origin"],
                      "http://local.invalid")
     self.assertJSONEqual(
         force_str(response.content),
         {
             "access_token": new_token.access_token,
             "refresh_token": new_token.refresh_token,
             "token_type": "bearer",
             "expires_in": 600,
             "id_token": provider.encode(new_token.id_token.to_dict(), ),
         },
     )
     self.validate_jwt(new_token, provider)
Exemple #6
0
 def test_get_user_info(self):
     """Test get_user_info"""
     token = generate_client_secret()
     api = PlexAuth(self.source, token)
     with Mocker() as mocker:
         mocker.get("https://plex.tv/api/v2/user", json=USER_INFO_RESPONSE)
         self.assertEqual(
             api.get_user_info(),
             (
                 {
                     "username": "******",
                     "email": "*****@*****.**",
                     "name": "title"
                 },
                 1234123419,
             ),
         )
Exemple #7
0
    def test_password_change(self):
        """test password change flow"""
        # Ensure that password stage has change_flow set
        flow = Flow.objects.get(
            slug="default-password-change",
            designation=FlowDesignation.STAGE_CONFIGURATION,
        )

        stage = PasswordStage.objects.get(
            name="default-authentication-password")
        stage.configure_flow = flow
        stage.save()

        new_password = generate_client_secret()

        self.driver.get(
            self.url(
                "authentik_core:if-flow",
                flow_slug="default-authentication-flow",
            ))
        self.login()
        self.wait_for_url(self.if_admin_url("/library"))

        self.driver.get(
            self.url(
                "authentik_flows:configure",
                stage_uuid=PasswordStage.objects.first().stage_uuid,
            ))

        flow_executor = self.get_shadow_root("ak-flow-executor")
        prompt_stage = self.get_shadow_root("ak-stage-prompt", flow_executor)

        prompt_stage.find_element(
            By.CSS_SELECTOR, "input[name=password]").send_keys(new_password)
        prompt_stage.find_element(
            By.CSS_SELECTOR,
            "input[name=password_repeat]").send_keys(new_password)
        prompt_stage.find_element(By.CSS_SELECTOR,
                                  "input[name=password_repeat]").send_keys(
                                      Keys.ENTER)

        self.wait_for_url(self.if_admin_url("/library"))
        # Because USER() is cached, we need to get the user manually here
        user = User.objects.get(username=USER().username)
        self.assertTrue(user.check_password(new_password))
Exemple #8
0
 def test_full_implicit(self):
     """Test full authorization"""
     flow = Flow.objects.create(slug="empty")
     provider = OAuth2Provider.objects.create(
         name="test",
         client_id="test",
         client_secret=generate_client_secret(),
         authorization_flow=flow,
         redirect_uris="http://localhost",
         rsa_key=CertificateKeyPair.objects.first(),
     )
     Application.objects.create(name="app", slug="app", provider=provider)
     state = generate_client_id()
     user = User.objects.get(username="******")
     self.client.force_login(user)
     # Step 1, initiate params and get redirect to flow
     self.client.get(
         reverse("authentik_providers_oauth2:authorize"),
         data={
             "response_type": "id_token",
             "client_id": "test",
             "state": state,
             "scope": "openid",
             "redirect_uri": "http://localhost",
         },
     )
     response = self.client.get(
         reverse("authentik_api:flow-executor",
                 kwargs={"flow_slug": flow.slug}), )
     token: RefreshToken = RefreshToken.objects.filter(user=user).first()
     self.assertJSONEqual(
         force_str(response.content),
         {
             "component":
             "xak-flow-redirect",
             "type":
             ChallengeTypes.REDIRECT.value,
             "to":
             (f"http://localhost#access_token={token.access_token}"
              f"&id_token={provider.encode(token.id_token.to_dict())}&token_type=bearer"
              f"&expires_in=600&state={state}"),
         },
     )
     self.validate_jwt(token, provider)
Exemple #9
0
 def test_auth_code_view(self):
     """test request param"""
     provider = OAuth2Provider.objects.create(
         name="test",
         client_id=generate_client_id(),
         client_secret=generate_client_secret(),
         authorization_flow=Flow.objects.first(),
         redirect_uris="http://local.invalid",
     )
     # Needs to be assigned to an application for iss to be set
     self.app.provider = provider
     self.app.save()
     header = b64encode(f"{provider.client_id}:{provider.client_secret}".
                        encode()).decode()
     user = User.objects.get(username="******")
     code = AuthorizationCode.objects.create(code="foobar",
                                             provider=provider,
                                             user=user,
                                             is_open_id=True)
     response = self.client.post(
         reverse("authentik_providers_oauth2:token"),
         data={
             "grant_type": GRANT_TYPE_AUTHORIZATION_CODE,
             "code": code.code,
             "redirect_uri": "http://local.invalid",
         },
         HTTP_AUTHORIZATION=f"Basic {header}",
     )
     new_token: RefreshToken = RefreshToken.objects.filter(
         user=user).first()
     self.assertJSONEqual(
         force_str(response.content),
         {
             "access_token": new_token.access_token,
             "refresh_token": new_token.refresh_token,
             "token_type": "bearer",
             "expires_in": 600,
             "id_token": provider.encode(new_token.id_token.to_dict(), ),
         },
     )
     self.validate_jwt(new_token, provider)
 def setUp(self):
     self.client_id = generate_client_id()
     self.client_secret = generate_client_secret()
     super().setUp()
 def setUp(self):
     self.client_id = generate_client_id()
     self.client_secret = generate_client_secret()
     self.application_slug = "test"
     super().setUp()
Exemple #12
0
 def setUp(self):
     self.client_secret = generate_client_secret()
     self.prepare_dex_config()
     super().setUp()
Exemple #13
0
 def setUp(self) -> None:
     self.client_id = generate_client_id()
     self.client_secret = generate_client_secret()
     self.source_slug = "oauth1-test"
     super().setUp()
Exemple #14
0
from django.db.models import Q
from django.test import TestCase

from authentik.core.models import Group, User
from authentik.managed.manager import ObjectManager
from authentik.providers.oauth2.generators import generate_client_secret
from authentik.sources.ldap.models import LDAPPropertyMapping, LDAPSource
from authentik.sources.ldap.sync.groups import GroupLDAPSynchronizer
from authentik.sources.ldap.sync.membership import MembershipLDAPSynchronizer
from authentik.sources.ldap.sync.users import UserLDAPSynchronizer
from authentik.sources.ldap.tasks import ldap_sync_all
from authentik.sources.ldap.tests.mock_ad import mock_ad_connection
from authentik.sources.ldap.tests.mock_slapd import mock_slapd_connection

LDAP_PASSWORD = generate_client_secret()


class LDAPSyncTests(TestCase):
    """LDAP Sync tests"""

    def setUp(self):
        ObjectManager().run()
        self.source = LDAPSource.objects.create(
            name="ldap",
            slug="ldap",
            base_dn="dc=goauthentik,dc=io",
            additional_user_dn="ou=users",
            additional_group_dn="ou=groups",
        )