package org.exoplatform.platform.common.software.register.web;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.commons.api.settings.SettingService;
import org.exoplatform.commons.api.settings.SettingValue;
import org.exoplatform.commons.api.settings.data.Context;
import org.exoplatform.commons.api.settings.data.Scope;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.platform.common.software.register.model.SoftwareRegistration;
import org.exoplatform.platform.common.software.register.service.SoftwareRegistrationService;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by The eXo Platform SEA
* Author : eXoPlatform
* toannh@exoplatform.com
* On 9/28/15
* Software register to Tribe
*/
public class SoftwareRegisterAuthViewServlet extends HttpServlet {
private static final Log LOG = ExoLogger.getLogger(SoftwareRegisterAuthViewServlet.class);
private static final long serialVersionUID = 1L;
private final static String SR_JSP_RESOURCE = "/WEB-INF/jsp/software-registration/softwareregister.jsp";
private final static String SR_JSP_RESOURCE_SUCCESS = "/WEB-INF/jsp/software-registration/softwareregister-success.jsp";
@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;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String registrationULR = SoftwareRegisterAuthViewServlet.getRegistrationURL(request);
request.setAttribute("registrationURL", registrationULR);
request.getSession().setAttribute("registrationURL", registrationULR);
doPost(request, response);
}
public static String getRegistrationURL(HttpServletRequest request){
SoftwareRegistrationService registrationService = WCMCoreUtils.getService(SoftwareRegistrationService.class);
String returnUrl = SoftwareRegistrationService.SOFTWARE_REGISTRATION_RETURN_URL;
returnUrl = returnUrl.replace("{0}", request.getServerName());
returnUrl = returnUrl.replace("{1}", String.valueOf(request.getServerPort()));
StringBuffer _registrationURL = new StringBuffer();
_registrationURL.append(registrationService.getSoftwareRegistrationHost());
_registrationURL.append(SoftwareRegistrationService.SOFTWARE_REGISTRATION_PATH);
_registrationURL.append("?").append(SoftwareRegistrationService.SOFTWARE_REGISTRATION_CLIENT_ID);
_registrationURL.append("&").append(SoftwareRegistrationService.SOFTWARE_REGISTRATION_RESPONSE_TYPE);
_registrationURL.append("&redirect_uri=").append(returnUrl);
return _registrationURL.toString();
}
}