use of com.tremolosecurity.ldapJson.LdapJsonError in project OpenUnison by TremoloSecurity.
the class LdapOnJson method doFilter.
@Override
public void doFilter(HttpFilterRequest request, HttpFilterResponse response, HttpFilterChain chain) throws Exception {
// every request is distinct, logout immediately
chain.setLogout(true);
request.setAttribute("com.tremolosecurity.unison.proxy.noRedirectOnError", "com.tremolosecurity.unison.proxy.noRedirectOnError");
response.setContentType("application/json");
try {
URL reqURL;
reqURL = new URL(request.getRequestURL().toString());
String[] parts = reqURL.getPath().split("[/]");
if (request.getServletRequest().getMethod().equalsIgnoreCase("get")) {
ldapSearh(request, response, parts);
} else if (request.getServletRequest().getMethod().equalsIgnoreCase("post")) {
String dn = URLDecoder.decode(parts[parts.length - 1], "UTF-8");
LdapJsonBindRequest bindReq = gson.fromJson(new String((byte[]) request.getAttribute(ProxySys.MSG_BODY)), LdapJsonBindRequest.class);
GlobalEntries.getGlobalEntries().getConfigManager().getMyVD().bind(dn, bindReq.getPassword());
// no errors so we're good
response.setContentType("application/json");
response.getWriter().println(gson.toJson(new LdapJsonError()));
} else {
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Invalid operation : '" + request.getMethod() + "'");
}
} catch (LDAPException e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
LdapJsonError err = new LdapJsonError();
err.setResponseCode(e.getResultCode());
err.setErrorMessage(new String(baos.toByteArray()));
response.setStatus(500);
response.getWriter().println(gson.toJson(err));
} catch (Exception e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
LdapJsonError err = new LdapJsonError();
err.setResponseCode(LDAPException.OPERATIONS_ERROR);
err.setErrorMessage(new String(baos.toByteArray()));
response.setStatus(500);
response.getWriter().println(gson.toJson(err));
}
}
use of com.tremolosecurity.ldapJson.LdapJsonError in project OpenUnison by TremoloSecurity.
the class OpenUnisonRestful method bind.
@Override
public void bind(BindInterceptorChain chain, DistinguishedName dn, Password pwd, LDAPConstraints constraints) throws LDAPException {
String localBindDN = this.getRemoteMappedDN(dn.getDN()).toString();
HttpCon con;
try {
con = this.createClient();
} catch (Exception e) {
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Could not create connection", e);
}
try {
LdapJsonBindRequest bindRequest = new LdapJsonBindRequest();
bindRequest.setPassword(new String(pwd.getValue()));
StringBuffer b = new StringBuffer();
b.append(this.uriPath).append('/').append(URLEncoder.encode(localBindDN, "UTF-8"));
StringBuffer urlBuffer = new StringBuffer();
urlBuffer.append(this.urlBase);
urlBuffer.append(b);
HttpPost post = new HttpPost(urlBuffer.toString());
this.addAuthorizationHeader(b.toString(), post);
StringEntity str = new StringEntity(gson.toJson(bindRequest), ContentType.APPLICATION_JSON);
post.setEntity(str);
HttpResponse resp = con.getHttp().execute(post);
String json = EntityUtils.toString(resp.getEntity());
LdapJsonError ldapResponse = gson.fromJson(json, LdapJsonError.class);
if (ldapResponse.getResponseCode() != 0) {
throw new LDAPException(LDAPException.resultCodeToString(ldapResponse.getResponseCode()), ldapResponse.getResponseCode(), ldapResponse.getErrorMessage());
}
} catch (LDAPException e) {
throw e;
} catch (Exception e) {
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Could not create connection", e);
} finally {
if (con != null) {
try {
con.getHttp().close();
} catch (IOException e) {
// no point
}
con.getBcm().close();
}
}
}
use of com.tremolosecurity.ldapJson.LdapJsonError in project OpenUnison by TremoloSecurity.
the class OpenUnisonRestful method search.
@Override
public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
String localBindDN = this.getRemoteMappedDN(base.getDN()).toString();
HttpCon con;
try {
con = this.createClient();
} catch (Exception e) {
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Could not create connection", e);
}
try {
String searchScope;
switch(scope.getValue()) {
case 0:
searchScope = "base";
break;
case 1:
searchScope = "one";
break;
case 2:
searchScope = "sub";
break;
default:
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Unknown search scope : " + scope.getValue());
}
StringBuffer b = new StringBuffer();
b.append(this.uriPath).append('/').append(URLEncoder.encode(localBindDN, "UTF-8")).append('/').append(URLEncoder.encode(searchScope, "UTF-8"));
StringBuffer urlBuffer = new StringBuffer();
urlBuffer.append(this.urlBase).append(b);
urlBuffer.append("?filter=").append(URLEncoder.encode(filter.getRoot().toString(), "UTF-8"));
for (Attribute attribute : attributes) {
urlBuffer.append("&attributes=").append(URLEncoder.encode(attribute.getAttribute().getName(), "UTF-8"));
}
HttpGet get = new HttpGet(urlBuffer.toString());
this.addAuthorizationHeader(b.toString(), get);
HttpResponse resp = con.getHttp().execute(get);
String json = EntityUtils.toString(resp.getEntity());
if (resp.getStatusLine().getStatusCode() == 200) {
ArrayList<Entry> toReturn = new ArrayList<Entry>();
Type listType = new TypeToken<List<LdapJsonEntry>>() {
}.getType();
List<LdapJsonEntry> returned = gson.fromJson(json, listType);
for (LdapJsonEntry fromServer : returned) {
LDAPAttributeSet attrs = new LDAPAttributeSet();
for (String attrName : fromServer.getAttrs().keySet()) {
LDAPAttribute attr = new LDAPAttribute(attrName);
for (String value : fromServer.getAttrs().get(attrName)) {
attr.addValue(value);
}
attrs.add(attr);
}
LDAPEntry ldapEntry = new LDAPEntry(this.getLocalMappedDN(new DN(fromServer.getDn())).toString(), attrs);
toReturn.add(new Entry(ldapEntry));
}
chain.addResult(results, new IteratorEntrySet(toReturn.iterator()), base, scope, filter, attributes, typesOnly, constraints);
} else {
LdapJsonError ldapResponse = gson.fromJson(json, LdapJsonError.class);
throw new LDAPException(LDAPException.resultCodeToString(ldapResponse.getResponseCode()), ldapResponse.getResponseCode(), ldapResponse.getErrorMessage());
}
} catch (LDAPException e) {
throw e;
} catch (Exception e) {
throw new LDAPException(LDAPException.resultCodeToString(LDAPException.OPERATIONS_ERROR), LDAPException.OPERATIONS_ERROR, "Could not create connection", e);
} finally {
if (con != null) {
try {
con.getHttp().close();
} catch (IOException e) {
// no point
}
con.getBcm().close();
}
}
}
Aggregations