@Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    SettingService settingService =
        PortalContainer.getInstance().getComponentInstanceOfType(SettingService.class);
    SoftwareRegistrationService softwareRegistrationService =
        PortalContainer.getInstance().getComponentInstanceOfType(SoftwareRegistrationService.class);

    if (softwareRegistrationService.isSoftwareRegistered()) {
      response.sendRedirect("/");
      return;
    }
    String code = request.getParameter("code");
    if (StringUtils.isEmpty(code)) {
      try {
        getServletContext().getRequestDispatcher(SR_JSP_RESOURCE).forward(request, response);
      } catch (Exception se) {
        if (LOG.isErrorEnabled()) {
          LOG.error(se);
        }
        response.sendRedirect("/");
      }
      return;
    }

    SoftwareRegistration softwareRegistration =
        softwareRegistrationService.registrationPLF(code, getRegistrationURL(request));
    if (softwareRegistration.isPushInfo()) {
      settingService.set(
          Context.GLOBAL,
          Scope.GLOBAL,
          SoftwareRegistrationService.SOFTWARE_REGISTRATION_NODE,
          SettingValue.create("Software registered:" + "true"));
      softwareRegistrationService.checkSoftwareRegistration();
      getServletContext().setAttribute("status", "success");
    } else if (softwareRegistration.isNotReachable()) {
      request.getSession().setAttribute("notReachable", "true");
      getServletContext().getRequestDispatcher(SR_JSP_RESOURCE).forward(request, response);
      return;
    } else {
      getServletContext().setAttribute("status", "failed");
      request.getSession().setAttribute("notReachable", "true");
      response.sendRedirect("/");
      return;
    }
    getServletContext().getRequestDispatcher(SR_JSP_RESOURCE_SUCCESS).forward(request, response);
    return;
  }