package org.ariadne_eu.service;
import javax.servlet.http.HttpServletRequest;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.log4j.Logger;
import org.ariadne.config.PropertiesManager;
import org.ariadne_eu.utils.config.RepositoryConstants;
import be.cenorm.www.CreateAnonymousSession;
import be.cenorm.www.CreateAnonymousSessionResponse;
import be.cenorm.www.CreateSession;
import be.cenorm.www.CreateSessionResponse;
import be.cenorm.www.DestroySession;
import be.cenorm.www.FaultCodeType;
import be.cenorm.www.SessionExpiredException;
import be.cenorm.www.SqiSessionManagementSkeleton;
import be.cenorm.www.Ticket;
import be.cenorm.www._SQIFault;
import be.cenorm.www._SQIFaultException;
/**
* SqiSessionManagementBindingServiceSkeleton java skeleton for the axisService
*/
public class SqiSessionManagementImplementation extends SqiSessionManagementSkeleton {
private static Logger log = Logger.getLogger(SqiSessionManagementImplementation.class);
public CreateSessionResponse createSession(CreateSession createSession)
throws _SQIFaultException {
log.info("createSession:username="+createSession.getUserID());
try {
String username = createSession.getUserID();
String password = createSession.getPassword();
if (username.equals(PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().REPO_USERNAME)) && password.equals(PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().REPO_PASSWORD))) {
Ticket t = Ticket.newTicket("http://www.ariadne-eu.org/metadatastore/");
t.setParameter("username", username);
t.setParameter("password", password);
t.setParameter("queryExpireTime", "1");
CreateSessionResponse response = new CreateSessionResponse();
response.setCreateSessionReturn(t.toString());
log.info("createSession:username="+createSession.getUserID()+",sessionID="+response.getCreateSessionReturn());
return response;
} else {
log.debug("createSession:username="+createSession.getUserID()+": invalid combination of username and password");
_SQIFault fault = new _SQIFault();
fault.setSqiFaultCode(FaultCodeType.SQI_00015);
fault.setMessage("Session creation failure: invalid combination of username and password");
_SQIFaultException exception = new _SQIFaultException();
exception.setFaultMessage(fault);
throw exception;
}
} catch (Throwable e) {
log.error("createSession: ", e);
_SQIFault fault = new _SQIFault();
fault.setSqiFaultCode(FaultCodeType.SQI_00001);
fault.setMessage("Session creation failure: "+e.getMessage());
_SQIFaultException exception = new _SQIFaultException();
exception.setFaultMessage(fault);
throw exception;
}
}
public void destroySession(DestroySession destroySession)
throws _SQIFaultException {
log.info("destroySession:sessionID="+destroySession.getSessionID());
try {
String sessionID = destroySession.getSessionID();
Ticket t = Ticket.getTicket(sessionID);
// QueryResults qr = (QueryResults) t.getParameterAsObject("QueryResults");
// qr.destroy();
Ticket.destroy(t);
} catch (SessionExpiredException e) {
log.debug("destroySession: ", e);
_SQIFault fault = new _SQIFault();
fault.setSqiFaultCode(FaultCodeType.SQI_00013);
fault.setMessage("No such session "+e.getMessage());
_SQIFaultException exception = new _SQIFaultException();
exception.setFaultMessage(fault);
throw exception;
}
}
public CreateAnonymousSessionResponse createAnonymousSession(CreateAnonymousSession anonymousSession)
throws _SQIFaultException {
String fIP = ((HttpServletRequest)MessageContext.getCurrentMessageContext().getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST)).getRemoteAddr();
String oIP = remoteAddr(((HttpServletRequest)MessageContext.getCurrentMessageContext().getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST)));
log.info("createAnonymousSession"+":Forwarding IP="+fIP+":Original IP="+oIP );
try {
Ticket t = Ticket.newTicket("http://www.ariadne-eu.org/metadatastore/");
CreateAnonymousSessionResponse response = new CreateAnonymousSessionResponse();
response.setCreateAnonymousSessionReturn(t.toString());
log.info("createAnonymousSession:sessionID="+response.getCreateAnonymousSessionReturn());
return response;
} catch (Throwable e) {
log.error("createAnonymousSession: ", e);
_SQIFault fault = new _SQIFault();
fault.setSqiFaultCode(FaultCodeType.SQI_00001);
fault.setMessage("Session creation failure: "+e.getMessage());
_SQIFaultException exception = new _SQIFaultException();
exception.setFaultMessage(fault);
throw exception;
}
}
private String remoteAddr(HttpServletRequest request) {
String remoteAddr = request.getRemoteAddr();
String x;
if ((x = request.getHeader(RepositoryConstants.getInstance().HEADER_X_FORWARDED_FOR)) != null) {
remoteAddr = x;
int idx = remoteAddr.indexOf(',');
if (idx > -1) {
remoteAddr = remoteAddr.substring(0, idx);
}
}
return remoteAddr;
}
}