Beispiel #1
0
  public void generate(
      UserInfoInterface userInfo, ProcessData process, ParserContext ch, Field field, boolean even)
      throws SAXException {
    Logger.info(userInfo.getUtilizador(), this, "generate", "Generating from template");
    // TODO if disabled, return;

    String template = field.getProperties().get("template");

    IFlowData flow = BeanFactory.getFlowHolderBean().getFlow(userInfo, process.getFlowId());
    Form formTemplate = null;
    if (flow != null) formTemplate = flow.getFormTemplate(template);
    if (null == formTemplate) {
      // ignore or throw error?
      Logger.error(
          userInfo.getUtilizador(),
          this,
          "generate",
          "Could not parse template: '" + template + "'");
      ch.startElement("field");
      ch.addElement("type", "message");
      ch.addElement("text", "Template de formulário inválida");
      ch.addElement("even_field", String.valueOf(even));
      ch.endElement("field");
      return;
    }

    // allways get first tab
    Tab tab = formTemplate.getTabs().get(0);
    for (Field subField : tab.getFields()) {
      IWidget subfieldWidget = newWidget(subField.getType());
      subfieldWidget.generate(userInfo, process, ch, subField, even);
      even = !even;
    }
  }
  public DBTable getTableDescription(String dbPool, String schema, String table) {
    DBTable retObj = new DBTable(schema, table);

    if (StringUtils.isBlank(table)) {
      Logger.error(null, this, "getTableDescription", "Table name is empty!");
      return retObj;
    }

    Connection db = null;
    Statement st = null;
    ResultSet rs = null;
    try {
      if (StringUtils.isBlank(dbPool)) {
        db = Utils.getDataSource().getConnection();
      } else {
        db = Utils.getUserDataSource(dbPool).getConnection();
      }
      st = db.createStatement();
      if (StringUtils.isNotBlank(schema)) {
        table = schema + "." + table;
      }
      String query = "DESC " + table;
      if (Logger.isDebugEnabled()) {
        Logger.debug(null, this, "getTableDescription", "QUERY=" + query);
      }
      rs = st.executeQuery(query);
      DBTableHelper.clearCache();
      while (rs.next()) {
        ResultSetMetaData data = rs.getMetaData();
        for (int i = 1; i <= data.getColumnCount(); i++) {
          String name = data.getColumnName(i);
          String value = rs.getString(i);
          if (StringUtils.isBlank(value)) {
            value = "";
          }
          DBTableHelper.addItem(retObj, name, value, -1);
        }
      }
      if (retObj.getFields() != null) {
        List<String> conds = new ArrayList<String>();
        for (int i = 0; i < retObj.getFields().size(); i++) {
          String sKey = DBTableHelper.getListValue(retObj.getKeys(), i);
          boolean bCond = Utils.string2bool(DBTableHelper.getListValue(retObj.getConds(), i));
          conds.add(((bCond || StringUtils.containsIgnoreCase(sKey, "PRI")) ? "1" : "0"));
        }
        retObj.setConds(conds);
      }
      DBTableHelper.clearCache();
    } catch (SQLException e) {
      Logger.error(null, this, "getTableDescription", "SQLException caught: ", e);
    } finally {
      DatabaseInterface.closeResources(db, st, rs);
    }
    return retObj;
  }
