Search in sources :

Example 21 with Path

use of com.predic8.membrane.core.config.Path in project service-proxy by membrane.

the class MessageAnalyserTest method getResponse.

private Exchange getResponse(String path) throws IOException {
    Exchange exc = new Exchange(null);
    exc.setResponse(Response.ok().body(getClass().getClassLoader().getResourceAsStream(path), true).build());
    return exc;
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange)

Example 22 with Path

use of com.predic8.membrane.core.config.Path in project service-proxy by membrane.

the class WADLInterceptorTest method testProtocolHostAndPort.

@Test
public void testProtocolHostAndPort() throws Exception {
    Exchange exc = getExchange();
    interceptor.setPort("443");
    interceptor.setProtocol("https");
    interceptor.setHost("abc.de");
    assertEquals(interceptor.handleResponse(exc), Outcome.CONTINUE);
    assertAttribute(exc, "//wadl:resources/@base", "https://abc.de/search/V1/");
    assertAttribute(exc, "//wadl:resource/@path", "newsSearch");
    assertAttribute(exc, "//wadl:grammars/wadl:include[1]/@href", "https://abc.de/search.xsd");
    assertAttribute(exc, "//wadl:grammars/wadl:include[2]/@href", "https://abc.de/error/Error.xsd");
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) Test(org.junit.Test)

Example 23 with Path

use of com.predic8.membrane.core.config.Path in project service-proxy by membrane.

the class OAuth2ResourceInterceptor method handleRequest.

public boolean handleRequest(Exchange exc, String state, String publicURL, Session session) throws Exception {
    String path = uriFactory.create(exc.getDestinations().get(0)).getPath();
    if (path == null)
        return false;
    if (path.endsWith("/oauth2callback")) {
        try {
            Map<String, String> params = URLParamUtil.getParams(uriFactory, exc);
            String state2 = params.get("state");
            if (state2 == null)
                throw new RuntimeException("No CSRF token.");
            Map<String, String> param = URLParamUtil.parseQueryString(state2);
            if (param == null || !param.containsKey("security_token"))
                throw new RuntimeException("No CSRF token.");
            boolean csrfMatch = false;
            for (String state3 : stateToOriginalUrl.keySet()) if (param.get("security_token").equals(state3))
                csrfMatch = true;
            if (!csrfMatch)
                throw new RuntimeException("CSRF token mismatch.");
            Request originalRequest = stateToOriginalUrl.get(param.get("security_token"));
            String url = originalRequest.getUri();
            if (url == null)
                url = "/";
            stateToOriginalUrl.remove(state2);
            if (log.isDebugEnabled())
                log.debug("CSRF token match.");
            String code = params.get("code");
            if (code == null)
                throw new RuntimeException("No code received.");
            Exchange e = new Request.Builder().post(auth.getTokenEndpoint()).header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded").header(Header.ACCEPT, "application/json").header(Header.USER_AGENT, Constants.USERAGENT).body("code=" + code + "&client_id=" + auth.getClientId() + "&client_secret=" + auth.getClientSecret() + "&redirect_uri=" + publicURL + "oauth2callback" + "&grant_type=authorization_code").buildExchange();
            LogInterceptor logi = null;
            if (log.isDebugEnabled()) {
                logi = new LogInterceptor();
                logi.setHeaderOnly(false);
                logi.handleRequest(e);
            }
            Response response = auth.doRequest(e);
            if (response.getStatusCode() != 200) {
                response.getBody().read();
                throw new RuntimeException("Authentication server returned " + response.getStatusCode() + ".");
            }
            if (log.isDebugEnabled())
                logi.handleResponse(e);
            HashMap<String, String> json = Util.parseSimpleJSONResponse(response);
            if (!json.containsKey("access_token"))
                throw new RuntimeException("No access_token received.");
            // and also "scope": "", "token_type": "bearer"
            String token = (String) json.get("access_token");
            OAuth2AnswerParameters oauth2Answer = new OAuth2AnswerParameters();
            synchronized (session) {
                // saving for logout
                session.getUserAttributes().put("access_token", token);
            }
            oauth2Answer.setAccessToken(token);
            oauth2Answer.setTokenType(json.get("token_type"));
            oauth2Answer.setExpiration(json.get("expires_in"));
            oauth2Answer.setRefreshToken(json.get("refresh_token"));
            oauth2Answer.setReceivedAt(LocalDateTime.now());
            if (json.containsKey("id_token")) {
                if (idTokenIsValid(json.get("id_token")))
                    oauth2Answer.setIdToken(json.get("id_token"));
                else
                    oauth2Answer.setIdToken("INVALID");
            }
            validTokens.put(token, true);
            Exchange e2 = new Request.Builder().get(auth.getUserInfoEndpoint()).header("Authorization", json.get("token_type") + " " + token).header("User-Agent", Constants.USERAGENT).header(Header.ACCEPT, "application/json").buildExchange();
            if (log.isDebugEnabled()) {
                logi.setHeaderOnly(false);
                logi.handleRequest(e2);
            }
            Response response2 = auth.doRequest(e2);
            if (log.isDebugEnabled())
                logi.handleResponse(e2);
            if (response2.getStatusCode() != 200) {
                statistics.accessTokenInvalid();
                throw new RuntimeException("User data could not be retrieved.");
            }
            statistics.accessTokenValid();
            HashMap<String, String> json2 = Util.parseSimpleJSONResponse(response2);
            oauth2Answer.setUserinfo(json2);
            session.getUserAttributes().put(OAUTH2_ANSWER, oauth2Answer.serialize());
            processUserInfo(json2, session);
            exc.setRequest(originalRequest);
            return true;
        } catch (Exception e) {
            exc.setResponse(Response.badRequest().body(e.getMessage()).build());
            return true;
        }
    }
    return false;
}
Also used : CacheBuilder(com.google.common.cache.CacheBuilder) Request(com.predic8.membrane.core.http.Request) ParseException(com.floreysoft.jmte.message.ParseException) IOException(java.io.IOException) Exchange(com.predic8.membrane.core.exchange.Exchange) Response(com.predic8.membrane.core.http.Response) LogInterceptor(com.predic8.membrane.core.interceptor.LogInterceptor)

