Beispiel #1
0
  @Handler(
      id = "saveMsgProviderInfo",
      input = {
        @HandlerInput(name = "attrMap", type = Map.class, required = true),
        @HandlerInput(name = "configName", type = String.class, required = true),
        @HandlerInput(name = "edit", type = String.class, required = true)
      })
  public static void saveMsgProviderInfo(HandlerContext handlerCtx) {
    Map<String, String> attrMap = (Map<String, String>) handlerCtx.getInputValue("attrMap");
    String edit = (String) handlerCtx.getInputValue("edit");
    String msgSecurityName = attrMap.get("msgSecurityName");
    String configName = (String) handlerCtx.getInputValue("configName");

    try {
      String providerName = URLEncoder.encode((String) attrMap.get("Name"), "UTF-8");
      String providerEndpoint =
          GuiUtil.getSessionValue("REST_URL")
              + "/configs/config/"
              + configName
              + "/security-service/message-security-config/"
              + msgSecurityName
              + "/provider-config/"
              + providerName;

      if (edit.equals("true")) {
        boolean providerExist = RestUtil.get(providerEndpoint).isSuccess();
        if (!providerExist) {
          GuiUtil.handleError(
              handlerCtx,
              GuiUtil.getMessage(
                  COMMON_BUNDLE, "msg.error.noSuchProvider")); // normally won't happen.
          return;
        } else {
          Map<String, Object> providerMap =
              (Map<String, Object>) RestUtil.getEntityAttrs(providerEndpoint, "entity");
          providerMap.put("className", attrMap.get("ClassName"));
          providerMap.put("providerType", attrMap.get("ProviderType"));
          RestUtil.restRequest(providerEndpoint, providerMap, "POST", null, false);
          Map attrs = new HashMap();
          String endpoint =
              GuiUtil.getSessionValue("REST_URL")
                  + "/configs/config/"
                  + configName
                  + "/security-service/message-security-config/"
                  + attrMap.get("msgSecurityName");
          attrs.put("authLayer", attrMap.get("msgSecurityName"));
          if (attrMap.get("defaultProvider") != null
              && attrMap.get("defaultProvider").equals("true")) {
            if (providerMap.get("providerType").equals("client")) {
              attrs.put("defaultClientProvider", providerName);
            } else if (providerMap.get("providerType").equals("server")) {
              attrs.put("defaultProvider", providerName);
            } else if (providerMap.get("providerType").equals("client-server")) {
              attrs.put("defaultProvider", providerName);
              attrs.put("defaultClientProvider", providerName);
            }
          }
          if (attrMap.get("defaultProvider") == null) {
            if (providerMap.get("providerType").equals("client")
                && providerName.equals(attrMap.get("defaultClientProvider"))) {
              attrs.put("defaultClientProvider", "");
            } else if (providerMap.get("providerType").equals("server")
                && providerName.equals(attrMap.get("defaultProvider"))) {
              attrs.put("defaultProvider", "");
            } else if (providerMap.get("providerType").equals("client-server")) {
              if (providerName.equals(attrMap.get("defaultServerProvider"))
                  && providerName.equals(attrMap.get("defaultClientProvider"))) {
                attrs.put("defaultProvider", "");
                attrs.put("defaultClientProvider", "");
              }
            }
          }
          RestUtil.sendUpdateRequest(endpoint, attrs, null, null, null);
        }
      } else {
        String endpoint =
            GuiUtil.getSessionValue("REST_URL")
                + "/configs/config/"
                + configName
                + "/security-service/message-security-config";
        Map attrs = new HashMap();
        if (attrMap.get("defaultProvider") == null) {
          attrMap.put("defaultProvider", "false");
        }
        attrs.put("isdefaultprovider", attrMap.get("defaultProvider"));
        attrs.put("id", attrMap.get("Name"));
        attrs.put("classname", attrMap.get("ClassName"));
        attrs.put("providertype", attrMap.get("ProviderType"));
        attrs.put("layer", attrMap.get("msgSecurityName"));
        attrs.put("target", configName);
        RestUtil.restRequest(endpoint, attrs, "POST", null, false);
      }

      // if we pass in "", backend will throw bean violation, since it only accepts certain values.
      String[] attrList =
          new String[] {
            "Request-AuthSource",
            "Request-AuthRecipient",
            "Response-AuthSource",
            "Response-AuthRecipient"
          };
      for (int i = 0; i < attrList.length; i++) {
        if ("".equals(attrMap.get(attrList[i]))) {
          attrMap.put(attrList[i], null);
        }
      }

      Map reqPolicyMap = new HashMap();
      reqPolicyMap.put("authSource", attrMap.get("Request-AuthSource"));
      reqPolicyMap.put("authRecipient", attrMap.get("Request-AuthRecipient"));
      String reqPolicyEP = providerEndpoint + "/request-policy";
      RestUtil.restRequest(reqPolicyEP, reqPolicyMap, "POST", null, false);

      Map respPolicyMap = new HashMap();
      respPolicyMap.put("authSource", attrMap.get("Response-AuthSource"));
      respPolicyMap.put("authRecipient", attrMap.get("Response-AuthRecipient"));
      String respPolicyEP = providerEndpoint + "/response-policy";
      RestUtil.restRequest(respPolicyEP, respPolicyMap, "POST", null, false);
    } catch (Exception ex) {
      GuiUtil.handleException(handlerCtx, ex);
    }
  }