Example usage for org.apache.http.impl.conn BasicHttpClientConnectionManager close

List of usage examples for org.apache.http.impl.conn BasicHttpClientConnectionManager close

Introduction

In this page you can find the example usage for org.apache.http.impl.conn BasicHttpClientConnectionManager close.

Prototype

public void close() 

Source Link

Usage

From source file:com.tremolosecurity.unison.proxy.auth.openidconnect.loadUser.LoadAttributesFromWS.java

public Map loadUserAttributesFromIdP(HttpServletRequest request, HttpServletResponse response,
        ConfigManager cfg, HashMap<String, Attribute> authParams, Map accessToken) throws Exception {
    String bearerTokenName = authParams.get("bearerTokenName").getValues().get(0);
    String url = authParams.get("restURL").getValues().get(0);

    BasicHttpClientConnectionManager bhcm = new BasicHttpClientConnectionManager(
            GlobalEntries.getGlobalEntries().getConfigManager().getHttpClientSocketRegistry());
    RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
    CloseableHttpClient http = HttpClients.custom().setConnectionManager(bhcm).setDefaultRequestConfig(rc)
            .build();/*  w  ww  . ja  va 2 s .c  o m*/

    HttpGet get = new HttpGet(url);

    get.addHeader("Authorization", "Bearer " + request.getSession().getAttribute(bearerTokenName));

    CloseableHttpResponse httpResp = http.execute(get);

    BufferedReader in = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent()));

    StringBuffer token = new StringBuffer();

    String line = null;
    while ((line = in.readLine()) != null) {
        token.append(line);
    }

    httpResp.close();
    bhcm.close();

    Map jwtNVP = com.cedarsoftware.util.io.JsonReader.jsonToMaps(token.toString());

    return jwtNVP;

}

From source file:com.tremolosecurity.unison.proxy.auth.openidconnect.OpenIDConnectAuthMech.java