Example 24 with Path

use of com.predic8.membrane.core.config.Path in project service-proxy by membrane.

the class AMStatisticsCollector method sendJsonToElasticSearch.

private void sendJsonToElasticSearch(String path, String json) throws Exception {
    Response resp = null;
    synchronized (client) {
        Exchange exc = new Request.Builder().put(getElasticSearchPath(path)).body(json).buildExchange();
        if (clientId != null && clientSecret != null)
            exc.getRequest().getHeader().add(Header.AUTHORIZATION, "Basic " + new String(Base64.encodeBase64((clientId + ":" + clientSecret).getBytes("UTF-8")), "UTF-8"));
        resp = client.call(exc).getResponse();
    }
    if (!resp.isOk())
        log.warn("Could not send statistics to elastic search instance. Response: " + resp.getStatusCode() + " - " + resp.getStatusMessage() + " - " + resp.getBodyAsStringDecoded());
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange)

Example 25 with Path

use of com.predic8.membrane.core.config.Path in project service-proxy by membrane.

the class GroovyInterceptor method logGroovyException.

private void logGroovyException(Flow flow, Exception e) {
    try {
        ServiceProxy sp = getRule();
        log.error("Exception in Groovy script in service proxy '" + sp.getName() + "' on port " + sp.getPort() + " with path " + (sp.getPath() != null ? sp.getPath().getValue() : "*"));
        if (flow != null)
            log.error("Flow: " + flow.name());
        else
            log.error("There is possibly a syntax error in the groovy script (compilation error)");
    } catch (NoSuchElementException e2) {
    // ignore - logging should not break anything
    } finally {
        e.printStackTrace();
    }
}
Also used : ServiceProxy(com.predic8.membrane.core.rules.ServiceProxy) NoSuchElementException(java.util.NoSuchElementException)

Aggregations

Exchange (com.predic8.membrane.core.exchange.Exchange)8 Test (org.junit.Test)6 Request (com.predic8.membrane.core.http.Request)4 ServiceProxy (com.predic8.membrane.core.rules.ServiceProxy)4 ServiceProxyKey (com.predic8.membrane.core.rules.ServiceProxyKey)4 Process2 (com.predic8.membrane.examples.Process2)3 Definitions (com.predic8.wsdl.Definitions)3 WSDLParser (com.predic8.wsdl.WSDLParser)3 File (java.io.File)3 IOException (java.io.IOException)3 StringWriter (java.io.StringWriter)3 ParseException (com.floreysoft.jmte.message.ParseException)2 Header (com.predic8.membrane.core.http.Header)2 Response (com.predic8.membrane.core.http.Response)2 AbstractServiceProxy (com.predic8.membrane.core.rules.AbstractServiceProxy)2 ProxiesXmlUtil (com.predic8.membrane.examples.ProxiesXmlUtil)2 RequestTemplateCreator (com.predic8.wstool.creator.RequestTemplateCreator)2 SOARequestCreator (com.predic8.wstool.creator.SOARequestCreator)2 MarkupBuilder (groovy.xml.MarkupBuilder)2 MalformedURLException (java.net.MalformedURLException)2