You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2019/08/28 20:24:28 UTC

[sling-whiteboard] branch master updated (7efb238 -> e676fe6)

This is an automated email from the ASF dual-hosted git repository.

jeb pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git.


    from 7efb238  tweak README
     new ae12a8c  Implementing multiple transformation steps
     new e676fe6  incorporating buffer between the transformation layer

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 transformer/README.md                              |  4 +-
 .../sling/transformer/TransformationContext.java   | 23 ++----
 .../sling/transformer/TransformationStep.java      |  5 +-
 .../sling/transformer/impl/LinkTransformer.java    | 95 ----------------------
 .../sling/transformer/impl/NonceTransformer.java   | 52 ++++++++++++
 .../impl/TransformationContextImpl.java            | 15 ++--
 .../transformer/impl/TransformationFilter.java     | 14 +++-
 .../transformer/impl/TransformationResponse.java   | 11 +--
 .../impl/TransformationStepWrapper.java            |  5 +-
 .../transformer/impl/TransformationWriter.java     | 45 ++++++++--
 10 files changed, 130 insertions(+), 139 deletions(-)
 delete mode 100644 transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
 create mode 100644 transformer/src/main/java/org/apache/sling/transformer/impl/NonceTransformer.java


[sling-whiteboard] 02/02: incorporating buffer between the transformation layer

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit e676fe64ca90e1db52691c6baed2a7ec25e2d340
Author: JE Bailey <je...@apache.org>
AuthorDate: Tue Aug 27 14:37:27 2019 -0400

    incorporating buffer between the transformation layer
---
 transformer/README.md                              |  4 +-
 .../sling/transformer/TransformationContext.java   | 20 +----
 .../sling/transformer/TransformationStep.java      |  3 +
 .../sling/transformer/impl/LinkTransformer.java    | 95 ----------------------
 .../sling/transformer/impl/NonceTransformer.java   | 52 ++++++++++++
 .../impl/TransformationContextImpl.java            | 12 +--
 .../transformer/impl/TransformationFilter.java     |  3 +
 .../transformer/impl/TransformationResponse.java   |  6 +-
 .../transformer/impl/TransformationWriter.java     | 40 +++++++--
 9 files changed, 106 insertions(+), 129 deletions(-)