public void doGet(HttpServletRequest request, HttpServletResponse response, AuthStep as)
        throws IOException, ServletException {

    HttpSession session = ((HttpServletRequest) request).getSession();
    HashMap<String, Attribute> authParams = (HashMap<String, Attribute>) session
            .getAttribute(ProxyConstants.AUTH_MECH_PARAMS);
    ConfigManager cfg = (ConfigManager) request.getAttribute(ProxyConstants.TREMOLO_CFG_OBJ);

    MyVDConnection myvd = cfg.getMyVD();

    String bearerTokenName = authParams.get("bearerTokenName").getValues().get(0);
    String clientid = authParams.get("clientid").getValues().get(0);
    String secret = authParams.get("secretid").getValues().get(0);
    String idpURL = authParams.get("idpURL").getValues().get(0);
    String responseType = authParams.get("responseType").getValues().get(0);
    String scope = authParams.get("scope").getValues().get(0);
    boolean linkToDirectory = Boolean.parseBoolean(authParams.get("linkToDirectory").getValues().get(0));
    String noMatchOU = authParams.get("noMatchOU").getValues().get(0);
    String uidAttr = authParams.get("uidAttr").getValues().get(0);
    String lookupFilter = authParams.get("lookupFilter").getValues().get(0);
    String userLookupClassName = authParams.get("userLookupClassName").getValues().get(0);

    String defaultObjectClass = authParams.get("defaultObjectClass").getValues().get(0);

    boolean forceAuth = true;//authParams.get("forceAuthentication") != null ? authParams.get("forceAuthentication").getValues().get(0).equalsIgnoreCase("true") : false;

    UrlHolder holder = (UrlHolder) request.getAttribute(ProxyConstants.AUTOIDM_CFG);
    RequestHolder reqHolder = ((AuthController) session.getAttribute(ProxyConstants.AUTH_CTL)).getHolder();

    StringBuffer b = new StringBuffer();

    URL reqURL = new URL(request.getRequestURL().toString());

    b.append(reqURL.getProtocol()).append("://").append(reqURL.getHost());

    if (reqURL.getPort() != -1) {
        b.append(":").append(reqURL.getPort());
    }/*  w w  w.  j  av a  2 s. co  m*/

    String urlChain = holder.getUrl().getAuthChain();
    AuthChainType act = holder.getConfig().getAuthChains().get(reqHolder.getAuthChainName());

    AuthMechType amt = act.getAuthMech().get(as.getId());

    String authMechName = amt.getName();

    b.append(holder.getConfig().getContextPath()).append(cfg.getAuthMechs().get(authMechName).getUri());

    String hd = authParams.get("hd").getValues().get(0);
    String loadTokenURL = authParams.get("loadTokenURL").getValues().get(0);

    if (request.getParameter("state") == null) {
        //initialize openidconnect

        String state = new BigInteger(130, new SecureRandom()).toString(32);
        request.getSession().setAttribute("UNISON_OPENIDCONNECT_STATE", state);

        StringBuffer redirToSend = new StringBuffer();
        redirToSend.append(idpURL).append("?client_id=").append(URLEncoder.encode(clientid, "UTF-8"))
                .append("&response_type=").append(URLEncoder.encode(responseType, "UTF-8")).append("&scope=")
                .append(URLEncoder.encode(scope, "UTF-8")).append("&redirect_uri=")
                .append(URLEncoder.encode(b.toString(), "UTF-8")).append("&state=")
                .append(URLEncoder.encode("security_token=", "UTF-8"))
                .append(URLEncoder.encode(state, "UTF-8"));

        if (forceAuth) {
            redirToSend.append("&max_age=0");
        }

        if (!hd.isEmpty()) {
            redirToSend.append("&hd=").append(hd);
        }

        response.sendRedirect(redirToSend.toString());

    } else {
        String stateFromURL = request.getParameter("state");
        stateFromURL = URLDecoder.decode(stateFromURL, "UTF-8");
        stateFromURL = stateFromURL.substring(stateFromURL.indexOf('=') + 1);

        String stateFromSession = (String) request.getSession().getAttribute("UNISON_OPENIDCONNECT_STATE");

        if (!stateFromSession.equalsIgnoreCase(stateFromURL)) {
            throw new ServletException("Invalid State");
        }

        HttpUriRequest post = null;

        try {
            post = RequestBuilder.post().setUri(new java.net.URI(loadTokenURL))
                    .addParameter("code", request.getParameter("code")).addParameter("client_id", clientid)
                    .addParameter("client_secret", secret).addParameter("redirect_uri", b.toString())
                    .addParameter("grant_type", "authorization_code").build();
        } catch (URISyntaxException e) {
            throw new ServletException("Could not create post request");
        }

        BasicHttpClientConnectionManager bhcm = new BasicHttpClientConnectionManager(
                GlobalEntries.getGlobalEntries().getConfigManager().getHttpClientSocketRegistry());
        RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
        CloseableHttpClient http = HttpClients.custom().setConnectionManager(bhcm).setDefaultRequestConfig(rc)
                .build();

        CloseableHttpResponse httpResp = http.execute(post);

        BufferedReader in = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent()));

        StringBuffer token = new StringBuffer();

        String line = null;
        while ((line = in.readLine()) != null) {
            token.append(line);
        }

        httpResp.close();
        bhcm.close();

        Gson gson = new Gson();

        Map tokenNVP = com.cedarsoftware.util.io.JsonReader.jsonToMaps(token.toString());

        String accessToken;

        //Store the bearer token for use by Unison
        request.getSession().setAttribute(bearerTokenName, tokenNVP.get("access_token"));

        Map jwtNVP = null;
        LoadUserData loadUser = null;
        try {
            loadUser = (LoadUserData) Class.forName(userLookupClassName).newInstance();
            jwtNVP = loadUser.loadUserAttributesFromIdP(request, response, cfg, authParams, tokenNVP);
        } catch (Exception e) {
            throw new ServletException("Could not load user data", e);
        }

        if (jwtNVP == null) {
            as.setSuccess(false);
        } else {
            if (!linkToDirectory) {
                loadUnlinkedUser(session, noMatchOU, uidAttr, act, jwtNVP, defaultObjectClass);

                as.setSuccess(true);

            } else {
                lookupUser(as, session, myvd, noMatchOU, uidAttr, lookupFilter, act, jwtNVP,
                        defaultObjectClass);
            }

            String redirectToURL = request.getParameter("target");
            if (redirectToURL != null && !redirectToURL.isEmpty()) {
                reqHolder.setURL(redirectToURL);
            }
        }

        holder.getConfig().getAuthManager().nextAuth(request, response, session, false);

    }

}