Beispiel #3
0
  /**
   * Executes the block main action
   *
   * @param dataSet a value of type 'DataSet'
   * @return the port to go to the next block
   */
  public Port after(UserInfoInterface userInfo, ProcessData procData) {
    Port outPort;

    String login = userInfo.getUtilizador();

    try {
      String sCondition = null;
      boolean bEvalResult = false;

      sCondition = this.getAttribute("condition");

      if (StringUtils.isEmpty(sCondition)) {
        Logger.warning(
            login,
            this,
            "after",
            procData.getSignature() + "empty condition to evaluate!! Assuming false");
        bEvalResult = false;
      } else {
        try {
          bEvalResult = procData.query(userInfo, sCondition);
          Logger.debug(login, this, "after", sCondition + " evaluated " + bEvalResult);
        } catch (Exception ei) {
          bEvalResult = false;
          Logger.error(
              login,
              this,
              "after",
              procData.getSignature()
                  + "caught exception evaluation condition (assuming false): "
                  + sCondition,
              ei);
        }
      }

      if (bEvalResult) {
        outPort = portTrue;
      } else {
        outPort = portFalse;
      }

      this.addToLog(
          "Evaluated '" + sCondition + "' to '" + bEvalResult + "', using " + outPort.getName());
    } catch (Exception e) {
      Logger.error(
          login, this, "after", procData.getSignature() + "caught exception: " + e.getMessage(), e);
      outPort = portFalse;
    }

    this.addToLog("Using '" + outPort.getName() + "';");
    this.saveLogs(userInfo, procData, this);

    return outPort;
  }
  /**
   * Executes the block main action
   *
   * @param dataSet a value of type 'DataSet'
   * @return the port to go to the next block
   */
  public Port after(UserInfoInterface userInfo, ProcessData procData) {
    Port outPort = portFalse;

    try {

      String sLogin = null;
      String sPass = null;

      sLogin = this.getAttribute(LOGIN_ATTR);
      sLogin = procData.transform(userInfo, sLogin);

      try {
        sPass = procData.transform(userInfo, this.getAttribute(PASS_ATTR));
      } catch (Exception ee) {
      }

      AuthProfile ap = BeanFactory.getAuthProfileBean();

      boolean bOk = ap.checkUser(sLogin, sPass);

      Logger.info(
          userInfo.getUtilizador(),
          this,
          "after",
          "["
              + procData.getFlowId()
              + ","
              + procData.getPid()
              + ","
              + procData.getSubPid()
              + "] "
              + "checked authentication for "
              + sLogin
              + ": "
              + bOk);

      if (bOk) {
        outPort = portTrue;
      } else {
        outPort = portFalse;
      }
    } catch (Exception e) {
      Logger.error(
          userInfo.getUtilizador(),
          this,
          "after",
          procData.getSignature(this.getId()) + "Exception caught: " + e.getMessage());
      e.printStackTrace();
    }

    return outPort;
  }
Beispiel #5
0
  /**
   * Upgrades the given flow to the given version.
   *
   * @see #VERSION_4X
   * @param version Version we wish to upgrade to.
   * @param flow Flow to be upgraded.
   * @return Upgraded flow.
   */
  public static XmlFlow upgradeFlow(String version, XmlFlow flow) {
    if (!StringUtils.equals(flow.getIFlowVersion(), version)) {
      Logger.trace(
          "FlowUpgrade",
          "upgradeFlow",
          "Upgrading flow '"
              + flow.getName()
              + "' from version '"
              + flow.getIFlowVersion()
              + "' to '"
              + version
              + "'.");
      if (StringUtils.equals(version, VERSION_4X)) {
        List<XmlBlock> blocks = new ArrayList<XmlBlock>();
        for (XmlBlock block : flow.getXmlBlock()) {
          block = upgradeBlock(version, block);
          blocks.add(block);
        }
        flow.setXmlBlock(blocks.toArray(new XmlBlock[blocks.size()]));

        flow.setIFlowVersion(VERSION_4X);
      }
    }
    return flow;
  }
