Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ private static Router initRouterByYAML(MembraneCommandLine commandLine, String o

private static Router initRouterByYAML(String location) throws Exception {
var router = new DefaultRouter();
router.setBaseLocation(location);
router.getConfiguration().setBaseLocation(location);

GrammarAutoGenerated grammar = new GrammarAutoGenerated();
BeanRegistryImplementation reg = new BeanRegistryImplementation(router, router, grammar);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ protected AccessControl parse(String fileName, Router router) {
try {
reader = factory.createXMLStreamReader(
router.getResolverMap().resolve(
ResolverMap.combine(router.getBaseLocation(), fileName)));
ResolverMap.combine(router.getConfiguration().getBaseLocation(), fileName)));
AccessControl res = (AccessControl) new AccessControl(router).parse(reader);
res.init(router);
return res;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public class ApiKeyFileStore implements ApiKeyStore {
@Override
public void init(Router router) {
try {
scopes = readKeyData(readFile(location, router.getResolverMap(), router.getBaseLocation()));
scopes = readKeyData(readFile(location, router.getResolverMap(), router.getConfiguration().getBaseLocation()));
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ public void init(Router router) {
}

if (sslParser != null)
CustomSocketFactory.sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getBaseLocation());
CustomSocketFactory.sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getConfiguration().getBaseLocation());
}

public AttributeMap getMap() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,15 @@ public void init(Router router) {
wsi.init(router);
try {
// This is only a check if index.html is present
router.getResolverMap().resolve(ResolverMap.combine(router.getBaseLocation(), wsi.getDocBase(), "index.html")).close();
router.getResolverMap().resolve(ResolverMap.combine(router.getConfiguration().getBaseLocation(), wsi.getDocBase(), "index.html")).close();
} catch (ResourceRetrievalException e) {
throw new ConfigurationException("""
Cannot access index.html at:
Location base: %s
Doc base: %s
""".formatted( router.getBaseLocation(), wsi.getDocBase()),e);
""".formatted( router.getConfiguration().getBaseLocation(), wsi.getDocBase()),e);
} catch (IOException e) {
log.error("Cannot access index.html (baseLocation={}, docBase={})" , router.getBaseLocation(), wsi.getDocBase(), e);
log.error("Cannot access index.html (baseLocation={}, docBase={})" , router.getConfiguration().getBaseLocation(), wsi.getDocBase(), e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public static class JwtSessionManager implements XenSessionManager {
private final SecureRandom random = new SecureRandom();

public void init(Router router) throws Exception {
String key = jwk.get(router.getResolverMap(), router.getBaseLocation());
String key = jwk.get(router.getResolverMap(), router.getConfiguration().getBaseLocation());
if (key == null || key.isEmpty())
rsaJsonWebKey = generateKey();
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void setDir(String dir) {

@Override
public void init(Router router) {
dir = ResolverMap.combine(router.getBaseLocation(), dir);
dir = ResolverMap.combine(router.getConfiguration().getBaseLocation(), dir);
File d = new File(dir);
if (!d.exists())
if (!d.mkdirs())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,12 @@ public void init() {
if(jwtRetriever == null)
jwtRetriever = new HeaderJwtRetriever("Authorization","Bearer");

jwks.init(router.getResolverMap(),router.getBaseLocation());
jwks.init(router.getResolverMap(),router.getConfiguration().getBaseLocation());

kidToKey = jwks.getJwks().stream()
.map(jwk -> {
try {
return new RsaJsonWebKey(mapper.readValue(jwk.getJwk(router.getResolverMap(), router.getBaseLocation(),mapper),Map.class));
return new RsaJsonWebKey(mapper.readValue(jwk.getJwk(router.getResolverMap(), router.getConfiguration().getBaseLocation(),mapper),Map.class));
} catch (Exception e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class JwtSignInterceptor extends AbstractInterceptor {
public void init() {
super.init();
try {
Map<String, Object> params = JsonUtil.parseJson(jwk.get(router.getResolverMap(), router.getBaseLocation()));
Map<String, Object> params = JsonUtil.parseJson(jwk.get(router.getResolverMap(), router.getConfiguration().getBaseLocation()));
if (Objects.equals(params.get("p"), DEFAULT_PKEY)) {
log.warn("""
\n------------------------------------ DEFAULT JWK IN USE! ------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void init(Router router, String url) throws IOException {
createDefaults();
return;
}
parseFile(getFromUrl(ResolverMap.combine(router.getBaseLocation(),url)));
parseFile(getFromUrl(ResolverMap.combine(router.getConfiguration().getBaseLocation(),url)));
}

private void parseFile(String consentPageFile) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,52 +13,38 @@

package com.predic8.membrane.core.interceptor.oauth2.authorizationservice;

import com.predic8.membrane.annot.MCAttribute;
import com.predic8.membrane.annot.MCChildElement;
import com.predic8.membrane.core.config.security.SSLParser;
import com.predic8.membrane.core.exchange.Exchange;
import com.predic8.membrane.core.http.Request;
import com.predic8.membrane.core.http.Response;
import com.predic8.membrane.core.interceptor.oauth2.OAuth2TokenBody;
import com.predic8.membrane.core.interceptor.oauth2.tokengenerators.JwtGenerator;
import com.predic8.membrane.core.interceptor.oauth2client.rf.LogHelper;
import com.predic8.membrane.core.interceptor.oauth2client.rf.OAuth2Exception;
import com.predic8.membrane.core.interceptor.oauth2client.rf.OAuth2TokenResponseBody;
import com.predic8.membrane.core.interceptor.oauth2client.rf.token.JWSSigner;
import com.predic8.membrane.core.interceptor.session.Session;
import com.predic8.membrane.core.resolver.ResolverMap;
import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.config.security.*;
import com.predic8.membrane.core.exchange.*;
import com.predic8.membrane.core.http.*;
import com.predic8.membrane.core.interceptor.oauth2.*;
import com.predic8.membrane.core.interceptor.oauth2.tokengenerators.*;
import com.predic8.membrane.core.interceptor.oauth2client.rf.*;
import com.predic8.membrane.core.interceptor.oauth2client.rf.token.*;
import com.predic8.membrane.core.interceptor.session.*;
import com.predic8.membrane.core.resolver.*;
import com.predic8.membrane.core.router.*;
import com.predic8.membrane.core.transport.http.HttpClient;
import com.predic8.membrane.core.transport.http.client.HttpClientConfiguration;
import com.predic8.membrane.core.transport.ssl.PEMSupport;
import com.predic8.membrane.core.transport.ssl.SSLContext;
import com.predic8.membrane.core.transport.ssl.StaticSSLContext;
import jakarta.mail.internet.ParseException;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.MalformedClaimException;
import org.jose4j.jwt.NumericDate;
import org.jose4j.lang.JoseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;

import static com.predic8.membrane.core.Constants.USERAGENT;
import com.predic8.membrane.core.transport.http.*;
import com.predic8.membrane.core.transport.http.client.*;
import com.predic8.membrane.core.transport.ssl.*;
import jakarta.mail.internet.*;
import org.jose4j.jwt.*;
import org.jose4j.lang.*;
import org.slf4j.*;

import javax.annotation.*;
import javax.annotation.concurrent.*;
import java.io.*;
import java.util.*;

import static com.predic8.membrane.core.Constants.*;
import static com.predic8.membrane.core.http.Header.*;
import static com.predic8.membrane.core.http.MimeType.APPLICATION_JSON;
import static com.predic8.membrane.core.http.MimeType.APPLICATION_X_WWW_FORM_URLENCODED;
import static com.predic8.membrane.core.http.Request.get;
import static com.predic8.membrane.core.http.Response.badRequest;
import static com.predic8.membrane.core.http.Response.internalServerError;
import static com.predic8.membrane.core.interceptor.oauth2.OAuth2TokenBody.authorizationCodeBodyBuilder;
import static com.predic8.membrane.core.interceptor.oauth2.OAuth2TokenBody.refreshTokenBodyBuilder;
import static com.predic8.membrane.core.http.MimeType.*;
import static com.predic8.membrane.core.http.Request.*;
import static com.predic8.membrane.core.http.Response.*;
import static com.predic8.membrane.core.interceptor.oauth2.OAuth2TokenBody.*;
import static com.predic8.membrane.core.interceptor.oauth2client.rf.JsonUtils.isJson;
import static org.apache.commons.codec.binary.Base64.encodeBase64;
import static org.apache.commons.codec.binary.Base64.*;

public abstract class AuthorizationService {

Expand Down Expand Up @@ -94,13 +80,13 @@ public void init(Router router) throws Exception {
log = LoggerFactory.getLogger(this.getClass().getName());

if (isUseJWTForClientAuth()) {
JWSSigner = new JWSSigner(PEMSupport.getInstance().parseKey(getSslParser().getKey().getPrivate().get(router.getResolverMap(), router.getBaseLocation())),
getSslParser().getKey().getCertificates().getFirst().get(router.getResolverMap(), router.getBaseLocation()));
JWSSigner = new JWSSigner(PEMSupport.getInstance().parseKey(getSslParser().getKey().getPrivate().get(router.getResolverMap(), router.getConfiguration().getBaseLocation())),
getSslParser().getKey().getCertificates().getFirst().get(router.getResolverMap(), router.getConfiguration().getBaseLocation()));
}

setHttpClient(router.getHttpClientFactory().createClient(getHttpClientConfiguration()));
if (sslParser != null)
sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getBaseLocation());
sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getConfiguration().getBaseLocation());
this.router = router;
init();
if (!supportsDynamicRegistration())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public class DynamicRegistration {
public void init(Router router) {
this.router = router;
if (sslParser != null)
sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getBaseLocation());
sslContext = new StaticSSLContext(sslParser, router.getResolverMap(), router.getConfiguration().getBaseLocation());
for (Interceptor i : interceptors)
i.init(router);
client = router.getHttpClientFactory().createClient(httpClientConfiguration);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void init() throws Exception {
}
parseSrc(resolve(
router.getResolverMap(),
router.getBaseLocation(),
router.getConfiguration().getBaseLocation(),
getWellKnownUrl(internalSrc == null ? src : internalSrc)));
if(internalSrc != null) {
publicAuthorizationEndpoint = src + new URI(authorizationEndpoint).getPath();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,17 @@

package com.predic8.membrane.core.interceptor.oauth2.authorizationservice;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.predic8.membrane.annot.MCAttribute;
import com.predic8.membrane.annot.MCElement;
import com.predic8.membrane.annot.Required;
import com.predic8.membrane.core.interceptor.oauth2.OAuth2Util;
import com.predic8.membrane.core.interceptor.oauth2.parameter.ClaimsParameter;
import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.type.*;
import com.fasterxml.jackson.databind.*;
import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.interceptor.oauth2.*;
import com.predic8.membrane.core.interceptor.oauth2.parameter.*;
import org.apache.commons.io.*;
import org.jetbrains.annotations.*;

import java.io.*;
import java.util.*;
import java.util.stream.*;

/**
* Configure Membrane with Microsoft's Entra ID platform.
Expand All @@ -56,7 +50,7 @@ public class MicrosoftEntraIDAuthorizationService extends AuthorizationService {
public void init() throws Exception {
parseSrc(resolve(
router.getResolverMap(),
router.getBaseLocation(),
router.getConfiguration().getBaseLocation(),
getWellKnownUrl("https://login.microsoftonline.com/" + tenantId + "/v2.0/")));
adjustScope();
prepareClaimsForLoginUrl();
Expand All @@ -72,12 +66,12 @@ public String getIssuer() {
}

@Override
public String getJwksEndpoint() throws Exception {
public String getJwksEndpoint() {
return jwksEndpoint;
}

@Override
public String getEndSessionEndpoint() throws Exception {
public String getEndSessionEndpoint() {
return endSessionEndpoint;
}

Expand All @@ -93,7 +87,7 @@ public void setScope(String scope) {
encodedScope = false;
}

private void adjustScope() throws UnsupportedEncodingException {
private void adjustScope() {
if(scope == null)
scope = "openid";
if (!encodedScope) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void init(Router router) throws Exception {
"reference it using <bearerJwtToken><jwk location=\"...\">.",
rsaJsonWebKey.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE));
} else {
rsaJsonWebKey = new RsaJsonWebKey(JsonUtil.parseJson(jwk.get(router.getResolverMap(), router.getBaseLocation())));
rsaJsonWebKey = new RsaJsonWebKey(JsonUtil.parseJson(jwk.get(router.getResolverMap(), router.getConfiguration().getBaseLocation())));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public LoginDialog2(
public void init(Router router) throws Exception {
uriFactory = router.getConfiguration().getUriFactory();
wsi.init(router);
router.getResolverMap().resolve(ResolverMap.combine(router.getBaseLocation(), wsi.getDocBase(), "index.html")).close();
router.getResolverMap().resolve(ResolverMap.combine(router.getConfiguration().getBaseLocation(), wsi.getDocBase(), "index.html")).close();

}

Expand Down Expand Up @@ -308,11 +308,11 @@ private Map<String, String> doubleStringArrayToMap(String[] strings) {
return result;
}

private String[] prepareClaimsFromSession(Session s) throws UnsupportedEncodingException {
private String[] prepareClaimsFromSession(Session s) {
return prepareStringArray(decodeClaimsFromSession(s));
}

private String[] prepareScopesFromSession(Session s) throws UnsupportedEncodingException {
private String[] prepareScopesFromSession(Session s) {
return prepareStringArray(decodeScopesFromSession(s));
}

Expand Down Expand Up @@ -345,7 +345,7 @@ private String[] decodeScopesFromSession(Session s) {
return new String[0];
}

public Outcome redirectToLogin(Exchange exc) throws UnsupportedEncodingException {
public Outcome redirectToLogin(Exchange exc) {
exc.setResponse(Response
.redirect(path + "?target=" + URLEncoder.encode(exc.getOriginalRequestUri(), UTF_8), 302)
.dontCache()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ private static void logIgnoringRefSchemas() {
}

private @Nullable String getBaseLocation() {
return router == null ? null : router.getBaseLocation();
return router == null ? null : router.getConfiguration().getBaseLocation();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ private Outcome handleRequestInternal(final Exchange exc) throws Exception {
String resource = null;
if (exc.getRequestURI().endsWith("?wsdl") || exc.getRequestURI().endsWith("?WSDL")) {
processDocuments(exc);
exc.setResponse(webServerInterceptor.createResponse(router.getResolverMap(), resource = combine(router.getBaseLocation(), wsdl)));
exc.setResponse(webServerInterceptor.createResponse(router.getResolverMap(), resource = combine(router.getConfiguration().getBaseLocation(), wsdl)));
exc.getResponse().getHeader().setContentType(TEXT_XML);
}
if (exc.getRequestURI().contains("?xsd=")) {
Expand All @@ -209,7 +209,7 @@ private Outcome handleRequestInternal(final Exchange exc) throws Exception {
if (resource != null) {
WSDLInterceptor wi = new WSDLInterceptor();
wi.setRewriteEndpoint(false);
wi.setPathRewriter(new RelativePathRewriter(exc, combine(router.getBaseLocation(), wsdl)));
wi.setPathRewriter(new RelativePathRewriter(exc, combine(router.getConfiguration().getBaseLocation(), wsdl)));
wi.init(router);
wi.handleResponse(exc);
return RETURN;
Expand Down
Loading
Loading