From source file:com.tremolosecurity.provisioning.customTasks.CallRemoteWorkflow.java

@Override
public boolean doTask(User user, Map<String, Object> request) throws ProvisioningException {

    HashMap<String, Object> newRequest = new HashMap<String, Object>();
    for (String name : this.fromRequest) {
        newRequest.put(name, request.get(name));
    }//from w ww .j  a  va  2s.  c  om

    for (String key : this.staticRequest.keySet()) {
        newRequest.put(key, this.staticRequest.get(key));
    }

    WFCall wfCall = new WFCall();
    wfCall.setName(this.workflowName);
    wfCall.setRequestParams(newRequest);
    wfCall.setUser(new TremoloUser());
    wfCall.getUser().setUid(user.getUserID());
    wfCall.getUser().setUserPassword(user.getPassword());
    wfCall.getUser().setGroups(user.getGroups());
    wfCall.getUser().setAttributes(new ArrayList<Attribute>());
    wfCall.getUser().getAttributes().addAll(user.getAttribs().values());
    wfCall.setUidAttributeName(uidAttributeName);
    wfCall.setReason(task.getWorkflow().getUser().getRequestReason());
    if (task.getWorkflow().getRequester() != null) {
        wfCall.setRequestor(task.getWorkflow().getRequester().getUserID());
    } else {
        wfCall.setRequestor(this.lastMileUser);
    }

    DateTime notBefore = new DateTime();
    notBefore = notBefore.minusSeconds(timeSkew);
    DateTime notAfter = new DateTime();
    notAfter = notAfter.plusSeconds(timeSkew);

    com.tremolosecurity.lastmile.LastMile lastmile = null;

    try {
        lastmile = new com.tremolosecurity.lastmile.LastMile(this.uri, notBefore, notAfter, 0, "oauth2");

    } catch (URISyntaxException e) {
        throw new ProvisioningException("Could not generate lastmile", e);
    }

    Attribute attrib = new Attribute(this.lastMileUid, this.lastMileUser);
    lastmile.getAttributes().add(attrib);
    String encryptedXML = null;

    try {
        encryptedXML = lastmile
                .generateLastMileToken(this.task.getConfigManager().getSecretKey(this.lastmileKeyName));
    } catch (Exception e) {
        throw new ProvisioningException("Could not generate lastmile", e);
    }

    StringBuffer header = new StringBuffer();
    header.append("Bearer ").append(encryptedXML);

    BasicHttpClientConnectionManager bhcm = null;
    CloseableHttpClient http = null;

    try {
        bhcm = new BasicHttpClientConnectionManager(this.task.getConfigManager().getHttpClientSocketRegistry());

        RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).setRedirectsEnabled(false)
                .build();

        http = HttpClients.custom().setConnectionManager(bhcm).setDefaultRequestConfig(rc).build();

        HttpPost post = new HttpPost(this.url);
        post.addHeader(new BasicHeader("Authorization", header.toString()));

        Gson gson = new Gson();
        StringEntity str = new StringEntity(gson.toJson(wfCall), ContentType.APPLICATION_JSON);
        post.setEntity(str);

        HttpResponse resp = http.execute(post);
        if (resp.getStatusLine().getStatusCode() != 200) {
            throw new ProvisioningException("Call failed");
        }

    } catch (IOException e) {
        throw new ProvisioningException("Could not make call", e);
    } finally {
        if (http != null) {
            try {
                http.close();
            } catch (IOException e) {
                logger.warn(e);
            }
        }

        if (bhcm != null) {
            bhcm.close();
        }

    }

    return true;
}

From source file:com.tremolosecurity.unison.proxy.auth.twitter.TwitterAuth.java