Beispiel #6
0
  public void process(
      UserInfoInterface userInfo, ProcessData process, Field field, FormData request) {
    // TODO if readonly or disabled, return;

    String template = field.getProperties().get("template");

    Form formTemplate = null;
    try {
      // FIXME obter a template
      formTemplate = Marshaller.create(Form.class).unmarshall(new JSONObject("{}"));
    } catch (JSONException e) {
      // ignore or throw error?
      Logger.error(
          userInfo.getUtilizador(),
          this,
          "process",
          "Could not parse template: '" + template + "'");
      return;
    }

    Tab tab = formTemplate.getTabs().get(0);
    for (Field subField : tab.getFields()) {
      IWidget subfieldWidget = newWidget(subField.getType());
      subfieldWidget.process(userInfo, process, subField, request);
    }
  }
  public int doStartTag() throws JspException {
    UserInfoInterface userInfo =
        (UserInfoInterface) pageContext.getSession().getAttribute(Const.USER_INFO);

    if (Logger.isDebugEnabled()) {
      Logger.debug(
          userInfo.getUtilizador(),
          this,
          "doStartTag",
          "entered with type '"
              + getType()
              + "', user priviledges: SysAdmin?"
              + userInfo.isSysAdmin()
              + ", OrgAdmin?"
              + userInfo.isOrgAdmin()
              + ", ProcSpv?"
              + userInfo.isProcSupervisor(-1));
    }

    if (getType().equals(TYPE_SYS)) {
      test = userInfo.isSysAdmin();
    } else if (getType().equals(TYPE_BOTH)) {
      test = userInfo.isSysAdmin() || userInfo.isOrgAdmin();
    } else if (getType().equals(TYPE_ORG)) {
      test = userInfo.isOrgAdmin();
    } else if (getType().equals(TYPE_SPV)) {
      test = userInfo.isSysAdmin() || userInfo.isOrgAdmin() || userInfo.isProcSupervisor(-1);
    }

    if (Logger.isDebugEnabled()) {
      Logger.debug(
          userInfo.getUtilizador(),
          this,
          "doStartTag",
          "exit with test?" + test + " and returning=" + (test ? SKIP_BODY : EVAL_BODY_INCLUDE));
    }

    return test ? SKIP_BODY : EVAL_BODY_INCLUDE;
  }
  protected void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    HttpSession session = request.getSession();
    AuthenticationResult result = new AuthenticationResult();
    String samlXMLB64Response = request.getParameter("SAMLResponse");
    // if (StringUtils.isBlank(samlXMLB64Response))
    //	samlXMLB64Response = request.getAttribute("SAMLResponse").toString();
    // samlXMLB64Response = org.apache.commons.lang.StringUtils.replaceChars(samlXMLB64Response, '
    // ', '+');
    // samlXMLB64Response =
    // "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIERlc3RpbmF0aW9uPSJodHRwczovL2JhcmNsYXlzLmNsLmluZm9zaXN0ZW1hLmNvbS9pRmxvdy9zYW1sMi9TU09TZXJ2aWNlIiBJRD0iaWQtcFEtdVlzdUdZTVktdEVyVzgtWlBvRlFYamtBLSIgSXNzdWVJbnN0YW50PSIyMDE0LTEwLTAzVDA5OjMxOjM1WiIgVmVyc2lvbj0iMi4wIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiPmh0dHA6Ly9mZWRlcmF0aW9uLmJhcmNhcGludC5jb20vZmVkL2lkcDwvc2FtbDpJc3N1ZXI+PGRzaWc6U2lnbmF0dXJlIHhtbG5zOmRzaWc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkc2lnOlNpZ25lZEluZm8+PGRzaWc6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkc2lnOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkc2lnOlJlZmVyZW5jZSBVUkk9IiNpZC1wUS11WXN1R1lNWS10RXJXOC1aUG9GUVhqa0EtIj48ZHNpZzpUcmFuc2Zvcm1zPjxkc2lnOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzaWc6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kc2lnOlRyYW5zZm9ybXM+PGRzaWc6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiLz48ZHNpZzpEaWdlc3RWYWx1ZT51cFBxY1IwYlAwMThCdHRpRmNZWHNxNytFdDQ9PC9kc2lnOkRpZ2VzdFZhbHVlPjwvZHNpZzpSZWZlcmVuY2U+PC9kc2lnOlNpZ25lZEluZm8+PGRzaWc6U2lnbmF0dXJlVmFsdWU+enlkcEdqc2J5dEdrc2JEYWNrdjh1Ym01d2htaEpUT2Q0SGwrTkhVK3hsTm9lNU5IdGJ0Y2ZsU2tZTGJRK05Mek5FMUdYOGQ4Nlh6R1BCYkN2MkRzN09WbGN6VEV1aDMrRHI0TFV2WWM1Qm1nMDRWT05IZ2Vka09oZFRKUlNabDFTd1Z4NzQ2Ymt3dThCOVp6NVA5VDJ6eGtBdkhlek5yOEwrMXFXOG1MTDhSL1VHMWNLMG5lclNIYzF2VHR4MGFjcWNsUFBZajhoMlBodEFxb21RY3FmK2c5TlRmRnM0M1F0ZUtxdkdVd3dIQm1oTWNSdUtLa1lJbUZ0V3ppY2ZLSWxjeGwvVm9vWldDZHRucVdIWWVxYmlONEZ2dzNtRkZScGRqSHAxZFlpcUlBWTY5RktDMk05OCtyTWFJSlo1cjAzRW1VLzJ0TU1zNDRNYjQyWTlXV1FBPT08L2RzaWc6U2lnbmF0dXJlVmFsdWU+PC9kc2lnOlNpZ25hdHVyZT48c2FtbHA6U3RhdHVzPjxzYW1scDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiLz48L3NhbWxwOlN0YXR1cz48c2FtbDpBc3NlcnRpb24geG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9ImlkLWFMMVQ1LU5wY0p6a0lKR3lxcG1NTjZVT3gtay0iIElzc3VlSW5zdGFudD0iMjAxNC0xMC0wM1QwOTozMTozNVoiIFZlcnNpb249IjIuMCI+PHNhbWw6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6ZW50aXR5Ij5odHRwOi8vZmVkZXJhdGlvbi5iYXJjYXBpbnQuY29tL2ZlZC9pZHA8L3NhbWw6SXNzdWVyPjxkc2lnOlNpZ25hdHVyZSB4bWxuczpkc2lnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHNpZzpTaWduZWRJbmZvPjxkc2lnOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHNpZzpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEiLz48ZHNpZzpSZWZlcmVuY2UgVVJJPSIjaWQtYUwxVDUtTnBjSnprSUpHeXFwbU1ONlVPeC1rLSI+PGRzaWc6VHJhbnNmb3Jtcz48ZHNpZzpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkc2lnOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvZHNpZzpUcmFuc2Zvcm1zPjxkc2lnOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzaWc6RGlnZXN0VmFsdWU+NDNiWTZYR245SmhTSEloSU1FSkR5S3ZENXdNPTwvZHNpZzpEaWdlc3RWYWx1ZT48L2RzaWc6UmVmZXJlbmNlPjwvZHNpZzpTaWduZWRJbmZvPjxkc2lnOlNpZ25hdHVyZVZhbHVlPmVxY2FkazkybHpTcmRxM3N5b2V0KzJta3FwaThiTkFhZUltNTdUK1VsMUE0ang2NEJVZzA0V1B0MUFpenJMaXorSXVQaTZvWHdJNm9sVmFFZHdKRk5xR2VYVk5OalNBSlZuYjBNVVVvd2ErdDBhWldwbFAreWlDNlFEWVBZYjNCN25RSjE2Qk8zaGVNQkpsWVJsbWl0eEE0SDBISit4UzhtVEpYV3hnckVJUVhEZFlIVzdXbVNhWGR5K0c0ZVQ4ZUxZTmJQcHE3bVlVNkI4VXRuZU40VnJIdXFxUkl5eXVSdVdFdk5iSEtGRGpaQVFsK29CcDl3WHpFRm5VOGhWdklEdit5VTN4NjZkQ0NmNFRGMXIvY1ZwM2tVb3lvMjJGOW81N2VqcldUK1VUSFlDT25nNzdUQnlseU9KdnFGbmpKL1VsSkIwNlVUWldNa0ZJb3BBekgxdz09PC9kc2lnOlNpZ25hdHVyZVZhbHVlPjwvZHNpZzpTaWduYXR1cmU+PHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDpYNTA5U3ViamVjdE5hbWUiPkUyMDAxMDM3Nzwvc2FtbDpOYW1lSUQ+PHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAxNC0xMC0wM1QwOTo0NjozNVoiIFJlY2lwaWVudD0iaHR0cHM6Ly9iYXJjbGF5cy5jbC5pbmZvc2lzdGVtYS5jb20vaUZsb3cvc2FtbDIvU1NPU2VydmljZSIvPjwvc2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uPjwvc2FtbDpTdWJqZWN0PjxzYW1sOkNvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDE0LTEwLTAzVDA5OjIxOjM1WiIgTm90T25PckFmdGVyPSIyMDE0LTEwLTAzVDA5OjQ2OjM1WiI+PHNhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDpBdWRpZW5jZT5odHRwczovL2JhcmNsYXlzLmNsLmluZm9zaXN0ZW1hLmNvbS9pRmxvdzwvc2FtbDpBdWRpZW5jZT48L3NhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj48L3NhbWw6Q29uZGl0aW9ucz48c2FtbDpBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTQtMTAtMDNUMDk6MzE6MzVaIiBTZXNzaW9uSW5kZXg9ImlkLXlLYWJkN3FzZEd3QlQ0Vi1SLTViWDd0MklGby0iIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMTQtMTAtMDNUMDk6MzE6NDVaIj48c2FtbDpBdXRobkNvbnRleHQ+PHNhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6S2VyYmVyb3M8L3NhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+PC9zYW1sOkF1dGhuQ29udGV4dD48L3NhbWw6QXV0aG5TdGF0ZW1lbnQ+PC9zYW1sOkFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==";
    samlXMLB64Response = StringEscapeUtils.unescapeHtml(samlXMLB64Response);
    result.nextUrl = "../main.jsp";
    UserInfoInterface ui = BeanFactory.getUserInfoFactory().newUserInfo();
    AuthProfile ap = BeanFactory.getAuthProfileBean();
    Boolean foundValidKey = false;

    try {
      Integer ePId = Integer.parseInt(Setup.getProperty("ENTITY_PROVIDERS_NUMBER"));
      String employeeid = null;
      for (int i = 1; i < ePId; i++) {
        String publicEPKey = Setup.getProperty("ENTITY_PROVIDER_PUBLIC_KEY_" + i);
        // user account specific settings. Import the certificate here
        AccountSettings accountSettings = new AccountSettings();
        accountSettings.setCertificate(publicEPKey);
        Response samlResponse = new Response(accountSettings);
        Logger.debug("System", this, "service", "Received Saml Response:" + samlXMLB64Response);
        samlResponse.loadXmlFromBase64(samlXMLB64Response);
        // samlResponse.loadXml(samlXMLB64Response);

        if (samlResponse.isValid()) {
          // the signature of the SAML Response is valid. The source is trusted
          foundValidKey = true;
          employeeid = samlResponse.getNameId();
          break;
        }
      }
      if (!foundValidKey) {
        // the signature of the SAML Response is not valid
        session.setAttribute(
            "login_error", ui.getMessages().getString("login.error.sso.signature"));
        return;
      }
      ////////////////////////////
      ui.loginSSO(employeeid);
      boolean isAuth = result.isAuth = ui.isLogged();

      if (isAuth) {

        /////////////////////////////
        //
        // Now set some session vars
        //
        /////////////////////////////

        // Application Data
        session.setAttribute("login", ui.getUtilizador());

        session.setAttribute(Const.USER_INFO, ui);
        UserSettings settings = ui.getUserSettings();
        OrganizationData orgData = ap.getOrganizationInfo(ui.getOrganization());
        session.setAttribute(Const.ORG_INFO, orgData);

        OrganizationTheme orgTheme = BeanFactory.getOrganizationThemeBean();
        if (orgTheme != null) {
          OrganizationThemeData themeData = orgTheme.getOrganizationTheme(ui);
          session.setAttribute("themedata", themeData);
        }

        if (settings.isDefault() && Const.USE_INDIVIDUAL_LOCALE && Const.ASK_LOCALE_AT_LOGIN) {
          result.nextUrl = "../setupUser";
        }

        // check license status
        //		      if(!licenseOk && isSystem) {
        //		        result.nextUrl = "Admin/licenseValidation.jsp";
        //		      }

        session.setAttribute("SessionHelperToken", new SimpleSessionHelper());

      } else {
        session.setAttribute("login_error", ui.getError());
      }
      PersistSession ps = new PersistSession();
      ps.getSession(ui, session);
    } catch (Exception e) {
      ui.loginSSO(null);
      session.setAttribute("login_error", ui.getError());
    } finally {
      response.sendRedirect(result.nextUrl + "?" + Utils.makeSycnhronizerToken());
    }
  }