diff --git a/transformer/README.md b/transformer/README.md
index 40e71e8..c4ba357 100644
--- a/transformer/README.md
+++ b/transformer/README.md
@@ -2,8 +2,6 @@
 
  [![Build Status](https://builds.apache.org/buildStatus/icon?job=Sling/sling-org-apache-sling-rewriter/master)](https://builds.apache.org/job/Sling/job/sling-org-apache-sling-rewriter/job/master) [![Test Status](https://img.shields.io/jenkins/t/https/builds.apache.org/job/Sling/job/sling-org-apache-sling-rewriter/job/master.svg)](https://builds.apache.org/job/Sling/job/sling-org-apache-sling-rewriter/job/master/test_results_analyzer/) [![Maven Central](https://maven-badges.herokuapp.com/ [...]
 
-# Apache Sling Rewriter
+# Apache Sling Transformer
 
 This module is part of the [Apache Sling](https://sling.apache.org) project.
-
-[More details](http://sling.apache.org/documentation/bundles/output-rewriting-pipelines-org-apache-sling-rewriter.html)
diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
index fb355f4..245517d 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
@@ -17,8 +17,8 @@
 package org.apache.sling.transformer;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Stream;
 
@@ -31,29 +31,17 @@ import org.apache.sling.commons.html.HtmlElement;
  */
 public interface TransformationContext {
 
-    /**
-     * The current request.
-     */
     SlingHttpServletRequest getRequest();
 
-    /**
-     * The current response.
-     */
     SlingHttpServletResponse getResponse();
 
-    /**
-     * The writer.
-     */
     PrintWriter getWriter() throws IOException;
 
-    /**
-     * The output stream.
-     */
-    OutputStream getOutputStream() throws IOException;
-
-    Map<String, Object> getStateMap();
+    Map<String, Object> getState();
 
     void next(HtmlElement... elements);
 
     Stream<HtmlElement> getElements();
+    
+    List<TransformationStep> getSteps();
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
index ed1c134..d343ba5 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
@@ -20,6 +20,9 @@ import org.apache.sling.commons.html.HtmlElement;
 
 public interface TransformationStep {
 
+    default void init(TransformationContext context) {
+    }
+
     public void handle(HtmlElement element, TransformationContext context);
 
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java b/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
deleted file mode 100644
index d193d62..0000000
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sling.transformer.impl;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Base64;
-import java.util.Map;
-
-import org.apache.sling.commons.html.HtmlElement;
-import org.apache.sling.commons.html.HtmlElementType;
-import org.apache.sling.commons.html.util.ElementFactory;
-import org.apache.sling.transformer.TransformationContext;
-import org.apache.sling.transformer.TransformationStep;
-import org.osgi.service.component.annotations.Component;
-
-@Component(property = { "extension=html", "path=/content/*", "type=REQUEST" })
-public class LinkTransformer implements TransformationStep {
-
-    private enum State {
-        IN, OUT
-    }
-
-    public void handle(HtmlElement element, TransformationContext process) {
-
-        Map<String, Object> context = process.getStateMap();
-        State current = (State) context.getOrDefault("currentState", State.OUT);
-
-        MessageDigest d = (MessageDigest) context.computeIfAbsent("hash", (value) -> {
-            MessageDigest digest = null;
-            try {
-                digest = MessageDigest.getInstance("SHA-256");
-            } catch (NoSuchAlgorithmException e) {
-                e.printStackTrace();
-            }
-            return digest;
-        });
-
-        switch (current) {
-        case IN:
-            switch (element.getType()) {
-            case END_TAG:
-                context.put("currentState", State.OUT);
-                break;
-            case TEXT:
-                d.update(element.getValue().getBytes());
-                break;
-            default:
-                break;
-            }
-            break;
-        case OUT:
-            switch (element.getType()) {
-            case START_TAG:
-                String tag = element.getValue();
-                if (tag.equals("script") || tag.equals("style")) {
-                    context.put("currentState", State.IN);
-                }
-                break;
-            case END_TAG:
-                if (element.getValue().equalsIgnoreCase("body")) {
-                    String headerValue = Base64.getEncoder().encodeToString(d.digest());
-                    process.getResponse().setHeader("Sucks", headerValue);
-                    HtmlElement br = ElementFactory.create(HtmlElementType.START_TAG, "br");
-                    br.setAttribute("data-hash",headerValue );
-                    process.next(br);
-                }
-                break;
-            default:
-                break;
-            }
-            break;
-        default:
-            break;
-
-        }
-
-        process.next(element);
-    }
-
-}
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/NonceTransformer.java b/transformer/src/main/java/org/apache/sling/transformer/impl/NonceTransformer.java
new file mode 100644
index 0000000..b5be4d1
--- /dev/null
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/NonceTransformer.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.transformer.impl;
+
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.sling.commons.html.HtmlElement;
+import org.apache.sling.commons.html.HtmlElementType;
+import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationStep;
+import org.osgi.service.component.annotations.Component;
+
+@Component(property = { "extension=html", "path=/content/*", "type=REQUEST" })
+public class NonceTransformer implements TransformationStep {
+
+    @Override
+    public void init(TransformationContext context) {
+        String nonce = UUID.randomUUID().toString().replace("-", "");
+        context.getState().put("nonce", nonce);
+        context.getResponse().setHeader("X-nonce", nonce);
+    }
+
+    public void handle(HtmlElement element, TransformationContext context) {
+
+        Map<String, Object> state = context.getState();
+        String nonce = (String)state.get("nonce");
+
+        if (element.getType()== HtmlElementType.START_TAG) {
+            if (element.getValue().equals("script")) {
+                element.setAttribute("nonce", nonce);
+            }
+        }
+        
+        context.next(element);
+    }
+
+}
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
index b62d343..601348b 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
@@ -14,7 +14,6 @@
 package org.apache.sling.transformer.impl;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -50,7 +49,8 @@ public class TransformationContextImpl implements TransformationContext {
     private boolean reset;
     private List<TransformationStep> steps;
 
-    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response, List<TransformationStep> steps) {
+    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response,
+            List<TransformationStep> steps) {
         this.request = request;
         this.response = response;
         this.steps = steps;
@@ -82,7 +82,7 @@ public class TransformationContextImpl implements TransformationContext {
         return list.stream();
     }
 
-    public Map<String, Object> getStateMap() {
+    public Map<String, Object> getState() {
         return context;
     }
 
@@ -95,13 +95,13 @@ public class TransformationContextImpl implements TransformationContext {
     }
 
     @Override
-    public PrintWriter getWriter() throws IOException  {
+    public PrintWriter getWriter() throws IOException {
         return response.getWriter();
     }
 
     @Override
-    public OutputStream getOutputStream() throws IOException {
-        return response.getOutputStream();
+    public List<TransformationStep> getSteps() {
+        return steps;
     }
 
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
index 1787500..0f21d19 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
@@ -80,6 +80,9 @@ public class TransformationFilter implements Filter {
         
         if (slingRequest.getRequestURI().endsWith(".html")){
             TransformationContext context = new TransformationContextImpl(slingRequest, slingResponse, steps);
+            steps.forEach(transformer ->
+                transformer.init(context)
+            );
             response = new TransformationResponse(context);
         }
 
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
index 62b70d5..820bbe1 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
@@ -29,12 +29,12 @@ class TransformationResponse
     private PrintWriter writer;
 
 
-    private TransformationContext process;
+    private TransformationContext context;
 
 
     public TransformationResponse(TransformationContext context) {
         super(context.getResponse());
-        this.process = context;
+        this.context = context;
     }
 
     /**
@@ -44,7 +44,7 @@ class TransformationResponse
      */
     public PrintWriter getWriter() throws IOException {
         if ( this.writer == null ) {
-            this.writer = new PrintWriter(new TransformationWriter(process));
+            this.writer = new PrintWriter(new TransformationWriter(context));
         }
         return writer;
     }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
index 5510b64..ce3a271 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
@@ -18,11 +18,15 @@ package org.apache.sling.transformer.impl;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.util.List;
 import java.util.stream.Collectors;
 
 import org.apache.sling.commons.html.Html;
 import org.apache.sling.commons.html.util.HtmlElements;
 import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationStep;
 
 public class TransformationWriter extends Writer {
 
@@ -30,22 +34,46 @@ public class TransformationWriter extends Writer {
 
     private TransformationStepWrapper wrapper;
 
+    private CharBuffer buffer;
+
+    private List<TransformationStep> steps;
+
     public TransformationWriter(TransformationContext context) throws IOException {
+        super();
         this.originalWriter = context.getWriter();
-        this.wrapper = new TransformationStepWrapper(new LinkTransformer(), context);
+        this.wrapper = new TransformationStepWrapper(new NonceTransformer(), context);
+        this.buffer = ByteBuffer.allocate(1024).asCharBuffer();
+        this.steps = context.getSteps();
+        
+   
     }
 
     @Override
     public void write(char[] cbuf, int off, int len) throws IOException {
-        String foo = Html.stream(String.valueOf(cbuf, off, len))
-                .flatMap(wrapper)
-                .map(HtmlElements.TO_HTML)
-                .collect(Collectors.joining());
-        originalWriter.write(foo.toCharArray(), 0, foo.toCharArray().length);
+        if (len + buffer.position() > buffer.limit()) {
+            flushLocal();
+        }
+        if (len < buffer.limit()) {
+            buffer.put(cbuf, off, len);
+        } else {
+            writeLocal(String.valueOf(cbuf, off, len));
+        }
+    }
+    
+    private void flushLocal() throws IOException {
+        buffer.flip();
+        writeLocal(buffer.toString());
+        buffer.clear();
+    }
+    
+    private void writeLocal(String string) throws IOException {
+        String cache = Html.stream(string).flatMap(wrapper).map(HtmlElements.TO_HTML).collect(Collectors.joining());
+        originalWriter.write(cache.toCharArray(), 0, cache.toCharArray().length);
     }
 
     @Override
     public void flush() throws IOException {
+        flushLocal();
         originalWriter.flush();
     }
 


[sling-whiteboard] 01/02: Implementing multiple transformation steps

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit ae12a8cea09920478388c8ad69b5a180f63795f6
Author: JE Bailey <je...@apache.org>
AuthorDate: Fri Aug 23 15:45:38 2019 -0400

    Implementing multiple transformation steps
---
 .../org/apache/sling/transformer/TransformationContext.java   |  5 ++++-
 .../java/org/apache/sling/transformer/TransformationStep.java |  2 +-
 .../org/apache/sling/transformer/impl/LinkTransformer.java    |  4 ++--
 .../sling/transformer/impl/TransformationContextImpl.java     |  7 +++++--
 .../apache/sling/transformer/impl/TransformationFilter.java   | 11 ++++++++---
 .../apache/sling/transformer/impl/TransformationResponse.java |  9 +++++----
 .../sling/transformer/impl/TransformationStepWrapper.java     |  5 +++--
 .../apache/sling/transformer/impl/TransformationWriter.java   |  7 ++++---
 8 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
index 9aa3110..fb355f4 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -50,7 +51,9 @@ public interface TransformationContext {
      */
     OutputStream getOutputStream() throws IOException;
 
-    Map<String, Object> getContext();
+    Map<String, Object> getStateMap();
 
     void next(HtmlElement... elements);
+
+    Stream<HtmlElement> getElements();
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
index 3a6e2d3..ed1c134 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
@@ -20,6 +20,6 @@ import org.apache.sling.commons.html.HtmlElement;
 
 public interface TransformationStep {
 
-    public void handle(HtmlElement element, TransformationContext process);
+    public void handle(HtmlElement element, TransformationContext context);
 
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java b/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
index 6755e99..d193d62 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
@@ -37,7 +37,7 @@ public class LinkTransformer implements TransformationStep {
 
     public void handle(HtmlElement element, TransformationContext process) {
 
-        Map<String, Object> context = process.getContext();
+        Map<String, Object> context = process.getStateMap();
         State current = (State) context.getOrDefault("currentState", State.OUT);
 
         MessageDigest d = (MessageDigest) context.computeIfAbsent("hash", (value) -> {
@@ -74,7 +74,7 @@ public class LinkTransformer implements TransformationStep {
             case END_TAG:
                 if (element.getValue().equalsIgnoreCase("body")) {
                     String headerValue = Base64.getEncoder().encodeToString(d.digest());
-                    process.getResponse().setHeader("X-Sucks", headerValue);
+                    process.getResponse().setHeader("Sucks", headerValue);
                     HtmlElement br = ElementFactory.create(HtmlElementType.START_TAG, "br");
                     br.setAttribute("data-hash",headerValue );
                     process.next(br);
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
index 116aa43..b62d343 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.commons.html.Html;
 import org.apache.sling.commons.html.HtmlElement;
 import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationStep;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -47,10 +48,12 @@ public class TransformationContextImpl implements TransformationContext {
     private SlingHttpServletRequest request;
     private SlingHttpServletResponse response;
     private boolean reset;
+    private List<TransformationStep> steps;
 
-    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response) {
+    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response, List<TransformationStep> steps) {
         this.request = request;
         this.response = response;
+        this.steps = steps;
     }
 
     /**
@@ -79,7 +82,7 @@ public class TransformationContextImpl implements TransformationContext {
         return list.stream();
     }
 
-    public Map<String, Object> getContext() {
+    public Map<String, Object> getStateMap() {
         return context;
     }
 
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
index 15c31b8..1787500 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
@@ -17,6 +17,7 @@
 package org.apache.sling.transformer.impl;
 
 import java.io.IOException;
+import java.util.List;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -27,6 +28,8 @@ import javax.servlet.ServletResponse;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationManager;
 import org.apache.sling.transformer.TransformationStep;
 import org.osgi.framework.Constants;
 import org.osgi.service.component.annotations.Component;
@@ -41,7 +44,7 @@ import org.osgi.service.component.annotations.Reference;
 public class TransformationFilter implements Filter {
 
     @Reference
-    private TransformationStep pipelineManager;
+    private TransformationManager manager;
 
     /**
      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
@@ -73,9 +76,11 @@ public class TransformationFilter implements Filter {
         final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
         final SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;
         
+        List<TransformationStep> steps = manager.getSteps(slingRequest);
+        
         if (slingRequest.getRequestURI().endsWith(".html")){
-            TransformationContextImpl stepProcess = new TransformationContextImpl(slingRequest, slingResponse);
-            response = new TransformationResponse(stepProcess);
+            TransformationContext context = new TransformationContextImpl(slingRequest, slingResponse, steps);
+            response = new TransformationResponse(context);
         }
 
         chain.doFilter(request, response);
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
index 6e779ef..62b70d5 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.PrintWriter;
 
 import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+import org.apache.sling.transformer.TransformationContext;
 
 class TransformationResponse
     extends SlingHttpServletResponseWrapper {
@@ -28,12 +29,12 @@ class TransformationResponse
     private PrintWriter writer;
 
 
-    private TransformationContextImpl process;
+    private TransformationContext process;
 
 
-    public TransformationResponse(TransformationContextImpl process) {
-        super(process.getResponse());
-        this.process = process;
+    public TransformationResponse(TransformationContext context) {
+        super(context.getResponse());
+        this.process = context;
     }
 
     /**
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
index 3fe406d..c22bb93 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
@@ -20,6 +20,7 @@ import java.util.function.Function;
 import java.util.stream.Stream;
 
 import org.apache.sling.commons.html.HtmlElement;
+import org.apache.sling.transformer.TransformationContext;
 import org.apache.sling.transformer.TransformationStep;
 
 /**
@@ -30,9 +31,9 @@ import org.apache.sling.transformer.TransformationStep;
 public class TransformationStepWrapper implements Function<HtmlElement, Stream<HtmlElement>> {
 
     private TransformationStep tStep;
-    private TransformationContextImpl transformationContext;
+    private TransformationContext transformationContext;
 
-    public TransformationStepWrapper(TransformationStep step,TransformationContextImpl context) {
+    public TransformationStepWrapper(TransformationStep step,TransformationContext context) {
         this.tStep = step;
         this.transformationContext = context;
     }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
index e84b8a4..5510b64 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
@@ -22,6 +22,7 @@ import java.util.stream.Collectors;
 
 import org.apache.sling.commons.html.Html;
 import org.apache.sling.commons.html.util.HtmlElements;
+import org.apache.sling.transformer.TransformationContext;
 
 public class TransformationWriter extends Writer {
 
@@ -29,9 +30,9 @@ public class TransformationWriter extends Writer {
 
     private TransformationStepWrapper wrapper;
 
-    public TransformationWriter(TransformationContextImpl process) throws IOException {
-        this.originalWriter = process.getWriter();
-        this.wrapper = new TransformationStepWrapper(new LinkTransformer(), process);
+    public TransformationWriter(TransformationContext context) throws IOException {
+        this.originalWriter = context.getWriter();
+        this.wrapper = new TransformationStepWrapper(new LinkTransformer(), context);
     }
 
     @Override