private MockWebContext getContextWithAuthorizationHeader(String value) { MockWebContext context = MockWebContext.create(); return context.addRequestHeader(HttpConstants.AUTHORIZATION_HEADER, value); } }
@Test public void testGetCredentials() { final FormClient formClient = getFormClient(); final MockWebContext context = MockWebContext.create(); TestsHelper.expectException(() -> formClient.getCredentials(context.addRequestParameter(formClient.getUsernameParameter(), USERNAME) .addRequestParameter(formClient.getPasswordParameter(), PASSWORD)), HttpAction.class, "Performing a 302 HTTP action"); assertEquals(302, context.getResponseStatus()); assertEquals(LOGIN_URL + "?" + formClient.getUsernameParameter() + "=" + USERNAME + "&" + FormClient.ERROR_PARAMETER + "=" + CredentialsException.class.getSimpleName(), context .getResponseHeaders().get(HttpConstants.LOCATION_HEADER)); }
@Test public void testAuthentication() { final CookieClient client = new CookieClient(USERNAME, new SimpleTestTokenAuthenticator()); final MockWebContext context = MockWebContext.create(); final Cookie c = new Cookie(USERNAME, Base64.getEncoder().encodeToString(getClass().getName().getBytes(StandardCharsets.UTF_8))); context.getRequestCookies().add(c); final TokenCredentials credentials = client.getCredentials(context); final CommonProfile profile = client.getUserProfile(credentials, context); assertEquals(c.getValue(), profile.getId()); } }
@Test public void testRetrievePostParameterNotSupported() { final MockWebContext context = MockWebContext.create().setRequestMethod(HTTP_METHOD.POST.name()) .addRequestParameter(GOOD_PARAMETER, VALUE); TestsHelper.expectException(() -> getExtractor.extract(context), CredentialsException.class, "POST requests not supported"); }
@Test public void testValidateBadIP() { assertFalse(authorizer.isAuthorized(MockWebContext.create().setRemoteAddress(BAD_IP), null)); } }
@Test public void testGetBadCredentials() { final DirectFormClient formClient = getFormClient(); final MockWebContext context = MockWebContext.create(); assertNull(formClient.getCredentials(context.addRequestParameter(formClient.getUsernameParameter(), USERNAME) .addRequestParameter(formClient.getPasswordParameter(), PASSWORD))); }
@Test public void testNotDigest() { final MockWebContext context = MockWebContext.create(); final DigestCredentials credentials = digestExtractor.extract(context); assertNull(credentials); }
@Test public void testRetrieveIpFromHeaderUsingConstructor() { final MockWebContext context = MockWebContext.create().addRequestHeader(HEADER_NAME, GOOD_IP).setRemoteAddress(LOCALHOST); // test for varargs final IpExtractor ipExtractor = new IpExtractor("fooBar", HEADER_NAME, "barFoo"); final TokenCredentials credentials = ipExtractor.extract(context); assertEquals(GOOD_IP, credentials.getToken()); // test for edge case of 1 header final IpExtractor ipExtractor2 = new IpExtractor(HEADER_NAME); final TokenCredentials credentials2 = ipExtractor2.extract(context); assertEquals(GOOD_IP, credentials2.getToken()); }
@Test public void testAuthentication() { final DirectDigestAuthClient client = new DirectDigestAuthClient(new SimpleTestDigestAuthenticator()); client.setRealm(REALM); final MockWebContext context = MockWebContext.create(); context.addRequestHeader(AUTHORIZATION_HEADER, DIGEST_AUTHORIZATION_HEADER_VALUE); context.setRequestMethod(HTTP_METHOD.GET.name()); final DigestCredentials credentials = client.getCredentials(context); final CommonProfile profile = client.getUserProfile(credentials, context); String ha1 = CredentialUtil.encryptMD5(USERNAME + ":" + REALM + ":" +PASSWORD); String serverDigest1 = credentials.calculateServerDigest(true, ha1); String serverDigest2 = credentials.calculateServerDigest(false, PASSWORD); assertEquals(DIGEST_RESPONSE, serverDigest1); assertEquals(DIGEST_RESPONSE, serverDigest2); assertEquals(USERNAME, profile.getId()); } }
@Test public void testRetrieveNoGetParameter() { final MockWebContext context = MockWebContext.create().setRequestMethod(HTTP_METHOD.GET.name()); final TokenCredentials credentials = getExtractor.extract(context); assertNull(credentials); }
@Test public void testRedirectionUrl() { final FormClient formClient = getFormClient(); MockWebContext context = MockWebContext.create(); formClient.redirect(context); assertEquals(LOGIN_URL, context.getResponseLocation()); }
private void verifyGetCredentialsFailsWithAuthenticationRequired( IndirectBasicAuthClient basicAuthClient, MockWebContext context) { try { basicAuthClient.getCredentials(context); fail("should throw HttpAction"); } catch (final HttpAction e) { assertEquals(401, context.getResponseStatus()); assertEquals("Basic realm=\"authentication required\"", context.getResponseHeaders().get(HttpConstants.AUTHENTICATE_HEADER)); } }
@Test public void testOk() throws CertificateException { final MockWebContext context = MockWebContext.create(); final byte[] certificateData = Base64.getDecoder().decode(CERTIFICATE); final X509Certificate cert = (X509Certificate) CertificateFactory.getInstance("X.509") .generateCertificate(new ByteArrayInputStream(certificateData)); final X509Certificate[]certs = new X509Certificate[1]; certs[0] = cert; context.setRequestAttribute(X509CredentialsExtractor.CERTIFICATE_REQUEST_ATTRIBUTE, certs); final X509Credentials credentials = client.getCredentials(context); final X509Profile profile = client.getUserProfile(credentials, context); assertEquals("jerome", profile.getId()); } }
@Test public void testRetrieveGetParameterNotSupported() { final MockWebContext context = MockWebContext.create().setRequestMethod(HTTP_METHOD.GET.name()) .addRequestParameter(GOOD_PARAMETER, VALUE); TestsHelper.expectException(() -> postExtractor.extract(context), CredentialsException.class, "GET requests not supported"); }
@Test public void testGoodRmeValue() { final RememberMeAuthorizationGenerator ag = new RememberMeAuthorizationGenerator<>(); final MockWebContext context = MockWebContext.create().addRequestParameter("rme", "true"); ag.generate(context, profile); assertTrue(profile.isRemembered()); }
@Test(expected = TechnicalException.class) public void testNoPattern() { final IpRegexpAuthorizer authorizer = new IpRegexpAuthorizer(); authorizer.isAuthorized(MockWebContext.create(), null); }
@Test public void testRetrieveIpFromHeaderWithProxyIpCheck() { final MockWebContext context = MockWebContext.create().addRequestHeader(HEADER_NAME, GOOD_IP).setRemoteAddress(LOCALHOST); final IpExtractor ipExtractor = new IpExtractor(); ipExtractor.setProxyIp(LOCALHOST); // test for varargs ipExtractor.setAlternateIpHeaders("fooBar", HEADER_NAME, "barFoo"); final TokenCredentials credentials = ipExtractor.extract(context); assertEquals(GOOD_IP, credentials.getToken()); // test for edge case of 1 header ipExtractor.setAlternateIpHeaders(HEADER_NAME); final TokenCredentials credentials2 = ipExtractor.extract(context); assertEquals(GOOD_IP, credentials2.getToken()); }
@Test public void testValidateGoodIP() { assertTrue(authorizer.isAuthorized(MockWebContext.create().setRemoteAddress(GOOD_IP), null)); }
@Test public void testRetrieveNoPostParameter() { final MockWebContext context = MockWebContext.create().setRequestMethod(HTTP_METHOD.POST.name()); final TokenCredentials credentials = postExtractor.extract(context); assertNull(credentials); } }
@Test public void testRedirectionUrl() { final IndirectBasicAuthClient basicAuthClient = getBasicAuthClient(); MockWebContext context = MockWebContext.create(); basicAuthClient.redirect(context); assertEquals(CALLBACK_URL + "?" + Pac4jConstants.DEFAULT_CLIENT_NAME_PARAMETER + "=" + basicAuthClient.getName(), context.getResponseLocation()); }