public void doGet(HttpServletRequest request, HttpServletResponse response, AuthStep as)
        throws IOException, ServletException {

    HttpSession session = ((HttpServletRequest) request).getSession();
    HashMap<String, Attribute> authParams = (HashMap<String, Attribute>) session
            .getAttribute(ProxyConstants.AUTH_MECH_PARAMS);
    ConfigManager cfg = (ConfigManager) request.getAttribute(ProxyConstants.TREMOLO_CFG_OBJ);

    MyVDConnection myvd = cfg.getMyVD();

    String consumerKey = authParams.get("consumerKey").getValues().get(0);
    String consumerSecret = authParams.get("consumerSecret").getValues().get(0);
    String accessToken = authParams.get("accessToken").getValues().get(0);
    String accessSecret = authParams.get("accessSecret").getValues().get(0);

    boolean linkToDirectory = Boolean.parseBoolean(authParams.get("linkToDirectory").getValues().get(0));
    String noMatchOU = authParams.get("noMatchOU").getValues().get(0);
    String uidAttr = authParams.get("uidAttr").getValues().get(0);
    String lookupFilter = authParams.get("lookupFilter").getValues().get(0);
    //String userLookupClassName = authParams.get("userLookupClassName").getValues().get(0);

    UrlHolder holder = (UrlHolder) request.getAttribute(ProxyConstants.AUTOIDM_CFG);
    RequestHolder reqHolder = ((AuthController) session.getAttribute(ProxyConstants.AUTH_CTL)).getHolder();

    URL reqURL = new URL(request.getRequestURL().toString());
    String redirectURL = reqURL.getProtocol() + "://" + reqURL.getHost();
    if (reqURL.getPort() != -1) {
        redirectURL += ":" + reqURL.getPort();
    }//  w  ww. j  a v  a 2  s  .c o  m

    String urlChain = holder.getUrl().getAuthChain();
    AuthChainType act = holder.getConfig().getAuthChains().get(reqHolder.getAuthChainName());

    AuthMechType amt = act.getAuthMech().get(as.getId());

    String authMechName = amt.getName();
    redirectURL += cfg.getAuthMechs().get(authMechName).getUri();

    if (request.getParameter("oauth_verifier") == null) {

        BasicHttpClientConnectionManager bhcm = new BasicHttpClientConnectionManager(
                GlobalEntries.getGlobalEntries().getConfigManager().getHttpClientSocketRegistry());
        RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
        CloseableHttpClient http = HttpClients.custom().setConnectionManager(bhcm).setDefaultRequestConfig(rc)
                .build();

        HttpPost post = new HttpPost("https://api.twitter.com/oauth/request_token");

        this.signRequest(post, "", accessToken, accessSecret, consumerKey, consumerSecret);

        CloseableHttpResponse httpResp = http.execute(post);

        BufferedReader in = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent()));

        StringBuffer token = new StringBuffer();

        String line = null;
        while ((line = in.readLine()) != null) {
            token.append(line);
        }

        httpResp.close();
        bhcm.close();

        System.err.println(token);

        List<NameValuePair> parsed = URLEncodedUtils.parse(token.toString(), Charsets.UTF_8);
        HashMap<String, String> accessTokens = new HashMap<String, String>();

        for (NameValuePair nvp : parsed) {
            accessTokens.put(nvp.getName(), nvp.getValue());
        }

        request.getSession().setAttribute("twitterAccessToken", accessTokens);

        StringBuffer b = new StringBuffer().append("https://api.twitter.com/oauth/authenticate?oauth_token=")
                .append(accessTokens.get("oauth_token"));
        response.sendRedirect(b.toString());
    } else {
        String oauthVerifier = request.getParameter("oauth_verifier");
        HashMap<String, String> accessTokens = (HashMap<String, String>) request.getSession()
                .getAttribute("twitterAccessToken");

        BasicHttpClientConnectionManager bhcm = new BasicHttpClientConnectionManager(
                GlobalEntries.getGlobalEntries().getConfigManager().getHttpClientSocketRegistry());
        RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
        CloseableHttpClient http = HttpClients.custom().setConnectionManager(bhcm).setDefaultRequestConfig(rc)
                .build();

        HttpUriRequest post = new HttpPost();

        try {
            post = RequestBuilder.post().setUri(new java.net.URI("https://api.twitter.com/oauth/access_token"))
                    .addParameter("oauth_verifier", oauthVerifier).build();
        } catch (URISyntaxException e) {
            throw new ServletException("Could not create post request");
        }

        this.signRequest(post, "oauth_verifier=" + oauthVerifier, accessTokens.get("oauth_token"),
                accessTokens.get("oauth_token_secret"), consumerKey, consumerSecret);

        CloseableHttpResponse httpResp = http.execute(post);

        BufferedReader in = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent()));

        StringBuffer token = new StringBuffer();

        String line = null;
        while ((line = in.readLine()) != null) {
            token.append(line);
        }

        EntityUtils.consumeQuietly(httpResp.getEntity());
        httpResp.close();

        System.err.println(token);

        List<NameValuePair> parsed = URLEncodedUtils.parse(token.toString(), Charsets.UTF_8);
        HashMap<String, String> userTokens = new HashMap<String, String>();

        for (NameValuePair nvp : parsed) {
            userTokens.put(nvp.getName(), nvp.getValue());
        }

        request.getSession().setAttribute("twitterUserToken", accessTokens);

        HttpGet get = new HttpGet(
                "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true");
        this.signRequest(get, "", userTokens.get("oauth_token"), userTokens.get("oauth_token_secret"),
                consumerKey, consumerSecret);

        httpResp = http.execute(get);

        in = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent()));
        token.setLength(0);

        line = null;
        while ((line = in.readLine()) != null) {
            token.append(line);
        }

        EntityUtils.consumeQuietly(httpResp.getEntity());
        httpResp.close();

        System.err.println(token);

        httpResp.close();
        bhcm.close();

        Map attrs = com.cedarsoftware.util.io.JsonReader.jsonToMaps(token.toString());

        if (!linkToDirectory) {
            loadUnlinkedUser(session, noMatchOU, uidAttr, act, attrs);

            as.setSuccess(true);

        } else {
            lookupUser(as, session, myvd, noMatchOU, uidAttr, lookupFilter, act, attrs);
        }

        String redirectToURL = request.getParameter("target");
        if (redirectToURL != null && !redirectToURL.isEmpty()) {
            reqHolder.setURL(redirectToURL);
        }

        holder.getConfig().getAuthManager().nextAuth(request, response, session, false);

    }

}

