use of com.tremolosecurity.proxy.filter.HttpFilterChain in project OpenUnison by TremoloSecurity.
the class EmbForward method doEmbResults.
public void doEmbResults(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain, NextSys nextSys) throws ServletException, IOException {
ConfigManager cfg = (ConfigManager) request.getAttribute(ProxyConstants.TREMOLO_CFG_OBJ);
if (((HttpServletRequest) request).getRequestURI().startsWith(cfg.getAuthPath())) {
filterChain.doFilter(request, response);
// nextSys.nextSys((HttpServletRequest) request, (HttpServletResponse) response);
return;
}
boolean isText = false;
UrlHolder holder = (UrlHolder) request.getAttribute(ProxyConstants.AUTOIDM_CFG);
HttpFilterRequest filterReq = new HttpFilterRequestImpl(request, null);
HttpFilterResponse filterResp = new HttpFilterResponseImpl(response);
HttpFilterChain chain = new HttpFilterChainImpl(holder, new EmbPostProc(filterChain));
try {
chain.nextFilter(filterReq, filterResp, chain);
} catch (Exception e) {
logger.error("Error", e);
throw new ServletException(e);
}
}
use of com.tremolosecurity.proxy.filter.HttpFilterChain in project OpenUnison by TremoloSecurity.
the class TokenData method completeFederation.
private void completeFederation(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, MalformedURLException {
final OpenIDConnectTransaction transaction = (OpenIDConnectTransaction) request.getSession().getAttribute(OpenIDConnectIdP.TRANSACTION_DATA);
final AuthInfo authInfo = ((AuthController) request.getSession().getAttribute(ProxyConstants.AUTH_CTL)).getAuthInfo();
if (!authInfo.isAuthComplete()) {
logger.warn("Attempted completetd federation before autthentication is completeed, clearing authentication and redirecting to the original URL");
UrlHolder holder = (UrlHolder) request.getAttribute(ProxyConstants.AUTOIDM_CFG);
request.getSession().removeAttribute(ProxyConstants.AUTH_CTL);
holder.getConfig().createAnonUser(request.getSession());
StringBuffer b = new StringBuffer();
b.append(transaction.getRedirectURI()).append("?error=login_reset");
response.sendRedirect(b.toString());
return;
}
request.setAttribute(AzSys.FORCE, "true");
NextSys completeFed = new NextSys() {
public void nextSys(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {
UrlHolder holder = (UrlHolder) request.getAttribute(ProxyConstants.AUTOIDM_CFG);
HttpFilterRequest filterReq = new HttpFilterRequestImpl(request, null);
HttpFilterResponse filterResp = new HttpFilterResponseImpl(response);
PostProcess postProc = new PostProcess() {
@Override
public void postProcess(HttpFilterRequest req, HttpFilterResponse resp, UrlHolder holder, HttpFilterChain chain) throws Exception {
postResponse(transaction, request, response, authInfo, holder);
}
@Override
public boolean addHeader(String name) {
return false;
}
};
HttpFilterChain chain = new HttpFilterChainImpl(holder, postProc);
try {
chain.nextFilter(filterReq, filterResp, chain);
} catch (Exception e) {
throw new ServletException(e);
}
}
};
AzSys az = new AzSys();
az.doAz(request, response, completeFed);
}
use of com.tremolosecurity.proxy.filter.HttpFilterChain in project OpenUnison by TremoloSecurity.
the class ProxySys method doPush.
public void doPush(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UrlHolder holder = (UrlHolder) req.getAttribute(ProxyConstants.AUTOIDM_CFG);
HttpFilterRequest filterReq = new HttpFilterRequestImpl(req, null);
HttpFilterResponse filterResp = new HttpFilterResponseImpl(resp);
HashMap<String, String> uriParams = (HashMap<String, String>) req.getAttribute("TREMOLO_URI_PARAMS");
if (uriParams == null) {
uriParams = new HashMap<String, String>();
req.setAttribute("TREMOLO_URI_PARAMS", uriParams);
}
uriParams.put("fullURI", req.getRequestURI());
HashSet<String> queryParams = new HashSet<String>();
req.setAttribute(ProxySys.QUERY_PARAMS, queryParams);
String qs = req.getQueryString();
if (qs != null) {
StringTokenizer toker = new StringTokenizer(qs, "&", false);
while (toker.hasMoreTokens()) {
String qsParam = toker.nextToken();
int eqIndex = qsParam.indexOf('=');
String paramName;
if (eqIndex == -1) {
paramName = qsParam;
} else {
paramName = qsParam.substring(0, eqIndex);
}
if (!queryParams.contains(paramName)) {
queryParams.add(paramName);
}
}
}
PostProcess postProc = null;
if (holder.getUrl().getProxyTo() == null || holder.getUrl().getProxyTo().isEmpty()) {
FilterChain filterChain = (FilterChain) req.getAttribute(ProxyConstants.TREMOLO_FILTER_CHAIN);
if (filterChain == null) {
logger.warn("Could not find filter chain");
}
postProc = new EmbPostProc(filterChain);
} else {
postProc = new PushRequestProcess();
;
}
HttpFilterChain chain = new HttpFilterChainImpl(holder, postProc);
try {
chain.nextFilter(filterReq, filterResp, chain);
} catch (Exception e) {
throw new ServletException(e);
}
ProxyData pd = new ProxyData();
pd.setHolder(holder);
pd.setIns(chain.getIns());
pd.setPostProc(postProc);
pd.setRequest(filterReq);
pd.setResponse(filterResp);
pd.setText(chain.isText());
pd.setLogout(chain.isLogout());
pd.setHttpRequestBase(chain.getHttpRequestBase());
req.setAttribute(ProxyConstants.TREMOLO_PRXY_DATA, pd);
}
use of com.tremolosecurity.proxy.filter.HttpFilterChain in project OpenUnison by TremoloSecurity.
the class ProxySys method doURI.
public void doURI(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
boolean isText = false;
UrlHolder holder = (UrlHolder) req.getAttribute(ProxyConstants.AUTOIDM_CFG);
HashMap<String, String> uriParams = (HashMap<String, String>) req.getAttribute("TREMOLO_URI_PARAMS");
if (uriParams == null) {
uriParams = new HashMap<String, String>();
req.setAttribute("TREMOLO_URI_PARAMS", uriParams);
}
uriParams.put("fullURI", req.getRequestURI());
HttpFilterRequest filterReq = new HttpFilterRequestImpl(req, null);
HttpFilterResponse filterResp = new HttpFilterResponseImpl(resp);
PostProcess postProc = null;
if (holder.getUrl().getProxyTo() == null || holder.getUrl().getProxyTo().isEmpty()) {
FilterChain filterChain = (FilterChain) req.getAttribute(ProxyConstants.TREMOLO_FILTER_CHAIN);
if (filterChain == null) {
logger.warn("Could not find filter chain");
}
postProc = new EmbPostProc(filterChain);
} else {
postProc = new UriRequestProcess();
}
HttpFilterChain chain = new HttpFilterChainImpl(holder, postProc);
try {
chain.nextFilter(filterReq, filterResp, chain);
} catch (Exception e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter err = new PrintWriter(new OutputStreamWriter(baos));
e.printStackTrace(err);
Throwable t = e.getCause();
while (t != null) {
t.printStackTrace(err);
t = t.getCause();
}
logger.error("Error Executing Request : " + new String(baos.toByteArray()));
throw new ServletException("Could not execute request", e);
}
ProxyData pd = new ProxyData();
pd.setHolder(holder);
pd.setIns(chain.getIns());
pd.setPostProc(postProc);
pd.setRequest(filterReq);
pd.setResponse(filterResp);
pd.setText(chain.isText());
pd.setLogout(chain.isLogout());
pd.setHttpRequestBase(chain.getHttpRequestBase());
req.setAttribute(ProxyConstants.TREMOLO_PRXY_DATA, pd);
}
use of com.tremolosecurity.proxy.filter.HttpFilterChain in project OpenUnison by TremoloSecurity.
the class ConfigSys method procData.
private void procData(HttpFilterRequest req, HttpFilterResponse resp, UrlHolder holder, boolean isText, InputStream ins, PostProcess proc, SessionManager sessionManager) throws IOException, Exception {
byte[] buffer = new byte[10240];
// InputStream in = entity.getContent();
int len;
if (isText) {
BufferedReader in = new BufferedReader(new InputStreamReader(ins));
PrintWriter out = resp.getWriter();
// OutputStream out = resp.getOutputStream();
String line;
HttpFilterChain chain = new HttpFilterChainImpl(holder, proc);
StringBuffer lineBuff = new StringBuffer();
StringBuffer data = new StringBuffer();
while ((line = in.readLine()) != null) {
lineBuff.setLength(0);
lineBuff.append(line);
if (resp != null) {
chain.nextFilterResponseText(req, resp, chain, lineBuff);
chain.reload();
}
try {
out.println(lineBuff.toString());
// out.write(line.getBytes("UTF-8"));
// out.write("\n".getBytes("UTF-8"));
} catch (Exception e) {
// do nothing
}
// out.flush();
}
// out.flush();
// out.close();
} else {
// req.setAttribute(ProxySys.TREMOLO_BINARY_DATA, baos.toByteArray());
// InputStream in = entity.getContent();
OutputStream out = resp.getOutputStream();
try {
while ((len = ins.read(buffer)) != -1) {
try {
out.write(buffer, 0, len);
out.flush();
} catch (Throwable t) {
// ignore write errors
}
}
} catch (ConnectionClosedException e) {
logger.warn("Connection closed prematurely", e);
} catch (SocketException e) {
out.flush();
if (logger.isDebugEnabled()) {
logger.debug("Connection closed by remote host", e);
}
} finally {
shutdownSingleSession(req, holder, sessionManager);
}
// out.flush();
// out.close();
}
}
Aggregations