From source file:com.tremolosecurity.scalejs.register.ws.ScaleRegister.java

@Override
public void doFilter(HttpFilterRequest request, HttpFilterResponse response, HttpFilterChain chain)
        throws Exception {
    Gson gson = new Gson();
    request.getServletRequest().setAttribute("com.tremolosecurity.unison.proxy.noRedirectOnError",
            "com.tremolosecurity.unison.proxy.noRedirectOnError");
    if (request.getRequestURI().endsWith("/register/config")) {
        response.setContentType("application/json");
        ScaleJSUtils.addCacheHeaders(response);
        response.getWriter().println(gson.toJson(scaleConfig).trim());

    } else if (request.getRequestURI().endsWith("/register/submit")) {
        ScaleError errors = new ScaleError();
        String json = new String((byte[]) request.getAttribute(ProxySys.MSG_BODY));
        NewUserRequest newUser = gson.fromJson(json, NewUserRequest.class);

        if (scaleConfig.isRequireReCaptcha()) {
            if (newUser.getReCaptchaCode() == null || newUser.getReCaptchaCode().isEmpty()) {
                errors.getErrors().add("Please verify you are not a robot");
            } else {
                BasicHttpClientConnectionManager bhcm = new BasicHttpClientConnectionManager(
                        GlobalEntries.getGlobalEntries().getConfigManager().getHttpClientSocketRegistry());
                RequestConfig rc = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
                CloseableHttpClient http = HttpClients.custom().setConnectionManager(bhcm)
                        .setDefaultRequestConfig(rc).build();
                HttpPost httppost = new HttpPost("https://www.google.com/recaptcha/api/siteverify");

                List<NameValuePair> formparams = new ArrayList<NameValuePair>();
                formparams.add(new BasicNameValuePair("secret", scaleConfig.getRcSecretKey()));
                formparams.add(new BasicNameValuePair("response", newUser.getReCaptchaCode()));
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

                httppost.setEntity(entity);

                CloseableHttpResponse resp = http.execute(httppost);

                ReCaptchaResponse res = gson.fromJson(EntityUtils.toString(resp.getEntity()),
                        ReCaptchaResponse.class);

                if (!res.isSuccess()) {
                    errors.getErrors().add("Human validation failed");
                }/*from   w ww . j  a v  a 2s  .c  om*/

                http.close();
                bhcm.close();

            }
        }

        if (scaleConfig.isRequireTermsAndConditions() && !newUser.isCheckedTermsAndConditions()) {
            errors.getErrors().add("You must accept the terms and conditions to register");
        }

        if (this.scaleConfig.isRequireReason()
                && (newUser.getReason() == null || newUser.getReason().isEmpty())) {
            errors.getErrors().add("Reason is required");
        }

        if (this.scaleConfig.isPreSetPassword()) {
            if (newUser.getPassword() == null || newUser.getPassword().isEmpty()) {
                errors.getErrors().add("Password is required");
            } else if (!newUser.getPassword().equals(newUser.getPassword2())) {
                errors.getErrors().add("Passwords must match");
            }
        }

        for (String attributeName : this.scaleConfig.getAttributes().keySet()) {
            String value = newUser.getAttributes().get(attributeName);

            if (this.scaleConfig.getAttributes().get(attributeName) == null) {
                errors.getErrors().add("Invalid attribute : '" + attributeName + "'");

            }

            if (this.scaleConfig.getAttributes().get(attributeName).isReadOnly()) {
                errors.getErrors().add("Attribute is read only : '"
                        + this.scaleConfig.getAttributes().get(attributeName).getDisplayName() + "'");

            }

            if (this.scaleConfig.getAttributes().get(attributeName).isRequired()
                    && (value == null || value.length() == 0)) {
                errors.getErrors().add("Attribute is required : '"
                        + this.scaleConfig.getAttributes().get(attributeName).getDisplayName() + "'");

            }

            if (this.scaleConfig.getAttributes().get(attributeName).getMinChars() > 0
                    && this.scaleConfig.getAttributes().get(attributeName).getMinChars() < value.length()) {
                errors.getErrors().add(this.scaleConfig.getAttributes().get(attributeName).getDisplayName()
                        + " must have at least "
                        + this.scaleConfig.getAttributes().get(attributeName).getMinChars() + " characters");

            }

            if (this.scaleConfig.getAttributes().get(attributeName).getMaxChars() > 0
                    && this.scaleConfig.getAttributes().get(attributeName).getMaxChars() > value.length()) {
                errors.getErrors().add(this.scaleConfig.getAttributes().get(attributeName).getDisplayName()
                        + " must have at most "
                        + this.scaleConfig.getAttributes().get(attributeName).getMaxChars() + " characters");

            }

            if (this.scaleConfig.getAttributes().get(attributeName).getType().equalsIgnoreCase("list")) {
                boolean found = false;
                for (NVP nvp : this.scaleConfig.getAttributes().get(attributeName).getValues()) {
                    if (nvp.getValue().equalsIgnoreCase(value)) {
                        found = true;
                    }
                }

                if (!found) {
                    errors.getErrors().add(this.scaleConfig.getAttributes().get(attributeName).getDisplayName()
                            + " has an invalid value");
                }
            }

            if (this.scaleConfig.getAttributes().get(attributeName).getPattern() != null) {
                boolean ok = true;
                try {
                    Matcher m = this.scaleConfig.getAttributes().get(attributeName).getPattern().matcher(value);
                    if (m == null || !m.matches()) {
                        ok = false;
                    }
                } catch (Exception e) {
                    ok = false;
                }

                if (!ok) {
                    errors.getErrors().add("Attribute value not valid : '"
                            + this.scaleConfig.getAttributes().get(attributeName).getDisplayName() + "' - "
                            + this.scaleConfig.getAttributes().get(attributeName).getRegExFailedMsg());
                }
            }

            if (this.scaleConfig.getAttributes().get(attributeName).isUnique()) {
                String filter = equal(attributeName, value).toString();

                LDAPSearchResults res = GlobalEntries.getGlobalEntries().getConfigManager().getMyVD().search(
                        GlobalEntries.getGlobalEntries().getConfigManager().getCfg().getLdapRoot(), 2, filter,
                        new ArrayList<String>());
                if (res.hasMore()) {
                    errors.getErrors().add(this.scaleConfig.getAttributes().get(attributeName).getDisplayName()
                            + " is not available");
                }
                while (res.hasMore())
                    res.next();
            }
        }

        WFCall wfcall = null;
        String wfName = this.scaleConfig.getWorkflowName();
        if (errors.getErrors().isEmpty()) {
            if (scaleConfig.isUseCustomSubmission()) {

                AuthInfo userData = ((AuthController) request.getSession()
                        .getAttribute(ProxyConstants.AUTH_CTL)).getAuthInfo();

                wfName = cru.createTremoloUser(newUser, errors.getErrors(), userData);
            }
        }

        if (errors.getErrors().isEmpty()) {
            TremoloUser user = new TremoloUser();

            AuthInfo userData = ((AuthController) request.getSession().getAttribute(ProxyConstants.AUTH_CTL))
                    .getAuthInfo();

            if (this.scaleConfig.isSubmitLoggedInUser()) {
                user.setUid(
                        userData.getAttribs().get(this.scaleConfig.getUidAttributeName()).getValues().get(0));
                user.getAttributes().add(new Attribute(this.scaleConfig.getUidAttributeName(),
                        userData.getAttribs().get(this.scaleConfig.getUidAttributeName()).getValues().get(0)));
            } else {
                user.setUid(newUser.getAttributes().get(this.scaleConfig.getUidAttributeName()));
            }

            for (String attrName : newUser.getAttributes().keySet()) {
                user.getAttributes().add(new Attribute(attrName, newUser.getAttributes().get(attrName)));
            }

            if (this.scaleConfig.isPreSetPassword()) {
                user.setUserPassword(newUser.getPassword());

            }

            wfcall = new WFCall();
            wfcall.setUidAttributeName(this.scaleConfig.getUidAttributeName());
            wfcall.setReason(newUser.getReason());
            wfcall.setName(wfName);
            wfcall.setUser(user);

            HashMap<String, Object> params = new HashMap<String, Object>();
            wfcall.setRequestParams(params);

            if (userData.getAuthLevel() != 0 && !this.scaleConfig.isSubmitLoggedInUser()) {
                wfcall.setRequestor(
                        userData.getAttribs()
                                .get(GlobalEntries.getGlobalEntries().getConfigManager().getCfg()
                                        .getProvisioning().getApprovalDB().getUserIdAttribute())
                                .getValues().get(0));
                wfcall.getRequestParams().put(Approval.SEND_NOTIFICATION, "false");
                wfcall.getRequestParams().put(Approval.REASON, newUser.getReason());
                wfcall.getRequestParams().put(Approval.IMMEDIATE_ACTION, "true");
            }

            ExecuteWorkflow exec = new ExecuteWorkflow();

            try {
                exec.execute(wfcall, GlobalEntries.getGlobalEntries().getConfigManager());
            } catch (Exception e) {
                throw new ProvisioningException("Could not complete registration", e);
            }

            SubmitResponse res = new SubmitResponse();
            res.setAddNewUsers(userData.getAuthLevel() != 0);
            ScaleJSUtils.addCacheHeaders(response);
            response.getWriter().print(gson.toJson(res));
            response.getWriter().flush();

        } else {
            response.setStatus(500);
            ScaleJSUtils.addCacheHeaders(response);
            response.getWriter().print(gson.toJson(errors).trim());
            response.getWriter().flush();
        }

    } else {
        response.setStatus(500);
        ScaleJSUtils.addCacheHeaders(response);
        ScaleError error = new ScaleError();
        error.getErrors().add("Operation not supported");
        response.getWriter().print(gson.toJson(error).trim());
        response.getWriter().flush();
    }

}